Ceci est le poste Cop. Le billet Robber est ici .
Votre tâche consiste à prendre un entier N et à sortir le Nième chiffre dans la séquence OEIS A002942 .
La séquence se compose des nombres carrés écrits à l'envers:
1, 4, 9, 61, 52, 63, 94, 46, 18, 1, 121, 441, ...
Notez que les zéros non significatifs sont supprimés ( 100 devient 1 , pas 001 ). Concaténer cela en une chaîne (ou un nombre long donne):
1496152639446181121441
Vous devez sortir le Nième chiffre dans cette chaîne / numéro. Vous pouvez choisir de prendre N comme index 0 ou 1 (veuillez indiquer lequel vous choisissez).
Cas de test (1 indexé):
N = 1, ==> 1
N = 5, ==> 1
N = 17, ==> 1 <- Important test case! It's not zero.
N = 20, ==> 4
N = 78, ==> 0
N = 100, ==> 4
Votre code devrait fonctionner pour les nombres jusqu'à N = 2 ^ 15 (sauf si votre langue ne peut pas gérer les entiers 32 bits par défaut, auquel cas N peut être inférieur).
Flics:
Vous devez écrire deux fonctions / programmes, dans la même langue, qui font la même chose. Vous devez publier une des fonctions / programmes, ainsi que la distance Levenshtein entre les deux fonctions / programmes que vous avez écrits. La distance de Levenshtein est mesurée en caractères (donc l'ajout d'un caractère à deux octets donnera un LD = 1).
Le code non révélé ne peut pas être plus long que la solution d'origine (mais il peut être de la même taille). Les voleurs tenteront d'écrire un code avec la distance Levenshtein exacte que vous avez donnée (il peut être différent de votre code non révélé, tant qu'il fonctionne).
Le gagnant sera la soumission non fissurée ayant la distance Levenshtein la plus faible.
Vous pouvez vérifier la distance de Levenshtein ici!
Si votre soumission n'est pas fissurée pendant 7 jours, vous pouvez révéler le code alternatif que vous avez écrit et marquer votre soumission comme sûre.
la source
Réponses:
Haskell , LD = 13, fissuré
Essayez-le en ligne!
J'ai revérifié que les zéros non significatifs sont coupés;)
Explication:
la source
cQuents 0 , LD = 1, fissuré
Essayez-le en ligne!
Je pensais que cela ne fonctionnait pas pour les zéros non significatifs, mais c'est effectivement le cas - la fonction inverse dans cQuents est codée comme
int(reversed(str(n)))
.Explication
la source
JavaScript (ES6), LD = 103 ( fissuré )
Utiliser une distance Levenshtein aussi élevée n'est probablement pas la meilleure stratégie, mais essayons quand même.
Cas de test
Afficher l'extrait de code
Solution envisagée
Partie codée:
la source
+
garantit que la chaîne inversée est contrainte à un nombre.Python 2, 104 octets, LD = 21 invalide ET fissuré
PS Un nombre illimité d'espaces et de commentaires est-il autorisé? Si c'est le cas, ce ne sera pas difficile à casser.la source
\n
s (environ 50)6502 code machine (C64), LD = 1 ( fissuré )
Démo en ligne , utilisation:
sys49152,n
oùn
est l'entrée indexée 0.Pour le dernier cas de test, vous avez besoin d'un peu de patience, car cette pauvre machine doit faire des millions de décalages de bits et d'ajouts pour vous présenter le résultat;)
Le langage ici est le code machine, donc LD est mesuré dans ce format - néanmoins, pour commencer, voici le programme en
ca65
source assembleur:... et voici le script de l'éditeur de liens pour
ld65
:la source
Perl 5 , 59 + 1 (
-a
) = 60 octets, LD = 55Essayez-le en ligne!
la source
Java 8, (177 octets) LD = 92 ( Cracké par @Arnauld )
( J'ai utilisé cette calculatrice LD en ligne. )
Ce n'est probablement pas trop difficile si vous jouez simplement au golf. :)
Explication:
Essayez-le ici.
la source
n->{String r="";for(int i=1;r.length()<=n+1;r+=new Long(new StringBuffer(i*i+++"").reverse()+""));return r.charAt(n);}
( 118 octets, 92 LD )Octave , LD = 63, fissuré
Essayez-le en ligne!
La soumission est de 77 octets, vous devez donc en substituer un peu =)
la source
6502 code machine (C64), LD = 1, sûr
Démo en ligne , utilisation:
sys49152,n
oùn
est l'entrée indexée 0.Solution envisagée: (diff)
L'
30
opcodebmi
est remplacé par l'90
opcodebcc
. Cela correspond à la partie suivante dans la source de l'assembleur:Cela fonctionne car ce code vérifie si un nombre est inférieur à 8. L'
cmp
instruction effectue une soustraction pour cela, définissant les indicateurs en conséquence. Donc, si l'accumulateur contient un nombre inférieur à 8, cela sous-estime, effaçant le drapeau de report, donc la bonne instruction de branchement est en effetbcc
.bmi
(ramification lorsqu'elle est négative), comme dans le code d'origine, fonctionne également ici, car les nombres comparés sont suffisamment petits, de sorte que le résultat de la soustraction se retrouve dans la plage négative ($80-$ff
) lorsqu'un débordement se produit.Démo en ligne
Il s'agit d'une version améliorée / compactée de ma soumission précédente . Parmi d'autres astuces pour réduire la taille, il supprime le code inutile qui était contenu et permettait une sorte de "simple" *) crack. Dans l'ensemble, la taille est réduite de 16 octets. Cette fois, il devrait être un peu plus difficile de trouver le programme équivalent avec LD 1 :)
*) probablement encore pas mal de travail à trouver, bien sûr :)
Encore une fois, voici la
ca65
source de l' assembleur, pour vous aider à démarrer avec le code:... et voici le script de l'éditeur de liens pour
ld65
:la source
Lua: LD = 1, fissuré
Pas de trucs fantaisistes ici :)
la source
Mathematica, LD = 43 fissuré
Essayez-le en ligne!
la source
PHP, LD = 35 ( fissuré )
1 indexé
Essayez-le en ligne!
la source
Python 3: LD = 9 | Fissuré
Celui-ci devrait être assez (très) facile à obtenir: P
la source
.lstrip("0")
pièce peut simplement être copiée.C ++, LD = 159
0 indexé, entrée dans
argv[1]
, compilé sur GCC 7.2.0la source
Groovy , 61 octets (LD = 23)
Essayez-le en ligne!
la source