Je définis la méthode de combinaison d'une séquence pour signifier que chaque numéro de la séquence est concaténé sous forme de chaîne, puis ce résultat est transformé en entier.
[1, 2, 3] -> 123
Pour chaque séquence finie d'au moins 3 entiers consécutifs, il manque exactement un élément dans la séquence, et cet élément manquant peut ne pas être le premier ou le dernier élément de la séquence, sortez l'entier résultant de la séquence combinée. Je me réfère à cela comme un "entier à perte unique".
[1, 2, 3] -> {1, 3} (missing an element) -> 13
Cette séquence d'entiers à perte unique est l'union des sous-séquences (partitions?) Suivantes:
La première sous {n, n+2}
- séquence est A032607 .
{n, n+2} -> 13, 24, 35, 46, 57, 68, 79, 810, 911, 1012, ...
{n, n+1, n+3} -> 124, 235, 346, ...
{n, n+2, n+3} -> 134, 245, 356, ...
{n, n+1, n+2, n+4} -> 1235, 2346, 3457, ...
{n, n+1, n+3, n+4} -> 1245, 2356, 3467, ...
{n, n+2, n+3, n+4} -> 1345, 2456, 3567, ...
...
for n ∈ ℕ (integers >= 1)
Ces nombres entiers doivent être imprimés dans l'ordre croissant. Les 25 premiers nombres entiers avec perte sont les suivants :
13, 24, 35, 46, 57, 68, 79, 124, 134, 235, 245, 346, 356, 457, 467, 568, 578, 679, 689, 810, 911, 1012, 1113, 1214, 1235, ...
7597 premiers nombres entiers avec perte
Implémentations de référence non gérées. Je l'ai fait pour être plus rapide, plutôt que plus petit.
Règles:
- Victoires de code les plus courtes
- Vous pouvez soit (dire lequel):
- Imprimez les entiers à perte unique pour toujours
- Étant donné un entier positif n , affichez ou renvoyez les n premiers éléments sous forme de liste, ou de chaîne délimitée par des virgules ou des espaces.
- Vous devez prendre en charge des entiers arbitrairement grands si votre langue le permet, surtout si vous imprimez pour toujours.
Remarque: Il n'y a pas encore d'entrée dans l'OEIS pour cette séquence.
Autre remarque: je les ai nommés "Entiers à perte unique" afin qu'il puisse à son tour y avoir "Entiers à perte double", "Entiers à perte N-ly", "Entiers à perte avec perte (N + 1)" et "Entiers à perte avec perte" et les "Entiers à perte" "(union de tous ces éléments).
fastest-code
défi amusant .Réponses:
Mathematica, 101 octets
Yay! Pour une fois, j'ai la réponse la plus courte!
Party[Hard]
la source
Party[_]:=While[True,Print["PARTY!!!"]]
. L'argument est ignoré parce que toute fête fait la fête.Party[Where]
devrait imprimerHere!
, etParty[When]
devrait imprimerNow!
, etc. Ne pensez pas à la légère à la fête.Party[x_]:=Switch[x,Where,"Here!",When,"Now!",How,Pause[1];"...Really?",_,While [True,Print["PARTY!!!"]]]
Haskell,
131,114, 106 octetsCeci est limité par la taille de
Int
, mais il peut être facilement étendu en remplaçantInt
parInteger
.Moins golfé:
8 octets golfés par @nimi.
la source
n
?Integer
, cela continuera jusqu'à ce que vous manquiez de mémoire (ou de patience). Il continueraInt
, mais commencera à donner de mauvaises réponses une fois qu'il débordera (> 2^29-1
).main=print$
GHCi. GHC.io manque de mémoire et l'ensemble de fonctionnalités de TryHaskell.org est trop limité.Python 3,
136127126 126122 octetssolution de force brute, je n'essaye même pas n = 7000 (ça prend déjà 10s pour n = 100)
Explication
Résultats
Merci à @ mbomb007 et @FricativeMelon pour leur aide
la source
)
et le caractère suivant, et vous pouvez ajoutert=range
au début du programme et remplacer tousrange
les appels de fonction par dest
appels. Cela devrait réduire considérablement le nombre d'octets.i!=l+k
peut également être remplacé parl+k-i
, ce qui économise un octet.str(i)for i in r(1+k,j+k)if l+k-i
peut être remplacé parstr(i+k)for i in r(1,j)if l-i
, économisant 4 octets.Python 3,
319,270, 251 octetsPrend une
h
entrée de STDIN et imprime un tableau des premiersh
entiers à perte unique. Il est également très rapide, ne prenant que quelques secondes pourh=7000
.Explication: Notez que, si nous avions un temps infini, nous pourrions simplement répéter sur tout
n,k
et pour chaque paire supprimer chacune desn+1,n+2,...,n+k-1
(k-1
possibilités), et obtenir toutes les valeurs (infiniment nombreuses) de celles-ci, puis trier simplement la séquence dans l'ordre croissant et tronquer pourh
éléments. Bien sûr, nous ne pouvons pas vraiment le faire, mais si nous pouvons atteindre un point où les premiersh
éléments triés ne peuvent plus changer en ajoutant les valeurs des futuresn,k
paires, nous pouvons simplement tronquer ensuite et terminer en un temps fini. Pour n'importe quellen,k
paire, il a au moins desfloor(log10(n)+1)*k
chiffres, peut-être plus. Permet donc de regrouper ces paires par la valeurc(n,k)=floor(log10(n)+1)*k
, où nous garantissons que sic(a,b)<c(n,k)
, nous traitonsa,b
avantn,k
. Si nous avons trié la liste et que son dernier élément ad
chiffres, etd<c(n,k)
pour le prochain que éléments ne peuvent pas changer, donc on peut juste les renvoyer.n,k
nous allons traiter, nous pouvons arrêter, car nous ne pouvons plus obtenir un nombre avec autant ou moins de chiffres, car par notre garantie nous aurions déjà dû le traiter à ce moment-là, et donc peu importe les nombres que nous finirions par calculer, le premierh
Alors maintenant, nous avons juste besoin de la fonction qui garantit l'ordre indiqué
c(n,k)
. Pour chacuny
pouvant être obtenu pourc(n,k)
, nous devons traiter tout(n,k)
celay=c(n,k)
. DisonsL=floor(log10(n)+1)
pour certainsn
.y=L*k
Doit donc tenir. Commencez park=2,L=y/2
, puis faitesk=3,L=y/3;k=4,L=y/4...k=y,L=1
, en ignorant les valeurs non entières deL
. Pour générer toutec(n,k)
fonction, commencez par(1,2)
avecy=2
, et d' augmentery
de 1 et recommencer chaque fois que vous obtenezL==1
. Maintenant, nous avons une énumération de paires(L,k)
, et cela satisfait notre condition. Cependant, nous avons besoin de récupérer possiblen
deL
, que nous faisons tous les entiers en dénombrant avecL
chiffres. Ensuite, pour chacune de ces(n,k)
paires, pour chacune desk-1
les éléments supprimés possibles, nous devons générer le nombre de pertes que nous obtenons en conséquence et l'ajouter à notre liste, qui commence vide. Ensuite, nous trions la liste et répétons la prochaine(L,k)
paire , en nous arrêtant lorsque nous l'avonsd<c(n,k)
comme indiqué précédemment.Décomposition du code (un peu dépassé):
la source
len(`q[h]`)
devrait êtrelen(str(q[h]))
de prendre en charge des entiers arbitraires? Ou dites simplement si cela ne fonctionne que jusqu'à une certaine limite, puisque vous prenez un paramètre, pas une impression indéfinie.2**63-1
) aura unL
à la fin si vous utilisezrepr
. Notez que cette entrée est probablement très avancée dans la séquence.