Advertisement
Lusien_Lashans

Combinators2

Apr 6th, 2019
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.94 KB | None | 0 0
  1.     //    2.5 балла
  2.     //    Вам дан список идшников необходимо вычислить контрольную сумму списка
  3.     //    Для этого нужно посчитать кол-во букв встречающихся ровно(!) 2 или ровно(!) 3 раза
  4.     //    Если есть несколько букв встречающихся ровно 2 или 3 раза, учитывается только одно вхождение
  5.     //
  6.     //    abcdef все буквы различны
  7.     //    bababc  две a и 3 b, учитываются все                    | 2 -> 1, 3 -> 1
  8.     //    abbcde две b, больше тройных или парных нет             | 2 -> 1
  9.     //    abcccd три c, больше тройных или парных нет             | 3 -> 1
  10.     //    aabcdd две a и две b, наличие пары учитывается 1 раз    | 2 -> 1
  11.     //    abcdee две e                                            | 2 -> 1
  12.     //    ababab три a и три b, наличие тройки учитывается 1 раз  | 3 -> 1
  13.     //
  14.     //    контрольная сумма = (кол-во пар) * (кол-во троек)
  15.     //    checksum = 4 * 3
  16.     //
  17.     //  Решить задачу использую только комбинаторы
  18.     //  Решение  - непрерывная цепочка комбинаторов, никаких промежуточных вычислений(!)
  19.     //  Переносы на следующую строчку делать можно)))
  20.     val k = List("abcdef", "bababc", "abbcde", "abcccd", "aabcdd", "abcdee", "ababab")
  21.     println(checksum(k.toStream))
  22.  
  23.     def checksum(ipt: Stream[String]): Int = {
  24.         ipt.filter((x : String) => x.map((z : Char) => x.count((y : Char) => y == z)).toString().contains('2')).length *
  25.         ipt.filter((x : String) => x.map((z : Char) => x.count((y : Char) => y == z)).toString().contains('3')).length
  26.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement