Trova i codici sorgente intrecciati (ladri)


13

Questo è il filo dei ladri. Per il thread della polizia, vai qui .

introduzione

Per questa sfida di Cops / Robbers, i poliziotti scriveranno programmi che producono output e li intrecciano insieme. È compito del ladro separare i programmi della polizia per produrre gli output desiderati.

Regole del ladro

I ladri cercheranno di trovare i diversi programmi che le persone pubblicano nelle presentazioni al thread della polizia (linkato sopra). Se un ladro risolve il codice di un poliziotto, deve pubblicare i programmi separati e abbinarli ai loro risultati in una risposta qui e postare che hanno decifrato il codice sulla risposta del poliziotto.

punteggio

Esistono due componenti che vengono sommati durante il punteggio di un invio non valido.

  • 2 alla potenza del numero di diversi programmi utilizzati nella risposta del poliziotto
  • Turno il numero di byte nell'intreccio giù alla più vicina potenza di 2.

Ad esempio, se un crepe ladri TIliGoEnRcome essere TIGERe lion, quindi il ladro riceve 2 ^ 2 + 8 = 12 punti.

Il vincitore della sfida dei ladri sarà la persona con il maggior numero di punti dopo un periodo di tempo sufficiente per consentire alle persone di partecipare.


(Chi vuole aiutare con uno snippet?)

Risposte:


6

Vitsy , 12 punti

'o'2\I/NO

Provalo online!

a5F\aZ

Provalo online!

L' NaNin NaNoera un giveaway guasto.

Il modo ovvio di spingere NaNsarebbe quello di dividere 0 da solo, 2\Ispinge due volte la lunghezza di input ( 0 ), /esegue la divisione e Nstampa un float.

Siamo rimasti con la stampa oed 'o'è una stringa letterale che Ostampa.

Qualunque personaggio rimanesse doveva appartenere all'altro programma. In effetti, aspinge un avanzamento di riga, 5Fil fattoriale di 5 ( 120 ), lo \atrasforma in 120 avanzamenti di riga e Zstampa l'intero stack.


Così elegante, così bello. Molto bene. +1
Addison Crump,

4

BitShift , 2 ^ 2 + 64 = 68 punti

filo della polizia

0101100110110101001001010110111011101110111011101101010

stampe ! ?

1011101110111011101110110101000000000110010101101101010

stampe ? !

Codice

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 ?

Aggiungerò qualche descrizione in seguito (dividere il codice nelle parti che stampano le singole parti)


Qualcuno può spiegare come calcolare il punteggio Non capisco bene il calcolo
Dennis_J,

1
Molto bene. Il punteggio è calcolato da 2^programs + 256/bytes=points. In questo caso lo è 2^2 + 256/128=6 points. Penso che questo verrà modificato, perché com'è ora, un minor numero di programmi di conteggio byte riceve un bonus maggiore per i ladri. Che sembra fuori
Bassdrop Cumberwubwubwub il

1
@Bas Da ieri, è stato cambiato.
Arcturus,

4

PHP , 68 punti

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

Produzione: Array

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

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


Mi piace questa presentazione, perché si basa su alcune caratteristiche meno conosciute - si potrebbe dire malfunzionamenti - di PHP. PHP consente di assegnare riferimenti alle funzioni alle variabili, ad esempio:

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

farebbe esattamente quello che ti aspetti. Come sarebbe:

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

... tranne che non sta facendo quello che pensi. $f = pownon assegna un riferimento alla funzione $f(avrebbe senso, vero?), ma piuttosto la stringa 'pow' . L'implicazione è che qualsiasi stringa può essere utilizzata come chiamata di funzione, se rappresenta il nome di una funzione definita. Codice errato in attesa di accadere. Io non so nemmeno perché ci si vuole permettere questo.

Un'altra cattiva funzionalità di PHP è che i nomi delle funzioni e le parole chiave non fanno distinzione tra maiuscole e minuscole. Vorrei scherzare. Quindi echo pow(2, 4), ECHO POW(2, 4)e EcHo PoW(2,4)sono tutti funzionalmente equivalenti.

