Encontre os códigos-fonte entrelaçados (ladrões)

13

Este é o fio dos ladrões. Para o tópico dos policiais, clique aqui .

Introdução

Para esse desafio de Policiais / Ladrões, os policiais escreverão programas de produção de saída e os entrelaçarão juntos. O trabalho do ladrão é separar os programas da polícia para produzir os resultados desejados.

Regras de ladrão

Os ladrões tentarão encontrar os diferentes programas que as pessoas publicam nos envios para o tópico da polícia (link acima). Se um ladrão resolver o código de um policial, ele deve postar os programas separados e combiná-los com suas saídas em uma resposta aqui e postar que eles quebraram o código na resposta do policial.

Pontuação

Existem dois componentes que são adicionados juntos ao marcar um envio com falha.

  • 2 ao poder do número de programas diferentes usados ​​na resposta do policial
  • Arredonde o número de bytes na entrelaçamento até a potência mais próxima de 2.

Por exemplo, se um ladrão racha TIliGoEnRcomo sendo TIGERe lion, então, recebe 2 ^ 2 + 8 = 12 pontos.

O vencedor do desafio dos ladrões será a pessoa com mais pontos após um período de tempo suficiente para as pessoas participarem.


(Quem quer ajudar com um trecho?)

Arcturus
fonte

Respostas:

6

Vitsy , 12 pontos

'o'2\I/NO

Experimente online!

a5F\aZ

Experimente online!

O NaNno NaNofoi uma oferta inoperante.

A maneira óbvia de empurrar NaNseria dividir 0 sozinho, 2\Ipressiona o comprimento de entrada ( 0 ) duas vezes, /executa a divisão e Nimprime um flutuador.

Ficamos com a impressão oe 'o'é uma string literal que é Oimpressa.

Quaisquer caracteres deixados tinham que pertencer ao outro programa. De fato, apressiona um avanço de linha, 5Fo fatorial de 5 ( 120 ), \atransforma isso em 120 avanço de linha e Zimprime a pilha inteira.

Dennis
fonte
Tão chique, tão bonito. Bem feito. +1
Addison Crump
4

BitShift , 2 ^ 2 + 64 = 68 pontos

linha de policiais

0101100110110101001001010110111011101110111011101101010

impressões ! ?

1011101110111011101110110101000000000110010101101101010

impressões ? !

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 ?

Adicionarei algumas descrições posteriormente (divida o código nas partes que imprimem partes individuais)

Dennis_J
fonte
Alguém pode explicar como calcular a pontuação Eu não entendo muito bem o cálculo #
217 Dennis_J
1
Bem feito. A pontuação é calculada por 2^programs + 256/bytes=points. Nesse caso é 2^2 + 256/128=6 points. Eu acho que isso será editado, porque, como é agora, menos programas de contagem de bytes recebem um bônus maior para os ladrões. O que parece fora
Bassdrop Cumberwubwubwub
1
@ Bas Desde ontem, isso foi alterado.
Arcturus
4

PHP , 68 pontos

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

Resultado: Array

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

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


Gosto dessa submissão, porque ela conta com alguns recursos menos conhecidos - pode-se dizer falhas de funcionalidade - do PHP. O PHP permite que as referências de funções sejam atribuídas a variáveis, por exemplo:

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

faria exatamente o que você espera. Como faria:

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

... exceto que não está fazendo o que você pensa. $f = pownão atribui uma referência de função a $f(isso faria muito sentido, certo?), mas a string 'pow' . A implicação é que qualquer sequência pode ser usada como uma chamada de função, se representar o nome de uma função definida. Código incorreto esperando para acontecer. Eu nem sei por que você quer para permitir isso.

Outra característica incorreta do PHP é que nomes de funções e palavras-chave não diferenciam maiúsculas de minúsculas. Eu queria estar brincando. Assim echo pow(2, 4), ECHO POW(2, 4)e EcHo PoW(2,4)são todos funcionalmente equivalente.

A última falha na apresentação é que, sempre que uma matriz é digitada como uma sequência, como para impressão, o resultado é sempre a sequência incrivelmente útil Array. Reserve um momento para refletir sobre o fato de alguém ter feito isso deliberadamente.

