Pretende-se ser um código de golfe fácil e pequeno.
O mex (número mínimo excluído) de uma coleção finita de números é o menor número inteiro não negativo 0, 1, 2, 3, 4, ...
que não aparece na coleção. Em outras palavras, é o mínimo do complemento. A operação mex é central para a análise de jogos imparciais na teoria combinatória dos jogos .
Seu objetivo é escrever um programa ou função nomeada para calcular o mex usando o mínimo de bytes possível.
Entrada:
Uma lista de números inteiros não negativos em qualquer ordem. Pode conter repetições. Para concretização, o comprimento da lista e o intervalo permitido de elementos serão entre 0
e 20
inclusive.
A definição de "lista" aqui é flexível. Qualquer estrutura que represente uma coleção de números é boa, desde que tenha uma ordem fixa de elementos e permita repetições. Não pode incluir nenhuma informação auxiliar, exceto seu comprimento.
A entrada pode ser tomada como argumento de função ou através de STDIN.
Resultado
O menor número excluído. Saída ou imprima.
Casos de teste
[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
para20
, a saída correta será 21. Vou adicionar um caso de teste. Sim, o alcance fixo definitivamente facilita, embora ainda se possa usar sem dúvidasys.maxint
ou2**64
se eu não o especificou.Respostas:
Pitão , 6 bytes
Exemplo de execução
Como funciona
fonte
range(21)
), que é ordenado. (Isto também significa a explicação não é inteiramente correta Pyth e Python 3 são ambos bastante novo para mim..)-
em Pyth , na verdade, é um filtro - ele filtra o primeiro argumento por ausência do segundo argumento e depois o converte na forma do primeiro argumento (string, lista ou conjunto).h-U22Q
assim, para fornecer a saída correta de 21 na entrada que contém toda a faixa permitida.CJam,
118 bytesComo funciona:
Entrada de amostra:
Resultado:
Experimente online aqui
fonte
J - 13 car
Ações muito simples em J e, portanto, muito difíceis de diminuir.
i.@21
cria uma lista de 0 a 20 inclusive.-.
executa set-subtrai a entrada desta lista.0{
pega o primeiro elemento do que resta, ou seja, o menor número.f=:
define uma função nomeada. No REPL:Desde o lançamento do J806 em novembro de 2017, existe uma nova sintaxe que economiza um byte, permitindo o uso
i.@21
do antigo(i.21)
neste contexto.fonte
f=:
?i.@21-.]
, economizaria 1 byte.Golfscript 7
Uma versão mais avançada da resposta de Peter Taylor. Wiki da comunidade, pois não tenho o representante para comentar sua postagem.
A diferença é usar o tamanho máximo da lista conhecido da pergunta em vez do tamanho +1 para salvar um personagem e eliminar o $ irrelevante.
Experimente online
fonte
Burlesco - 9 bytes
Recebe entrada de stdin no formato {7 6 5 5 1 2 2 4 2 0}
Explicado:
Tente alguns exemplos:
{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 \\ <]
fonte
{0 1 2}
, porque você precisa derz
um a mais que o maior número. Apenas indo direto para20rzj\\<]
corrigir isso e salva um caractere.Bash + coreutils, 23 bytes
Isso pressupõe a entrada como uma
|
lista separada (canal). Por exemplo:fonte
"(...)"
torno do$1
.Ruby, 32 bytes
Define uma função
f
a ser chamada com uma matriz.fonte
f[[0, 1]]
(onde os colchetes externos são sintaxe de chamada e os colchetes definem a matriz).f=
?GolfScript (
109 bytes)Recebe a entrada de stdin no formato
[5 4 1 5 4 8 2 1 5 4 0 7 7]
.Demonstração online
fonte
;
antes da sequência de entrada não deve ser contado no próprio programa?Xojo, 55 bytes
fonte
Ruby, 22
Explicação
Array
deInteger
s.[0,1,2..20]
.Array
[0,1,2..20]
é classificado, o primeiro elemento deve ser o mex.fonte
20
vez de21
, porque a entrada pode conter apenas 20 elementos.Haskell, 30
Isso funciona para listas de todos os tamanhos e listas além de 20. Isso pode ter 15 bytes de comprimento se Data.List for importado:
fonte
Esquema - 219
Não é muito competitivo. Mas eu gosto de escrever esquemas :),
Aqui está o código não destruído:
fonte
Python, 37 caracteres
fonte
range(21)
.f=lambda l,i=0:i in l and f(l,i+1)or i
tem um caractere a mais e a solução iterativai=0;l=input()\nwhile i in l:i+=1\nprint i
é dois caracteres a mais (não armazenar a entrada faz com que ela seja tomada repetidamente). Sem esse20
limite, acho que essas abordagens prevaleceriam.C # - 64 caracteres
Nem sempreRaramente a melhor linguagem de golfe, mas é fácil de escrever e entender :)fonte
Scala, 18 bytes
l
é uma lista de int.fonte
Java , 91 bytes
Experimente online!
fonte
Java 7,
6966 bytes-3 bytes graças a @LeakyNun
Explicação:
Suporta não apenas 0-20, mas 0-2147483647 (o que realmente salva bytes).
Código do teste:
Experimente aqui.
Resultado:
fonte
APL (Dyalog) , 19 bytes
Experimente online!
Provavelmente estou perdendo algo importante aqui. Golfe em andamento ...
fonte
TI-BASIC, 24 bytes
Se
Prompt X
receber uma lista em vez de um único número, ele criará automaticamente uma lista nomeadaX
que pode ser acessadaʟX
.fonte
Prompt X:0:While not(prod(ʟX-Ans:Ans+1:End:Ans
Stax , 6 bytes
Execute e depure
Explicação
fonte
APL (Dyalog Classic) , 11 bytes
Experimente online!
fonte
Geléia , 7 bytes
Outra abordagem. Pode ser usado em uma corrente com qualquer aridade e não precisa de separador de corrente nem nada.
Como a resposta é garantida em menos de 256, isso também funciona:
Gelatina , 5 bytes
Experimente online!
fonte
Powershell, 28 bytes
Script de teste:
Resultado:
Explicação:
$i
enquanto o$args
matriz contém o valor inteiro+$i
.+$i
.fonte
MathGolf ,
54 bytesExperimente online!
Essa solução é restrita apenas ao intervalo de 0 a 20, embora isso possa ser estendido facilmente, aumentando o intervalo inicial.
Explicação:
Como alternativa, uma solução de 5 bytes para todos os números:
Experimente online!
Explicação:
fonte
Z
vez deJ
ser preguiçosa).Perl - 34
Aqui está uma sub-rotina.
Teste com:
fonte
Java, 93
Ungolfed:
fonte
-1
para o caso de teste[]
.Cobra - 50
fonte
Javascript, 74
Agradável e simples! Observe o loop while vazio.
fonte
JavaScript (E6) 35
Função recursiva, parâmetro de matriz na entrada e retornando o
mex
. Não limitado a 20Teste no console do FireFox / FireBug
Resultado
fonte
PHP, 38 bytes
PHP, 39 bytes
fonte