C'est un défi de flics et de voleurs . Pour le fil des flics, allez ici .
Ce défi implique deux séquences OEIS choisies par les flics - S 1 , S 2 - et la façon dont ces séquences peuvent être jouées et masquées.
Les flics construisent le code A qui produit S 1 et donnent un nombre X qui, selon eux, est la meilleure distance Levenshtein possible (en caractères) pour créer B qui produit S 2 .
Le défi des voleurs
Pour casser la soumission d'un flic particulier, les voleurs doivent trouver un programme C dans le même langage (et la même version) que cette réponse qui produit S 2 (n) et le caractère Y change de A (avec Y <= X
). Les voleurs n'ont pas nécessairement besoin de trouver exactement le même code B que le flic (secrètement) a produit. Les soumissions des voleurs doivent respecter le même indice 0 ou 1 que celui spécifié par la soumission du policier.
Si vous gérez cela, postez une réponse avec la solution, en vous liant à la réponse du policier et laissez un commentaire sur la réponse du policier en vous reliant à la vôtre.
Chaque réponse de flic ne peut être crackée qu'une seule fois, et bien sûr, vous n'êtes pas autorisé à cracker votre propre réponse. Si la réponse du policier s'avère invalide avant ou après avoir été piratée, elle n'est pas prise en compte dans le score du voleur.
Gagner et marquer
Les voleurs sont notés par (X - Y)*5 + 5
pour chacune de leurs fissures, et le voleur avec le score global le plus élevé l'emporte.
Règles supplémentaires
- Vous ne devez utiliser aucune fonction intégrée pour le hachage, le chiffrement ou la génération de nombres aléatoires (même si vous amorcez le générateur de nombres aléatoires sur une valeur fixe).
- Les programmes ou les fonctions sont autorisés, mais le code ne doit pas être un extrait de code et vous ne devez pas assumer un environnement REPL.
- Vous pouvez prendre des entrées et des sorties dans n'importe quel format pratique . Les méthodes d'entrée / sortie doivent être les mêmes pour les deux séquences.
- La calculatrice définitive pour la distance de Levenshtein pour ce défi est celle-ci sur Planet Calc.
- En plus d'être un défi CnR, il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent.
la source
Réponses:
Pyke, Levenshtein distance de 1, A036487 , A135628 - score 5
Fissure d'une entrée par muddyfish
Essayez-le ici!
Le code d' origine,
X*e
, carrés l'entrée,X
, multiplie que par l'entrée*
, et puis moitiés étages du résultat,e
.L'astuce est que
'X'
56 est dans la représentation de base 96w
, doncwX
donne 56, multipliez cela par l'entrée puis le plancher et la moitié et vous obtenez 28 fois l'entrée selon les besoins.la source
Brain-Flak , 28 octets, Distance de 4, A002817 , A090809
Cette réponse a été découverte à l'aide d'un brutal-forcer, qui a généré 35000 programmes possibles (beaucoup d'entre eux étaient déséquilibrés, et donc un code de flak de cerveau invalide, mais j'ai roulé avec le bogue et trouvé la réponse de toute façon). C'était environ le 20 millième programme testé, et il m'a fallu environ une heure pour le trouver (même si je ne sais pas exactement combien de temps depuis mon absence quand il a terminé).
Je ne voulais pas encore publier cette réponse, car je n'ai pas encore une compréhension complète du fonctionnement de ce programme. Cependant, la réponse est sur le point d'être sûre, donc je ne veux pas qu'elle expire. J'espère mettre à jour cette réponse une fois que je la comprendrai parfaitement, ainsi que publier le code que j'ai utilisé pour trouver cette réponse. Mais pour l'instant, je vais juste poster une explication partielle.
Cela est logique car OEIS déclare:
Et A000124 sont les nombres triangulaires + 1. Cependant, je ne sais pas exactement ce qu'est le forumla, donc je ne peux pas expliquer complètement comment cela fonctionne.
la source
Perl 6, 19 octets, X = 1, A000045 → A000035
+>
à la place de+<
fonctionnerait également.Essayez-le en ligne!
Comment ça fonctionne
infix ... est très utile pour les séquences récursives simples. La
(0,1,*+*...*)
partie du code d'origine, qui est un raccourci pourspécifie une séquence qui commence par 0 et 1 , puis ajoute des éléments en calculant la somme des deux anciens éléments de la séquence.
En revanche,
(0,1,*+<*...*)
utilise le décalage binaire gauche (+>
, le décalage binaire droit fonctionnerait également) pour construire la séquence de parité. Puisque le décalage de 1 unité zéro vers la gauche est 1 , et le décalage de 0 une unité vers la gauche est 0 , nous obtenons les motifs alternés souhaités de uns et de zéros.la source
Perl 6 , 10 octets, distance 1 - score 5
Fissure d'une entrée par smls
Devient:
Essayez-le en ligne!
la source
*[0]o
d'être là. Je suppose que cela signifie que je peux trouver un autre défi basé sur mon "truc" ... :)***
et j'ai pensé qu'il pourrait se dérouler l'opération de multiplication dyadique*
, avec les arguments précédents, je ne sais vraiment pas ce que fait réellement le code. N'hésitez pas à modifier certaines explications!1***
est analysé comme1 ** *
, c'est-à-dire un lambda qui fait "1 à la puissance de x".1*+*
est analysé comme1 * (+*)
, c'est-à-dire un lambda qui fait "1 multiplié par (x converti en nombre)".Perl 6 , distance 2, smls
Original:
Fissure:
Essayez-le en ligne!
la source
+(^*Z%2)
. Je suppose que je ne suis pas très douée pour rédiger ces défis.WolframAlpha, Distance 1, Greg Martin , A002378 , A000537
Comment ça fonctionne
J'ai réalisé qu'intéressant, (n * (n + 1) / 2) ^ 2 est une formule pour la deuxième séquence. Puisque la somme (1 à n) est équivalente à n * (n + 1) / 2, je n'ai eu qu'à changer le * en a ^.
la source
Brain-Flak , 20 octets, DJMcMayhem
Essayez-le en ligne!
Ajout d'un
({})
au début de la boucle pour doubler la valeur à chaque itération.la source
({(({}[()])){}}{})
JavaScript, Distance 4, LliwTelracs
Original:
Fissure:
Essayez-le en ligne!
la source
JavaScript (ES6), Distance 1, Advancid
Original:
Fissure:
Essayez-le en ligne!
ou
Essayez-le en ligne!
D'une manière ou d'une autre, j'ai pu le faire se comporter différemment entre TIO et repl.it (absolument aucune idée pourquoi 2 * 1 ^ ... serait égal à 0 comme selon repl.it)
la source
as=function(){ return 2*2**((1^1)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}
.Javascript, 41 octets, Distance de 3, A061313, A004526
Essayez-le en ligne!
la source
Java, Distance 4, Peech , A094683 , A000290
Original:
Fissure:
renvoie n * n
la source
Javascript, Advancid , distance de 2, A059841 et A000004
Ne laisser que le code derrière le lien TIO car il semble casser le site.
Merci à @nderscore, dont le code j'ai utilisé pour décrypter le code initial
Il y avait du code redondant comme l'utilisation de !! [] + [] + [] au lieu de !! [] + [].
L'ajout de! + [] - (! + []) (+ 1-1) a initialement empêché le déchiffrement.
Essayez-le en ligne
la source
Pyke, Levenshtein distance de 2, A008788, A007526
Essayez-le ici!
Comment ça fonctionne
Cela fait une conversion de base mixte.
'S
saisit l'entrée n et applique, en poussant [1, ..., n] sur la pile. Le suivantS
prend l'entrée n et pousse à nouveau le même tableau.'
semble provoquer l'application de la commande suivante au sommet précédent de la pile; Je suis un peu flou sur les détails.Enfin,
^
applique une conversion de base mixte, donc [1, ..., n] [1, ..., n]f
calculea (n): = [1] n + n + (n) (n-1) .. . + [n!] 1 où les parenthèses indiquent la valeur de position et le nombre à leur droite le chiffre.
Maintenant, a (n) = (1 + (1) (n-1) + (n-1) (n-2) (n-3) + ... + (n-1)!) N = n ( a (n) + 1) , qui est la même formule récursive qui définit a (n) dans [A007526]. Comme une somme vide est nulle, a (0) = 0 et le cas de base correspond également.
la source