Stas
я понял, F# не для нищебродов с плохими ПК :)
Vasiliy
https://i.redd.it/l6hr3g799f261.jpg
Danil
Загадка от Жака Фреско
Vagif
Мой вариант решения задачи из Advent of Code 2020 https://gist.github.com/object/bd02bdf1a24ffc5168a8f3a5be3ba22e
Vagif
Дилан сейчас лайв решает https://youtu.be/dBpXhygf9r8
Ilya
нашел https://adventofcode.com/2020/day/1
Vagif
Ага
Ilya
Ага
а данные только после регисрации?
Ilya
Да
а какие числа у тебя получились?
Vagif
а какие числа у тебя получились?
Уже не помню. Но правильные 😊
Vagif
Язык какой-то странный, длинно выходит 😜
Ayrat
с сортировкой быстрее
Vagif
https://gist.github.com/Szer/1a044dcf8c5ffe84b3976dc20344453b
А теперь открой вторую задачу.
Ilya
Пока что на сишарпе решение самое короткое...
Ayrat
А теперь открой вторую задачу.
а что, там еще и вторая?)
Ayrat
хотя я щас посмотрел, вроде не тупой
Ilya
Тупой перебор пока что у Дилана, вроде бы.
Ilya
вот немного короче
А вот на фшарпе можно было бы весь код запихнуть в интерполяцию строки!
Vagif
а что, там еще и вторая?)
Я первую решил, открыл вторую и все переделал
Ayrat
вот немного короче
да, твой вариант неплох let pair = // (456, 1564) let fst = Seq.find (fun i -> data.Contains i && data.Contains(2020-i)) [1..2020] fst, 2020 - fst
Ayrat
4 vs 3 строки!
ну я мог не сохранять в pair
Ayrat
это по желанию
Ilya
Можно было в одну строку написать.
Ilya
И в зип сложить.
Ayrat
похоже мой начальный вариант не так уж плох
Vagif
похоже мой начальный вариант не так уж плох
Там, похоже, хитрость заложена. Поскольку очки дают за скорость решения двух задач, надо решая первую, максимально обобщить алгоритм.
Ayrat
дада, ща обобщим!
Vasily
Seq.pairs не покатит?
Vagif
Seq.pairs не покатит?
Ну я в итоге сделал обощенный для любой длины кортежа
Vasily
А, у нас явного нет такого
Ayrat
переделал на общую
Ayrat
этот вызов ищет на 3 числа
Vasiliy
https://city4people.ru/post/nashi-popravki-v-byudzhet-moskvy.html для тех кто в мск)
Ayrat
я кстати не смотрел в твое
Vasily
Можно, кстати, намного красивее
Ayrat
ну давай Василий
Vasily
Идея в том, чтобы сделать второй сет 2020 - x
Ayrat
стопудово деревом?
Roman
стопудово деревом?
либо в стихах
Vasily
Потом по идее пройти по первому сету и отсечь только то , что есть во втором
Vasily
В общем, зависит от того, сколько у нас памяти есть
Vasily
А можно и вообще ещё проще
Vasily
Set.contains у нас же o(1) типа?
Vasily
[ for i in s do if s.contains 2020-i then yield i*2020-i]
Vasily
Псевдокод
Ayrat
[ for i in s do if s.contains 2020-i then yield i*2020-i]
А если надо 3 найти числа?
Roman
ты, Василий, пишешь по-русски, а надо на фшарпе
Vasily
Я с телефона
Vasily
Какие три числа?
Vasily
Которые в сумме 2020 дадут?
Ayrat
Ага
Vasily
лог
Ну да, там дерево жи
Ayrat
Но там нет апи для вытаскивания поддерева
Ilya
этот вызов ищет на 3 числа
А скинь условие задачи
Ayrat
Найди два (три, четыре...) числа из набора, которые в сумме дают 2020
Vasily
Ну тогда seq of seq по факту
Ayrat
Ну там можно через сортед сет сократить
Vasily
Можно рекурсивной функцией
Vasily
В теории
Vasily
Ещё вопрос , там любые три?
Vasily
Или полное множество
Aleksander
ну кстати с allPairs тоже можно провернуть
Vasily
Ну allpairs даёт только пары
Vasily
А тут уже речь о суммах
Aleksander
https://gist.github.com/khaale/534bc1b45eca5ff4231a6601ed70178e
Vasily
Точнее, о количестве >2
Ilya
Найди два (три, четыре...) числа из набора, которые в сумме дают 2020
Количество чисел заранее заданное или любое количество чисел которые в сумме дают 2020?
Aleksander
делаем попарную сумму элементов через allPairs, фильтруем < 2020, используем как вход в функцию для первой части