Uma string pode ser alterada por um número n
, obtendo o valor c
de byte de cada caractere na string, calculando (c + n) mod 256
e convertendo o resultado em um caractere.
Como exemplo, alternar "ABC123"
1 resulta em "BCD234"
, alternar 10 "KLM;<="
polegadas e 255 polegadas "@AB012"
.
A tarefa
Escolha como muitos números n
com 0 < n < 256
que você se atreve e escrever um programa ou função que recebe uma string como entrada e
- retorna a string inalterada quando o código fonte não é alterado, mas
- retorna a string deslocada
n
quando o código-fonte é deslocadon
.
Regras
- A pontuação do seu envio é o número de suportados
n
, com uma pontuação maior sendo melhor. A pontuação máxima é, portanto, 255. - Seu envio deve suportar pelo menos um turno; portanto, a pontuação mínima é 1.
- Em caso de empate, o programa mais curto vence.
- Todos os programas alterados precisam estar no mesmo idioma.
string
code-challenge
source-layout
Laikoni
fonte
fonte
\r
?Respostas:
Brainfuck, pontuação: 31 (2208 bytes)
Programa codificado em Base64:
Trabalha para os turnos 0, 4, 8, 12, 32, 36, 40, 44, 64, 68, 72, 76, 96, 100, 104, 108, 128, 132, 136, 140, 140, 160, 164, 168, 172 192, 196, 200, 204, 224, 228, 232 e 236.
Para todo valor entre 0 e 255, existe exatamente uma dessas mudanças que envia esse caractere para uma instrução válida de troca de cérebro.
O programa depende de células de 8 bits com quebra automática de transbordamentos. Provavelmente isso poderia ser um pouco jogado, já que o turno consiste apenas em um repetido
+
ou-
(o que for menor).Código Python usado para gerar isso:
fonte
+[>,.<]
?),[+.,]
onde+
é a quantidade de+
s ou-
slHaskell, pontuação 255 (27.026 bytes)
O programa funciona, mas colocá-lo na minha área de transferência parece destruí-lo, então aqui está o código que gera o meu programa.
Verificação
Portanto, se copiar coisas para uma área de transferência o interrompe, como verifico se funciona?
Você pode usar isso aqui . Você pode ajustar
N
e a sequência (atualmenteBig ol' egg
) para ver se ela funciona.Isso testará todo N em uma única entrada em sucessão, mas tende a atingir o tempo limite.
Explicação
Isso abusa da notação alfabética de comentários de Haskell. No alfabetizado Haskell, qualquer linha que não comece
>
é um comentário. Portanto, para fazer nosso código funcionar, fazemos 255 cópias do programa, cada uma alternandon
e, em seguida, cada cópia individual-n
.fonte
C, pontuação: 1 (73 bytes)
Experimente online!
Deslocado por 1:
Experimente online!
fonte
05AB1E , Pontuação: 3 (24 bytes)
Experimente online!
Explicação
Mudou uma vez:
Experimente online!
Explicação
Deslocado duas vezes:
Experimente online!
Explicação
Deslocado três vezes:
Experimente online!
Explicação
fonte
Javascript, score:
14 (94346 bytes)Bem simples, com diferentes seções comentadas quando rotacionadas, o difícil foi encontrar nomes de variáveis utilizáveis e seções de comentários que não quebram a sintaxe Javascript.
Não rotacionado:
Rodado por 5:
Rodado por 10:
Rodado por 14: as coisas finalmente ficaram interessantes aqui, conseguiram abusar do sistema de tipos Javascript.
Rodado por 199:
Para encontrar as soluções, criei uma pequena ferramenta para me mostrar diferentes trechos quando girados por uma quantidade variável, e então encontrei certos padrões que eu poderia usar como blocos de construção úteis.
O principal é que
a/**/=>a
ainda é uma definição de função válida, que permite incorporar uma função de rotação reversa na seção de comentários. A partir daí, pode ser repetido algumas vezes, se feito corretamente.Como a maioria das seções de comentários está aninhada, pode ser possível encontrar outro resultado, mas torná-lo cada vez mais difícil com cada resposta adicionada devido a colisões e caracteres de controle.
Substituir todos os usos de
charCodeAt(0)
porcharCodeAt``
eliminaria 4 bytes de toda a solução, mas é muito trabalho para fazer do zero.fonte
charCodeAt()
para salvar 2 bytes?PHP com
-d output_buffering=on -d short_open_tag=on
, score: 255 (25.731 bytes)Semelhante à solução Haskell, copiando e colando essas quebras, então eu gerei isso usando esse script Perl .
Verificação deslocada 1, 16, 32 e 255 vezes.
Explicação
Utilizando PHP
<?
delimitador fez esta bastante fácil, mas eu tinha que evitar quaisquer cordas que pode acabar como<?
em outras partes do código, isto significa, basicamente03
,14
,25
,36
,47
,58
e69
. Contornar esses problemas era bastante fácil usando aritmética. Também é possível reduzir a contagem de bytes no programa original.fonte
Crane-Flak , Pontuação 3 (252 bytes)
Experimente online!
(Não funciona muito bem no Brain-Hack porque apenas os mods Crane-Flak são 256)
Deslocado por 1
Experimente online!
Deslocado por 2
Experimente online!
Deslocado por 3
Experimente online!
Explicação
O código principal em ação aqui é
onde
n
é um número arbitrário. Isso move tudo para o offstack, acrescentandon
a cada item (o módulo 256 está implícito na saída) e depois move todos eles de volta.No entanto, para o primeiro programa (ou seja, deslocado por 0), não precisamos fazer nada disso, porque mudar para zero é o programa gato. Então começamos com este código:
e desloque-o para baixo em 1
Isso está desequilibrado, então temos que corrigi-lo. Existem várias maneiras pelas quais podemos fazer isso usando meu método de escolha (por razões que se tornarão aparentes) é o seguinte:
Mudando isso em 2, obtemos
Como
()
é mais fácil lidar do{}
que usaremos os}
s para concluir o programa que desejamos. Isso significa que o)
pode ser equilibrado com meios bastante óbvios. Com algumas brincadeiras, podemos transformar isso em:Mudando isso de volta, temos
O passo 3 é tão complexo que eu realmente não o entendo mais. Usei a mesma técnica e brinquei com ela até que finalmente consegui todas as quatro para trabalhar de uma só vez. A técnica é praticamente a mesma, há muito mais mexida.
fonte
Python 3, Pontuação 1, 76 bytes
Shift 0: nenhuma alteração
Mudança 1:
Iniciou o trabalho no turno 2, mas "" se torna $$ e você não pode iniciar uma linha com isso.
Ao salvá-lo em um arquivo, verifique se não termina com uma nova linha. (vim -b arquivo.py + definir noeol)
fonte
Geléia , pontuação
12815 bytesDeslocamento 0:
Experimente online!
Turno 2:
Experimente 2 online!
Turno 3:
Experimente 3 online!
fonte