Grupowanie pobiera listę i dzieli ją na nowe listy równych sąsiadujących elementów. Na przykład
[1,1,2,1,1] -> [[1,1],[2],[1,1]]
Jeśli następnie weźmiesz długość tych grup, otrzymasz nową listę liczb całkowitych
[1,1,2,1,1] -> [2,1,2]
Twoim zadaniem jest napisanie programu, który pobierze listę dodatnich liczb całkowitych i znajdzie liczbę razy, którą możesz pogrupować i długość, zanim wynikowa lista będzie miała jeden element. Na przykład listę [1,2,3,3,2,1]
można przegrupować 4 razy
[1,2,3,3,2,1]
[1,1,2,1,1]
[2,1,2]
[1,1,1]
[3]
To jest golf golfowy, więc odpowiedzi będą liczone w bajtach, przy czym mniej bajtów będzie lepszych.
Przypadki testowe
[1,2,3,3,2,1] -> 4
[1,2,3,4,5,6,7] -> 2
[1,1,1,1,1,1] -> 1
[2] -> 0
[1,2,4] -> 2
[1,2,2,1,1,2] -> 4
[1,2,2,1,1,2,1,2,2] -> 5
[1] -> 0
code-golf
array-manipulation
Post Rock Garf Hunter
źródło
źródło
[1]
jest prawidłowym danymi wejściowymi i powinien dać0
, prawda?Odpowiedzi:
Haskell, 49 bajtów
Wypróbuj online!
źródło
CJam , 18 bajtów
Wypróbuj online!
źródło
Japt , 12 bajtów
Przetestuj online!
Wyjaśnienie
Rekurencja jest naprawdę niekonwencjonalnym podejściem dla Japt, ale wydaje się być o 4 bajty krótsza niż kolejna alternatywa ...
źródło
F.a()
jest nadal dostępna w historii zmian. Chciałbym zobaczyć twój 14-bajter!Brachylog , 12 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
C (gcc) , 108 bajtów
Wypróbuj online!
Wyjaśnienie
Wypróbuj online!
źródło
JavaScript (ES6),
676563 bajtówCo dziwne, JavaScript i Japt wydają się mieć ten sam najkrótszy algorytm raz ...
źródło
K (oK) ,
2019 bajtówRozwiązanie:
Wypróbuj online!
Przykłady:
Wyjaśnienie:
Ten jest dość prosty, zastanawiam się, czy jest jeszcze lepsze podejście ... Znajdź wskaźniki, w których dane wejściowe różnią się, podziel na te wskaźniki, a następnie policz długość każdej podlisty. Iteruj, aż wyniki zbiegną się do 1.
Uwagi:
Następujące 14-bajtowe rozwiązanie działa dla wszystkich oprócz listy pojedynczych elementów:
Wypróbuj online!
źródło
J ,
2523 bajtów1 bajt zapisany dzięki Streetster
1 bajt zapisany dzięki FrownyFrog
Wypróbuj online!
Wstępne rozwiązanie:
Wypróbuj online!
Wyjaśnienie
źródło
_2+
zapisać bajt?#;.1@(0,2=/\])
oszczędza 1 bajt.Stax , 9 bajtów
Uruchom i debuguj online
Jest to reprezentacja ascii tego samego programu.
Wykorzystuje to funkcję stax zwaną generatorem, który wytwarza wartość zgodnie z blokami transformacji i filtrów.
źródło
Python 2 , 84 bajtów
Wypróbuj online!
W jaki sposób?
f
jest funkcją rekurencyjną, która, jeśli na wejściu,a
ma długość 2 lub więcej (len(a)>1
) zwraca1+f(x)
* gdziex
jest długość grupya
; podczas gdy jeśli jego wejście ma długość 1 lub 0 zwracaFalse
(równa 0 w Pythonie) - dzieje się tak, ponieważ prawa strona plikuand
dzieje się tak, nie jest oceniana, gdy lewą jest falsey.*
-~f(x)
jest,-(-1 - f(x))
ale może stykać się wand
przeciwieństwie do1+f(x)
lubf(x)+1
)Długości grup są obliczane przez utworzenie kodu, który jest następnie oceniany za pomocą
eval(...)
. Utworzony kod jest czymś podobnym1,1,1+1+1,1,1+1,1,
do krotki(1,1,3,1,2,1)
.Kod jest tworzony przez spakowanie
a
ia
bez jego nagłówka (...for x, y in zip(a,a[1:])
tworzeniex
iy
każda z sąsiednich par wa
. Jeśli pary są równe,x==y
ocenia się naTrue
(1) w przeciwnym razieFalse
(0) - ten wynik jest używany do indeksowania,+
uzyskując ciąg+
i,
odpowiednio i dla każdej z nich wynikowy znak jest poprzedzony znakiem1
('1'+...
) - do całości1,
dołącza się końcowy, końcowy znak końcowy . Na przykład, gdybya
były,[5,5,2,9,9,9]
wówczasx,y
pary byłyby(5,5)(5,2)(2,9)(9,9)(9,9)
równe,10011
to znaki byłyby+,,++
, które z poprzedzającymi1
s staje1+1,1,1+1+
i końcowy znak końcowy,1,
wyrób1+1,1,1+1+1,
który ocenia(2,1,3)
zgodnie z wymaganiami.Zauważ, że trailing
,
zapewnia, że dane wejściowe z pojedynczą grupą są oceniane jako krotka, a nie liczba całkowita (tj.[3,3]
->1+1,
->(2)
zamiast[3,3]
->1+1
->2
)źródło
CJam , 19 bajtów
Wypróbuj online!
źródło
CJam , 20 bajtów
Wypróbuj online!
źródło
Perl 5 ,
53504945 bajtówObejmuje
+3
dla-p
Podaj listę liczb jako jedną linię na STDIN
Wypróbuj online!
źródło
Łuska , 8 bajtów
-1 bajt dzięki @Zgarb!
Wypróbuj online!
Wyjaśnienie
źródło
←Vε
jest krótszym sprawdzeniem znalezienia indeksu listy singletonów.Galaretka , 10 bajtów
Wypróbuj online!
źródło
[1]
. Powinieneś być w stanie to naprawić za pomocą dwóch dequeues / pop zamiast_2
ÐĿ
nie był to dobry wybór ... Zastąpiłem go pętlą while.05AB1E , 9 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Wolfram Language (Mathematica) , 32 bajty
Zaoszczędzono 2 bajty dzięki Martinowi Enderowi. Korzystanie z kodowania CP-1252, gdzie
±
jest jeden bajt.Wypróbuj online!
źródło
±{_}=0;±x_:=1+±(Length/@Split@x)
(przy założeniuWindowsANSI
kodowania)Rubinowy ,
54 56 5554 bajtówWypróbuj online!
źródło
SmileBASIC,
110108 bajtówFunkcja wywołania jako
R list,0
; dane wyjściowe są drukowane na konsoli.źródło
Python 2 , 85 bajtów
Wypróbuj online!
źródło
R ,
5145 bajtówWypróbuj online!
Rekurencyjnie bierz długość kodowania długości przebiegu i zwiększaj licznik.
źródło
Retina 0.8.2 , 31 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Jeśli występuje przecinek, wykonamy kolejną iterację, więc dołącz znak licznika.
Zastąp każdy bieg jego zmniejszoną długością. Powyższe etapy powtarzają się, dopóki nie pozostaną przecinki.
Policz liczbę iteracji.
źródło
Perl 6 , 52 bajtów
Sprawdź to
Rozszerzony:
źródło
Brain-Flak , 78 bajtów
Wypróbuj online!
źródło
Pyth , 9 bajtów
Zestaw testowy!
źródło
Kotlin , 123 bajty
Akceptuje
List<Int>
.Bardziej czytelny:
Wypróbuj online!
131 bajtów, TIO
181 bajtów, TIO
Obejmuje 39 dla
import kotlin.coroutines.experimental.*
.źródło
Czerwony , 140 bajtów
Wypróbuj online!
Chciałem tylko dać dialekt Red's Parse jeszcze jedną próbę.
Bez golfa
źródło