Ein junges Diagramm ist eine Anordnung von Feldern in linksbündigen Zeilen und obenbündigen Spalten. Für jedes Kästchen sind alle darüber und links davon befindlichen Felder belegt.
XXXXX
XXX
XXX
X
Die Hakenlänge einer Box ist die Anzahl der Boxen rechts in der Reihe und darunter in der Spalte, die sich ebenfalls einmal selbst zählen. Zum Beispiel hat die zweite Box eine Hakenlänge von 6:
X****
X*X
X*X
X
Hier sind alle Hakenlängen:
86521
532
421
1
Ihr Ziel ist es , hier das Produkt der Hakenlängen zu berechnen 8*6*5*2*1*5*3*2*4*2*1*1 = 115200
.
(Informieren Sie sich über die Hakenlängenformel, wenn Sie daran interessiert sind, warum dieser Ausdruck wichtig ist.)
Eingabe: Eine Sammlung von Zeilengrößen als Zahlen wie [5,3,3,1]
oder als wiederholtes unäres Symbol wie [[1,1,1,1,1], [1,1,1], [1,1,1], [1]]
oder "XXXXX XXX XXX X"
. Sie können davon ausgehen, dass die Liste aufsteigend oder absteigend sortiert ist. Die Liste ist nicht leer und enthält nur positive ganze Zahlen.
Ausgabe: Das Produkt der Hakenlängen, das eine positive ganze Zahl ist. Sorgen Sie sich nicht um Integer-Überläufe oder Laufzeit.
Integrierte Funktionen, die sich speziell mit Young-Diagrammen oder Ganzzahlpartitionen befassen, sind nicht zulässig.
Testfälle:
[1] 1
[2] 2
[1, 1] 2
[5] 120
[2, 1] 3
[5, 4, 3, 2, 1] 4465125
[5, 3, 3, 1] 115200
[10, 5] 798336000
{ee::+W%}_q~%z%:+:*
(19 Bytes) Eingabeformat:[[1][1 1 1][1 1 1][1 1 1 1 1]]
%
: PJ, 24 Bytes
25 Bytes (mit Erklärung):
Übernimmt die Eingabe als Liste aufsteigender Listen mit unären Ziffern, ähnlich wie im Beispiel
[[1], [1,1,1], [1,1,1], [1,1,1,1,1]]
.Verwendung:
Methode
Zwischenergebnisse werden in der Eingabe angezeigt
1 1 1 1 1;1 1 1;1 1 1;1 (5,3,3,1 in unary)
( dies gilt für eine frühere Version mit absteigender Länge, jedoch mit derselben Methode ):Explizite Version mit gleicher Länge:
Probieren Sie es hier online aus.
quelle
Pyth - 21 Bytes
Ich verliere eine Menge Bytes in der vertikalen Berechnung. Ich werde mich darauf konzentrieren, das zu spielen.
Nimmt Eingaben wie
[5, 3, 3, 1]
.Probieren Sie es hier online .
quelle
Pyth, 18 Bytes
Nimmt die Eingabe in aufsteigender Reihenfolge vor
[1, 3, 3, 5]
.Demonstration.
Alternative Lösung, 19 Byte
quelle
Python 2,
8988 Bytes(Danke an @xnor für das Speichern eines verrückten Bytes durch Kombinieren von
p
undj
)Das
d.get
sieht für mich etwas verdächtig aus, aber sonst bin ich damit relativ zufrieden. Ich habe einige andere Ansätze ausprobiert, wie Rekursion und Zippen, aber dies ist der einzige, den ich unter 100 geschafft habe.Übernimmt die Eingabe von STDIN als Liste in aufsteigender Reihenfolge, z
[1, 3, 3, 5]
.quelle
Haskell, 68 Bytes
Anwendungsbeispiel:
p [5,4,3,2,1]
->4465125
f
Durchsucht von links nach rechts, indem die Länge des äußersten Hakens mit einem rekursiven Aufruf an sich selbst multipliziert wird, wobei jedes Element der Eingabeliste um reduziert wird1
(beim Erreichen fallenlassen0
).p
Scannt von oben nach unten, indemf
die gesamte Liste mitp
dem Schwanz multipliziert wird .quelle
R, 174 Bytes
Also ... Diese Lösung ist ziemlich lang und könnte wahrscheinlich mehr Golf sein. Ich denke drüber nach !
Ungolfed:
quelle
Python 2,
135128 BytesDies nimmt eine Python-Typ-Liste von stdin:
Dies ist eine sehr kanonische Implementierung, aber ich habe bisher noch nichts Klügeres gefunden. Ich habe das Gefühl, dass es auch mit "echten" Programmiersprachen viel kürzere Lösungen geben wird.
Wir erhalten die Anzahl der Kästchen in jeder Zeile als Eingabe. Diese Lösung zählt zuerst die Anzahl der Kästchen in jeder Spalte, in der sie gespeichert ist
c
(es ist tatsächlich die Anzahl minus 1, um die Verwendung in der späteren Berechnung zu vereinfachen). Dann durchläuft es alle Felder und multipliziert die Hakenlängen. Die Hakenlänge selbst ist trivial zu berechnen, sobald Sie die Anzahl der Kästchen in jeder Zeile und Spalte haben.quelle
m
?JavaScript ( ES6 ) 69
Eine Funktion, die ein Array von Ganzzahlen in aufsteigender Reihenfolge verwendet.
Führen Sie das zu testende Snippet aus (nur Firefox)
quelle
Python,
9591 BytesDies ist eine Python-Implementierung von Nimis Haskell-Antwort . Golfvorschläge sind willkommen.
quelle
z and _ or 1
alsz==[]or _
wennz
eine Liste ist, mit der Tatsache, dassTrue==1
. Pythons Funktionsdeklarationen sind wortreicher als die von Haskell, daher lohnt es sich oft, eine einzige rekursive Funktion zu definieren, die sowohl die inneren als auch die äußeren rekursiven Schleifen ausführt, obwohl ich nicht weiß, wie machbar das hier ist.