Portanto, no primeiro programa, @insertusernamehere cria a string stR_split, essa string é usada como referência de função (que, pelos motivos acima, realmente funciona), e o resultado, uma matriz, é gerado.

primo
fonte
1
Bom trabalho que vem com uma ótima explicação. :)
insertusernamehere
3

Ruby , 68 pontos

Primeiro:

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

Segundo:

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

Seguiu-se naturalmente desde o final, com putc.

Mitch Schwartz
fonte
1
Opa, eu tive uma solução pretendida ligeiramente diferente com mais um truque de sintaxe estranho, mas acho que vou manter isso no meu bolso traseiro para outro desafio. Bem feito!
histocrat
3

JavaScript, 68 pontos

Linha de policiais

Primeiro programa

Resultado: ffttff

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

Segundo programa

Resultado: 1010

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

Entrelaçamento

+     !!    []             +                [    +[]]          +      (+     !![])                 +     (+[])
 (![]+  [])[  +[]]+(![]+[]) [+[]]+(!![]+[])[ +[]]    +(!![]+[]) [+[]]+  (![]+     [])[+[]]+(![]+[]) [+[]]
intrepidcoder
fonte
2

Java, 132 pontos

Linha de policiais

Primeiro 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");}}

O primeiro programa sai Hell0e o segundo programa saiBye!

Adnan
fonte
Ah, eu estava atrasado uma hora. Bom trabalho.
Arcturus
2

Javascript , 132 pontos

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

Ufa. Isso foi terrível.

Após muita depuração, descobri que, depois de chamar (partes do) segundo programa, ele não funcionava novamente. Isso ocorre porque a variável global fainda foi atribuída. Por fter sido atribuído, a tentativa / captura não falhou Object.keys(f). Não sei se é um truque sorrateiro ou não intencional, mas me causou dor de cabeça.

Além disso, acredito que a saída do primeiro programa é específica da plataforma.
/../gremove todos os caracteres da minha máquina, devido à expressão regular .que significa qualquer caractere. Escapando com as /\../gobras, no entanto, espero que alguém possa lançar mais luz sobre isso. Além disso, minha saída é propensa a erros de arredondamento, talvez alguma variável javascript global possa mudar isso?

Resultado

32666666666666643233333333333336323166666666666668313333333333333231306666666666666830333333333333323029666666666666682933333333333332292866666666666668283333333333333228276666666666666827333333333333322726666666666666682633333333333332262566666666666668253333333333333225246666666666666824333333333333322423666666666666682333333333333332232266666666666668223333333333333222216666666666666821333333333333322120666666666666682033333333333332201966666666666668193333333333333219186666666666666818333333333333321817666666666666681733333333333332171666666666666668163333333333333216156666666666666615333333333333341514666666666666661433333333333334141366666666666666133333333333333413126666666666666612333333333333341211666666666666661133333333333334111066666666666666103333333333333410966666666666666933333333333334986666666666666683333333333333487666666666666677333333333333337666666666666667633333333333333656666666666666753333333333333354666666666666674333333333333334366666666666666533333333333333353266666666666666523333333333333352166666666666666713333333333333331066666666666666603333333333333330

Isso foi testado no chrome 46 (meu único navegador), Windows 7.

Espero que ainda seja uma submissão válida, apesar da saída diferente

Bassdrop Cumberwubwubwub
fonte
Houve uma barra lá dentro, não sei como foi perdida. Bom trabalho! Isto está certo. Eu atualizarei minha inscrição quando não estiver no celular;)
Conor O'Brien
2

JavaScript (ES6) , 68 pontos

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 entrelaçados

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

Isso teria sido muito mais difícil, se o policial rasgasse as palavras-chave. ;)

ETHproductions
fonte
Eu o intercalei manualmente e fiquei preguiçoso, mas bom trabalho. Eu tentei ser sorrateira. Ah bem. Na verdade, obrigado por quebrar este porque perdi os programas originais não tecidos de alguma forma.
Usuário genérico
1

Python 2 , 320 pontos

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