Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 2.5 балла
- // Вам дан список идшников необходимо вычислить контрольную сумму списка
- // Для этого нужно посчитать кол-во букв встречающихся ровно(!) 2 или ровно(!) 3 раза
- // Если есть несколько букв встречающихся ровно 2 или 3 раза, учитывается только одно вхождение
- //
- // abcdef все буквы различны
- // bababc две a и 3 b, учитываются все | 2 -> 1, 3 -> 1
- // abbcde две b, больше тройных или парных нет | 2 -> 1
- // abcccd три c, больше тройных или парных нет | 3 -> 1
- // aabcdd две a и две b, наличие пары учитывается 1 раз | 2 -> 1
- // abcdee две e | 2 -> 1
- // ababab три a и три b, наличие тройки учитывается 1 раз | 3 -> 1
- //
- // контрольная сумма = (кол-во пар) * (кол-во троек)
- // checksum = 4 * 3
- //
- // Решить задачу использую только комбинаторы
- // Решение - непрерывная цепочка комбинаторов, никаких промежуточных вычислений(!)
- // Переносы на следующую строчку делать можно)))
- val k = List("abcdef", "bababc", "abbcde", "abcccd", "aabcdd", "abcdee", "ababab")
- println(checksum(k.toStream))
- def checksum(ipt: Stream[String]): Int = {
- ipt.filter((x : String) => x.map((z : Char) => x.count((y : Char) => y == z)).toString().contains('2')).length *
- ipt.filter((x : String) => x.map((z : Char) => x.count((y : Char) => y == z)).toString().contains('3')).length
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement