Changer le code, changer la séquence: flics

27

C'est un défi de . Pour le fil des voleurs, allez ici .

Ce défi implique deux séquences OEIS choisies par les flics - S 1 , S 2 - et comment ces séquences peuvent être jouées et masquées.

Le défi des flics

Votre défi en tant que flic est de choisir une langue disponible gratuitement et deux séquences OEIS. Ensuite, écrivez le code A dans ce langage qui prend l'entrée n et produit S 1 (n). Lorsque ce code est modifié par une distance Levenshtein de X caractères (avec X pas plus 0.5 * (length A)), et transformé en code B dans la même langue, il doit alors produire S 2 (n). Vous devez réellement écrire ce code B , mais ne le révélez pas tant que votre défi n'est pas sûr (voir ci-dessous).

Les soumissions des flics doivent inclure le nom de la langue, le code complet A , le nombre d'octets de A , la valeur X du nombre de modifications à apporter à leur code B secret et les numéros de séquence S 1 et S 2 choisis . Vous pouvez choisir si chaque séquence est indexée 0 ou indexée 1, mais veuillez le préciser dans votre soumission.

Pour casser une soumission particulière, les voleurs doivent proposer un programme C dans le même langage (et la même version) qui produit S 2 (n) et les changements de caractère Y s'éloignent 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.

Gagner et marquer

Si votre réponse de flic n'a pas été révélée dans les 7 jours (168 heures), vous pouvez révéler votre propre solution B , moment auquel votre réponse est considérée comme sûre. Tant que vous ne dévoilez pas votre solution, elle peut toujours être piratée par des voleurs, même si les 7 jours se sont déjà écoulés. Si votre réponse est fissurée, veuillez l'indiquer dans l'en-tête de votre réponse, ainsi qu'un lien vers la réponse du voleur correspondant.

Cops gagner en ayant la soumission uncracked avec les plus brefs A . En cas d'égalité, le plus petit X sera utilisé comme briseur d'égalité. S'ils sont toujours à égalité, la soumission précédente gagnera.

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 une entrée et donner une sortie dans n'importe quel format pratique . Les méthodes d'entrée / sortie doivent être les mêmes pour les deux séquences.
  • Le calculateur définitif pour la distance de Levenshtein pour ce défi est celui-ci sur Planet Calc.
  • En plus d'être un défi CnR, il s'agit de donc toutes les règles de golf habituelles s'appliquent.
AdmBorkBork
la source
Assurez-vous également que si vous changez quelque chose dans cette question, vous mettez à jour celui des voleurs.
mbomb007
Que se passe-t-il si un flic nomme une fonction / variable très grande par rapport au code réel générant la séquence? Il sera possible de créer n'importe quelle séquence dans ce cas avec sa distance de (0.5*len(A))
levée
@ hashcode55 Deux choses - 1) qui ne sera probablement pas un bon candidat pour gagner le fil des flics. 2) si c'est énorme comme ça, ça donne aussi une bonne marge de manœuvre aux voleurs pour le casser.
AdmBorkBork
1
" c'est du code-golf donc toutes les règles de golf habituelles s'appliquent " Est-ce à dire que le code A doit être joué autant que possible, ou peut-il être intentionnellement écrit de manière trop verbeuse / maladroite pour le rendre plus similaire au code B ?
smls

Réponses:

10

Brain-Flak , 28 octets, Distance de 4, A002817 , A090809 Cracked

Cette réponse utilise l'indexation 1

(({({}[()])}{}){({}[()])}{})

Essayez-le en ligne

Pour toute personne intéressée, il y a 27475 programmes Brain-Flak valides avec une distance de Levenshtein 4 de ce programme et 27707 avec une distance de 4 ou moins. Une solution de force brute serait donc possible sur un ordinateur grand public.

Assistant de blé
la source
Il serait probablement plus court et plus rapide à lire si vous avez au X = 4lieu de Levenshtein distance of 4.
mbomb007
1
@ mbomb007 Personnellement, je suis un peu confus lorsque les défis utilisent un tas de variables de lettres pour remplacer des choses que j'essayais d'éviter la confusion. Je l'ai raccourci maintenant, je l'espère, sans créer de confusion.
Wheat Wizard
hausser les épaules . Si tout le monde lit la question, ils devraient l'obtenir. Xest vraiment la seule variable dont ils ont besoin de connaître.
mbomb007
@ mbomb007 Bien que la question demande également un nombre d'octets.
DLosc
1
Fissuré!
DJMcMayhem
6

7 , 33 caractères, 13 octets, X = 10, A000124A000142 , Safe

171720514057071616777023671335133

Essayez-le en ligne!

