Ayrat
ты шутишь, я вообще хотел racket/memoize заюзать :D
там сразу можно функцию как define/memo объявить, но подумал - фу, читерство
буду как плебей через хештейблы
Ayrat
а ты говоришь что и это читерство!
Pavel
извращуги... n-й фибоначи мемоизировать
Анна
Крылатый
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
Ayrat
конкретно в этой задаче
Pavel
Seq.unfold(fun (a, b, c) -> Some (a, (b, c, a + b + c))) (1, 1, 1)
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.
основано на реальных событиях (с)
x
у меня ноги длинные, брутфоршу
Ayrat
ты так ноги себе все износишь!
Ayrat
рассчитывай силы, считай ряды фибоначи и трибоначи
Анна
Надо было написать, что первая задача - это спуск вниз по лестнице, по дороге на обед. А вторая - вверх и с обеда
Ayrat
да, так сразу ближе к правде. Кто ж после обеда через 2 ступеньки идёт
Ayrat
я вообще даже через 1 не хожу после обежа
Ayrat
и на лифте со 2го на 4ый еду
Анна
Я после обеда лифт вызываю 😂
Ayrat
Анна
тоже кстати со 2 на 4
Pavel
Ayrat
Анна
Pavel
а.. въехал
Ayrat
ну абстрактно можно задачу придумать, а как подвести реал лайф пример под неё?
Анна
Ну я не особенно реал лайф примеры придумывала, только про лестницу вот
Pavel
правда там ответы есть :)
Pavel
https://app.codesignal.com/challenges
Pavel
каждый день новая задача
Анна
а, задачки для интервью
Анна
спасибо!
Pavel
не... не для интерью
Pavel
там другое. интервью у них в другом раделе
Pavel
кстати там раньше jet терся типа народ набрать
Анна
аблин, там прямо такое игровое всё
Pavel
что значит игровое?
x
gamification
Pavel
можешь с interview-practice брать
Анна
так-то старый добрый acm.timus.ru никто не отменял
Крылатый
Крылатый
Тимус!
Анна
Анна
с разбиением по темам и по сложности
Pavel
архив не прикольно . он давно перерешан и гуглится
Анна
Смотря для каких целей. Я же не соревы по программированию готовлю
Анна
чтобы без баянов :)
Pavel
чтобы без баянов :)
а с ними "наслаждаться разнообразием полётов мысли на казалось бы трёхстрочных задачках" не выйдет :)
Анна
Vladislav
Romɑn
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
Господа господствующие