Le titre est composé de 'Sequence Index Digit Not'.
Défi:
Étant donné un entier n
qui est >= 0
, sortez le n
'ème numéro de la séquence suivante.
Voici les 50 premiers éléments, avec son index (0 indexé) au-dessus:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
1 0 3 2 5 4 7 6 9 8 22 20 30 24 23 26 25 28 27 32 11 33 10 14 13 16 15 18 17 31 12 29 19 21 50 40 41 42 44 45 35 36 37 51 38 39 52 53 55 56 34
Comment fonctionne cette séquence?
Le numéro à l'index n
doit être le premier dans l'ordre qui n'a pas de chiffres en commun avec n
, et ne s'est pas encore produit pour les index précédents. Donc, quand nous regardons une séquence normale comme celle-ci à partir de 0-60
:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
Nous définissons les n
'th valeurs comme ceci:
0
: Le premier nombre (0
) contient le même chiffre, nous recherchons donc le suivant (1
), qui ne contient pas le même chiffre. Donc, lesn=0
sorties1
.1
: Le premier nombre (0
) ne contient pas le même chiffre, doncn=1
sort0
.2
: Nous avons déjà rencontré0
et1
, et le chiffre suivant (2
) contient le même chiffre, nous recherchons donc le suivant (3
), qui ne contient pas le même chiffre. Donc, lesn=2
sorties3
.- ...
10
: Nous avons déjà rencontré0-9
, donc la prochaine ligne est10
.10-19
contenir le chiffre correspondant1
,20
contient le chiffre correspondant0
,21
contient le chiffre correspondant de1
nouveau,22
est valide, de sorte que lesn=10
sorties22
.- etc.
Règles du défi:
- Si votre langue est indexée 1 (ou si vous le souhaitez), vous êtes autorisé à démarrer la séquence à
3 2 5 4 7 ...
(en sautant1
atn=0
et0
atn=1
). - L'indice minimum le plus grand que vous devriez prendre en charge est
25,000
. REMARQUE: la séquence s'arrête à l'index1,023,456,788
, car l'index suivant dans la ligne contient les 10 chiffres. - Vous êtes également autorisé à produire / renvoyer un tableau / liste de la séquence entière jusqu'à et y compris l'index
n
si vous le souhaitez.
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, fonctions / méthode avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- Veuillez également ajouter une explication si nécessaire.
Cas de test:
Cette séquence a en fait créé des paires concernant l'index et les sorties. Si l'index n
sort o
, l'index o
sort n
. Vous pouvez donc saisir la gauche ou la droite, et la sortie sera de l'autre côté:
0 <-> 1 (this test case is optional)
2 <-> 3
10 <-> 22
12 <-> 30
34 <-> 50
89 <-> 100
111 <-> 200
112 <-> 300
199 <-> 322
2231 <-> 4456
9605 <-> 11118
19235 <-> 46000
23451 <-> 60668
25000 <-> 13674
Voici une boîte à pâte des 25 001 premiers cas de test si vous voulez en essayer d'autres.
Réponses:
Pyth , 18 octets
Essayez-le ici! ou Vérifiez plus de cas de test!
Notez que cela renvoie la séquence entière jusqu'à l'index N , mais le lien ne renvoie que le dernier nombre, en ajoutant un
e
(fin). Si vous voulez voir la valeur brute retournée par ce programme, supprimez-la simplement .Comment ça marche
la source
Python 2 ,
92918988 octetsEssayez-le en ligne!
Imprime une liste des premiers
n+1
nombresApproche différente, beaucoup plus rapide:
Python 2 , 96 octets
Essayez-le en ligne!
la source
Haskell,
8069 octetsEssayez-le en ligne!
Très lent pour les grands
n
.Modifier: @Laikoni a enregistré 10 octets. Merci!
la source
APL (Dyalog) , 39 octets
Utilise
⎕IO←0
.Essayez-le en ligne!
Comment?
Récursivité.
0=⍵:1
- devinez.~⍺∊0∇¨⍳⍵
- l'argument gauche (accumulateur) n'est pas déjà dans les résultats précédents∧⊃∧/≠/⍕¨⍺⍵
- et la représentation sous forme de chaîne de l'accumulateur etn
sont différentes:⍺
- puis renvoyez l'accumulateur.⍵∇⍨⍺+1
- sinon, incrémenter l'accumulateur et recurse.la source
n=10
dans TIO ..: S Ce doit être une opération très performante que vous faites là-bas. Est-ce la récursivité qui cause cela, ou quelque chose d'autre est-il le goulot d'étranglement?Python 3 , 92 octets
Essayez-le en ligne!
Ceci imprime tous les termes jusqu'au N ème. Merci à Dennis pour
-4-5 octets!la source
Java (OpenJDK 8) ,
218217213210202200172171170168167 octetsJe ne peux pas croire que je ne suis pas revenu
k
tout ce temps ...Essayez-le en ligne!
la source
for(char f:(""+k).toCharArray())
àfor(int f:(""+k).getBytes())
,r.substring(-~r.trim().lastIndexOf(32));
etr.substring(r.lastIndexOf(32)-1)
.Aller ,
217205 octetsVersion alternative (programme au lieu d'un package): Essayez-le en ligne!
Améliorations:
for
en utilisant plusieurs affectations pouri,k
"fmt";
+fmt.Print
est plus courte queos.Stdout.WriteString
(conservation à partir dupackage main
moment où os.Args était nécessaire)la source
25000
cas de test. :) Donc, non seulement une solution valide, mais aussi des performances relativement bonnes. +1 de moi! (PS: dans votre lien TIO, c'est l'argument que vous utilisez, l'entrée peut être supprimée / n'est pas utilisée.)JavaScript (ES6),
103 8881Modifier révisé, y compris de nombreuses idées intelligentes par @Neil
Point de départ
Idée de base: une boucle de 0 à n, et une boucle interne vérifiant les valeurs toujours non utilisées
Version actuelle plus lisible
Tester
la source
~s.search(d)
avec dus.match(d)
travail?0
enj++
, supprimant le++
de cej
qu'il était avant, puis en commençantj
à la0
place de-1
.n=>eval("for(r=[j=i='0'];i<=n;)r[j]|[...''+j].some(d=>i.match(d))?j++:(i=++i+'',r[k=j]=1,j=0);k")
Octave , 114 octets
Essayez-le en ligne!
Merci à Kevin Cruijssen et Dlosc pour la comparaison des personnages au golf.
Non golfé
Explication de base:
i
et une autre pour la valeur à ajouterj
Pour chacun
i
, continuez à incrémenterj
si l'une des conditions suivantes est remplie:j
a déjà été utilisé10
devient[1 0]
) en utilisantint2str
. Ensuite, comparez les deux nombres en utilisantismember
(par exemple,[1 0]
et[2 1]
reviendriez[1 0]
), puisnnz
pour voir si des colonnes correspondent.Si aucune de ces conditions n'est remplie, vous avez le numéro suivant! Ajouter à
o
, la matrice de sortiela source
-'0'
. Mais s'il y a un cas particulier auquel nous n'avons pas pensé tous les deux, ce-48
serait une alternative plus courte. En outre, les deuxsprintf('%d',...)
peuvent l'êtreint2str(...)
.Perl 5 , 60 octets
Code 59 octets + 1 pour
-p
.Essayez-le en ligne! (Comprend
-l
à des fins visuelles et$-=0;
pour réinitialiser chaque itération)la source
Pip , 30 octets
29 octets de code, +1 pour l'
-p
indicateur.Essayez-le en ligne!
Sort la liste entière. Avertissement: très inefficace; le
2231
boîtier d'entrée fonctionne depuis plus de 35 minutes sur mon ordinateur portable et n'est toujours pas terminé.Explication
la source
Visual Basic .NET (.NET 4.5) ,
260259 octets-1 octet grâce à Kevin Cruijssen
Boucle à travers, générant des termes précédents dans la séquence pour ensuite comparer plus tard. Ensuite, itère le nombre sous forme de chaîne à la recherche de correspondances.
Abuse le système de frappe de VB.NET. Par exemple,
j
est une chaîne, mais l'ajout d'un convertit pour moi un entier. Les entiers sont convertis en booléens où0
estFalse
et le reste sontTrue
.Essayez-le en ligne!
la source
If Not p.Contains(j)Then
comme vous l'avez faitIf j.Contains(c)Then g=0
ci-dessous. Aussi,If Not p.Contains(j)Then \n g=1 \n For Each c In i.ToString \n If j.Contains(c)Then g=0 \n Next \n If g Then Exit While \n End If
peut être raccourci en supprimantg
et en utilisantExit While
directement dans la boucle for:,If Not p.Contains(j)Then \n For Each c In i.ToString \n If j.Contains(c)Then Exit While \n Next \n End If
qui deviendra 241 octets par son apparence.Contains(c)Then
, je l'ai juste manqué. J'aime ce que vous pensez, mais j'utiliseg
comme sentinelle pour voir si la chaîne contient le nombre ou non. Votre lien donne les mauvaises réponses, mais je vais voir si je peux retravailler une partie de la logique intérieure le long de ce que vous pensez.Gelée , 20 octets
Pyth bat Jelly. Allez M. Xcoder!
Un programme complet prenant l'entrée de STDIN et la sortie dans l'option de format de liste en utilisant la représentation de liste de Jelly *. Utilise l'indexation standard basée sur 0.
* les listes d'éléments simples n'ont pas d'environnement
[]
, donc les0
sorties1
, tandis que les1
sorties[1, 0]
etc.Essayez-le en ligne!
Comment?
la source