Герасим обнови решението на 10.10.2014 15:08 (преди около 10 години)
- Имаш малко проблеми с whitespaces, консултирай се със style guide-a, за да ги адресираш.
- Трябва да поработиш над измислянето на имена. string, result, calculate, operations и т.н. са супер generic. Опитвай се да именуваш близо до домейна на проблема, който решаваш. Тук си представи, че някой математик трябва да се научи как да намира fibonacci, lucas и summed. Това, което ще види е:
"С помощта на низ и индекс разгледай дали низът е някое от трите и ако е, калкулирай съответно с 1, 1 и индекса, 1, 2 и индекса или направи предните две калкулации и ги събери. При калкулирането отговорът е максималното от първото и второто, ако индексът е 1. Иначе с резултат, който е 0, за всяко число от 2 до индекса, първото, второто и резултатът се получават като извършиш операцията върху тях. Операцията добавя към резултата първото, присвоява на първото второто и на второто резултата. Като приложиш операцията за всички въпросни числа, отговорът ти е резултатът."
Герасим Станчев
Ти разбра ли нещо - аз не. :) Стреми се кодът да се чете, не да се интерпретира наум.
- Супер е, че си видял, че има множествено присвояване на един ред, но вероятно можеш да измислиш по-проста имплементация, която няма нужда от него. Всеки път, когато се извиква
operations
, скрито се създава нов масив. Не гоним оптималност на кода, но това е излишно spawn-ване на много short lived обекти в цикъл, не е добра практика. - Решението ти е доста процедурно, в Ruby по принцип, а и за конкретния проблем, всичко може да се опише много кратко и видно с по-функционален подход.
Благодаря ти за коментара! Помогна ми в ориентацията с езика. Мисля, че first и second трябва да останат в имената на променливите, защото те си остават first и second за определен елемент от реда, просто елемента нараства, а с него и те. Като цяло, промених подхода си и мисля, че сега кода е доста по-разбираем. Пускам нова версия и чакам коментари. : -)
- П.П.: Странно е, че skeptic не хвана липсата на индентация при when-овете. Освен това, rubocop отчита индентацията като грешка. Moже би някои програмисти приемат конвенцията за липса на индентация, тъй като на case може и да не се подава аргумент.