To ma być łatwy do gry w golfa kodowego.
Mek (minimalna wykluczona liczba) skończonego zbioru liczb jest najmniejsza nieujemną liczbę całkowitą 0, 1, 2, 3, 4, ...
, która jest nie pojawiają się w bazie. Innymi słowy, jest to minimum dopełnienia. Operacja mex ma kluczowe znaczenie dla analizy bezstronnych gier w kombinatorycznej teorii gier .
Twoim celem jest napisanie programu lub funkcji o nazwie, aby obliczyć mex przy użyciu jak najmniejszej liczby bajtów.
Wejście:
Lista liczb całkowitych nieujemnych w dowolnej kolejności. Może zawierać powtórzenia. Dla konkretności długość listy i dozwolony zakres elementów będą zawierać się między 0
i 20
włącznie.
Definicja „listy” tutaj jest elastyczna. Każda struktura reprezentująca zbiór liczb jest w porządku, o ile ma ustaloną kolejność elementów i umożliwia powtórzenia. Może nie zawierać żadnych informacji pomocniczych oprócz ich długości.
Dane wejściowe można traktować jako argument funkcji lub przez STDIN.
Wynik
Najmniejsza liczba wykluczona. Wydrukuj lub wydrukuj.
Przypadki testowe
[1]
0
[0]
1
[2, 0]
1
[3, 1, 0, 1, 3, 3]
2
[]
0
[1, 2, 3]
0
[5, 4, 1, 5, 4, 8, 2, 1, 5, 4, 0, 7, 7]
3
[3, 2, 1, 0]
4
[0, 0, 1, 1, 2, 2, 3]
4
[1, 0, 7, 6, 3, 11, 15, 1, 9, 2, 3, 1, 5, 2, 3, 4, 6, 8, 1, 18]
10
0
do20
, poprawne dane wyjściowe to 21. Dodam przypadek testowy. Tak, ustalony zakres zdecydowanie ułatwia, choć nadal można z niego korzystaćsys.maxint
lub2**64
gdybym go nie określił.Odpowiedzi:
Pyth , 6 bajtów
Przykładowy przebieg
Jak to działa
źródło
range(21)
), który jest uporządkowany. (Oznacza to również, że wyjaśnienie nie jest do końca dokładne. Pyth i Python 3 są dla mnie dość nowe).-
w Pyth jest w rzeczywistości filtrem - filtruje pierwszy argument na nieobecność z drugiego argumentu, a następnie konwertuje go do postaci pierwszego argumentu (ciąg, lista lub zestaw).h-U22Q
tak, aby dawało poprawne wyjście 21 na wejściu zawierającym pełny dopuszczalny zakres.CJam,
118 bajtówJak to działa:
Przykładowe dane wejściowe:
Wynik:
Wypróbuj online tutaj
źródło
J - 13 znaków
Bardzo proste działania w J, a zatem bardzo trudne do zmniejszenia.
i.@21
tworzy listę od 0 do 20 włącznie.-.
wykonuje set-odejmuje dane wejściowe z tej listy.0{
bierze pierwszy element tego, co zostało, tj. najmniejszą liczbę.f=:
definiuje nazwaną funkcję. W REPL:Od czasu wydania J806 w listopadzie 2017 r. Istnieje nowa składnia, która oszczędza nam jeden bajt, pozwalając nam używać
i.@21
starego(i.21)
w tym kontekście.źródło
f=:
?i.@21-.]
Zaoszczędzi 1 bajt.Golfscript 7
Dalsza gra w golfa w odpowiedzi Petera Taylora. Wiki społeczności, ponieważ nie mam przedstawiciela, który mógłby komentować jego post.
Różnica polega na użyciu znanego maksymalnego rozmiaru listy z pytania zamiast długości +1, aby zapisać znak i upuszczając nieistotne $.
Wypróbuj online
źródło
Burleska - 9 bajtów
Pobiera dane wejściowe ze standardowego wejścia w formacie {7 6 5 5 1 2 2 4 2 0}
Wyjaśniono:
Wypróbuj kilka przykładów:
{1 0 7 6 3 11 15 1 9 2 3 1 5 2 3 4 6 8 1 18} 20rzj \\ <]
{5 4 1 5 4 8 2 1 5 4 0 7 7} 20rzj \\ <]
źródło
{0 1 2}
, ponieważ potrzebujeszrz
jednego o więcej niż największej liczby. Po prostu idę prosto, aby20rzj\\<]
to naprawić i oszczędza znak.Bash + coreutils, 23 bajty
Zakłada to wejście jako
|
listę oddzieloną (potokiem). Na przykład:źródło
"(...)"
wokół$1
.Rubinowy, 32 bajty
Definiuje funkcję,
f
która ma być wywoływana za pomocą tablicy.źródło
f[[0, 1]]
(gdzie nawiasy zewnętrzne to składnia wywołania, a nawiasy wewnętrzne definiują tablicę).f=
?GolfScript (
109 bajtów)Pobiera dane wejściowe ze standardowego wejścia w formacie
[5 4 1 5 4 8 2 1 5 4 0 7 7]
.Demo online
źródło
;
łańcuch wejściowy nie powinien być liczony w samym programie?Xojo, 55 bajtów
źródło
Ruby, 22 lata
Wyjaśnienie
Array
odInteger
s.[0,1,2..20]
.Array
[0,1,2..20]
jest posortowany, pierwszym elementem musi być mex.źródło
20
instead of21
, because the input can only contain 20 elements.Haskell, 30
This works for lists of all size and lists beyond 20. This can be made 15 bytes long if Data.List is imported:
źródło
Scheme - 219
Not very competitive. But I like writing scheme :),
Here's the ungolfed code:
źródło
Python, 37 characters
źródło
range(21)
.f=lambda l,i=0:i in l and f(l,i+1)or i
is one char longer and the iterative solutioni=0;l=input()\nwhile i in l:i+=1\nprint i
is two chars longer (not storing the input makes it be taken repeatedly). Without the20
bound, I think these approaches would prevail.C# - 64 chars
Not alwaysRarely the best golfing language, but is easy to write and understand :)źródło
Scala, 18 bytes
l
is a list of Int.źródło
Java, 91 bytes
Try it online!
źródło
Java 7,
6966 bytes-3 bytes thanks to @LeakyNun
Explanation:
Supports not only 0-20, but 0-2147483647 instead (which actually saves bytes).
Test code:
Try it here.
Output:
źródło
APL (Dyalog), 19 bytes
Try it online!
I am probably missing out something important here. Golfing in progress...
źródło
TI-BASIC, 24 bytes
If
Prompt X
is given a list instead of a single number, it will automatically create a list namedX
that can be accessed withʟX
.źródło
Prompt X:0:While not(prod(ʟX-Ans:Ans+1:End:Ans
Stax, 6 bytes
Run and debug it
Explanation
źródło
APL (Dyalog Classic), 11 bytes
Try it online!
źródło
Jelly, 7 bytes
Another approach. Can be used in a chain with any arity, and doesn't need chain separator or anything.
Because the answer is guaranteed to be less than 256, this also works:
Jelly, 5 bytes
Try it online!
źródło
Powershell, 28 bytes
Test script:
Output:
Explanation:
$i
while the$args
array contains the integer value+$i
.+$i
.źródło
MathGolf,
54 bytesTry it online!
This solution is restricted to just the range 0 to 20, though this can be extended easily by increasing the initial range.
Explanation:
Alternatively, a 5 byte solution for all numbers:
Try it online!
Explanation:
źródło
Z
instead ofJ
because I was lazy).Perl - 34
Here's a subroutine.
Test with:
źródło
Java, 93
Ungolfed:
źródło
-1
for test case[]
.Cobra - 50
źródło
Javascript, 74
Nice and simple! Note the empty while loop.
źródło
JavaScript (E6) 35
Recursive function, array parameter in input and returning the
mex
. Not limited to 20Test in FireFox/FireBug console
Output
źródło
PHP, 38 Bytes
PHP, 39 Bytes
źródło