La distance de Levenshtein est mesurée en termes de caractères, j'ai donc écrit le programme en termes de caractères qu'il contient ci-dessus (et Essayez-le en ligne !, y compris la langue elle-même, est heureux d'exécuter des programmes encodés en ASCII). Cependant, le programme est stocké sur le disque en utilisant le codage sous-octet de 7, ce qui signifie que le programme lui-même est en fait le vidage hexadécimal suivant (donc 13 octets de long):

00000000: 3cf4 2982 f1ce 3bfe 13dc b74b 7f         <.)...;....K.

(Étant donné que la distance Levenshtein est mesurée en termes de caractères, vous n'ajoutez / supprimez / changez pas nécessairement 10 octets ici, il est donc préférable de travailler avec l'ASCII d'origine.)

Le programme tel qu'écrit implémente A000124 (nombres triangulaires + 1); toute fissure doit implémenter A000142 (factorielles). Les deux programmes prennent l'entrée de stdin (sous forme d'entiers décimaux), écrivent leur sortie sur stdout et traitent une entrée de 1 comme signifiant le premier élément de la séquence (et une entrée de 2 comme deuxième élément, etc.).

Espérons que la valeur X très élevée empêchera les gens de forcer brutalement le programme, cette fois (ce qui est toujours un risque avec les entrées des flics et des voleurs dans 7).

La solution

177172051772664057074056167770236713351353

Essayez-le en ligne!

Différences par rapport à l'original:

17 172051 405707 1 61677702367133513 3
17 7 172051 77266 405707 405 61677702367133513 5 3

Je n'ai pas d'explications préparées sur la façon dont cela fonctionne, donc cela va me prendre un certain temps pour obtenir une explication, car je vais devoir le comprendre à partir de presque zéro. J'espère qu'il y aura éventuellement une explication.


la source
4

Perl 6 , 10 octets, X = 1, A000012A001477

Fissuré!

*[0]o 1***
  • S 1 = A000012 = 1,1,1,1,1,...= La séquence de tous les 1. (Indexé 0)

  • S 2 = A001477 = 0,1,2,3,4,...= Les entiers non négatifs. (Indexé 0)

Essayez-le en ligne!

Confirmé de fonctionner avec Perl 6 version 2017.01 et avec la version Perl6 fonctionnant sur TIO.

( A pourrait être encore joué au golf 1***- j'espère que c'est aussi autorisé tel quel.)

smls
la source
3

Perl 6 , 13 octets, X = 1, A161680A000217

Sûr!

{[+] [,] ^$_}
  • S 1 = A161680 = 0 0 1 3 6 10 15 21...= Zéro suivi des nombres triangulaires.
  • S 2 = A000217 = 0 1 3 6 10 15 21 28 ...= Les nombres triangulaires.
  • Zéro indexé.

Essayez-le en ligne!

(Confirmé pour fonctionner avec la version Perl 6 fonctionnant sur TIO.)

Solution

{[+] [\,] ^$_}

Comment fonctionne l'original:

{           }  # A lambda.
          $_   # Lambda argument.                     e.g. 4
         ^     # Range from 0 to n-1.                 e.g. 0, 1, 2, 3
     [,]       # Reduce with comma operator.          e.g. 0, 1, 2, 3
 [+]           # Reduce with addition operator.       e.g. 6

Fonctionnement de la solution:

{            } # A lambda.
           $_  # Lambda argument.                     e.g. 4
          ^    # Range from 0 to n-1.                 e.g. 0, 1, 2, 3
     [\,]      # Triangle reduce with comma operator. e.g. (0), (0,1), (0,1,2), (0,1,2,3)
 [+]           # Reduce with addition operator.       e.g. 10

Exploite le fait que les opérateurs numériques comme l'addition traitent une liste comme son nombre d'éléments, donc dans l'exemple la somme est 1 + 2 + 3 + 4 = 10.

Et oui, le no-op "Réduire avec une virgule" dans l'original contourne un peu les règles du code-golf, mais je préfère le voir comme un algorithme idiot qui a été joué le plus possible (espaces blancs, etc.) pour ce que c'est... :)

smls
la source
C'est suppliant d'être forcé brutalement, si j'avais le temps ou l'envie (et la connaissance de Perl).
Rohan Jhunjhunwala
Cela a survécu assez longtemps pour être marqué comme sûr
fəˈnɛtɪk
2

Gelée , 11 octets, X = 5, A005185A116881

ịḣ2S;
1Ç¡ḊḢ

Il s'agit d'un programme complet qui prend un entier comme argument de ligne de commande et imprime un entier.

Les deux séquences sont indexées comme sur OEIS, c'est-à-dire que A005185 est indexé 1 et A116881 est indexé 0.

Essayez-le en ligne!

Dennis
la source
2

Javascript, 41 octets, distance de 3, A061313 , A004526 , Cracked

f=x=>{return x>1?x%2?f(x+1)+1:f(x/2)+1:0}

Essayez-le en ligne

Utilise une indexation basée sur 1, la solution utilise une indexation basée sur 0.

Encore une fois, une solution différente ...

f=x=>{return x>1?x<2?f(x-1)+1:f(x-2)+1:0}
fəˈnɛtɪk
la source
Fissuré.
Dennis
3
Soit dit en passant, vous ne devriez pas utiliser les permaliens tio.run . Ils cesseront bientôt de fonctionner.
Dennis
^ Utilisez plutôt tio.run/nexus .
mbomb007
1

Perl 6 , 19 octets, X = 1, A000045A000035

Fissuré!

{(0,1,*+*...*)[$_]}
  • S 1 = A000045 = 0 1 1 2 3 5 8 13 21 34...= "Numéros de Fibonacci". ( Indexé 0 )
  • S 2 = A000035 = 0 1 0 1 0 1 0 1 0 1...= "Période 2". ( Indexé 0 )

Essayez-le en ligne!

(Confirmé pour fonctionner avec la version Perl 6 fonctionnant sur TIO.)

smls
la source
Fissuré.
Dennis
1

WolframAlpha, 18 octets, X = 1

Craqué par math_junkie!

(sum1to#of n^1)*2&

Parfois, WolframAlpha sera en fait capable d'afficher une fonction pure comme celle-ci sous une forme fonctionnelle (d'autres fois cela devient confus); mais il peut être joyeusement invoqué avec une entrée donnée - par exemple, les (sum1to#of n^1)*2&@5rendements 30.

S1 = A002378 (nombres proniques)

S2 = A000537 (somme des premiers ncubes)

Les deux séquences sont indexées 0.

Greg Martin
la source
Fissuré!
math junkie
1

Javascript, 15704 octets, distance de 2, A059841 et A000004 - fissuré

Cette solution est extrêmement longue, vous pouvez donc trouver le code complet à ce github gist.

La réponse originale (celle-ci) est 1 indexée. (Je sais que c'est beaucoup trop long, c'est juste pour le plaisir.)

Communauté
la source
Fissuré . De plus, l'ajout de code absolument inutile! + [] - (! + [])
N'est
Juste pour que vous sachiez, cette réponse est à l'origine de certains problèmes pour le PO de ce défi. Apparemment, cela bloque toute la page car elle ressemble à du JavaScript fragmentaire. Pourriez-vous peut-être mettre le code dans un lien externe? (Gist, pastedump, etc.)
DJMcMayhem
En fait, je l'ai mis moi-même dans un résumé. Si vous préférez avoir le code ailleurs, n'hésitez pas à le modifier à nouveau si j'ai outrepassé mes limites.
DJMcMayhem
Je suppose que le! + [] - (! + []) Fait en sorte que vous ne pouvez pas simplement inverser la conversion. Mais certains des autres déchets le rendent plus long. Le code équivalent n'est que de 15640 octets.
fəˈnɛtɪk
0

Javascript, 30 octets, Distance de 4, A000290 , A000079 , - Cracked!

f=x=>{return x?2*x-1+f(x-1):0}

Indexation basée sur 0

La solution de @Kritixi Lithos était en fait différente de la mienne

f=x=>{return x?f(x-1)+f(x-1):1}

Essayez-le en ligne

fəˈnɛtɪk
la source
1
C'est x**2et pas2**x
Kritixi Lithos
Je pense que c'est A000290 , pas A000079.
betseg
@KritixiLithos, il est censé être les deux. J'ai changé le mauvais lien de séquence en haut quand j'ai changé l'autre extrémité.
fəˈnɛtɪk
Cracked
Kritixi Lithos
0

Javascript (ES6), la distance est 1, A000079 et A000004 - fissuré

as=function(){ return 2*2**((11)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

La réponse originale (celle-ci) est basée sur 0. Maintenant qu'il a été fissuré, voici la fonction B d'origine:

as=function(){ return 2*2**((1^1)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}
Communauté
la source
1
J'ai pu obtenir mon crack codegolf.stackexchange.com/a/109976/64505 pour qu'il se comporte de manière incohérente entre deux environnements différents.
fəˈnɛtɪk
0

Java 7, distance Levenshtein de 4, A094683 , A000290 , fissuré

int x{double r=1;for(int i=0;i<42;i++)r=r/2+n/r/2;int k=(int)((int)n*(float)n/Math.pow(n,(Math.sin(n)*Math.sin(n)+Math.cos(n)*Math.cos(n))/2));return n%4%2==(int)Math.log10(Math.E)/Math.log((double)'H'-'@')?(int)r:k;}

0 indexé.
Essayez-le ici!

peech
la source
@LliwTelracs a fait cela pour les 15 premiers entiers non négatifs, voir ma réponse mise à jour.
peech
Cracked
fəˈnɛtɪk