L'ultima anomalia nella vetrina è che ogni volta che un array viene digitato come una stringa, ad esempio per la stampa, il risultato è sempre la stringa incredibilmente utile Array. Prenditi un momento per riflettere sul fatto che qualcuno lo ha fatto deliberatamente.

Quindi nel primo programma, @insertusernamehere costruisce la stringa stR_split, questa stringa viene utilizzata come riferimento di funzione (che, per motivi sopra, effettivamente funziona) e viene generato il risultato, un array.


1
Bel lavoro che viene fornito con una grande spiegazione. :)
inserireusernamehere il

3

Rubino , 68 punti

Primo:

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

Secondo:

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

È seguito abbastanza naturalmente dall'elaborare la fine, con putc.


1
Spiacenti, avevo una soluzione voluta leggermente diversa con un altro strano trucco di sintassi, ma immagino che lo terrò nella tasca posteriore per un'altra sfida. Molto bene!
istocratico

3

JavaScript, 68 punti

Filetto di poliziotti

Primo programma

Produzione: ffttff

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

Secondo programma

Produzione: 1010

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

intrecciando

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

2

Java, 132 punti

Filetto di poliziotti

Primo programma:

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

Secondo programma:

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

Le uscite del primo programma Hell0e le uscite del secondo programmaBye!


Ah, ero in ritardo di un'ora. Buon lavoro.
Arturo il

2

Javascript , 132 punti

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

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

Accidenti. Questo è stato terribile.

Dopo un sacco di debug ho scoperto che dopo aver chiamato (parti di) il 2o programma, non sarebbe più stato eseguito. Questo perché la variabile globale fera ancora assegnata. A causa dell'assegnazione f, il tentativo / cattura non è fallito Object.keys(f). Non so se questo è un trucco subdolo o involontario, ma mi ha causato mal di testa.

Inoltre, credo che l'output del primo programma sia specifico della piattaforma.
/../grimuove tutti i personaggi sulla mia macchina, a causa della regex .che significa qualsiasi personaggio. Scappando con le /\../gopere, tuttavia, spero che qualcuno possa far luce su questo. Inoltre, il mio output è soggetto a errori di arrotondamento, forse alcune variabili javascript globali possono cambiarlo?

Produzione

32666666666666643233333333333336323166666666666668313333333333333231306666666666666830333333333333323029666666666666682933333333333332292866666666666668283333333333333228276666666666666827333333333333322726666666666666682633333333333332262566666666666668253333333333333225246666666666666824333333333333322423666666666666682333333333333332232266666666666668223333333333333222216666666666666821333333333333322120666666666666682033333333333332201966666666666668193333333333333219186666666666666818333333333333321817666666666666681733333333333332171666666666666668163333333333333216156666666666666615333333333333341514666666666666661433333333333334141366666666666666133333333333333413126666666666666612333333333333341211666666666666661133333333333334111066666666666666103333333333333410966666666666666933333333333334986666666666666683333333333333487666666666666677333333333333337666666666666667633333333333333656666666666666753333333333333354666666666666674333333333333334366666666666666533333333333333353266666666666666523333333333333352166666666666666713333333333333331066666666666666603333333333333330

Questo è stato testato su Chrome 46 (il mio unico browser), Windows 7.

Spero che questo sia ancora un valido contributo, nonostante il diverso risultato


C'è stato un taglio lì dentro, non so come sia stato perso. Ottimo lavoro, però! Questo è corretto. Aggiornerò la mia richiesta quando non sarò sul cellulare;)
Conor O'Brien il

2

JavaScript (ES6) , 68 punti

Programma 1

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

Programma 2

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

Programmi intrecciati

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

Sarebbe stato molto più difficile se il poliziotto avesse fatto a pezzi le parole chiave. ;)


L'ho interrotto manualmente e sono diventato pigro, ma un buon lavoro. Ho provato ad essere subdolo. Oh bene. In realtà grazie per aver risolto questo perché ho perso in qualche modo i programmi non desiderati originali.
Utente generico


1

Python 2 , 320 punti

print "This"
print "hello"
print "well"
print "no"
print "alas"
print "but"
print "oh"
print "done"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.