Ceci est destiné à être un golf de code facile et de la taille d'une bouchée.
Le mex (nombre minimal exclu) d'une collection finie de nombres est le plus petit entier non négatif 0, 1, 2, 3, 4, ...
qui n'apparaît pas dans la collection. En d'autres termes, c'est le minimum du complément. L'opération mex est au cœur de l'analyse des jeux impartiaux dans la théorie des jeux combinatoires .
Votre objectif est d'écrire un programme ou une fonction nommée pour calculer le mex en utilisant le moins d'octets possible.
Contribution:
Une liste d'entiers non négatifs dans n'importe quel ordre. Peut contenir des répétitions. Pour être concret, la longueur de la liste et la plage autorisée d'éléments seront à la fois comprises 0
et 20
inclusives.
La définition de "liste" ici est flexible. Toute structure qui représente une collection de nombres est très bien, tant qu'elle a un ordre fixe d'éléments et permet des répétitions. Il ne peut contenir aucune information auxiliaire à l'exception de sa longueur.
L'entrée peut être considérée comme un argument de fonction ou via STDIN.
Production
Le plus petit nombre exclu. Imprimez-le ou imprimez-le.
Cas de test
[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
à20
la sortie correcte est 21. Je vais ajouter un test. Oui, la plage fixe le rend certainement plus facile, bien que l'on puisse encore sans doute l'utilisersys.maxint
ou2**64
si je ne l'ai pas spécifié.Réponses:
Pyth , 6 octets
Exemple d'exécution
Comment ça fonctionne
la source
range(21)
), qui est ordonné. (Cela signifie également que l'explication n'est pas entièrement exacte. Pyth et Python 3 sont tous deux assez nouveaux pour moi.)-
en Pyth est en fait un filtre - il filtre le premier argument pour absence du deuxième argument, puis le convertit sous la forme du premier argument (chaîne, liste ou ensemble).h-U22Q
ainsi, il donnera la sortie correcte de 21 sur l'entrée contenant la plage autorisée complète.CJam,
118 octetsComment ça fonctionne:
Exemple d'entrée:
Production:
Essayez-le en ligne ici
la source
J - 13 caractères
Actions très simples en J, et donc très difficiles à rendre plus petites.
i.@21
crée une liste de 0 à 20 inclus.-.
effectue set-soustrait l'entrée de cette liste.0{
prend le premier élément de ce qui reste, c'est-à-dire le plus petit nombre.f=:
définit une fonction nommée. Au REPL:Depuis la sortie de J806 en novembre 2017, une nouvelle syntaxe existe qui nous permet d'économiser un octet en nous permettant de l'utiliser
i.@21
pour l'ancien(i.21)
dans ce contexte.la source
f=:
?i.@21-.]
cela économiserait 1 octet.Golfscript 7
Une version plus élaborée de la réponse de Peter Taylor. Wiki communautaire car je n'ai pas de représentant pour commenter son post.
La différence consiste à utiliser la taille de liste maximale connue de la question au lieu de la longueur +1 pour enregistrer un caractère et supprimer le $ non pertinent.
Essayez-le en ligne
la source
Burlesque - 9 octets
Prend l'entrée de stdin au format {7 6 5 5 1 2 2 4 2 0}
Expliqué:
Essayez quelques exemples:
{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 \\ <]
la source
{0 1 2}
, car vous devez en avoirrz
un de plus que le plus grand nombre. Aller directement pour20rzj\\<]
résoudre ce problème et enregistrer un caractère.Bash + coreutils, 23 octets
Cela suppose l'entrée en tant que
|
liste séparée par des canaux. Par exemple:la source
"(...)"
autour de la$1
.Rubis, 32 octets
Définit une fonction
f
à appeler avec un tableau.la source
f[[0, 1]]
(où les crochets externes sont la syntaxe d'invocation et les crochets internes définissent le tableau).f=
?GolfScript (
109 octets)Prend l'entrée de stdin au format
[5 4 1 5 4 8 2 1 5 4 0 7 7]
.Démo en ligne
la source
;
avant la chaîne d'entrée ne doit-elle pas être comptée dans le programme lui-même?Xojo, 55 octets
la source
Rubis, 22
Explication
Array
desInteger
art.[0,1,2..20]
.Array
[0,1,2..20]
est trié, le premier élément doit être le mex.la source
20
place de21
, car l'entrée ne peut contenir que 20 éléments.Haskell, 30
Cela fonctionne pour les listes de toutes tailles et les listes au-delà de 20. Cela peut être effectué sur 15 octets si Data.List est importé:
la source
Schéma - 219
Pas très compétitif. Mais j'aime écrire un schéma :),
Voici le code non golfé:
la source
Python, 37 caractères
la source
range(21)
.f=lambda l,i=0:i in l and f(l,i+1)or i
est plus longue d'un caractère et la solution itérativei=0;l=input()\nwhile i in l:i+=1\nprint i
est plus longue de deux caractères (ne pas stocker l'entrée la fait être répétée). Sans20
limite, je pense que ces approches prévaudraient.C # - 64 caractères
Pas toujoursla meilleure langue de golf, mais facile à écrire et à comprendre :)la source
Scala, 18 octets
l
est une liste de Int.la source
Java , 91 octets
Essayez-le en ligne!
la source
Java 7,
6966 octets-3 octets grâce à @LeakyNun
Explication:
Prend en charge non seulement 0-20, mais 0-2147483647 à la place (ce qui économise en fait des octets).
Code de test:
Essayez-le ici.
Production:
la source
APL (Dyalog) , 19 octets
Essayez-le en ligne!
Je manque probablement quelque chose d'important ici. Golf en cours ...
la source
TI-BASIC, 24 octets
Si
Prompt X
est donné une liste au lieu d'un seul numéro, il créera automatiquement une liste nomméeX
accessible avecʟX
.la source
Prompt X:0:While not(prod(ʟX-Ans:Ans+1:End:Ans
Stax , 6 octets
Exécuter et déboguer
Explication
la source
APL (Dyalog Classic) , 11 octets
Essayez-le en ligne!
la source
Gelée , 7 octets
Une autre approche. Peut être utilisé dans une chaîne avec n'importe quelle arité, et n'a pas besoin de séparateur de chaîne ou quoi que ce soit.
Étant donné que la réponse est garantie inférieure à 256, cela fonctionne également:
Gelée , 5 octets
Essayez-le en ligne!
la source
Powershell, 28 octets
Script de test:
Production:
Explication:
$i
pendant que le$args
tableau contient la valeur entière+$i
.+$i
.la source
MathGolf ,
54 octetsEssayez-le en ligne!
Cette solution est limitée à la plage de 0 à 20, bien qu'elle puisse être étendue facilement en augmentant la plage initiale.
Explication:
Alternativement, une solution à 5 octets pour tous les nombres:
Essayez-le en ligne!
Explication:
la source
Z
place deJ
parce que j'étais paresseux).Perl - 34
Voici un sous-programme.
Testez avec:
la source
Java, 93
Non golfé:
la source
-1
pour le cas de test[]
.Cobra - 50
la source
Javascript, 74
Agréable et simple! Notez la boucle while vide.
la source
JavaScript (E6) 35
Fonction récursive, paramètre de tableau en entrée et retour du
mex
. Pas limité à 20Test dans la console FireFox / FireBug
Production
la source
PHP, 38 octets
PHP, 39 octets
la source