Ивайло обнови решението на 13.10.2015 13:02 (преди около 10 години)
btw skeptic иска разстояния в range-овете. Само на мен ли ми изглежда екстремно грозно? :D
EDIT: намерих си грешка в new_food.
.................... Finished in 0.01489 seconds 20 examples, 0 failures
btw skeptic иска разстояния в range-овете. Само на мен ли ми изглежда екстремно грозно? :D
EDIT: намерих си грешка в new_food.
btw skeptic иска разстояния в range-овете. Само на мен ли ми изглежда екстремно грозно? :D
Не. Добра забележка, skeptic има нова версия, след gem install skeptic би трябвало да ти се update-не. С нея ще можеш да ползваш ..(.), [*..] без спейсове около тях.
Надявам се сайтът да се update-не днес или утре с нея, за да може тук да submit-ваш нормалната версия
EDIT: Сайтът вече е обновен, така че вече и тук ще се валидира.
Малко бележки:
grow използваш dup, а в move - snake[1..-1]? Избери едно и бъди консистентен.move, grow и obstacle_ahead? имат нещо общо. Изкарай го в метод и му дай подходящо име.map-a и блока.new_food може да се напише по-добре. Помъчи се малко и измисли по-елегантна имплементация (: Ако не успееш, пиши тук за насоки.Hash.outside, в obstacle_ahead? Според мен е ненужна.e, i... Внимавай! С тези имена на променливи си просиш наказателни точки! Да им дадеш подходящи имена.outside?. Хубаво! Защо не си направил подобен метод и за snake.include?(new_position), който също да описва идеята на тази проверка?new_food и danger? могат да се доизпипат. Помисли върху тях.Има какво да подобриш, тъй че действай.
EDIT: Сайтът вече е обновен, така че вече и тук ще се валидира.
Сашо е оправил skeptic-a, тъй че си оправи range-овете.
Позволено ли е използването на допълнителни библиотеки от Ruby (Matrix в случая)?
generate_matrix метода първоначално го написах така:
Array.new(width) { |row| Array.new(height) { |col| [row, col] } }
Но така нарушава правилото за влагане и не можах да го измисля по друг начин без да нарушавам друго стилово правило.
Колкото до забележките:
Hash#values, но забравих, че стойностите винаги ще са валидни (:width, :height, а не :height, :width) и това ми беше проверкатаdanger? нещо друго освен new_position трябва ли да оправя?Also another skeptc thing: изисква ми space около ! (! position_free?)
EDIT: Idea! obstacle_ahead? да приема n на брой directions и да проверява всяка стъпка. По този начин danger? може да се направи по-яко. Good idea?
And another skeptic thing (сигурно вече ви писва): изисква space около -, когато изписвам негативно число като литерал :D
require е забранена думичка в тази задача (а и по принцип, освен ако не сме позволили изрично) (:next_position. Стария съм оставил като коментар. Which one is better?obstacle_ahead?, тъй като при змия с дължина 2 не работеше (първо се мърда и след това проверява дали позицията е валидна, сега е обратното), обаче сега май е грозно. Има ли начин как да направя проверка в блока на any?, която ако е true веднага да излиза от него, а ако не е да продължи И да не е поставена на края на блока или да нарушава някое от skeptic правилата?--max-nesting-depth 1)EDIT: не знам на каква магия работи break true ама върши това, което искам. Sadly пак не мога да го ползвам (break true if condition също се брои за nesting
)
Щеше да изглежда така:
def obstacle_ahead?(snake, *directions, dimensions)
directions.any? do |direction|
head = next_position(snake, direction)
blocked = outside?(head, dimensions.values) || !position_free?(head, snake)
break true if blocked
snake = move(snake, direction) and next
end
end