Die Grundvoraussetzung der Methode ist, dass das Argumentarray ein mehrdimensionales Array nimmt und um die Matrix im Uhrzeigersinn schiebt, alle Werte in arr drückt und sie als Liste von ganzen Zahlen zurückgibt.Ich erhalte Nullwerte in meiner kleinen Rekursionsmethode
Allerdings scheinen ich diesen Fehler zu empfangen:
`block in snail': undefined method `reverse' for nil:NilClass (NoMethodError)
Das ist meine Methode ist:
def snail(array)
arr = []
loop do
return arr.flatten if array.empty?
arr << array.shift
array.map {|row| arr << row.pop}
arr << array.pop.reverse
array.map {|row| arr << row.shift}
end
end
Dies ist das Argument Test:
[[1,2,3],[4,5,6],[7,8,9]
Dies ist der Ausgang Ich bekomme, wenn ich Zeile 5 zu diesem bearbeiten:
line 5: arr << unless NilClass then array.pop.reverse end
output: [1, 2, 3, 6, 9, nil, 4, 7, 5, 8, nil, nil]
Erwarteter Ertrag:
[1, 2, 3, 6, 9, 8, 7, 4, 5]
Warum diese Null-Werte erscheinen?
Ahh ich dachte die Schleife bricht wenn array.flatten.lepty? war genug, um gegen ein leeres Array zu schützen. Also wird nil zurückgegeben, bevor die Schleife bricht? Es hat trotzdem funktioniert. Vielen Dank! –
Der 'array.flatten.empy?' - Break ist in Ordnung, aber das Array könnte bei jedem Schritt leer werden, nicht unbedingt nach dem letzten Schritt von vier. Beachten Sie auch den Schnitt, den ich gerade gemacht habe ... es gibt ein Problem mit dem Algorithmus. – SteveTurczyn
Ahh ja, das habe ich letzte Nacht bemerkt, als ich ein paar mehr Tests schrieb, vielen Dank. Ich habe nie bemerkt, dass es nur überprüft, ob die Arrays leer sind, nachdem alle Schritte abgeschlossen sind. Es macht logischen Sinn, nehme ich an. –