Ивайло обнови решението на 13.10.2015 13:02 (преди над 9 години)
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