Zadanie
W tym wyzwaniu twoja wejściowa informacja jest niepustą listą liczb całkowitych dodatnich, podaną w natywnym formacie twojego języka. Twój wynik to ta sama lista, w tym samym formacie, z usuniętymi niektórymi elementami. Usuniesz każde wystąpienie 1
, każde drugie wystąpienie 2
, co trzecie wystąpienie 3
i tak dalej. Zasadniczo dla każdej dodatniej liczby całkowitej N
należy usunąć każde N
wystąpienie N
z listy, zaczynając od N
tego wystąpienia.
Przykład
Rozważ listę danych wejściowych
[3,2,6,1,1,6,2,3,2,6,6,6,6,1,6,6,3,3,7,2]
Najpierw usuwamy każde wystąpienie 1
:
[3,2,6, 6,2,3,2,6,6,6,6, 6,6,3,3,7,2]
Następnie co drugie wystąpienie 2
:
[3,2,6, 6, 3,2,6,6,6,6, 6,6,3,3,7 ]
Następnie co trzecie wystąpienie 3
:
[3,2,6, 6, 3,2,6,6,6,6, 6,6, 3,7 ]
Liczby 4
i 5
nie pojawiają się na wejściu, więc można je pominąć. Następnie usuwamy co szóste wystąpienie 6
:
[3,2,6, 6, 3,2,6,6,6, 6,6, 3,7 ]
Występuje tylko jedno wystąpienie 7
, więc można je również pominąć. Zatem prawidłowe wyjście to
[3,2,6,6,3,2,6,6,6,6,6,3,7]
Zasady i punktacja
Możesz napisać pełny program lub funkcję. Wygrywa najniższa liczba bajtów, a standardowe luki są niedozwolone.
Przypadki testowe
[1] -> []
[2] -> [2]
[1,1,1] -> []
[2,2,2] -> [2,2]
[1,1,2,2,2,3,3,3,3] -> [2,2,3,3,3]
[1,2,3,1,2,3,1,2,3,1,2,3] -> [2,3,3,2,3]
[3,2,6,1,1,6,2,3,2,6,6,6,6,1,6,6,3,3,7,2] -> [3,2,6,6,3,2,6,6,6,6,6,3,7]
[5,4,5,4,3,5,4,5,4,5,4,3,5,4,5,3,3,3,4,5,4,5,4,5,4,3,3,3,5,4] -> [5,4,5,4,3,5,4,5,4,3,5,4,5,3,3,4,5,5,4,4,3,3,5,4]
[6,4,5,8,2,9,3,1,8,5,3,5,5,6,3,5,1,2,3,9,3,5,8,7,5,9,1,3,4,8,2,3,4,7,8,5,8,5,3,1] -> [6,4,5,8,2,9,3,8,5,3,5,5,6,3,9,3,5,8,7,5,9,4,8,2,3,4,7,8,5,8,5,3]
[4,4,9,12,9,4,4,4,12,9,12,9,12,4,12,4,4,9,4,9,12,4,12,4,4,12,4,4,9,12,9,12,9,4,9,12,4,9,12,9,12,9,4,9,12,12,4,4,12,4] -> [4,4,9,12,9,4,4,12,9,12,9,12,4,12,4,9,4,9,12,4,12,4,12,4,4,9,12,9,12,4,9,12,9,9,12,9,4,9,12,12,4,4,12]
[2,2,11,11,11,11,6,2,2,6,6,2,2,2,2,6,11,6,11,11,2,11,2,6,6,11,2,11,6,2,6,6,6,6,6,11,2,11,11,6,6,6,11,6,2,6,2,6,6,2,11,2,2,11,11,11,11,2,6,2] -> [2,11,11,11,11,6,2,6,6,2,2,6,11,6,11,11,2,11,6,11,2,11,6,6,6,6,6,2,11,11,6,6,6,11,6,2,6,6,11,2,11,11,11,11,2,6]
[20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102] -> [20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,100,101,102,20,22,100,101,102,20,21,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,100,101,102,20,21,22,100,101,102,20,22,100,101,102,20,21,22,100,101,102,20,21,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,101,102,20,21,22,100,102,20,21,22,100,101,20,21,22,100,101,102,20,21,22,100,101,102,20,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,100,101,102]
Tabela liderów
Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka. Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
## Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz dołączyć wiele liczb do nagłówka, upewnij się, że faktyczny wynik jest ostatnią liczbą w nagłówku:
## Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
=
porównuje liczby całkowite. Na przykład[3,2,1]=;\
porównuje się3
z elementem[3]
,2
z[3, 2]
i1
z[3, 2, 1]
, dawania[1, [0, 1], [0, 0, 1]]
.awk, 10 bajtów
Dane wejściowe są oczekiwane na STDIN, jedna liczba na linię.
Wyjaśnienie
Utrzymuje licznik dla każdej liczby w tablicy asocjacyjnej, drukuje tylko wtedy, gdy modulo wartości licznika
n
nie jest równe zero. Drukowanie jest niejawne. Długa wersja:źródło
Pyth,
181514109 bajtówMyślę, że to pierwszy kod, który napisałem, który ma pięć kolejnych odwołań do zmiennych w dziewięciu bajtach.
Chciałbym, żeby rozwiązanie do manipulacji tablicą (
u.DG%HgxHGH{QQ
14 bajtów) nie było tak długie.Wypróbuj tutaj .
źródło
Python, 57 bajtów
źródło
Perl 6 , 28 bajtów
Stosowanie:
Dokładnie sprawdź, czy wyrzucane są właściwe elementy
źródło
Poważnie,
2217 bajtówHex Dump:
Wypróbuj online
Wyjaśnienie:
źródło
JavaScript ES6, 34 bajty
Okazało się, że jest taki sam jak algorytm Perla Brada.
Edycja: Zapisano 2 bajty dzięki @ edc65.
źródło
a=>a.filter(v=>f[v]=-~f[v]%v,f=[])
Mathematica,
403836 bajtówJest to nienazwana funkcja przyjmująca i zwracająca a
List
. Definiuje nazwaną funkcjęf
podczas wykonywania (aby śledzić liczby), ale dba o wcześniejsze zresetowanie odpowiednich definicjif
.Wyjaśnienie
Sposób działania funkcji (lub definicji funkcji) w Mathematica jest naprawdę potężny. Podobnie jak w przypadku Haskell (na przykład) funkcje nie mogą być przeciążone i zdefiniowane tylko dla niektórych typów, ale także dla poszczególnych wartości (lub w rzeczywistości dowolnych wzorów argumentów). Ale jest nawet mocniejszy niż Haskell, ponieważ a) wartości te można zdefiniować jako skutki uboczne podczas przepływu kontrolnego ib) wartości można również w dowolnym momencie przedefiniować. Oznacza to, że funkcje są w rzeczywistości dość potężnymi tabelami odnośników (które mogą opcjonalnie obliczyć szukaną wartość zamiast po prostu ją przechowywać).
Jeśli usuniemy golfitude z kodu, wyglądałoby to trochę tak:
Najpierw zapętlamy dane wejściowe i definiujemy
f[x] = x
dla wszystkichx
na liście.f
zostaną ostatecznie wykorzystane do śledzenia, jak często każda liczba pojawia się już na liście. Dlaczego nie liczymy0
? Pętla nad listą toMap
.f[x] = y
Zwraca wyrażeniey
(oprócz przechowywania definicji funkcji). Ustawiającf[x]
nax
, mapa będzie oceniać samą listę danych wejściowych. To oszczędza dwa bajty, ponieważ wtedy nie musimylist
ponownie podawać tego wprostSelect
. Rozpoczęcie odx
zamiast w0
ogóle nie wpływa na obliczenia, ponieważ jesteśmy tylko zainteresowaniMod[f[x], x]
.(Zwykle możemy po prostu użyć czegoś w rodzaju
f[_] = 0
definicji rezerwowej, aby tego uniknąćMap
, ale nie wiemy, czy nasza funkcja była wcześniej używana, co pozostawiłoby pewne wcześniejsze zdefiniowane wartości, które mogłyby popsuć nasze liczenie.)Następnie
Select
filtruje listę, zachowując tylko te elementy, w których przekazano funkcję bez nazwy, gdy pojawia się drugi argumentTrue
. Ta funkcja najpierw zwiększa wartośćf[x]
(gdziex
jest bieżącym elementem listy), aby policzyć wystąpienia, a następnie pobiera wynikowy moduł modulox
. Chcemy odrzucić wszystkie elementy, w których to daje0
.źródło
CJam, 17 bajtów
Po prostu pobij ... J? Nie jestem pewien, jakie są moje oczekiwania w związku z tym wyzwaniem. Zauważ, że
""
CJam reprezentuje pustą tablicę.Wypróbuj online | Zestaw testowy (ostatni przypadek jest za długi dla bezpośredniego łącza)
Wyjaśnienie
źródło
JavaScript ES6, 55 bajtów
Wyjaśnienie
źródło
J, 18 bajtów
Stosowanie:
Dość prosta metoda. Liczymy wystąpienia liczby do niej i wybieramy liczbę tylko wtedy, gdy liczba dzieli liczbę.
Więcej wyjaśnień pojawi się później.
Wypróbuj online tutaj.
źródło
PowerShell, 56 bajtów
Używa podobnej sztuczki pomocniczej jak odpowiedź Rainera P , którą opracowałem niezależnie, ale najwyraźniej dostałem FGITW.
Pobiera dane wejściowe jako tablicę z
param($a)
. Następnie tworzymy naszą tablicę pomocniczą$b
jako tablicę wypełnioną zerami za pomocą operatora przecinka w połączeniu z przeciążonym operatorem mnożenia. Tworzy$b
to być równa@(0,0,0...0)
z$b.length
równą maksymalnej liczbie w$a
.(Quick wtyczka do mojego „Zaprezentuj swój język” odpowiedź gdzie opiszę to szczegółowo)
Następny jest nasz wynik. Pętlimy każdy element naszej tablicy wejściowej,
$a|%{...}
a każda pętla sprawdzaif
instrukcję. Warunkowe wstępne zwiększenie wartości w naszej tablicy pomocniczej, która odpowiada bieżącemu elementowi, a następnie sprawdza, czy jest to wielokrotność bieżącego elementu z operatorem modulo. Jeśli jest wielokrotnością,%
będzie równa0
falsey, więcif
nie wykonuje się. W przeciwnym razie wyprowadzamy bieżący element.Wykorzystuje niejawne rzutowanie typów, aby zaoszczędzić na formatowaniu wyjściowym. Jeśli funkcja lub program zwraca wiele elementów, a wyniki są zapisywane w zmiennej, PowerShell dynamicznie utworzy tę zmienną jako tablicę. Przykład:
źródło
R,
110989992 bajtówEdytuj kompletne przepisywanie naprawia błąd w przypadku testowym 2/3 Edytuj 2 Zapisz 7 bajtów dzięki @ Alex-A
źródło
function(a){for(i in 1:max(a))for(j in seq_along(b<-which(a==i)))if(j%%i<1)a[b[j]]=0;a[a>0]}
MATL , 20 bajtów
Używa bieżącej wersji (10.2.1) języka / kompilatora.
Wypróbuj online!
Wyjaśnienie
źródło
R, 63 bajty
źródło
C #, 224 bajty
Ten kod używa rekurencji. Z
using
instrukcjami, które mają 224 bajty (160 dla samego kodu metody).Wypróbuj online.
źródło
for(int i=0,t=0;i<l.Count;i++)if(l[i]==n&&++t==n)l[i]=t=0;
System.Linq
następnie!l.Any()
jest krótszy niżl.Count<1
, który jest krótszy niżl.Count==0
.w != 0 && w !=1
zw > 1
.C # - 177 bajtów
Bez golfa
źródło
Mathematica, 63 bajty
Całkiem interesujące dla golfa! Zignoruj pojawiające się od czasu do czasu wiadomości.
źródło
Rubin, 120 bajtów
źródło
TI-BASIC, 47 bajtów
Wykorzystuje to fakt, że na nowym kalkulatorze
L₁
jest inicjowany i czyszczony. Zauważ, że próba wyświetlenia pustej listy w TI-BASIC powoduje błąd.źródło
APL, 16 znaków
Po angielsku:
,\⍵
: wektor prefiksów wektora aż do n-tego elementu argumentu+/¨⍵=
: na wektor przedrostka, policz, ile jest równych n-temu samemu elementowi×⍵|
: znaki modów (czyli: 0, jeśli pozostała część podziału to 0, w przeciwnym razie 1)⍵/⍨
: argumentu zachowuje tylko element, w którym mod wynosi 0źródło
Rakieta 179 bajtów
Nie golfowany:
Testowanie:
Wynik:
źródło