끄끄 닶닶 긂긂 닦닦 닶닶 긂긂 댧댧 뉖뉖 댇댇 눖눖 덇덇 긂긂 뎗뎗 닶닶 덗덗 댧댧 댷댷 뉖뉖 긒긒 긒긒
껢껢 鎵 鎵 ❶❶ 合 虛虛 替 替 標 標 現 現 併 併 一一 終.
Para ficar claro, existem três linhas de código, a meio da qual está vazia, porque a nova linha precisa ser duplicada. A contagem de bytes é baseada na codificação UTF-16.
Explicação
O bloco de caracteres coreanos no início empurra a string "DDDof� \"\u0002nf�of�twG \"\u0002rw'efVpw\aefVaf\u0016twG \"\u0002yw�of�uwWrw'sw7efVlf�fff!\"\u0012"
. Você notará que todo terceiro personagem é um personagem que queremos; o resto é sem sentido. Aqui está o porquê:
No Sclipting, dois caracteres coreanos codificam três bytes. Assim, cada caractere coreano codifica efetivamente 12 bits. Para começar uma string D
, os primeiros 8 bits devem ser 0x44
; o resto não importa, mas como temos que repetir todos os caracteres, os bits de 12 a 20 também serão 0x44
. Assim, teremos um valor do formulário 0x44n44n
para alguns n , que se decompõe em três bytes 0x44 0xn4 0x4n
.
Para o o
, ou seja 0x6F
, obtemos os bytes 0x6F 0xn6 0xFn
.
Como sou preguiçoso, comecei por codificar "DDDooo nnnooottt (etc.)"
e depois substitui todos os outros caracteres pelo anterior, e é por isso que recebo 0x444444
= "DDD"
para o D
e 0x6F66F6
= "of�"
para o o
. O �
existe porque, 0xF6
por si só, é uma codificação UTF-8 inválida.
Agora, de volta ao programa. O restante do programa continua da seguinte maneira:
껢껢 - empurra a corda ".\"�"
鎵 鎵 - remove o último caractere duas vezes, deixando-nos com "."
❶❶ - duas duplicatas. Empilhe agora:[".", ".", "."]
合 - concatena duas vezes. Empilhe agora:["..."]
Agora, o que eu quero fazer a seguir é usar "..."
como uma expressão regular para que eu possa combinar três caracteres da sequência original de cada vez, usando a construção de loop 替 ... 終. No entanto, como todas as instruções são duplicadas, preciso ter dois desses loops de expressão regular aninhados um no outro e, se a pilha estiver abaixo do normal, recebo um erro de tempo de execução. Portanto,
虛虛 - pressione a corda vazia duas vezes
e então inicie os loops. Dessa forma, o loop externo itera apenas uma vez porque corresponde à expressão regular ""
na sequência ""
, o que gera uma única correspondência. O loop interno é executado uma vez para cada partida "..."
contra a corda grande. O corpo do loop é:
標 標 - pressione duas marcas na pilha. Empilhe agora:[mark mark]
現 現 - envia duas cópias da correspondência atual de regex. Empilhe agora:[mark mark "DDD" "DDD"]
併 併 - concatena até a primeira marca. Empilhe agora:["DDDDDD"]
Take - pega o primeiro caractere dessa string e depois (redundantemente) o primeiro caractere dessa string. Stack agora tem o personagem que queremos.
O loop interno termina aqui, portanto, toda correspondência da expressão regular é substituída pelo primeiro caractere dessa correspondência. Isso deixa a sequência desejada na pilha.
Em seguida, o loop externo termina, quando a string desejada é retirada da pilha e a única correspondência da ""
string ""
é substituída por ela, deixando a string desejada novamente na pilha.
DDDooo nnnooottt rrreeepppeeeaaattt yyyooouuurrrssseeelllfff!!!
seria uma resposta válida no gatilho