Biorąc pod uwagę tablicę liczb całkowitych:
- Zacznij od pierwszego numeru
- Przeskocz do przodu n pozycji, gdzie n jest wartością bieżącej pozycji
- Usuń bieżącą pozycję, czyniąc następną pozycję bieżącą pozycją.
- Idź do kroku 2, aż pozostanie jedna liczba
- Wydrukuj ten numer
Zasady
Tablica się zawija (następna liczba po ostatniej liczbie w tablicy jest pierwszą liczbą).
Zero usuwa się (oczywiście).
Liczby ujemne nie są dozwolone jako dane wejściowe.
Przypadki testowe
[1] => 1
[1,2] => 1
[1,2,3] => 3
[1,2,2] => 1
[1,2,3,4] => 1
[6,2,3,4] => 4
[1,2,3,4,5] => 5
[0,1] => 1
[0,0,2,0,0] => 0
Przykład krok po kroku
[1,4,2,3,5]
^ start from the first position
^ jump 1 position (value of the position)
[1, 2,3,5] remove number in that position
^ take next position of the removed number (the 'new' 'current' position)
^ jump 2 positions
[1, 2,3 ] remove number in that position
^ take next position (looping on the end of the array)
^ jump 1 position
[1, 3 ] remove number in that position
^ take next position (looping)
^ jump 3 positions (looping on the end of the array)
[ 3 ] remove number in that position
print 3
Przykład nr 2
[4,3,2,1,6,3]
^ start from the first position
^ jump 4 positions
[4,3,2,1, 3] remove number in that position
^ take next position
^ jump 3 positions
[4,3, 1, 3] remove number in that position
^ take next position
^ jump 1 positions
[4,3, 1 ] remove number in that position
^ take next position
^ jump 4 positions
[4, 1 ] remove number in that position
^ take next position
^ jump 1 position
[ 1 ] remove number in that position
print 1
To jest golf golfowy , wygrywa najkrótsza odpowiedź w bajtach!
code-golf
array-manipulation
przepływ pracy
źródło
źródło
Odpowiedzi:
Łuska , 7 bajtów
Zwraca wynik jako listę singletonów
Wypróbuj online!
Wyjaśnienie
źródło
Haskell ,
545048 bajtówWypróbuj online!
Wyjaśnienie:
f[x]=x
: Jeśli podana lista jest listą pojedynczą, zwróć jej element.f(x:r)=f$ ...
: W przeciwnym razie rekurencyjnie stosujef
się do następującej listy:cycle$x:r
),x+1
usuniętymi pierwszymi elementami (drop(x+1)$
),r
. (snd<$>zip r
jest krótszą alternatywą dlatake(length r)
).Poprzednia 54 bajtowa wersja:
Wypróbuj online!
źródło
Rubinowy , 37 bajtów
Zmienia tablicę w miejscu, która wydaje się być akceptowalna jako wynik. Wypróbuj online!
źródło
MATL , 21 bajtów
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
Python 3 ,
5451 bajtówDane wyjściowe to lista singletonów.
Wypróbuj online!
źródło
CJam , 15 bajtów
Wypróbuj online!
Wyjaśnienie
Zamiast śledzić wskaźnik, po prostu zmieniam tablicę cyklicznie, aby bieżący element był zawsze z przodu.
Zabawna alternatywa, która niestety nie oszczędza żadnych bajtów:
źródło
Brain-Flak , 88 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Python 2 , 55 bajtów
Wypróbuj online!
Wypisuje jako listę singletonów, domyślnie dozwoloną . Zaoszczędziłem kilka bajtów dzięki Dennisowi , przypominając mi, że modyfikowanie argumentu funkcji jest dozwolone.
Jak to działa
def f(a)
- Definiuje funkcję z parametrema
.while a[1:]:
- Podczasa
gdy pierwszy usunięty element jest prawdą, uruchom blok kodu, aby śledzić. Lista zawierająca co najmniej jeden element jest zgodna z prawdą, a puste listy są w Pythonie fałszywe, dlatego przestanie być wyświetlane, gdya
osiągnie długość 1.l=a[0]%len(a)
- Weź pierwszy element i uzyskaj pozostałą część jego podziału o długościa
. Przypisz wynik dol
.a[:]=a[-~l:]+a[:l]
- Obróć elementya
w lewol
i usuń pierwszy, przypisując goa
na miejscu.Python 2 , 63 bajty
Wypróbuj online!
Chociaż dłużej wydaje się to bardziej eleganckie. Również dzięki ovs za pomoc w czacie.
źródło
a,*b=input()
(python3) i zaoszczędzić kilka bajtów? Nie jestem jednak pewien, jak to by wpłynęłol
i kawałekGalaretka , 7 bajtów
Wypróbuj online!
Pełny program
źródło
ḷ/
cholernie sprytne.Galaretka , 9 bajtów
Wypróbuj online!
-2 bajty dzięki user202729
Wyjaśnienie
źródło
Python 3 , 60 bajtów
Wypróbuj online!
-3 bajty dzięki ovs
źródło
APL (Dyalog) ,
2018 bajtówWypróbuj online!
źródło
Mathematica, 36 bajtów
używa algorytmu Martina
-5 bajtów od Miszy Ławrow && Martin Ender
Wypróbuj online!
źródło
#//.{x_,y__}:>Rest@RotateLeft[{x,y},x]&
. (To się kończy, gdy jest tylko jeden element, ponieważ{a}
nie pasuje już do wzoru{x_,y__}
.)y
, wywołując całą listę,l
a następnie używającl
zamiast{x,y}
.#//.l:{x_,__}:>Rest@RotateLeft[l,x]&
?J ,
2117 bajtów-4 bajty dzięki FrownyFrog
Wypróbuj online!
Oryginał:
([:}.{.|.])^:(1<#)^:_
Jak to działa:
^:_
powtarzaj, aż wynik przestanie się zmieniać^:(1<#)
jeśli długość listy jest większa niż 1{.|.]
obróć listę w lewo o jej pierwszą pozycję razy[:}.
upuść pierwszy element i zakryj widelecWypróbuj online!
źródło
JavaScript (ES6),
5460 bajtówZapisano 1 bajt dzięki wersji @Shaggy
Naprawiono (+6 bajtów)
Modyfikuje tablicę wejściową , która jest zredukowana do singletonu.
Przypadki testowe
Pokaż fragment kodu
W jaki sposób?
Rekurencyjnie stosujemy algorytm opisany w wyzwaniu. Tylko warunek zatrzymania
1/a
może wydawać się nieco dziwny. Podczas stosowania operatora arytmetycznego:NaN
i1/NaN
równieżNaN
(fałsz).1/0 = +Infinity
lub1/N = positive float
dla N> 0 (obie prawdy).źródło
splice
modyfikuje oryginalną tablicę, możesz zrobićf=(a,p=0)=>1/a||f(a,p=p+a[p]%a.length,a.splice(p,1))
dla 52 bajtówf=(a,p=0)=>1/a?a:f(a,p=(p%a.length+a[p%a.length])%a.length,a.splice(p,1))
jest w porządku, ale można go zoptymalizowaćp+a[p]
można usunąć. Co - oczywiście - nie jest prawdą. Dziękujemy za zgłoszenie tego!Julia 0,6 ,
4642 bajtówWypróbuj online!
Prosta rekurencyjna wersja Julii.
x[]
uzyskuje dostęp do pierwszego elementu x.źródło
Java 8, 79 bajtów
Ta lambda akceptuje a
Stack<Integer>
i zwraca anint
lubInteger
.Wypróbuj online
Bez golfa
Podziękowanie
źródło
i%=s
może zostać usunięty, jeśli zostaniel.get(i)
zmieniony przezl.get(i%s)
Pyth , 9 bajtów
Wypróbuj tutaj!
Powoduje to wyświetlenie wyniku jako listy singletonów, co jest domyślnie dozwolone .
Jak to działa
Uwaga: jeśli nie chcesz widzieć tych nawiasów, po prostu dodaj
h
lube
przed całym kodem.źródło
Szybki , 87 bajtów
Zwraca jako listę singletonów , modyfikując dane wejściowe . Wypróbuj online!
Wyjaśnienie
źródło
Perl 6 ,
4645 bajtów(-1 bajt dzięki Brad Gilbert)
Wypróbuj online!
($_, { ... } ... 1)
generuje sekwencję list, zaczynając od listy wejściowej$_
, przy czym każdy kolejny element jest generowany przez wyrażenie nawiasu klamrowego i kończąc się, gdy lista inteligentnych dopasowań1
--ie, ma długość 1.[* - 1]
Końcowy element otrzymuje ostatni element, a ostatni[0]
usuwa jedyny element z tej listy singletonów.(|$_ xx *)
generuje płaską, nieskończenie replikowaną kopię bieżącego elementu. Ta lista jest indeksowana zakresem,.[0] + (1 ..^ $_)
aby wyodrębnić następną skończoną listę w serii.źródło
[*-1][0]
można połączyć w[*-1;0]
zapisanie bajtu. Również1..$_-1
lepiej jest napisać, ponieważ1..^$_
ponownie zapisuje bajt.[*-1;0]
, ale wydaje się, że nie jest to jakoś równoważne. Następnie funkcja zwraca listę zamiast liczby.1..^$_
optymalizacjiPerl 5 ,
474341 + 2 (-ap
) = 43 bajtyWypróbuj online!
Pobiera dane wejściowe jako liczby oddzielone spacjami.
źródło
$x%=@F,splice@F,$x=($x+$F[$x])%@F,1while$#F;$_="@F"
Haskell , 56 bajtów
Wypróbuj online!
źródło
Python 3 ,
5756 bajtówWypróbuj online!
źródło
Java 8 , 325 bajtów
Gra w golfa:
Nie golfowany:
źródło
static
tutaj liczyć słów kluczowych. Zazwyczaj rozwiązania oparte na wielu metodach są implementowane jako niestatyczne elementy klasy imain
tworzą instancję do testowania. Ponadto, jeśli robisz to w ten sposób, wspierasz Javę 7 i możesz ją przesłać jako rozwiązanie „Java”. W celu przyszłego wykorzystania format wejściowy jest tutaj dość elastyczny, więc możesz na przykład wybrać wejście jakoList
(co jest dość pomocne w przypadku tego problemu).APL + WIN, 36 bajtów
Wyjaśnienie:
Monity o wprowadzenie ekranu.
źródło
Python 2, 61 bajtów
źródło
JavaScript,
585659 bajtówZwraca wynik jako jedyny element pozostający w tablicy wejściowej, która jest aktualizowana na miejscu.
Dwa bajty zapisane przy użyciu instrukcji rozdzielanej przecinkami zamiast instrukcji blokowej w treści pętli for! Utracono trzy bajty, aby pominąć element usunięty na końcu tablicy (:
Mniej golfa:
źródło
[3, 5, 7, 9]
.[3,5,7,9]
. Oczekiwana wartość 5Brain-Flak , 104 bajty
H.PWiz ma krótszą odpowiedź tutaj , że pomogłem zrobić, należy to sprawdzić.
Wypróbuj online!
Wyjaśnienie
źródło
Czysty , 78 bajtów
Używa tej samej metody, co odpowiedź Haskell Laikoni .
Wypróbuj online!
źródło
R , 111
117126bajtówDzięki @Giuseppe za grę w golfa poza 11 bajtami, przechodząc do pętli while, otrzymałem kolejne 4, usuwając funkcję i bezpośrednio czytając dane wejściowe użytkownika.
Nie czuję się dobrze z tym, co trzeba, aby tam dotrzeć - jestem pewien, że istnieje bardziej eleganckie rozwiązanie.
Wypróbuj online!
Nieskluczony kod
źródło
f=
należy podać nazwęwhile
myślę, że jest to potencjalnie 1-3 bajty krótsze z pętlą.while
pętląf=
części funkcji rekurencyjnej. :(