Einzelheiten
Schreiben Sie eine Funktion oder ein Programm, das bei einem Array (oder einer Liste), das nur Ganzzahlen enthält, ein Array mit allen umgekehrten Unterelementen zurückgibt oder ausgibt. Das heißt, kehren Sie alle Elemente des tiefsten Arrays um, dann das zweittiefste usw. Die Dimensionen müssen nicht angegeben werden, aber die Funktion oder das Programm muss für gezackte Arrays im nativen Format Ihrer Programmiersprache funktionieren .
Beispiele
Diese:
[[1,2], [3,4]]
Würde dies werden:
[[4,3], [2,1]]
Diese:
[[[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9]],
[[10,11,12], [13,14,15], [16,17,18]],
[[19,20,21], [22,23,24], [25,26,27]],
[[28,29,30], [31,32,33], [34,35,36]],
[[37,38,39], [40,41,42], [43,44,45]],
[[46,47,48], [49,50,51], [52,53,54]]]
Würde dies werden:
[[[54,53,52], [51,50,49], [48,47,46]],
[[45,44,43], [42,41,40], [39,38,37]],
[[36,35,34], [33,32,31], [30,29,28]],
[[27,26,25], [24,23,22], [21,20,19]],
[[18,17,16], [15,14,13], [12,11,10]],
[[ 9, 8, 7], [ 6, 5, 4], [ 3, 2, 1]]]
Diese:
[[[1,2]],
[[3,4], [5]],
[[6,7,8], [9], [10,11]],
[[[12,13], [14,15]], [16], [17,18,19,20]],
[21]]
Würde dies werden:
[[21],
[[20,19,18,17], [16], [[15,14], [13,12]]],
[[11,10], [9], [8,7,6]],
[[5], [4,3]],
[[2,1]]]
Bonus
Dies wird hoffentlich zu Antworten in einigen objektorientierten Programmiersprachen führen ...
-50% Bytecount Wenn Ihr Programm ein Array (oder eine Liste) mit seinen Mitgliedern verschiedener Typen (diese können in Form von Objekten vorliegen) als Eingabe verwenden und alle Arrays erfolgreich umkehren kann.
Diese:
[["Foo",["Bar",1]],
2,
["Baz"],
[[["Qux"],3],3.14]]
Würde dies werden:
[[3.14,[3,["Qux"]]],
["Baz"],
2,
[[1,"Bar"],"Foo"]]
Antworten:
Pyth, 11 - 50% = 5,5 Bytes
Probieren Sie es online aus: Demonstration oder Test Suite .
Dies definiert eine Funktion
y
. Die zusätzlichen 3 Bytes<newline>yQ
rufen einfach die Funktion mit der Eingabeliste auf und müssen daher nicht auf die Bytesumme angerechnet werden.Erläuterung:
quelle
Dyalog APL , 14 - 50% = 7 Bytes
⌽⍵
umgekehrtes Argument,⍣(×|≡⍵)
wenn das Argument kein Atom ist (Vorzeichen der [absoluten] Tiefe) ...∇¨
... die Funktion auf jedes Element (des umgekehrten Arguments) anwenden.If
⎕ML←3
(IBM-Stil), wie dies bei Systemen der Fall ist, die von APL2 migriert wurden, kann ein Byte durch Entfernen gespeichert werden|
.Probieren Sie APL online aus.
Aus Neugierde die vorgeschlagene Umkehrung von int und float:
Die innere Funktion:
0::⌽⍵
Wenn ein Fehler auftritt, geben Sie einfach das revesed-Argument⍎⌽⍕
make in string, reverse, make in number zurückquelle
Prolog, 40 - 50% = 20 Bytes
Dies ruft rekursiv Prädikat
a/2
mitmaplist/3
für jedes Mitglied der Liste auf, bis einreverse/2
Fehler auftritt (dh das letzte Element war keine Liste).quelle
Python 2, 40 - 50% = 20
Es sind nur einige geringfügige Änderungen erforderlich, um den Bonus zu erhalten. Verwendet die Tatsache, dass alle Listen kleiner als die leere Zeichenfolge sind und alle Zahlen kleiner als die leere Liste sind.
Alle Testfälle
quelle
f=lambda x:map(f,x)[::-1]if x>[]else x
.Emacs Lisp, 46 Bytes * 0,5 = 23
Anwendungsbeispiel:
(g '((1 2) 3 (four 5)))
->((5 four) 3 (2 1))
Klassischer rekursiver Ansatz: Wenn das Argument keine Liste ist, nehmen Sie es unverändert. Wenn es eine Liste ist, ordnen Sie die Funktion der Rückseite der Liste zu.
quelle
Mathematica, 34/2 = 17 Bytes
Oder nur,
Reverse//@#&
wenn Sie eine Menge Fehler undReverse
s überall wollen.quelle
Clojure 43/2 = 21,5 Bytes
quelle
JavaScript ES6, 42 - 50% = 21 Byte
Meine Punktzahl ist in vielerlei Hinsicht perfekt. Implementiert eine Funktion,
r
die sich rekursiv auf die Mitglieder ihrer Eingabe anwendet.Wenn wir annehmen, dass kein Objekt die Eigenschaft hat
pop
, wird dies dank dev-null (31 - 50% = 15,5):Wenn wir davon ausgehen, dass das Objekt eine vernünftige
reverse
Eigenschaft hat, können wir dies auch tun (35 - 50% = 17,5):quelle
a.pop?a.reverse().map(r):a
. Vorausgesetzt, es müssen keinevoid 0
benutzerdefinierten Objekte verarbeitet werden.Lua,
11199 * .5 =55,549,5 BytesGutes Stück Rekursion
quelle
CJam, 20 Bytes * 50% = 10
Definiert den benannten Block,
F
der auf ein Array oben auf dem Stapel angewendet werden kann (oder auf alles andere, in diesem Fall ist es ein No-Op).Testen Sie es hier.
quelle
Brachylog , 5 - 50% = 2,5 Bytes
Probieren Sie es online aus!
Da
↔
auch Zeichenfolgen und Ganzzahlen umgekehrt werden können, müssen wir Nicht-Listen mit explizit fehlschlagenċ
.quelle
Wolfram Language (Mathematica) , 23 - 50% = 11,5 Bytes
Probieren Sie es online aus!
List
s in Mathematica ({...}
) sind äquivalent zuList[...]
.@*
ist der Kompositionsoperator. Wenn Sie also jedes Vorkommen vonList
durch ersetzen, wirdReverse@*List
jede Liste, die in der Eingabe auftritt, umgekehrt (Reverse@*List[...]
=Reverse[{...}]
).24 -50% = 12 Bytes
Probieren Sie es online aus!
Funktioniert nicht nur bei
List
s.quelle
Clojure, 38 Bytes
(und ein Bonus, denke ich, aber Clojure ist eine dynamische Sprache, daher ist sie kostenlos)
Dies ist ein guter Anfang, hat aber diese Optimierungen nicht angewendet:
fn
anstelle einer benannten mitdefn
.f
Für die Rekursion benötigen wir jedoch noch einen Namen mit "Gültigkeitsbereich"seq?
anstelle von verwendencoll?
(into () ...)
anstelle vonreverse
x
bevor Mapping, wir brauchen nicht so viele Felder dannquelle
Ruby , 32 - 50% = 16 Bytes
Rekursive Funktion. Die Verwendung
rescue
zum Abfangen derNoMethodError
Trigger, die beim Versuchreverse
einer Zahl odermap
eines Strings ausgelöst werden, ist 2 Byte kürzer als die Überprüfung, ob die Eingabe ein Array über ista==[*a]
.Probieren Sie es online aus!
quelle