Finde die verwobenen Quellcodes (Räuber)

13

Das ist der Räuberfaden. Für den Faden Cops gehen hier .

Einführung

Für diese Cops / Robbers-Herausforderung schreiben die Cops Output-produzierende Programme und verweben sie miteinander. Es ist die Aufgabe des Räubers, die Programme der Polizisten herauszusuchen, um die gewünschten Ergebnisse zu erzielen.

Räuberregeln

Die Räuber werden versuchen, die verschiedenen Programme zu finden, die die Leute in Einsendungen an den Cops-Thread posten (oben verlinkt). Wenn ein Räuber den Code eines Polizisten löst, muss er die getrennten Programme veröffentlichen und sie mit ihren Ausgaben in einer Antwort hier abgleichen und angeben, dass er den Code in der Antwort des Polizisten geknackt hat.

Wertung

Es gibt zwei Komponenten, die beim Bewerten einer geknackten Einreichung zusammenaddiert werden.

  • 2 hoch der Anzahl der verschiedenen Programme, die in der Antwort des Polizisten verwendet wurden
  • Rund um die Anzahl von Bytes in der Verwebung nach unten auf die nächste Potenz von 2.

ZB wenn ein Räuber TIliGoEnRals TIGERund bricht lion, dann erhält der Räuber 2 ^ 2 + 8 = 12 Punkte.

Der Gewinner der Räuberherausforderung ist die Person mit den meisten Punkten nach einer ausreichenden Zeitspanne, damit die Teilnehmer teilnehmen können.


(Wer will mit einem Schnipsel helfen?)

Arcturus
quelle

Antworten:

6

Vitsy , 12 Punkte

'o'2\I/NO

Probieren Sie es online!

a5F\aZ

Probieren Sie es online!

Der NaNin NaNowar ein untrügliches Zeichen.

Die naheliegende Art zu pushen NaNwäre, 0 durch sich selbst zu teilen , 2\Idie Eingabelänge ( 0 ) zweimal zu pushen , /eine Division durchzuführen und Nein Gleitkomma zu drucken.

Wir bleiben beim Drucken ound 'o'sind ein String-Literal, das Ogedruckt wird.

Welche Charaktere noch übrig waren, musste zum anderen Programm gehören. Tatsächlich wird aein Zeilenvorschub ( 5FFaktor 5 ( 120 )) \averschoben, in 120 Zeilenvorschübe umgewandelt und Zder gesamte Stapel gedruckt.

Dennis
quelle
So schick, so schön. Gut gemacht. +1
Addison Crump
4

BitShift , 2 ^ 2 + 64 = 68 Punkte

Polizisten Faden

0101100110110101001001010110111011101110111011101101010

druckt ! ?

1011101110111011101110110101000000000110010101101101010

druckt ? !

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 ?

Ich werde später eine Beschreibung hinzufügen (den Code in die Teile aufteilen, die einzelne Teile drucken)

Dennis_J
quelle
Kann jemand erklären, wie man die Kerbe berechnet Ich verstehe die Berechnung nicht ganz
Dennis_J
1
Gut gemacht. Die Punktzahl wird berechnet von 2^programs + 256/bytes=points. In diesem Fall ist es 2^2 + 256/128=6 points. Ich denke jedoch, dass dies geändert werden wird, da Programme mit weniger Byteanzahl derzeit einen höheren Bonus für Räuber erhalten. Was sich nicht gut anfühlt
Bassdrop Cumberwubwubwub
1
@Bas Ab gestern wurde das geändert.
Arcturus
4

PHP , 68 Punkte

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

Ausgabe: Array

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

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


Ich mag diese Einreichung, weil sie auf ein paar weniger bekannten Funktionen - man könnte sagen, Fehlfunktionen - von PHP beruht . Mit PHP können Funktionsreferenzen Variablen zugewiesen werden, zum Beispiel:

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

würde genau das tun, was Sie erwarten. Als würde:

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

... außer es tut nicht was du denkst. $f = powordnet keine Funktionsreferenz zu $f(das wäre doch zu sinnvoll?), sondern die Zeichenfolge 'pow' . Dies impliziert, dass eine beliebige Zeichenfolge als Funktionsaufruf verwendet werden kann, wenn sie den Namen einer definierten Funktion darstellt. Schlechter Code, der darauf wartet, passiert zu werden. Ich weiß nicht mal, warum du das zulassen willst .

Ein weiteres Manko von PHP ist, dass bei Funktionsnamen und Schlüsselwörtern die Groß- und Kleinschreibung nicht beachtet wird. Ich wünschte, ich würde scherzen. So echo pow(2, 4), ECHO POW(2, 4)undEcHo PoW(2,4) sind alle funktional gleichwertig.

Der letzte Fehler bei showcase ist, dass immer dann, wenn ein Array als Zeichenfolge eingegeben wird, beispielsweise zum Drucken, das Ergebnis die erstaunlich hilfreiche Zeichenfolge ist Array. Nehmen Sie sich einen Moment Zeit, um über die Tatsache nachzudenken, dass jemand dies tatsächlich absichtlich getan hat.

