Trouver les codes sources entrelacés (voleurs)


13

Ceci est le fil des voleurs. Pour le fil des flics, allez ici .

introduction

Pour ce défi Cops / Robbers, les flics écriront des programmes de production de sortie et les entrelaceront ensemble. C'est le travail du voleur de sélectionner les programmes des flics pour produire les sorties souhaitées.

Règles de voleur

Les voleurs essaieront de trouver les différents programmes que les gens affichent dans les soumissions au fil des flics (lié ci-dessus). Si un voleur résout le code d'un flic, il doit publier les programmes séparés et les faire correspondre avec leurs sorties dans une réponse ici et signaler qu'il a craqué le code sur la réponse du flic.

Notation

Il y a deux composants qui sont ajoutés ensemble lors de la notation d'une soumission fissurée.

  • 2 à la puissance du nombre de programmes différents utilisés dans la réponse du flic
  • Autour du nombre d'octets dans le entrelaçant vers le bas à la puissance la plus proche de 2.

Par exemple, si un voleur se fissure TIliGoEnRcomme étant TIGERet lion, alors le voleur reçoit 2 ^ 2 + 8 = 12 points.

Le vainqueur du défi des voleurs sera la personne avec le plus de points après une période de temps suffisante pour que les gens participent.


(Qui veut aider avec un extrait?)

Réponses:


6

Vitsy , 12 points

'o'2\I/NO

Essayez-le en ligne!

a5F\aZ

Essayez-le en ligne!

Le NaNen NaNoétait un don mort.

La manière évidente de pousser NaNserait de diviser 0 par lui-même, de 2\Ipousser deux fois la longueur d'entrée ( 0 ), d' /effectuer la division et d' Nimprimer un flottant.

Nous nous retrouvons avec l'impression o, et 'o'est un littéral de chaîne qui Os'imprime.

Les personnages qui restaient devaient appartenir à l'autre programme. En fait, apousse un saut de ligne, 5Fle factoriel de 5 ( 120 ), le \atransforme en 120 sauts de ligne et Zimprime la pile entière.


Si fantaisie, si belle. Bien joué. +1
Addison Crump

4

BitShift , 2 ^ 2 + 64 = 68 points

fil de flics

0101100110110101001001010110111011101110111011101101010

impressions ! ?

1011101110111011101110110101000000000110010101101101010

impressions ? !

Code

0101100110110101001001010110111011101110111011101101010 # '! ?'
01011001101101010 # '! '
0101              # XOR 0 with 128 
                  # Making current value 128 (1000 0000)
    10            # Bitshift 1 to left making 10000000 -> 01000000
      01          # Bitshift 1 to left making 01000000 -> 00100000  
        101       # XOR 00100000 with 1 making it 00100001
           101010 # print 00100000 which is binary for !
010010101         #
010               # XOR 00100001 with 1 making it 00100000
   010101         # print 00100000 which is binary for <space>
10111011101110111011101101010  # '?'
101               # XOR 00100000 with 1
   1              # Bitshift 1 to left making 00100001 -> 01000010
                      # This gets repeated till 01000010 becomes 0111111
101010                # print 0111111 which is binary for ?

J'ajouterai une description plus tard (diviser le code en parties qui impriment des parties individuelles)


Quelqu'un peut-il expliquer comment calculer le score Je ne comprends pas très bien le calcul
Dennis_J

1
Bien joué. Le score est calculé par 2^programs + 256/bytes=points. Dans ce cas, c'est 2^2 + 256/128=6 points. Je pense que cela sera modifié, car comme c'est le cas actuellement, moins de programmes de comptage d'octets reçoivent un bonus plus élevé pour les voleurs. Qui se sent
mal

1
@Bas Depuis hier, cela a été changé.
Arcturus

4

PHP , 68 points

$c=tR;$h=s;$c=$h.$c._.$h.plit;echo$c($h);

Production: Array

echo quotemeta('^/]'.co.'[$');

