Levenshtein distance & OEIS (Voleurs)

11

Ceci est le poste Robber. Le post Cop 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 ceci dans 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 = 5,      ==> 1
N = 17,     ==> 1   <- Important test case! It's not zero.
N = 20,     ==> 4
N = 78,     ==> 0
N = 100,    ==> 4
N = 274164, ==> 1

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).


Voleurs:

Vous devriez essayer de casser les messages des flics.

Votre code doit être dans la même langue que le message Cop et avoir une distance Levenshtein exactement égale à la distance donnée par le flic. Votre code ne peut pas être plus long que la solution d'origine (mais il peut être de la même taille).

Vous pouvez vérifier la distance de Levenshtein ici!

Le vainqueur sera le voleur qui a le plus craqué les posts.

Stewie Griffin
la source
Attendez ... donc si le résultat du voleur ne doit pas être le même que le programme prévu d'origine ... Le flic ne peut-il pas simplement écrire un programme et faire une distance ...?
Magic Octopus Urn
Eh bien, les flics doivent fournir le code alternatif afin de marquer la soumission comme sûre et d'être éligible pour la victoire. J'ai clarifié dans le post du flic. :)
Stewie Griffin
Je n'ai jamais essayé un défi de flic et de voleur. Tout cela a été très déroutant pour moi hah!
Urne de poulpe magique

Réponses:

3

JavaScript, Arnauld

/*ZZ*/m=>[...Array(m+1).keys()].map(eval(atob("eD0+K1suLi4iIit4KnhdLnJldmVyc2VgYC5qb2luYGA="))).join``[m]
Lynn
la source
1
@Arnauld OK, je pense que Array(m+1)cela a été corrigé.
Lynn
Cela fait. FWIW, j'ai ajouté la solution prévue à mon message.
Arnauld du
2

6502 Code machine (C64), Felix Palmen

J'ai testé cela avec toutes les questions des cas de test et quelques extras (comme 2 ^ 15 ... qui ont pris un certain temps), et cela semble fonctionner de la même manière que l'original avec LD = 1.

00 C0 20 FD AE A0 00 99 5B 00 C8 20 73 00 90 F7 99 5B 00 A2 0B CA 88 30 09 B9
5B 00 29 0F 95 5B 10 F3 A9 00 95 5B CA 10 F9 A9 01 A0 03 99 69 00 88 10 FA A0
20 A2 76 18 B5 E6 90 02 09 10 4A 95 E6 E8 10 F4 A2 03 76 69 CA 10 FB 88 F0 11
A2 09 B5 5C C9 08 30 04 E9 03 95 5C CA 10 F3 30 D6 A2 03 B5 69 95 57 CA 10 F9
A9 01 85 FB A2 03 A9 00 95 FB CA D0 FB A2 03 B5 FB 95 22 95 26 CA 10 F7 A9 00
A2 03 95 69 CA 10 FB A0 20 A2 02 46 25 76 22 CA 10 FB 90 0C A2 7C 18 B5 AA 75
ED 95 ED E8 10 F7 A2 7D 06 26 36 AA E8 10 FB 88 10 DD A0 0B A9 00 99 5A 00 88
D0 FA A0 20 A2 09 B5 5C C9 05 30 04 69 02 95 5C CA 10 F3 06 69 A2 FD 36 6D E8
D0 FB A2 09 B5 5C 2A C9 10 29 0F 95 5C CA 10 F4 88 D0 D7 E0 0A F0 05 E8 B5 5B
F0 F7 09 30 99 5B 00 C8 E8 E0 0B F0 04 B5 5B 90 F1 88 B9 5B 00 C9 30 F0 F8 A2
7C 18 B5 DB E9 00 95 DB E8 10 F7 90 14 88 30 05 B9 5B 00 D0 EA A2 7C F6 7F D0
03 E8 10 F9 4C 73 C0 B9 5B 00 4C D2 FF

Démonstration en ligne , utilisation: sys49152, n où n est l'entrée indexée 0.

Jo.
la source
C'est correct car vous avez trouvé un code totalement inutile dont je n'étais pas au courant et le changement est dans ce code: o
Felix Palmen
1

Lua , Katenkyo