Im ersten Programm baut @insertusernamehere die Zeichenfolge auf stR_split, diese Zeichenfolge wird als Funktionsreferenz verwendet (was aus den oben genannten Gründen tatsächlich funktioniert), und das Ergebnis, ein Array, wird ausgegeben.

primo
quelle
1
Gute Arbeit, die mit einer tollen Erklärung einhergeht. :)
insertusernamehere
3

Rubin , 68 Punkte

Zuerst:

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

Zweite:

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

Es folgte ziemlich natürlich aus der Erarbeitung des Endes mit putc.

Mitch Schwartz
quelle
1
Hoppla, ich hatte eine etwas andere beabsichtigte Lösung mit einem weiteren verrückten Syntax-Trick, aber ich denke, das werde ich für eine weitere Herausforderung in meiner Hosentasche behalten. Gut gemacht!
Histokrat
3

JavaScript, 68 Punkte

Polizisten Faden

Erstes Programm

Ausgabe: ffttff

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

Zweites Programm

Ausgabe: 1010

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

Verflechtung

+     !!    []             +                [    +[]]          +      (+     !![])                 +     (+[])
 (![]+  [])[  +[]]+(![]+[]) [+[]]+(!![]+[])[ +[]]    +(!![]+[]) [+[]]+  (![]+     [])[+[]]+(![]+[]) [+[]]
unerschrockener Kodierer
quelle
2

Java, 132 Punkte

Polizisten Faden

Erstes Programm:

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

Zweites Programm:

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

Die ersten Programmausgaben Hell0und die zweiten ProgrammausgabenBye!

Adnan
quelle
Ah, ich war eine Stunde zu spät. Gut gemacht.
Arcturus
2

Javascript , 132 Punkte

Programm 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,""))}

Programm 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))}

Wütend. Das war schrecklich.

Nach vielem Debuggen habe ich herausgefunden, dass es nach dem Aufrufen (von Teilen) des 2. Programms nicht mehr laufen würde. Dies liegt daran, dass die globale Variable fnoch zugewiesen wurde. Aufgrund der fZuweisung ist der Versuch / Fang nicht fehlgeschlagenObject.keys(f) . Ich weiß nicht, ob dies ein hinterhältiger Trick ist oder nicht, aber es hat mir Kopfschmerzen bereitet.

Ich glaube auch, dass die Ausgabe des ersten Programms plattformspezifisch ist.
/../gEntfernt alle Zeichen auf meinem Computer, aufgrund des regulären Ausdrucks, .der ein beliebiges Zeichen bedeutet. Austretende es mit /\../gWerken aber, ich hoffe jemand mehr Licht auf diese werfen kann. Außerdem neigt meine Ausgabe zu Rundungsfehlern. Vielleicht kann eine globale Javascript-Variable dies ändern?

Ausgabe

32666666666666643233333333333336323166666666666668313333333333333231306666666666666830333333333333323029666666666666682933333333333332292866666666666668283333333333333228276666666666666827333333333333322726666666666666682633333333333332262566666666666668253333333333333225246666666666666824333333333333322423666666666666682333333333333332232266666666666668223333333333333222216666666666666821333333333333322120666666666666682033333333333332201966666666666668193333333333333219186666666666666818333333333333321817666666666666681733333333333332171666666666666668163333333333333216156666666666666615333333333333341514666666666666661433333333333334141366666666666666133333333333333413126666666666666612333333333333341211666666666666661133333333333334111066666666666666103333333333333410966666666666666933333333333334986666666666666683333333333333487666666666666677333333333333337666666666666667633333333333333656666666666666753333333333333354666666666666674333333333333334366666666666666533333333333333353266666666666666523333333333333352166666666666666713333333333333331066666666666666603333333333333330

Dies wurde auf Chrome 46 (meinem einzigen Browser), Windows 7 getestet.

Ich hoffe, dass dies trotz der unterschiedlichen Ausgabe immer noch eine gültige Einsendung ist

Bassdrop Cumberwubwubwub
quelle
Da war ein Schrägstrich drin, ich weiß nicht, wie er übersehen wurde. Gute Arbeit! Das ist richtig. Ich werde meinen Beitrag aktualisieren, wenn ich nicht mobil bin;)
Conor O'Brien
2

JavaScript (ES6) , 68 Punkte

Programm 1

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

Programm 2

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

Verflochtene Programme

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

Das wäre viel schwieriger gewesen, hätte der Polizist die Stichwörter auseinandergerissen. ;)

ETHproductions
quelle
Ich habe es manuell eingewoben und bin faul geworden, aber gute Arbeit. Ich habe versucht, hinterhältig zu sein. Naja. Eigentlich danke, dass du diesen geknackt hast, weil ich irgendwie die originalen ungewebten Programme verloren habe.
Generischer Benutzer
1

Python 2 , 320 Punkte

print "This"
print "hello"
print "well"
print "no"
print "alas"
print "but"
print "oh"
print "done"
Arcturus
quelle