Opis wyzwania
Biorąc pod uwagę listę / tablicę elementów, wyświetl wszystkie grupy kolejnych powtarzających się elementów.
Opis wejścia / wyjścia
Twoje dane wejściowe to lista / tablica elementów (możesz założyć, że wszystkie są tego samego typu). Nie musisz obsługiwać każdego typu, który ma Twój język, ale musi obsługiwać co najmniej jeden (najlepiej int
, ale typy takie boolean
, choć niezbyt interesujące, są również w porządku). Przykładowe wyniki:
[4, 4, 2, 2, 9, 9] -> [[4, 4], [2, 2], [9, 9]]
[1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4] -> [[1, 1, 1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]
[1, 1, 1, 3, 3, 1, 1, 2, 2, 2, 1, 1, 3] -> [[1, 1, 1], [3, 3], [1, 1], [2, 2, 2], [1, 1], [3]]
[9, 7, 8, 6, 5] -> [[9], [7], [8], [6], [5]]
[5, 5, 5] -> [[5, 5, 5]]
['A', 'B', 'B', 'B', 'C', 'D', 'X', 'Y', 'Y', 'Z'] -> [['A'], ['B', 'B', 'B'], ['C'], ['D'], ['X'], ['Y', 'Y'], ['Z']]
[True, True, True, False, False, True, False, False, True, True, True] -> [[True, True, True], [False, False], [True], [False, False], [True, True, True]]
[0] -> [[0]]
Jeśli chodzi o puste listy, wynik jest niezdefiniowany - może to być nic, pusta lista lub wyjątek - cokolwiek najbardziej odpowiada twoim celom golfowym. Nie musisz też tworzyć osobnej listy list, więc jest to również całkowicie poprawny wynik:
[1, 1, 1, 2, 2, 3, 3, 3, 4, 9] ->
1 1 1
2 2
3 3 3
4
9
Ważne jest, aby grupy były w jakiś sposób rozdzielone.
code-golf
array-manipulation
shooqie
źródło
źródło
int
s rozdzielone, na przykład,0
że ów zły pomysł, ponieważ nie może być0
ów w wejściu ...[4, 4, '', 2, 2, '', 9, 9]
lub[4, 4, [], 2, 2, [], 9, 9]
.Odpowiedzi:
Mathematica, 5 bajtów
... jest do tego wbudowany.
źródło
Galaretka , 5 bajtów
Działa dla wszystkich typów numerycznych. Wypróbuj online! lub sprawdź wszystkie numeryczne przypadki testowe .
Jak to działa
źródło
Siatkówka ,
158 bajtówDzięki Lynn za zaproponowanie prostszego formatu We / Wy.
Traktuje dane wejściowe jako listę znaków (i używa linii do oddzielenia grup).
Wypróbuj online!
Działa to po prostu poprzez dopasowanie grup i wydrukowanie ich wszystkich (co automatycznie wykorzystuje separację linii).
źródło
abbcccddd
→a bb ccc ddd
jest akceptowalnym formatem We / Wy, a OP go zaakceptował, więc myślę, że!`(.)\1*
jest w porządku?JavaScript (ES6),
3937 bajtówDziała na dowolnych tokenach typu słowo oddzielonych spacją. Zaoszczędź 2 bajty dzięki @ MartinEnder ♦. Najlepsze, co mogę zrobić dla danych wejściowych i zwracanych z tablicy, to 68:
źródło
MATL , 9 bajtów
Dane wejściowe to tablica wierszy liczb , ze spacjami lub przecinkami jako separatorami.
Wypróbuj online! Testuj na liczbach niecałkowitych .
MATL, 11 bajtów
Dane wejściowe to tablica kolumn zawierająca liczby lub znaki , używana
;
jako separator.Wypróbuj online! Testuj z dowolnymi liczbami . Testuj ze znakami .
źródło
gs2, 2 bajty
Wypróbuj online!
c
jest wbudowanym grupowaniem, które robi to dokładnie, więc wywołujemy go na STDIN (który jest łańcuchem, tj. listą znaków) i otrzymujemy listę łańcuchów. Niestety wynik jest nie do odróżnienia od danych wejściowych, dlatego musimy dodać separatory!-
(łączenie spacjami) załatwia sprawę.Alternatywną odpowiedzią jest
cα
(2 bajty CP437), która po prostu pakujec
się w anonimową funkcję.źródło
Brachylog , 13 bajtów
Ostrzeżenie: jest to wyjątkowo nieefektywne i zrozumiesz dlaczego w wyjaśnieniu.
Oczekuje to listy (np.
[1:1:2:2:2]
) Jako danych wejściowych. Elementy na liście mogą być prawie wszystkim.Wyjaśnienie
Działa to tylko ze względu na sposób
s - Subset
ujednolicenia: najmniejsze zestawy znajdują się na końcu. Dlatego pierwszą rzeczą, która stwierdza, że konkatenaty do danych wejściowych są najdłuższe przebiegi, np.[[1:1]:[2:2:2]]
I nie na przykład[[1:1]:[2:2]:[2]]
.źródło
J , 13 bajtów
Ponieważ J nie obsługuje tablic obdartych, każdy ciąg równych elementów jest zapakowany. Dane wejściowe to tablica wartości, a dane wyjściowe to tablica tablic pudełkowych.
Stosowanie
Wyjaśnienie
źródło
Dyalog APL , 9 bajtów
⊢
argument⊂⍨
podzielony na1
pierwszy element,,
a następnie2≠/
tam, gdzie kolejne pary różnią⊢
się argumentemźródło
Python 2, 43 bajty
Działa na listach booleanów. Przykład:
Iteruje przez listę wejściową, przechowując ostatnio widziany element. Pasek separatora jest drukowany przed każdym elementem innym niż poprzedni, sprawdzany jako mający xor bitowy równy
^
0. Inicjalizacjap=-1
pozwala uniknąć separatora przed pierwszym elementem.źródło
groupby
taki ból ...CJam, 9 bajtów
Dwa rozwiązania:
Sprawdź to tutaj.
Wyjaśnienie
Lub
źródło
Haskell, 22 bajty
Jest wbudowany. Działa na każdym typie, który obsługuje równość.
źródło
MATL,
87 bajtówUsunięto 1 bajt dzięki @Suever
Współpracuje z liczbami całkowitymi / zmiennoprzecinkowymi / znakami / booleanami / punktami jednorożca / innymi wymyślonymi danymi wejściowymi.
W przypadku wartości logicznych dane wejściowe są
T/F
, dane wyjściowe są1/0
.Wypróbuj online!
Zgrupowane i powtarzane
źródło
C #, 117 bajtów
bez golfa (niezupełnie)
źródło
Pyth,
97 bajtówKredyt @LeakyNun na 2 bajty!
Wyjaśnienie:
Stara odpowiedź, 12 bajtów
Zapomniałem o wbudowanej długości przebiegu, ale myślę, że jest to dobre podejście, więc je zachowałem.
Wyjaśnienie:
źródło
m
.Pyt ,
3635 bajtówLink testowy
Edycja: wyjaśnienie:
źródło
Siatkówka ,
2422 bajtów2 bajty dzięki Martinowi Enderowi.
15-bajtowy odpowiedź już istnieje, więc jest to po prostu inne podejście, które kosztuje więcej bajtów.
Wypróbuj online!
Dzieli się na spacje, których poprzedni numer różni się od postępowania.
To demonstracja spojrzeń.
źródło
05AB1E, 13 bajtów
Wyjaśnione
Powinien działać na dowolnej liście.
Testowane na int i char.
Wypróbuj online
źródło
Szybki, 43 bajty
Zakłada, że i jest tablicą równych obiektów; działa na wszystko od ints do ciągów znaków do niestandardowych obiektów. W pewnym sensie bezczelny, ponieważ dane wyjściowe zawierają wiele nowych wierszy, ale sprawienie, że ładniejszy kosztowałoby bajty.
Ładniejsza, nie golfowa wersja:
Ta wersja drukuje każdą grupę w nowym wierszu kosztem więcej kodu.
Pomysły na ulepszenia
Ta wersja ma 47 bajtów, ale to inne podejście, więc może jest coś, co można zoptymalizować? Największym problemem jest instrukcja return.
źródło
C,
8877 bajtówPrzeniesiono do
strmcmp
wewnątrzprintf
zapisywanie 11 bajtówStosowanie:
Przykładowe dane wejściowe:
(Parametry wiersza polecenia)
Przykładowe dane wyjściowe:
Testowane na:
Próbuję naprawić błąd segmentacji 5.3.0.
88 Wersja
źródło
Java 134 bajty
iteruje i decyduje, czy oddzielić nową linią, czy spacją.
źródło
public
istatic
słowa kluczowe. można również usunąć nawiasy klamrowe w pętli forListSharp , 134 bajty
ListSharp nie obsługuje funkcji, więc tablica jest zapisywana w lokalnym pliku o nazwie
l.txt
źródło
Rubinowy , 24 bajty
W
Array
instancjach ruby ma wbudowaną metodęgroup_by
Tak więc rozwiązaniem będzie:
źródło
TSQL, 132 bajty
To trochę różni się od innych odpowiedzi - sql nie ma tablic, oczywistym wejściem dla sql jest tabela.
Gra w golfa:
Nie golfowany:
Skrzypce
źródło
Perl 5 - 39 bajtów
źródło
Pyke, 2 bajty (niekonkurencyjny)
Obsługuje tylko liczby całkowite
Wypróbuj tutaj!
Dodano węzeł split_at, dzieli dane wejściowe, gdy 2. argument jest prawdziwy
źródło
sed,
3323 + 1 = 24 bajtyPotrzebuje
-r
opcji.Przykład użycia:
źródło
JavaScript (ES6), 56
Dane wejściowe: tablica liczb lub ciągów znaków
Dane wyjściowe: tablica tablic
Po raz pierwszy użyłem dokładnego porównania w kodzie golfowym
źródło
Clojure, 19 bajtów
Jest wbudowany, ale wymaga funkcji mapowania. W tym przypadku
+
służy jako funkcja tożsamości.źródło
JavaScript (przy użyciu zewnętrznej biblioteki) (178 bajtów)
Oświadczenie: Używam biblioteki, którą napisałem, aby zaimplementować LINQ z C # do JS. Nie pomogło mi to wygrać, ale no cóż
źródło