i=1s=""while(#s<...+0)do s=s..((i*i)..""):reverse():gsub("(0+)(%d+)$","%2")i=i+1 end
print(s:sub(...,...))

Essayez-le en ligne!

Je ne connais pas Lua, mais c'était simple, je viens de remplacer un espace par une nouvelle ligne.

Erik le Outgolfer
la source
Hum, je n'y ai pas pensé, l'original était sur le remplacement (0+)(%d+)$par (0+)(%d+), donc c'était sur l'expression
régulière
1

Python 2 , dylnan

d=lambda y:y if y%10>0 else d(y/10)
lambda n:''.join([str(d(x*x))[::-1]for x in range(1,n+1)])[n-1]#fix

Essayez-le en ligne!

Remarque: cette soumission de flic était buggée et ne fonctionnait pas pour les entrées inférieures à 5. Pendant que j'y étais, j'ai construit cette solution qui a la bonne distance de Levenshtein ET corrige le bug.

Leo
la source
1

Perl 5, (-p) Xcali

Mis à jour après commentaire, Levenshtein Distance entre

a$j.=int reverse$_**2for 1..$_;$_--;say$j=~s/.{$_}(.).*/$1/r

et

p$_=substr w.(join"",map{whyddwzz;0|reverse$_**2}1..$_),$_,1

a 55 ans

Essayez-le en ligne

Nahuel Fouilleul
la source
Étant donné que M5.010 est "gratuit", je ne pense pas que cela devrait compter ici. Je ne sais pas vraiment comment compter les drapeaux -aversus -p. Les deux solutions que j'ai trouvées utilisent toutes les deux les mêmes indicateurs. Je pense que le drapeau serait simplement cloué sur le devant sans espace, mais je suis prêt à être influencé par d'autres sur ce point.
Xcali
a mis à jour ma réponse
Nahuel Fouilleul
1

Java 8, Kevin Cruijssen

/*!FooBarFooBarFoo!*/N->{String R="",T=R;for(int I=1,J;N+2>R.length();I++){for(T="",J=(I*I+"").length();0<J;T+=(I*I+"").charAt(--J));R+=new Long(T)+"";}return R.charAt(N);}

Essayez-le en ligne!

Journal des modifications

  • Remplacé .replaceAll()parnew Long() .
  • Suppression du test des carrés parfaits. Maintenant, utilisez directement des carrés parfaits.
  • Mise à jour de tous les noms de variables en majuscules.
  • Réécrit les inégalités.
  • Et enfin ajouté un commentaire de tête de 21 octets pour atteindre le LD correct.
Arnauld
la source
1
Oh sympa. C'est complètement différent de ce que j'avais en tête, mais c'est bien que vous ayez quand même atteint 92 LD. La solution que j'avais en tête était: 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 par rapport à mon autre réponse.)
Kevin Cruijssen
1

Octave , Stewie Griffin

@(n)regexprep(fliplr(num2str((1:n)'.^2))'(:)',' +0*','')(n)%abcdefghijk

Essayez-le en ligne!

J'essayais en fait ma propre réponse Octave et j'ai repéré la réponse existante. Le mien était déjà beaucoup plus court, donc l'ajout d'un commentaire à la fin était suffisant pour atteindre la distance requise de 63.

Tom Carpenter
la source
Bravo :-) J'ai eu une boucle avec input()tout ce qui va avec ...
Stewie Griffin
1

PHP, Jo.

<?for($j++;strlen($p)<$argv[1];$j++)$p.=(int)strrev($j**2);echo($p[$argv[1]+2-3]);

Essayez-le en ligne!

(Je prévoyais de changer l'inégalité afin d'obtenir une LD encore plus grande ...)

Colera Su
la source
0

6502 Code machine (C64), Felix Palmen

Peut aussi être une fissure "simple", mais elle semble fonctionner comme l'original.
Avoir le LD = 1 est tellement tentant d'essayer de le casser (désolé, Felix). :)

00 C0 20 FD AE A0 00 99 5B 00 C8 20 73 00 90 F7 99 5B 00 A2 0B CA 98 88 30 09
B9 5B 00 29 0F 95 5B 10 F2 95 5B CA 10 FB A0 20 A2 76 18 B5 E6 90 02 09 10 4A
95 E6 E8 10 F4 A2 03 76 69 CA 10 FB 88 F0 11 A2 09 B5 5C C9 08 30 04 EB 03 95
5C CA 10 F3 30 D6 A2 03 B5 69 95 57 CA 10 F9 A9 01 85 FB A2 03 A9 00 95 FB CA
D0 FB A2 03 B5 FB 95 22 95 26 CA 10 F7 A9 00 A2 03 95 69 CA 10 FB A0 20 A2 02
46 25 76 22 CA 10 FB 90 0C A2 7C 18 B5 AA 75 ED 95 ED E8 10 F7 A2 7D 06 26 36
AA E8 10 FB 88 10 DD A2 0B A9 00 95 5A CA D0 FB A0 20 A2 09 B5 5C C9 05 30 04
69 02 95 5C CA 10 F3 06 69 A2 FD 36 6D E8 D0 FB A2 09 B5 5C 2A C9 10 29 0F 95
5C CA 10 F4 88 D0 D7 E8 B5 5B F0 FB 09 30 99 5B 00 C8 E8 E0 0B F0 04 B5 5B 90
F1 88 B9 5B 00 C9 30 F0 F8 A2 7C 18 B5 DB E9 00 95 DB E8 10 F7 90 14 88 30 05
B9 5B 00 D0 EA A2 7C F6 7F D0 03 E8 10 F9 4C 68 C0 B9 5B 00 4C D2 FF

Démonstration en ligne , utilisation: sys49152, n où n est l'entrée indexée 0.

Jo.
la source
Je ne sais pas si je dois l'accepter. Il remplace E9(une commande de soustraction) par EBlequel n'est pas défini dans le code machine 6502, mais arrive à faire de même sur les puces NMOS 6502 et 6510. Ce programme pourrait par exemple planter sur le C64 DTV1. Mais il est peu probable de trouver un vrai C64 qui ne l'exécute pas correctement, donc il pourrait être considéré comme un crack valide? Je pourrais demander des avis sur la méta ....
Felix Palmen
Je serais intéressé à entrer ici sur la méta .
Felix Palmen
@FelixPalmen Je vais bientôt retirer cette réponse.
Jo.
gardez-le, voir aussi mon commentaire sur meta. La communauté a clairement exprimé son opinion. C'est ma faute de ne pas exiger uniquement du code 6502 documenté, et je garderai cela à l'esprit pour l'avenir.
Felix Palmen