Mein kleines Kind hat so ein Spielzeug:
Dieses Spielzeug besteht aus 10 stapelbaren kleinen Eimern, die von 1 (der kleinste) bis 10 (der größte) nummeriert werden. Manchmal macht er kleine Stapel und das Spielzeug endet so:
Wir können die Pfähle wie folgt schematisch darstellen:
1 6
4 9 2 7
5 10 3 8
---------- <-- Floor
1 2 3 4 <-- Pile #
Oder anders ausgedrückt:
[[4,5],[9,10],[1,2,3],[6,7,8]]
Dieser Satz von Eimern kann leicht wieder gestapelt werden, um den ursprünglichen Satz (das erste Bild) wiederherzustellen, indem Stapel von kleineren Eimern nacheinander in Stapel von größeren Eimern platziert werden:
1 1 6
2 2 7
1 6 3 6 3 8
4 9 2 7 4 9 7 4 9
5 10 3 8 5 10 8 5 10
---------- > [Pile 3 to 1] > ---------- > [Pile 4 to 2] > ---------- > [Pile 1 to 2] > Done!
1 2 3 4 1 2 3 4 1 2 3 4
Trotzdem versucht mein Kind manchmal, Türme zu bauen, oder wirft Eimer weg, und die Stapel werden inkonsistent, und das ursprüngliche Set kann nicht wiederhergestellt werden, indem nur ein Stapel in den anderen gelegt wird. Beispiele hierfür:
[[1,3,2],[4]] (the kid tried to build a tower by placing a bigger bucket
over a smaller one, we would need to reorder the buckets
first)
[[1,3,4],[2]] (the kid left aside an unordered bucket, we would need to remove
bucket #1 from pile #1 before restacking)
[[1,2,3],[5]] (the kid lost a bucket, we need to find it first)
Herausforderung
Geben Sie bei einer Liste von Listen mit ganzen Zahlen, die eine Gruppe von Eimerstapeln darstellen, einen Wahrheitswert zurück, wenn die Listen eine leicht wieder stapelbare Gruppe von Stapeln darstellen, oder in einem anderen Fall Falsch.
- Die Eingabe erfolgt als Liste mit ganzen Zahlen, die die Bereiche von oben nach unten für jeden Stapel darstellen.
- Es wird keine leeren Startstapel geben (Sie werden nicht
[[1,2,3],[],[4,5]]
als Eingabe erhalten). - Die Gesamtzahl der Buckets kann innerhalb eines vernünftigen ganzzahligen Bereichs liegen.
- Mein Kind hat nur einen Satz Eimer, damit es keine doppelten Elemente gibt.
- Sie können zwei beliebige konsistente (und kohärente) Werte für truthy oder falsey auswählen.
- Die Buckets werden mit # 1 bis #N bezeichnet, wobei es sich um
N
die größte Ganzzahl in der Liste der Ganzzahlen handelt. Mein Kind kennt das Konzept der Null immer noch nicht. - Sie können die Eingabe in jedem vernünftigen Format erhalten, sofern es sich um eine Reihe von Eimern handelt. Geben Sie es einfach in Ihrer Antwort an, wenn Sie die Art und Weise ändern, in der Sie die Eingabe erhalten.
- Das ist Code-Golf , also kann das kürzeste Programm / die kürzeste Funktion für jede Sprache gewinnen!
Beispiele
Input: [[4,5],[9,10],[1,2,3],[6,7,8]]
Output: Truthy
Input: [[6,7,8,9,10],[1],[2],[3,4,5],[11,12,13]]
Output: Truthy
Input: [[2,3,4],[1],[5,6,7]]
Output: Truthy
Input: [[1,2],[5,6],[7,8,9]]
Output: Falsey (buckets #3 and #4 are missing)
Input: [[2,3,4],[5,6,7]]
Output: Falsey (bucket #1 is missing)
Input: [[1,3,4],[5,7],[2,6]]
Output: Falsey (non-restackable piles)
Input: [[1,4,3],[2],[5,6]]
Output: Falsey (one of the piles is a tower)
quelle
Antworten:
Gelee ,
65 BytesVielen Dank an @Lynn für das Speichern von 1 Byte.
Probieren Sie es online! (kommt mit Fußzeile der Testsuite)
Erläuterung
quelle
ṢFµJ⁼
funktioniert, aber ich habe nicht an alle Randfälle gedacht.1
fehlt nicht. Ich bin mir nicht sicher, ob dies vom OP garantiert wird.J
Wert, was eine falsche Ausgabe garantiert. Vermisse ich etwas?Python 2 ,
5352 BytesDanke für das Byte xnor
Probieren Sie es online!
quelle
[]
. Ziemlich knifflig[0]
damit der Bereich von beginnen kann0
.JavaScript (ES6),
59-58ByteErläuterung
Testfälle
Code-Snippet anzeigen
quelle
05AB1E , 4 Bytes
Probieren Sie es online!
quelle
Haskell , 54 Bytes
Probieren Sie es online!
quelle
Haskell , 37 Bytes
Probieren Sie es online!
Überprüft, ob die verkettete sortierte Liste lexikografisch kleiner als die unendliche Liste ist
[1,2,3,...]
. Da es keine Duplikate gibt, würde ein fehlender oder nicht ordnungsgemäßer Bucket einen höheren Wert alsk
an derk
dritten Stelle verursachen, wodurch die resultierende Liste größer wird.quelle
Pyth, 6 Bytes
Probieren Sie es hier aus.
Erläuterung:
quelle
UI
Teil bitte eine Erklärung hinzuU <col>
istrange(len(A))
,I <pfn> <any> <n-1:any>
istA(B, ...) == B
.U <col>
istrange(len(A))
, aber ich wusste nicht, dass die Portierung der Python-Lösung kürzer sein würde ...PROLOG (SWI), 54 Bytes
Nun , das ist besser. Leider immer noch ziemlich ausführlich.
Probieren Sie es online!
Das
s/1
Prädikat nimmt eine Liste als Argument und ist wahr, wenn die Liste eine Liste von leicht stapelbaren Buckets ist.Verbesserung des Algorithmus: Wenn ich die Liste sortiere, bevor ich sie reduziert habe, werden alle Unterlisten sortiert, damit das Prädikat wahr ist. Etwas "entlehnt" von Pietu1998's Jelly-Antwort . Dank dessen kann ich das ausgeben,
forall
was mehr als die Hälfte des Programms ist (siehe unten für die ursprüngliche Antwort).Wie funktioniert es?
Das Prädikat ist wahr, wenn alle seine Klauseln wahr sind:
Vorherige Antwort, PROLOG (SWI), 109 Bytes
Probieren Sie es online!
quelle
Pyth ,
9 1611 Bytes (Fest)Verwendet eine völlig andere Methode als die andere Antwort. Ein kürzerer 7-Byte-Ansatz ist nachstehend aufgeführt.
Test Suite.
Erläuterung
Wie funktioniert das?
Nehmen wir ein paar Beispiele, die das Verständnis erleichtern. Nehmen wir an, die Eingabe ist
[[1,3,4],[5,7],[2,6]]
. Der Kern dieses Algorithmus besteht darin, dass jedes Delta in der nicht abgeflachten Liste 1 sein muss, damit die Buckets stapelbar sind.Zunächst
S
macht es in[[1, 3, 4], [2, 6], [5, 7]]
.Dann
s
flacht es:[1, 3, 4, 2, 6, 5, 7]
.Voranstellen
0
:[0, 1, 3, 4, 2, 6, 5, 7]
.+
Ruft die Deltas der Liste ab[1, 2, 1, -2, 4, -1, 2]
.tM
dekrementiert jedes Element[0, 1, 0, -3, 3, -2, 1]
.Jede Nicht-
0
Ganzzahl ist in Pyth wahr, also prüfen wir, ob es ein wahres Element gibt.E
(was bedeutet, dass der Stapel nicht korrekt gebildet werden kann). Wir bekommenTrue
.!
negiert das Ergebnis, das sichTrue
in verwandeltFalse
.Wenn die Eingabe beispielsweise so wäre,
[[6,7,8,9,10],[1],[2],[3,4,5],[11,12,13]]
würde der Algorithmus folgendermaßen funktionieren:Sortiert nach dem höchsten Element:
[[1], [2], [3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13]]
und abgeflacht, mit einem0
vorangestellt:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
.Delta:
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
. Alle get verringert:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
.Es gibt kein wahres Element, also bekommen wir
False
. Durch logische Verneinung ist das ErgebnisTrue
.Pyth , 7 Bytes
Test Suite.
Port of the Python-Antwort und eine Variante von @ Eriks Lösung .
quelle
tM
Dekrementen jedes Elements? Ich würde denken, dass das Dekrementieren jedes Elements von[1, 2, 1, -2, 4, -1, 2]
ergeben würde[0, 1, 0, -3, 3, -2, 1]
. Aber das würde nicht helfen, das Problem zu lösen, also muss ich falsch verstehen, was es bedeutet, jedes Element zu dekrementieren.tM
verringert jedes Element in der Liste um1
. In meiner Erklärung liegt ein Fehler. Wird reparieren.Brachylog , 5 Bytes
Probieren Sie es online!
Erklärte Vereinigungen:
Analytische Erklärung:
First of all we sort the list of lists, and then we concatenate (i.e. flatten 1-deep) (
oc
) so that the buckets get stacked right-to-left if possible. Then, to check if the buckets have been stacked correctly (i.e. no missing buckets or towers), we check that the resulting list is an inclusive range from 1 to its length. Now, instead of equal-checking the list with the [1..n] range of its length ({l⟦₁?}
), we try to find an input to a function that generates such a range (~⟦₁
), if there is one. If an input is found, then the program ends with no issues, so it triggers atrue.
status. If no input is found, the program fails, triggering afalse.
status.quelle
Python 2, 43 bytes
Try it online!
Checks whether the concatenated sorted list is lexicographically smaller than
[1,2,3,...N]
for largeN
. Since there are no duplicates, any missing bucket or out-of-order bucket would cause a value greater thank
in thek
'th place, making the resulting list be bigger. The string-length of the input suffices as an upper bound since each numbers takes more than 1 character.quelle
MATL, 5 bytes
Try it online!
(Implicit input, say
{[4,5],[9,10],[1,2,3],[6,7,8]}
)S
- sort input arrays in lexicographic order ({[1,2,3],[4,5],[6,7,8],[9,10]}
)g
- convert into a single array (cell2mat
)t
- duplicate thatf
- find indices of non-zero values. Since input here is all non-zeros, returns the list of indices from 1 to length(array) ([1,2,3,4,5,6,7,8,9,10],[1,2,3,4,5,6,7,8,9,10]
)=
- check that the array is equal to the range 1 to length(array)quelle
Japt,
131211 bytesThis could probably be shorter.
Try it or run all test cases
Explanation
quelle
ä-0 e¥J
orän0 e¥1
ä
for arrays yet. Thanks for the saving.Scala, 49 Bytes
Ungolfed:
quelle
Japt, 9 bytes
Try it online!
quelle
g<space>
;)R, 58 bytes
Try it online!
N.B. : FALSE is the truthy outcome, TRUE is the falsy one
Explanation :
quelle
seq(a)
for 2 byte?. Also, it's allowed to useTRUE
as a falsy value and vice versa (just specify in your answer), so you can doany(a-seq(a))
for another byte.seq(a)
behaving differently whena
is of length 1 and I missed that in this case we'll get the same results :D THanks !C# (.NET Core),
157145132 bytes-13 bytes thanks to TheLethalCoder
Byte count also includes
Try it online!
Ungolfed:
quelle
x.First()
->x[0]
?Enumerable.Range
->new int[]
andZip
with index if possible..? RemoveWhere
and place the condition intoAny
.new int[]
approach would require adding aSelect()
to get the index, and ultimately make the byte count bigger.CJam, 11 bytes
Try it online!
Oww
:(
...yeah!{$:+_,,:)=}
quelle
Charcoal, 19 bytes (non-competing?)
Try it online!
-10 bytes thanks to ASCII-only.
-3 bytes thanks to ASCII-only for a subsequent implementation (see revision history for possibly competing version).
-
for truthy,for falsy.
Input is a singleton list of a list of lists, because of how Charcoal takes input.
quelle
UP
.UPsorted
.▷
used there makes scope things the priority though so that;s whyUP
is still there but i guess you can just avoid using python function names as varnames?v
, also O_O this isn't even an ascii art challenge (no wonder it's so ungolfy :PJava 10, 213 bytes
Try it online.
It seemed like a good idea when I started, but these builtins only make it longer.. Can definitely be golfed by using a more manual approach..
Inspired by @EriktheOutgolfer's 4-byte 05AB1E answer. 4 vs 213 bytes, rofl.. >.>
Explanation:
quelle