Ayrat
ты шутишь, я вообще хотел racket/memoize заюзать :D там сразу можно функцию как define/memo объявить, но подумал - фу, читерство буду как плебей через хештейблы
Ayrat
а ты говоришь что и это читерство!
Pavel
извращуги... n-й фибоначи мемоизировать
Крылатый
ваши предложения, сэр
Прекалькуляции!
Ayrat
Прекалькуляции!
до какого предела?
Анна
до какого предела?
тут ограничения маленькие, можно на изи
Ayrat
но прекалькуляции норм да
Крылатый
до какого предела?
Сколько не жалко памяти и сколько влезет в числа.
Ayrat
проверь на моём тесте хотя бы
(define stairs-cache (make-hasheq (list (cons 1 1) (cons 2 2) (cons 3 4)))) (define (stairs n) (hash-ref! stairs-cache n (lambda () (+ (stairs (- n 1)) (stairs (- n 2)) (stairs (- n 3)))))) (stairs 4) поправил
Ayrat
ну т.е. чо там править-то, добавил ещё одно слагаемое
Анна
@Ayrat ты просто золото, сейчас затестишь мне эти задачки до того, как студенты начнут их решать, и я буду знать, чего от них ждать, каких подвохов!
Pavel
ваши предложения, сэр
Seq.unfold(fun (a,b) -> Some (a, (b, a + b))) (1, 1) |> Seq.take 10 |> Seq.toArray |> printfn "%A"
Ayrat
конкретно в этой задаче
Pavel
Seq.unfold(fun (a, b, c) -> Some (a, (b, c, a + b + c))) (1, 1, 1)
Ayrat
@Ayrat ты просто золото, сейчас затестишь мне эти задачки до того, как студенты начнут их решать, и я буду знать, чего от них ждать, каких подвохов!
ну там весь подвох в том что в стд либе есть дофига всего и мне приходится себя по рукам бить чтобы НЕ юзать готовые решения
Ayrat
ограничь им возможные require
Анна
ну там весь подвох в том что в стд либе есть дофига всего и мне приходится себя по рукам бить чтобы НЕ юзать готовые решения
Это да. Мне хотелось, чтобы почесали мозг, а не погуглили. Поэтому приходится бить студентов по рукам и они обижаются
Ayrat
я заюзал только (require racket/match)
Ayrat
потому что combine-streams очень вкусно с ним решается (define (combine-streams s1 s2 f) (match* (s1 s2) [((? stream-empty? s1) _) (stream-map f s2)] [(_ (? stream-empty? s2)) (stream-map f s1)] [(_ _) (lambda () (cons (f (stream-first s1) (stream-first s2)) (combine-streams (stream-rest s1) (stream-rest s2) f)))]))
Ayrat
ну если заранее оговорить что require запрещены, но смотреть в них можно.
Ayrat
то норм
Ayrat
Пусть просто перереализуют всё сами в своём модуле
Ayrat
если что-то надо
Анна
На самом деле я потом открою их решения и буду наслаждаться разнообразием полётов мысли на казалось бы трёхстрочных задачках
Анна
Это прикольно :)
x
(2) Напишите функцию stairs, которая принимает число n и возвращает количество способов подняться на лестницу из n ступенек, если длины ног хватает на то, чтобы перепрыгивать через одну ступеньку или через две. Например, на лестницу из двух ступенек можно подняться двумя способами: сначала стать на первую, потом на вторую, либо прыгнуть сразу на вторую. Ограничения: 0 <= n <= 100. Подсказка: определите рекурсивную функцию с мемоизацией в векторе (vector из стандартной библиотеки Racket). Мемоизации должны подвергнуться все рекурсивные вызовы (никакой вызов не должен вычисляться повторно). (3) Задача-бонус. Напишите функцию stairs2, которая принимает два числа - n и k, и возвращает количество способов подняться на лестницу из n ступенек (как в предыдущей задаче), с дополнительным ограничением: сил хватит не больше чем на k прыжков через 2 ступеньки. Ограничения: 0 <= n <= 100, 0 <= k <= 100.
основано на реальных событиях (с)
Ayrat
основано на реальных событиях (с)
Всегда считаю прежде чем по лестнице взбираться. Ты не?
x
у меня ноги длинные, брутфоршу
Анна
основано на реальных событиях (с)
Вы троллите, а у меня фантазия внезапно обеднела 😭
Ayrat
у меня ноги длинные, брутфоршу
твоих ног хватит только на K длинных шагов, ты это учёл???
Ayrat
ты так ноги себе все износишь!
x
ты так ноги себе все износишь!
вот изношу - тогда буду думать, что за преждевременная оптимизация
Ayrat
рассчитывай силы, считай ряды фибоначи и трибоначи
Анна
Надо было написать, что первая задача - это спуск вниз по лестнице, по дороге на обед. А вторая - вверх и с обеда
Ayrat
да, так сразу ближе к правде. Кто ж после обеда через 2 ступеньки идёт
Ayrat
я вообще даже через 1 не хожу после обежа
Ayrat
и на лифте со 2го на 4ый еду
Анна
Я после обеда лифт вызываю 😂
Анна
тоже кстати со 2 на 4
Pavel
а.. въехал
Ayrat
ну абстрактно можно задачу придумать, а как подвести реал лайф пример под неё?
Анна
Ну я не особенно реал лайф примеры придумывала, только про лестницу вот
Pavel
и на сами задачи
хощь неиссякаемый источник
Анна
хощь неиссякаемый источник
не, ну давай конечно 🤔
Pavel
правда там ответы есть :)
Pavel
https://app.codesignal.com/challenges
Pavel
каждый день новая задача
Анна
а, задачки для интервью
Анна
спасибо!
Pavel
не... не для интерью
Pavel
там другое. интервью у них в другом раделе
Pavel
кстати там раньше jet терся типа народ набрать
Анна
аблин, там прямо такое игровое всё
Pavel
что значит игровое?
x
gamification
Pavel
можешь с interview-practice брать
Анна
так-то старый добрый acm.timus.ru никто не отменял
Крылатый
Тимус!
Pavel
так-то старый добрый acm.timus.ru никто не отменял
ну может быть. там тоже каждый день новая задача есть?
Анна
ну может быть. там тоже каждый день новая задача есть?
нет, там архив задач, хоть обрешайся
Анна
с разбиением по темам и по сложности
Pavel
архив не прикольно . он давно перерешан и гуглится
Анна
Смотря для каких целей. Я же не соревы по программированию готовлю
Анна
чтобы без баянов :)
Pavel
чтобы без баянов :)
а с ними "наслаждаться разнообразием полётов мысли на казалось бы трёхстрочных задачках" не выйдет :)
Vladislav
@grishace зопилено
Romɑn
(2) Напишите функцию stairs, которая принимает число n и возвращает количество способов подняться на лестницу из n ступенек, если длины ног хватает на то, чтобы перепрыгивать через одну ступеньку или через две. Например, на лестницу из двух ступенек можно подняться двумя способами: сначала стать на первую, потом на вторую, либо прыгнуть сразу на вторую. Ограничения: 0 <= n <= 100. Подсказка: определите рекурсивную функцию с мемоизацией в векторе (vector из стандартной библиотеки Racket). Мемоизации должны подвергнуться все рекурсивные вызовы (никакой вызов не должен вычисляться повторно). (3) Задача-бонус. Напишите функцию stairs2, которая принимает два числа - n и k, и возвращает количество способов подняться на лестницу из n ступенек (как в предыдущей задаче), с дополнительным ограничением: сил хватит не больше чем на k прыжков через 2 ступеньки. Ограничения: 0 <= n <= 100, 0 <= k <= 100.
точно
Анна
Romɑn
блин там дальше объяснение по тексту что оказывается я не читал текст задачи
Romɑn
Господа господствующие