Moje małe dziecko ma taką zabawkę:
Ta zabawka składa się z 10 małych wiader, które można ustawiać jeden na drugim, które będziemy numerować od 1 (najmniejszy) do 10 (największy). Czasami robi małe stosy, a zabawka kończy się w ten sposób:
Możemy przedstawić schematyczne stosy w następujący sposób:
1 6
4 9 2 7
5 10 3 8
---------- <-- Floor
1 2 3 4 <-- Pile #
Lub inaczej:
[[4,5],[9,10],[1,2,3],[6,7,8]]
Ten zestaw stosów łyżek można łatwo odtworzyć w celu odtworzenia oryginalnego zestawu (pierwszy obraz), po prostu umieszczając stosy mniejszych wiader wewnątrz stosów większych wiader:
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
Niemniej jednak czasami moje dziecko próbuje budować wieże lub wyrzuca wiadra, a stosy stają się niespójne, a oryginalnego zestawu nie można odbudować tylko przez umieszczenie jednego stosu w drugim. Przykłady tego:
[[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)
Wyzwanie
Biorąc pod uwagę listę liczb całkowitych reprezentujących zestaw stosów kubełkowych, zwróć prawdziwą wartość, jeśli listy reprezentują zestaw łatwych do odtworzenia stosów, lub falsey w każdym innym przypadku.
- Dane wejściowe zostaną podane w postaci list liczb całkowitych reprezentujących segmenty od góry do dołu dla każdego stosu.
- Nie będzie pustych stosów początkowych (nie dostaniesz ich
[[1,2,3],[],[4,5]]
jako danych wejściowych). - Całkowita liczba segmentów może być dowolna w rozsądnym zakresie liczb całkowitych.
- Moje dziecko ma tylko jeden zestaw wiader, więc nie będzie duplikatów.
- Możesz wybrać dowolne dwie spójne (i spójne) wartości dla wartości true lub falsey.
- Wiadra będą oznaczone od # 1 do # N, będąc
N
największą liczbą całkowitą na listach liczb całkowitych. Moje dziecko wciąż nie zna pojęcia zera. - Możesz otrzymać dane wejściowe w dowolnym rozsądnym formacie, o ile reprezentuje zestaw stosów wiader. Po prostu określ to w swojej odpowiedzi, jeśli zmienisz sposób odbierania danych wejściowych.
- To jest golf golfowy , więc może wygrać najkrótszy program / funkcja dla każdego języka!
Przykłady
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)
źródło
Odpowiedzi:
Galaretka ,
65 bajtówDzięki @Lynn za zapisanie 1 bajtu.
Wypróbuj online! (pochodzi ze stopką pakietu testowego)
Wyjaśnienie
źródło
ṢFµJ⁼
działa, ale nie myślałem o wszystkich przypadkach.1
nie brakuje wiadra . Nie jestem pewien, czy gwarantuje to PO.J
może zwrócić, gwarantując fałszywe wyniki. czy coś mi brakuje?Python 2 ,
5352 bajtyDzięki za bajt xnor
Wypróbuj online!
źródło
[]
. Całkiem trudne[0]
aby można było rozpocząć zakres0
.JavaScript (ES6),
5958 bajtówWyjaśnienie
Przypadki testowe
Pokaż fragment kodu
źródło
05AB1E , 4 bajty
Wypróbuj online!
źródło
Haskell , 54 bajty
Wypróbuj online!
źródło
Haskell , 37 bajtów
Wypróbuj online!
Sprawdza, czy konkatenowana lista posortowana jest leksykograficznie mniejsza niż lista nieskończona
[1,2,3,...]
. Ponieważ nie ma duplikatów, brakujący segment lub segment poza kolejnością spowodowałyby, że wartość byłaby większa niżk
nak
miejscu, co spowodowałoby, że wynikowa lista byłaby większa.źródło
Pyth, 6 bajtów
Wypróbuj tutaj.
Wyjaśnienie:
źródło
UI
części, proszęU <col>
jestrange(len(A))
,I <pfn> <any> <n-1:any>
jestA(B, ...) == B
.U <col>
takrange(len(A))
, ale nie zdawałem sobie sprawy, że przeniesienie rozwiązania Python byłoby krótsze ...PROLOG (SWI), 54 bajty
To jest to lepiej. Niestety, wciąż dość gadatliwy.
Wypróbuj online!
The
s/1
Orzecznik bierze jako argument listę i jest prawdziwa, jeśli lista jest listą łatwo wieżowych wiadrach.Ulepszenie algorytmu: jeśli posortuję listę przed spłaszczeniem, wymusza to posortowanie wszystkich list podrzędnych, aby predykat był prawdziwy. Nieznacznie „pożyczony” z odpowiedzi Galaretki Pietu1998 . Dzięki temu mogę zrzucić
forall
co stanowi ponad połowę programu (oryginalna odpowiedź znajduje się poniżej).Jak to działa?
Predykat jest prawdziwy, jeśli wszystkie jego klauzule są prawdziwe:
Poprzednia odpowiedź, PROLOG (SWI), 109 bajtów
Wypróbuj online!
źródło
Pyth ,
9 1611 bajtów (Naprawiono)Używa zupełnie innej metody niż druga odpowiedź. Krótsze, 7-bajtowe podejście można znaleźć poniżej.
Pakiet testowy.
Wyjaśnienie
Jak to działa?
Weźmy kilka przykładów, które ułatwiają zrozumienie. Załóżmy, że dane wejściowe to
[[1,3,4],[5,7],[2,6]]
. Rdzeń tego algorytmu polega na tym, że każda delta na nie spłaszczonej liście musi wynosić 1 , aby można było ustawiać w stosy.Po pierwsze
S
zamienia to w[[1, 3, 4], [2, 6], [5, 7]]
.Następnie
s
spłaszcza go:[1, 3, 4, 2, 6, 5, 7]
.Przygotuj z
0
przodu:[0, 1, 3, 4, 2, 6, 5, 7]
.+
dostaje delty z listy[1, 2, 1, -2, 4, -1, 2]
.tM
zmniejsza każdy element,[0, 1, 0, -3, 3, -2, 1]
.Każda
0
liczba nie będąca liczbą całkowitą jest zgodna z prawdą w Pyth, więc sprawdzamy, czy istnieje jakiś element zgodny z prawdą.E
(co oznacza, że stos nie może zostać poprawnie uformowany). DostajemyTrue
.!
neguje wynik, który zamienia sięTrue
wFalse
.Gdyby na przykład wprowadzono dane,
[[6,7,8,9,10],[1],[2],[3,4,5],[11,12,13]]
algorytm działałby w ten sposób:Klasyfikowane według najwyższego elementu:
[[1], [2], [3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13]]
i spłaszczone, z0
poprzedzany:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
.Delty:
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
. Wszystko get zmniejszany:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
.Nie ma prawdziwego elementu, więc rozumiemy
False
. Wynikiem logicznej negacji jestTrue
.Pyth , 7 bajtów
Pakiet testowy.
Port odpowiedzi na Python i odmiana rozwiązania @ Erik .
źródło
tM
zmniejszenie każdego elementu? Wydaje mi się, że zmniejszenie każdego elementu[1, 2, 1, -2, 4, -1, 2]
przyniosłoby[0, 1, 0, -3, 3, -2, 1]
. Ale to nie pomogłoby rozwiązać problemu, więc muszę nie rozumieć, co oznacza zmniejszenie każdego elementu.tM
zmniejsza każdy element na liście o1
. W moim wyjaśnieniu jest błąd. Naprawię.Brachylog , 5 bajtów
Wypróbuj online!
Wyjaśnione unifikacje:
Wyjaśnienie analityczne:
Najpierw sortujemy listę list, a następnie konkatenujemy (tj. Spłaszczamy 1 głębokość) (
oc
), aby wiadra były układane od prawej do lewej, jeśli to możliwe. Następnie, aby sprawdzić, czy segmenty zostały prawidłowo ułożone w stos (tj. Brak brakujących segmentów lub wież), sprawdzamy, czy wynikowa lista zawiera zakres od 1 do jej długości. Teraz zamiast jednakowego sprawdzania listy z zakresem [1..n] jej długości ({l⟦₁?}
), staramy się znaleźć dane wejściowe do funkcji, która generuje taki zakres (~⟦₁
), jeśli taki istnieje. Jeśli wejście zostanie znalezione, program kończy się bez problemów, więc wyzwalatrue.
status. Jeśli nie zostanie znalezione żadne wejście, program nie powiedzie się, co spowoduje wyświetleniefalse.
statusu.źródło
Python 2 , 43 bajty
Wypróbuj online!
Sprawdza, czy połączona posortowana lista jest leksykograficznie mniejsza niż
[1,2,3,...N]
dla dużychN
. Ponieważ nie ma duplikatów, brakujący segment lub segment poza kolejnością spowodowałyby, że wartość byłaby większa niżk
nak
miejscu, co spowodowałoby, że wynikowa lista byłaby większa. Długość łańcucha wejściowego wystarcza jako górna granica, ponieważ każda liczba zajmuje więcej niż 1 znak.źródło
MATL , 5 bajtów
Wypróbuj online!
(Powiedzmy, że dane niejawne
{[4,5],[9,10],[1,2,3],[6,7,8]}
)S
- sortuj tablice wejściowe w kolejności leksykograficznej ({[1,2,3],[4,5],[6,7,8],[9,10]}
)g
- przekształć w pojedynczą tablicę (cell2mat
)t
- powiel tof
- znaleźć wskaźniki wartości niezerowych. Ponieważ dane wejściowe są tutaj niezerowe, zwraca listę indeksów od 1 do długości (tablica) ([1,2,3,4,5,6,7,8,9,10],[1,2,3,4,5,6,7,8,9,10]
)=
- sprawdź, czy tablica jest równa zakresowi od 1 do długości (tablica)źródło
Japt ,
131211 bajtówTo może być prawdopodobnie krótsze.
Wypróbuj lub uruchom wszystkie przypadki testowe
Wyjaśnienie
źródło
ä-0 e¥J
alboän0 e¥1
ä
tablic. Dzięki za oszczędność.Scala, 49 bajtów
Nie golfowany:
źródło
Japt , 9 bajtów
Wypróbuj online!
źródło
g<space>
;)R , 58 bajtów
Wypróbuj online!
Uwaga: FAŁSZ to prawdziwy wynik, PRAWDA to fałsz
Objaśnienie:
źródło
seq(a)
na 2 bajty ?. Można go również używaćTRUE
jako wartości fałszowania i na odwrót (wystarczy podać w odpowiedzi), aby można było zrobićany(a-seq(a))
inny bajt.seq(a)
zachowaniem się inaczej, gdya
ma długość 1 i przegapiłem, że w tym przypadku otrzymamy te same wyniki: D Dzięki!C # (.NET Core) ,
157145132 bajtów-13 bajtów dzięki TheLethalCoder
Liczba bajtów obejmuje również
Wypróbuj online!
Nie golfowany:
źródło
x.First()
->x[0]
?Enumerable.Range
->new int[]
iZip
z indeksem, jeśli to możliwe ..? UsuńWhere
i umieść warunek wAny
.new int[]
podejście wymagałoby dodanieSelect()
dostać indeks, a ostatecznie dokonać liczyć bajt większe.CJam , 11 bajtów
Wypróbuj online!
Oww
:(
... tak!{$:+_,,:)=}
źródło
Węgiel drzewny , 19 bajtów (niekonkuruje?)
Wypróbuj online!
-10 bajtów dzięki tylko ASCII .
-3 bajty dzięki ASCII-tylko do kolejnej implementacji (patrz historia wersji dla wersji potencjalnie konkurencyjnej).
-
dla prawdyza fałsz.
Dane wejściowe to lista pojedyncza listy list ze względu na sposób, w jaki węgiel drzewny przyjmuje dane wejściowe.
źródło
UP
.UPsorted
.▷
stosowane tam sprawia, że rzeczy zakres priorytetowe chociaż tak że; dlategoUP
nadal istnieje, ale myślę, że można po prostu unikać nazw funkcji python jako nazwy zmiennej?v
, również O_O, to nie jest nawet wyzwanie w sztuce ascii (nic dziwnego, że to takie niemiłe: PJava 10, 213 bajtów
Wypróbuj online.
Kiedy zaczynałem, wydawało mi się, że to dobry pomysł, ale te wbudowane elementy tylko wydłużają czas. Z pewnością można grać w golfa przy użyciu bardziej ręcznego podejścia.
Zainspirowany @EriktheOutgolfer jest 4-bajtowy 05AB1E odpowiedź . 4 vs 213 bajtów, rofl ..>.>
Wyjaśnienie:
źródło