Production: \^/\]co\[\$


J'aime cette soumission, car elle repose sur quelques fonctionnalités moins connues - on pourrait dire des défauts - de PHP. PHP permet d'attribuer des références de fonction aux variables, par exemple:

$f = function($a, $b) { return pow($a, $b); };
echo $f(2, 4);

ferait exactement ce que vous attendez. Comme le ferait:

$f = pow;
echo $f(2, 4);

... sauf qu'il ne fait pas ce que vous pensez. $f = pown'attribue pas de référence de fonction à $f(cela aurait trop de sens, non?), mais plutôt la chaîne 'pow' . L'implication est que n'importe quelle chaîne peut être utilisée comme appel de fonction, si elle représente le nom d'une fonction définie. Mauvais code en attente de se produire. Je ne sais même pas pourquoi vous voulez permettre cela.

Une autre faille de PHP est que les noms de fonction et les mots-clés ne respectent pas la casse. Je souhaite que je plaisantais. Alors echo pow(2, 4), ECHO POW(2, 4)etEcHo PoW(2,4) sont tous fonctionnellement équivalents.

La dernière erreur sur showcase est que chaque fois qu'un tableau est tapé comme une chaîne, comme pour l'impression, le résultat est toujours la chaîne incroyablement utile Array. Prenez un moment pour réfléchir au fait que quelqu'un l'a fait délibérément.

Donc, dans le premier programme, @insertusernamehere construit la chaîne stR_split, cette chaîne est utilisée comme référence de fonction (qui, pour les raisons ci-dessus, fonctionne réellement), et le résultat, un tableau, est sorti.


1
Beau travail qui vient avec une grande explication. :)
insertusernamehere

3

Rubis , 68 points

Premier:

p %w(b n n s)*?a%?}

Seconde:

w,=?(.ord,40,?);"jivivi{2".bytes{|b|putc b-w}

Il a suivi assez naturellement de travailler sur la fin, avec putc.


1
Oups, j'avais une solution légèrement différente avec une autre astuce de syntaxe étrange, mais je suppose que je garderai cela dans ma poche arrière pour un autre défi. Bien joué!
histocrate

3

JavaScript, 68 points

Fil de flics

Premier programme

Production: ffttff

(![]+[])[+[]]+(![]+[])[+[]]+(!![]+[])[+[]]+(!![]+[])[+[]]+(![]+[])[+[]]+(![]+[])[+[]]

Deuxième programme

Production: 1010

+!![]+[+[]]+(+!![])+(+[])

Entrelacement

+     !!    []             +                [    +[]]          +      (+     !![])                 +     (+[])
 (![]+  [])[  +[]]+(![]+[]) [+[]]+(!![]+[])[ +[]]    +(!![]+[]) [+[]]+  (![]+     [])[+[]]+(![]+[]) [+[]]

2

Java, 132 points

Fil de flics

Premier programme:

interface c{static void main(String[]g){System.out.println("Hell"\u002bg.length);}}

Deuxième programme:

class i{public static void main(String[]n){System.out.print("Bye!\n");}}

Les premières sorties de programme Hell0et les secondes sorties de programmeBye!


Ah, j'étais une heure trop tard. Bon travail.
Arcturus

2

Javascript , 132 points

Programme 1

var x;{;alert((f=>(f.reverse(f+~~f,Math.pow(2,Math.E))))(new Array(99).fill(0).map((x,i,f)=>i/3)).join("").replace(/../g,""))}

Programme 2

try{"function";Object.keys(f)}catch(e){f=s=>!s?f(1):"";alert(f(f(f(0/0) +f(7/5)))+f(f)+`${f}`.split``.map(e=>e.charCodeAt()*23))}

Ouf. C'était terrible.

