Python 3 , 113 62 octets
for i in[1]*3:x|={a+b for a in x for b in x}
while{i+1}&x:i+=1
Voici x
l'entrée sous forme d'un ensemble d'entiers, et i
est la sortie.
(Merci: Erik l'Outgolfer, M. Xcoder, Lynn)
marque
la source
la source
x=0,*x
enregistre 1 octet. Mieux encore,x+=0,
sauve 2.Réponses:
Gelée , 12 octets
Essayez-le en ligne!
Prend en moyenne ~ 3,7 secondes pour exécuter tous les cas de test sur TIO sur mon téléphone, donc c'est assez rapide.
Explication
la source
Haskell,
5650 octetsEssayez-le en ligne!
Une approche par force brute. Ajoutez
0
à la liste des pièces et essayez toutes les combinaisons de 8 choix. Trouvez le premier nombren
qui n'est pas égal à la somme des choix et retournezn-1
.Prend environ 5m30 pour
[1, 2, 5, 13, 34, 89, 233, 610]
mon ordinateur portable de 7 ans.Edit: -6 octets grâce à @ Ørjan Johansen
Une version encore plus courte (-2 octets, encore grâce à @ Ørjan Johansen) est
Haskell, 48 octets
mais il utilise beaucoup plus de mémoire et se heurte à une pagination importante sur ma machine et ne se termine pas "en quelques minutes".
la source
mapM(0:)$c<$c
. (En fait, celamapM(:0:c)c
devrait fonctionner, mais expire sur TIO pour le cas de test donné.)Gelée , 9 octets
Essayez-le en ligne!
Comment ça marche
la source
Żṗ8§ḟ’$Ṃ
enregistre un octet, mais je ne sais pas si 8,5 minutes comptent pour quelques .Wolfram Language (Mathematica) , 53 octets
Essayez-le en ligne!
la source
JavaScript (ES6),
100 88 8076 octetsIl s'agit essentiellement d'une recherche par force brute, mais améliorée par l'élagage pour l'accélérer. Le temps d'exécution moyen des cas de test est proche de 1 seconde sur TIO.
Suppose que le tableau d'entrée est trié du plus élevé au plus bas.
Essayez-le en ligne!
Commenté
la source
Python 2 , 145 octets
Essayez-le en ligne!
la source
Pari / GP , 57 octets
Essayez-le en ligne!
la source
Python 2 ,
125115111 111 octetsEssayez-le en ligne!
Attend une liste d'entiers en entrée.
Explication:
la source
Perl6,
656341 octets (3937 caractères)Essayez-le en ligne!
Il s'agit d'un bloc anonyme qui reçoit ses données sous forme de tableau. Le
(0,|@_)
est un moyen rapide d'ajouter un0
à@_
, et même s'il est fait deux fois, il est toujours un peu plus court que celui@_.push: 0;
qui aurait alors besoin d'espaces après le_
. Il s'agit d'une approche de force brute qui fromages un peu sur le fait qu'il s'agit de 8 combinaisons. Après l'ajout croisé, une liste anonyme est créée pour les valeurs séquentielles. Avec les opérateurs mathématiques, les listes sont évaluées en fonction de leur longueur, donc le -1 tire le double devoir: tenir compte du 0 et contraindre à Int.Cela peut prendre son temps doux, mais en changeant un ou les deux
(0,|@_)
à(0,|@_.unique)
avant la première ,for
il peut être accéléré considérablement. Cela ajoute +7 (runtime <60s) ou +14 (runtime <10s) au score si vous sentez que le premier est trop lent (je l'ai fait pour le code lié pour éviter les délais d'attente après 60 secondes).Edit: JoKing dans les commentaires l'a amélioré (même idée, cross add, puis retourne le dernier résultat consécutif) à un étonnant 39 caractères (41 octets):
Essayez-le en ligne!
La tabulation finale n'a pas besoin d'un 0, économisant quelques octets en n'ayant besoin que d'ajouter 0 en une fois. Le
xx 3
mime la boucle for (les fromages encore sur les pièces étant une puissance de 2). Lefirst
sous retourne le premier nombre de la liste infinie0..*
(^Inf
est également possible, mais n'économise pas d'espace) dont il+1
n'est pas membre de la liste croisée. Comme le mien, c'est lent, alors ajoutez +7 pour ununique
après le premier égal si vous pensez que c'est trop lent pour les directives.la source
unique
n'est pas nécessaire, mais cela l'accélère beaucoupxx
. Je savais qu'il devait y avoir un moyen de faire la tabulation finale d'une manière beaucoup plus courte en utilisant des fonctions définies, mais mon cerveau ne fonctionnait pas.xx 1
devrait êtrexx 3
^∞
(1...*∉@_)-1
au lieu d'utiliserfirst
, (ce que je réalise est la même méthode que j'ai utilisée ici )JavaScript (Node.js) ,
171145115 octetsEssayez-le en ligne! Port de @ Mark's Python 3 answer. 108 octets dans Firefox 30-57:
la source
Wolfram Language (Mathematica) , 46 octets
Essayez-le en ligne!
Approche de la force brute: vérifie les nombres entiers en comptant vers le haut jusqu'à ce qu'ils atteignent une valeur qui ne peut pas être payée en 8 pièces. Très, très lent (tio expire), mais je suis assez sûr que la condition est correcte.
la source
Nettoyer , 161 octets
Essayez-le en ligne!
la source