Задачи по Scala с решениями
Задача 1
Выведите в консоль “itmathrepetitor.ru” N раз.
Задача 2
Дан arr:List[Int]. Повторите каждое значение N раз. Пример: при N=2 список 1 2 4 -> 1 1 2 2 4 4.
Задача 3
Дан arr:List[Int]. Получите список значений из arr, которые меньше данного k, с сохранением порядка этих значений. Пример: при k = 3 список 4 2 3 10 3 1 2 4 -> 2 1 2
Задача 4
Дан список из N целых положительных чисел. Получите список из чисел, находящихся на нечетных позициях с сохранением порядка.
Задача 5
Дан список. Переверните его, не используя стандартную функцию reverse. Пример: 2, 3, 1, 10 -> 10, 1, 3, 2
Задача 6
Найдите сумму нечетных элементов данного списка. Пример: 1, 2, 4, 5, 3 -> 9
Задача 7
Напишите функцию для вычисления n! (факториал) = 1*2*…*(n-1)*n. При этом 0! = 1.
Задача 8
Выведите таблицу умножения от 1 до 10:
1 | 2 | … | 10 |
2 | 4 | … | 20 |
.. | … | … | … |
10 | 20 | … | 100 |
Задача 9
Напишите рекурсивную функцию для сортировки списка по возрастанию
Задача 10
Напишите функцию для объединения двух списков (в результате сначала идут элементы первого списка, затем – второго). Пример: append(List(1, 2, 3), List(4, 5)) -> List(1, 2, 3, 4, 5)
Задача 11
Найдите длину данного списка без использования length или эквивалентных стандартных функций.
Задача 12
Дан список. Получите список из модулей значений данного списка.
Задача 13
Напишите метод, который заменяет все вхождения элементов, равных replacing, на элемент replacement.
Решения
Задача 1
def f(n: Int) = for (i <- 1 to n ) { println(“itmathrepetitor.ru”) }
Задача 2
def f(num: Int, arr: List[Int]): List[Int] = arr.flatMap(List.fill(num)(_))
Задача 3
def f(k: Int, arr: List[Int]): List[Int] = arr.filter(_ < k)
Задача 4
def f(arr: List[Int]): List[Int] = {
arr.zipWithIndex.filter(pair => pair._2 % 2 == 1).map(_._1)
}
Задача 5
1 2 3 4 |
def rev(ls: List[Int]): List[Int] = ls match { case List() => List() case head :: tail => rev(tail) ::: List(head) } |
1 2 3 4 5 |
// 2 способ def f(arr:List[Int]):List[Int] = { def prepend(a:List[Int], acc:List[Int]):List[Int] = if (a.isEmpty) acc else prepend(a.tail, a.head::acc) prepend(arr,List()) } |
Задача 6
def f(arr:List[Int]):Int = {
var s = 0
arr.foreach(x => if (x % 2 != 0) s += x )
s
}
или
def f(arr:List[Int]):Int = {
arr.filter(_%2!=0).sum
}
Задача 7
1 |
def factorial(x: BigInt): BigInt = if (x == 0) 1 else x * factorial(x - 1) |
Задача 8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Возвращение строчки в виде последовательности def makeRowSeq(row: Int) = for (col <- 1 to 10) yield { val prod = (row * col).toString val padding = " " * (4 – prod.length) padding + prod } // Возвращение строки в виде строкового значения def makeRow(row: Int) = makeRowSeq(row).mkString // Возвращение таблицы в виде строковых значений, по одному значению // на каждую строку def multiTable() = { val tableSeq = // последовательность из строк таблицы for (row <- 1 to 10) yield makeRow(row) tableSeq.mkString("\n") } |
Задача 9
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
def isort(xs: List[Int]): List[Int] = if (xs.isEmpty) Nil else insert(xs.head, isort(xs.tail)) def insert(x: Int, xs: List[Int]): List[Int] = if (xs.isEmpty || x <= xs.head) x :: xs else xs.head :: insert(x, xs.tail) // 2 способ def isort(xs: List[Int]): List[Int] = xs match { case List() => List() case x :: xs1 => insert(x, isort(xs1)) } def insert(x: Int, xs: List[Int]): List[Int] = xs match { case List() => List(x) case y :: ys => if (x <= y) x :: xs else y :: insert(x, ys) } |
Задача 10
1 2 3 4 5 |
def append[T](xs: List[T], ys: List[T]): List[T] = xs match { case List() => ys case x :: xs1 => x :: append(xs1, ys) } |
Задача 11
1 2 3 4 5 6 7 8 9 10 11 12 13 |
def listLength(list: List[Int]): Int = { var len = 0; list.foreach({ x => len += 1 }) len } или list.indices.last + 1 или arr.map(_=>1).sum |
Задача 12
1 2 3 4 5 6 7 8 9 |
def f(list: List[Int]) = { list.map(x => if (x < 0) -x else x) } или arr.map(Math.abs) или |
1 2 3 4 5 6 7 8 9 |
def fabs(arr:List[Int]):List[Int] = { def loop(arr:List[Int],acc:List[Int]):List[Int] = arr match { case Nil => Nil case h :: tail => h.abs :: loop(arr tail,acc) } loop(arr,List()) } |
Задача 13
1 2 3 4 5 6 |
def replace(ls: List[Int], replacing: Int, replacement: Int): List[Int] = { ls.map { case x if x == replacing => replacement case other => other } } |
Задача 14