Encuentra los códigos fuente entrelazados (ladrones)


13

Este es el hilo de los ladrones. Para el hilo de la policía, ve aquí .

Introducción

Para este desafío de policías / ladrones, los policías escribirán programas de producción y los entrelazarán. Es el trabajo del ladrón separar los programas de la policía para producir los resultados deseados.

Reglas de ladrón

Los ladrones intentarán encontrar los diferentes programas que las personas publican en los envíos al hilo de los policías (vinculado anteriormente). Si un ladrón resuelve el código de un policía, debe publicar los programas separados y combinarlos con sus resultados en una respuesta aquí y publicar que han descifrado el código en la respuesta del policía.

Puntuación

Hay dos componentes que se agregan juntos al calificar un envío agrietado.

  • 2 a la potencia del número de diferentes programas utilizados en la respuesta del policía
  • Ronda el número de bytes en el entrelazamiento de abajo a la fuente más cercana de 2.

Por ejemplo, si un ladrón se quiebra TIliGoEnRcomo siendo TIGERy lion, entonces el ladrón recibe 2 ^ 2 + 8 = 12 puntos.

El ganador del desafío de los ladrones será la persona con más puntos después de un período de tiempo suficiente para que las personas participen.


(¿Quién quiere ayudar con un fragmento?)

Respuestas:


6

Vitsy , 12 puntos

'o'2\I/NO

Pruébalo en línea!

a5F\aZ

Pruébalo en línea!

El NaNen NaNofue un claro indicativo.

La forma obvia de empujar NaNsería dividir 0 por sí mismo, 2\Iempuja la longitud de entrada ( 0 ) dos veces, /realiza la división e Nimprime un flotante.

Nos quedamos con la impresión o, y 'o'es una cadena literal que Oimprime.

Cualquier personaje que quedara tenía que pertenecer al otro programa. De hecho, aempuja un salto de línea, 5Fel factorial de 5 ( 120 ), lo \aconvierte en 120 saltos de línea e Zimprime toda la pila.


Tan elegante, tan hermosa. Bien hecho. +1
Addison Crump

4

BitShift , 2 ^ 2 + 64 = 68 puntos

hilo de policías

0101100110110101001001010110111011101110111011101101010

huellas dactilares ! ?

1011101110111011101110110101000000000110010101101101010

huellas dactilares ? !

Código

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 ?

Agregaré alguna descripción más tarde (divida el código en las partes que imprimen partes individuales)


¿Alguien puede explicar cómo calcular el puntaje? No entiendo bien el cálculo
Dennis_J

1
Bien hecho. La puntuación se calcula por 2^programs + 256/bytes=points. En este caso lo es 2^2 + 256/128=6 points. Sin embargo, creo que esto se editará porque, como lo es ahora, menos programas de conteo de bytes reciben una bonificación más alta para los ladrones. Que se siente
mal

1
@Bas A partir de ayer, eso fue cambiado.
Arcturus

4

PHP , 68 puntos

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

Salida: Array

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

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


Me gusta esta presentación, porque se basa en algunas características menos conocidas, se podría decir que son falsas , de PHP. PHP permite asignar referencias de funciones a variables, por ejemplo:

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

haría exactamente lo que esperabas. Como lo haría:

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

... excepto que no está haciendo lo que piensas. $f = powno asigna una referencia de función a $f(eso tendría demasiado sentido, ¿verdad?), sino la cadena 'pow' . La implicación es que cualquier cadena puede usarse como una llamada de función, si representa el nombre de una función definida. Mal código esperando a suceder. Ni siquiera sé por qué te quieres para permitir esto.

Otra característica errónea de PHP es que los nombres de funciones y palabras clave no distinguen entre mayúsculas y minúsculas. Desearía estar bromeando. Por lo tanto echo pow(2, 4),ECHO POW(2, 4) y EcHo PoW(2,4)todos son funcionalmente equivalentes.