Après beaucoup de débogage, j'ai découvert qu'après avoir appelé (certaines parties du) deuxième programme, il ne s'exécuterait plus. En effet, la variable globale fétait toujours affectée. En raison de l' fattribution, le try / catch n'a pas échouéObject.keys(f) . Je ne sais pas si c'est une astuce sournoise ou involontaire mais cela m'a causé un mal de tête.

De plus, je pense que la sortie du premier programme est spécifique à la plate-forme.
/../gsupprime tous les caractères sur ma machine, à cause de l'expression régulière .qui signifie n'importe quel caractère. /\../gCependant, en y échappant avec des œuvres, j'espère que quelqu'un pourra apporter plus de lumière à ce sujet. De plus, ma sortie est sujette à des erreurs d'arrondi, peut-être qu'une variable javascript globale peut changer cela?

Production

32666666666666643233333333333336323166666666666668313333333333333231306666666666666830333333333333323029666666666666682933333333333332292866666666666668283333333333333228276666666666666827333333333333322726666666666666682633333333333332262566666666666668253333333333333225246666666666666824333333333333322423666666666666682333333333333332232266666666666668223333333333333222216666666666666821333333333333322120666666666666682033333333333332201966666666666668193333333333333219186666666666666818333333333333321817666666666666681733333333333332171666666666666668163333333333333216156666666666666615333333333333341514666666666666661433333333333334141366666666666666133333333333333413126666666666666612333333333333341211666666666666661133333333333334111066666666666666103333333333333410966666666666666933333333333334986666666666666683333333333333487666666666666677333333333333337666666666666667633333333333333656666666666666753333333333333354666666666666674333333333333334366666666666666533333333333333353266666666666666523333333333333352166666666666666713333333333333331066666666666666603333333333333330

Cela a été testé sur Chrome 46 (mon seul navigateur), Windows 7.

J'espère que c'est toujours une soumission valable, malgré la sortie différente


Il y avait une barre oblique là-dedans, je ne sais pas comment cela a été manqué. Bon travail! C'est correct. Je mettrai à jour ma soumission lorsque je ne serai pas sur mobile;)
Conor O'Brien

2

JavaScript (ES6) , 68 points

Programme 1

alert((c=>c.replace(/[a-z]/gi,a=>String.fromCharCode(("Z">=a?90:122)>=(a=a.charCodeAt(0)+13)?a:a-26)))("fvzcyr"))

Programme 2

alert((b=>b.replace(/[a-zA-Z]/g,s=>String.fromCharCode(s.charCodeAt(0)+(s.toLowerCase()<'n'?13:-13))))("gbnfg"))

Programmes entrelacés

 alaelretrt((((cb=>c=>b.replace(/.replace[a-(/[azA-Z]-z]/gi/g,a,s=>String=>String.fromCharCode(s.fromCharCode(("Z">=a.charCodeAt(0)?90:122)>=(a=a.charCodeAt(0+(s.toLowerCase())+13)?a<'n'?13:-13:a-26)))))))((""gfvbznfcyrg""))))
 al e r t  ( ( c =>c             .replace   (/[a     -z]/gi  ,a  =>String                       .fromCharCode(("Z">=a              ?90:122)>=(a=a.charCodeAt(0                 )+13)?a           :a-26)))    ( "  fv z  cyr " ))
   a l e rt ( ( b   =>b.replace(/        [a-    zA-Z]      /g  ,s        =>String.fromCharCode(s                     .charCodeAt(0)                           +(s.toLowerCase()       <'n'?13:-13        )))) ( "g  b nf   g "  ))

Cela aurait été beaucoup plus difficile si le flic avait déchiré les mots clés. ;)


Je l'ai entrelacé manuellement et suis devenu paresseux, mais bon travail. J'ai essayé d'être sournois. Tant pis. En fait, merci d'avoir craqué celui-ci parce que j'ai perdu les programmes originaux non tissés d'une manière ou d'une autre.
Utilisateur générique du


1

Python 2 , 320 points

print "This"
print "hello"
print "well"
print "no"
print "alas"
print "but"
print "oh"
print "done"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.