Celem tego wyzwania jest pobranie szeregu liczb całkowitych dodatnich i policzenie jego wskaźników, grupując podobne elementy.
Wyliczenie bez duplikatów wykonuje się po prostu przez wyprowadzenie tablicy par (value, index)
, na przykład [3, 4, 13, 9, 2]
=> [[3,1],[4,2],[13,3],[9,4],[2,5]]
.
Jeśli jednak dany element pojawia się po raz drugi, nie otrzymuje własnej pary, ale jest dodawany do grupy swojego pierwszego wystąpienia. Jeżeli w naszym przykładzie zastąpiliśmy 9 z 3, a następnie na wyjściu chcielibyśmy usunąć [9,4]
i zastąpić [3,1]
z [3,1,4]
.
W danych wyjściowych grupy muszą być uporządkowane według ich pierwszego wystąpienia, a indeksy muszą być w porządku rosnącym. Element musi być pierwszy w grupie, przed jego indeksami. Dane wyjściowe mogą być indeksowane 0 lub 1. Możesz założyć, że tablica ma co najmniej jeden element.
Przypadki testowe:
Input | Output (One-indexed)
[3, 2, 2, 3] | [[3, 1, 4], [2, 2, 3]]
[17] | [[17, 1]]
[1, 1] | [[1, 1, 2]]
[1, 1, 2] | [[1, 1, 2], [2, 3]]
[1, 2, 3, 4] | [[1, 1], [2, 2], [3, 3], [4, 4]]
[1, 1, 1, 1] | [[1, 1, 2, 3, 4]]
To jest golf golfowy , wygrywa najmniej bajtów!
[[17,"1"]]
? (Nie wiem jeszcze, czy mogę w ten sposób zapisać jakieś bajty, wciąż nad tym pracuję!)[[3, [1, 4]], [2, [2, 3]]]
zamiast tego wyprowadzić coś takiego ?Odpowiedzi:
Dyalog APL, 5 bajtów
Wypróbuj online!
,⌸
na 2 bajty prawie działa, ale ma końcowe zera: /źródło
⌸
?,⌸
końcowymi zerami i zerami nigdy nie będzie na wejściu, czy byłoby możliwe usunięcie wszystkich zer z mniej niż 3 bajtów?J , 12 bajtów
Zero indeksowane.
Wypróbuj online!
Jeśli potrafisz usunąć całą pracę, którą wykonuję z polami, prawdopodobnie możesz znacznie zmniejszyć liczbę bajtów. Zobaczę, czy mogę to rozgryźć.
Wyjaśnienie
Jest to prawdopodobnie zbyt wcześnie, aby to tłumaczyć (powinno być więcej golfów).
źródło
05AB1E , 10 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Python 3 ,
8382 bajtów-1 bajt dzięki Mego
Wypróbuj online!
źródło
j+1
->j
(indeksy mogą być zindeksowane)Haskell , 48 bajtów
Wypróbuj online!
źródło
Attache , 15 bajtów
Wypróbuj online!
Jest to interesujący przypadek
=>
postaci operatoraMap
. Gdy podano dwa argumenty funkcjonalnef
ig
,Map
zwraca funkcjęf => g[x]
ponadx
. Oznacza to, że RHS jest stosowany do danych wejściowych, a następnie LHS jest mapowany.Wbudowane
Positions
generuje tablicę reprezentującą grupowanie wpisów według indeksów. Domyślnie, gdy nie zostanie dostarczony drugi argument,Positions
użyje pierwszego argumentu.Flat
jest następnie mapowany na każdy element, ponieważ tego właśnie wymaga pytanie.Alternatywne rozwiązania
31 bajtów
Wypróbuj online!
Dość krótka, niewbudowana alternatywa.
MapArgs
jest funkcją podobną do tejMap
, z tą różnicą, że można do niej wstawić dodatkowe argumenty. Na przykładMapArgs[{_1 + _2}, 1..3, 3]
jest[4, 5, 6]
. PodobnieMap
, staje się curry, gdy zostanie dostarczony z dwoma argumentami funkcjonalnymi. Mapowana funkcjaConcat#~Indices
to rozwidlenie. Ten widelec jest stosowany doUnique
elementów wejścia i samego wejścia. Przekłada się to naConcat[_, Indices[_2, _]]
(wraz z argumentamiIndices
zamiany~
), który paruje element odwzorowywany (_
) z indeksami tego elementu_
w tablicy wejściowej, która jest_2
(tak jak ffedMapArgs
).43 bajty
Wypróbuj online!
To naprawdę tylko bardziej pełna (jeszcze odrobinę bardziej czytelna) kombinacja rozwiązań nr 1 i nr 2.
źródło
Galaretka , 6 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Pyth , 7 bajtów
0-indeksowane.
Wypróbuj tutaj! Alternatywny.
W jaki sposób?
źródło
MATL , 8 bajtów
Wypróbuj w MATL Online
Wyjaśnienie
źródło
&f
ale nigdy nie działało.Właściwie 24 bajty
Wypróbuj online!
Wyjaśnienie:
źródło
R , 56 bajtów
Wypróbuj online!
To moja pierwsza próba kodegolfa, więc wszelkie opinie są mile widziane!
źródło
x
, ale musi istnieć sposób odczytu danych wejściowych - zazwyczaj używamyscan
lub definiujemy funkcję. Dodatkowo musi generować dane wyjściowe, więc musiałbym zawinąć to w aprint
lub acat
.Wolfram Language (Mathematica) , 40 bajtów
Oszczędność bajtu dzięki Martinowi Enderowi.
Wypróbuj online!
źródło
@*PositionIndex
działa@*
to kompozycja funkcji.PositionIndex
w zasadzie wykonuje całą pracę, ale zwraca skojarzenie zamiast listy.{#,##&@@#2}&
zapisuje bajt.JavaScript (ES6), 64 bajty
0 zindeksowanych
Uwaga: zakłada się, że liczby wejściowe są dodatnie, więc v> 0
Test nieznacznie zmodyfikowany (1 indeksowany) w celu dopasowania do przypadków testowych
źródło
APL NARS, 24 bajty, 12 znaków
-4 bajty dzięki testowi Adama:
źródło
{∪⍵,¨⍸¨⍵=⊂⍵}
SWI-Prolog ,
165117 bajtów-48 bajtów dzięki wskazówkom golfowym Prolog .
Wypróbuj online!
Wyjaśnienie
źródło
K (oK) , 10 bajtów
Rozwiązanie:
Wypróbuj online!
Przykłady:
Wyjaśnienie:
Ocena jest przeprowadzana od prawej do lewej. Nadal uważam, że jest to możliwe do gry w golfa ...
Uwagi:
x
,(,/)'+(!;.)@'=
, zrezygnował z tego podejścia ...źródło
1+
.Julia 0.6 , 37 bajtów
Dzięki Pavel za 1 bajt off.
Wypróbuj online!
źródło
]
ifor
dla -1 bajtu.JavaScript (ES6), 68 bajtów
0-indeksowane.
Przypadki testowe
Pokaż fragment kodu
źródło
PHP 4.1, 88 bajtów
Tak, jest dość długi.
Zakłada to domyślny
php.ini
plik (short_open_tag = On
iregister_globals = On
).Przedstawia tablicę w sposób czytelny dla człowieka.
Wartości mogą być przekazywane przez POST, GET i COOKIE, wewnątrz klawisza „A”.
W przypadku nowoczesnej wersji można użyć (90 bajtów):
Wynik jest taki sam, z tym wyjątkiem, że wszystkie wartości muszą zostać przekazane przez parametry GET wewnątrz klawisza „A”.
źródło
Perl 6 ,
6361 bajtówPrzetestuj (0-oparte)
Przetestuj (ten sam algorytm oparty na 0)
Rozszerzony:
źródło
Japt ,
149 bajtów0-indeksowane.
Spróbuj
źródło
PHP 7.4+ , 71 bajtów
* 73 bajty, aby podać
$_GET
klucz i uniknąć ostrzeżeń.Snippet: ( Demo )
W oparciu o rep, zakładam, że IsmaelMiguel zna najlepszy sposób na publikowanie kodu php w tej społeczności, więc buduję z jego podstaw . Nie jest dla mnie jasne, czy
<?
ma zostać uwzględniony / zliczony w moim fragmencie . Ponieważ jest to mój post panieński, cieszę się, że każdy może wyjaśnić, czy istnieje niepotrzebna składnia. ps Przeczytałem także Wskazówki dotyczące gry w golfa w PHP, które wydają mi się doskonałym kandydatem do migracji do Meta .Ulepszenia wprowadzone we fragmencie Ismaela to:
array_values()
ponownego indeksowania danych wyjściowych.źródło
Czysty ,
6160 bajtówWypróbuj online!
Wyjście jest indeksowane na 0
źródło
Kotlin , 83 bajty
Upiększony
Test
TIO
TryItOnline
źródło
i
to predefiniowania zmiennej . Możesz to zrobić, konwertując go na lambda, która przyjmuje parametri
.Swift 4, 107 bajtów
... Yikes.
Nie golfowany:
Szkoda, że słownik traci porządek, co zmusza mnie do marnowania tylu znaków na ponowne sortowanie. Ten rodzaj nadużycia ukrytych argumentów zamykających (
$0
,$1
...) i ukrytych członków krotki (.0
,.1
...) jest uhhhhh nie całkiem.źródło
Perl 5 , 63 + 1 (
-a
) = 64 bajtyWypróbuj online!
źródło
Rubin ,
5452 bajtyTa wersja pozwala na zero (53 bajtów):
Wypróbuj online!
źródło
nil
nie jest dodatnią liczbą całkowitą.