La última característica errónea en el escaparate es que siempre que una matriz se escribe como una cadena, como para imprimir, el resultado es siempre la cadena increíblemente útil Array . Tómese un momento para reflexionar sobre el hecho de que alguien realmente hizo esto deliberadamente.

Entonces, en el primer programa, @insertusernamehere construye la cadena stR_split, esta cadena se usa como referencia de función (que, por las razones anteriores, realmente funciona), y el resultado, una matriz, se emite.


1
Buen trabajo que viene con una gran explicación. :)
insertusernamehere

3

Rubí , 68 puntos

Primero:

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

Segundo:

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

Siguió de forma bastante natural el trabajo del final, con putc.


1
Vaya, tenía una solución prevista ligeramente diferente con un truco de sintaxis extraño más, pero supongo que lo guardaré en mi bolsillo trasero para otro desafío. ¡Bien hecho!
histocrat

3

JavaScript, 68 puntos

Hilo de policías

Primer programa

Salida: ffttff

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

Segundo programa

Salida: 1010

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

Entretejido

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

2

Java, 132 puntos

Hilo de policías

Primer programa:

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

Segundo programa:

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

Las salidas del primer programa Hell0y las salidas del segundo programaBye!


Ah, llegué una hora tarde. Buen trabajo.
Arcturus

2

Javascript , 132 puntos

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

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

Uf. Esto fue terrible.

Después de mucha depuración descubrí que después de llamar (partes de) el segundo programa, no volvería a ejecutarse. Esto se debe a que la variable global ftodavía estaba asignada. Debido a fser asignado, el try / catch no falló Object.keys(f). No sé si es un truco disimulado o no intencional, pero me causó dolor de cabeza.

Además, creo que la salida del primer programa es específica de la plataforma.
/../gelimina todos los caracteres en mi máquina, debido a la expresión regular, .que significa cualquier carácter. /\../gSin embargo, escapar de esto funciona, espero que alguien pueda arrojar más luz sobre esto. Además, mi salida es propensa a errores de redondeo, ¿tal vez alguna variable global de JavaScript puede cambiar esto?

Salida

32666666666666643233333333333336323166666666666668313333333333333231306666666666666830333333333333323029666666666666682933333333333332292866666666666668283333333333333228276666666666666827333333333333322726666666666666682633333333333332262566666666666668253333333333333225246666666666666824333333333333322423666666666666682333333333333332232266666666666668223333333333333222216666666666666821333333333333322120666666666666682033333333333332201966666666666668193333333333333219186666666666666818333333333333321817666666666666681733333333333332171666666666666668163333333333333216156666666666666615333333333333341514666666666666661433333333333334141366666666666666133333333333333413126666666666666612333333333333341211666666666666661133333333333334111066666666666666103333333333333410966666666666666933333333333334986666666666666683333333333333487666666666666677333333333333337666666666666667633333333333333656666666666666753333333333333354666666666666674333333333333334366666666666666533333333333333353266666666666666523333333333333352166666666666666713333333333333331066666666666666603333333333333330

Esto fue probado en Chrome 46 (mi único navegador), Windows 7.

Espero que esta sea una presentación válida, a pesar de los diferentes resultados.


Hubo un corte allí, no sé cómo se perdió. Buen trabajo, sin embargo! Esto es correcto. Actualizaré mi envío cuando no esté en el móvil;)
Conor O'Brien el

2

JavaScript (ES6) , 68 puntos

Programa 1

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

Programa 2

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

Programas entrelazados

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

Esto hubiera sido mucho más difícil si el policía hubiera desgarrado las palabras clave. ;)


Lo entrelacé manualmente y me volví perezoso, pero buen trabajo. Intenté ser astuto. Oh bien. En realidad, gracias por descifrar este porque perdí los programas originales sin tejer de alguna manera.
Usuario genérico


1

Python 2 , 320 puntos

print "This"
print "hello"
print "well"
print "no"
print "alas"
print "but"
print "oh"
print "done"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.