Dados os 95 caracteres imprimíveis em ASCII mais a nova linha, divida-os em dois grupos iguais de 48 caracteres (a seguir denominados grupo A e grupo B). Crie um mapeamento individual de sua escolha (você tem total discrição) entre os dois grupos. Em outras palavras, A
pode mapear a
e vice-versa, mas A
também pode mapear >
e vice-versa, se é isso que você precisa para o seu programa.
Depois de dividir o ASCII em dois grupos, escreva dois programas e / ou funções, usando apenas os caracteres de cada grupo, respectivamente. Em outras palavras, escreva um programa / função que use apenas os caracteres do grupo A e outro programa / função que use apenas os caracteres do grupo B.
Esses programas devem poder receber um caractere como entrada. O programa escrito com os caracteres do Grupo A deve gerar / retornar o mesmo caractere se a entrada for um caractere do grupo A e o caractere do grupo A mapeado se receber um caractere do grupo B; o programa do grupo A deve sempre gerar um caractere do grupo A. Da mesma forma, o programa do Grupo B deve exibir o mesmo caractere se for um caractere do grupo B e o caractere do grupo B mapeado se a entrada for um caractere do grupo A.
Isso pode não ser tão claro, então aqui está um exemplo. Se você presumir que todas as letras maiúsculas estão no grupo A e todas as letras minúsculas no grupo B e você escolheu que o mapeamento um para um dessas letras seja de uma para a outra, então: aqui estão alguns entradas / saídas de amostra:
Programa A:
Input Output
A A
D D
a A
q Q
Programa B:
Input Output
A a
D d
a a
q q
Outras regras:
- Os dois programas não precisam estar no mesmo idioma.
- Eles não precisam ser os dois programas ou as duas funções; um poderia ser um programa, o outro uma função, tudo bem.
- Eles não precisam trabalhar da mesma maneira, ter comprimento semelhante, algo assim; eles simplesmente precisam cumprir as outras regras acima.
- Sim, apenas um dos seus programas pode usar novas linhas e apenas um pode usar espaços (pode ser o mesmo ou um programa diferente).
- Você não precisa usar todos os 48 caracteres em cada programa.
As brechas padrão são proibidas, como de costume. Todos os programas devem ser independentes, sem arquivos que contenham o mapeamento escolhido.
Critérios de pontuação: código-golfe . Especificamente, a soma dos bytes do texto dos dois programas.
Poste sua resposta assim:
Idioma - # bytes + Idioma - # bytes = # bytes
Uma descrição inequívoca do seu mapeamento. Se for complicado, use um gráfico como este:
ABCDEFGHIJKLMNOPQRSTUVWXYZ (etc.) zyxwvutsrpqonmlkjihgfedcba (etc.)
Ou, você pode apenas explicá-lo (primeiros 48 mapas para os últimos 48 em sequência), seguido por sua resposta normalmente.
fonte
+
e>
, e o outro usando-
e<
. Em seguida, você deve tentar gerar os operadores ausentes, como um,
ou.
no programa que não pode usá-los.Respostas:
CJam - 11 bytes + CJam - 25 bytes = 36 bytes
Os caracteres são selecionados em grupos alternados de 16:
É legal que alguns dos mapeamentos possam ser obtidos com a tecla shift :)
Programa A:
Experimente online
Programa B:
Experimente online
Explicação:
Programa A:
Programa B:
fonte
\n
), mas não é fácil ver sem inspecionar o html. Você pode anexar umi
no final do programa para ver o código ASCII (ouci
também para lidar com uma entrada de nova linha, pois ela gera uma string de nova linha em vez de um caractere nesse caso)_0=
de0=_
modo que ele sempre envia um personagemCJam -
46442611 bytes + GolfScript -1421251159368474036 bytes = 47 bytesAgradecemos a Peter Taylor por jogar 6 bytes fora do programa GolfScript (e abrir caminho para muitos outros).
Agradecimentos a Dennis por jogar 15 bytes fora do programa CJam e 4 bytes fora do programa GolfScript.
Grupo A: todos os caracteres com código de caracteres pares.
Grupo B: todos os caracteres com código de caracteres ímpares, além de nova linha.
Estou usando o mapeamento óbvio entre os dois, ou seja, emparelhe os caracteres que diferem apenas no bit menos significativo, além de
~
e\n
. Aqui está o mapa completo (as colunas):Programa A (CJam, teste aqui ):
Programa B (GolfScript, teste aqui ):
Explicação
Programa A
(Desatualizado, será atualizado amanhã.)
Este programa deve transformar códigos de caracteres ímpares em pares, ou seja, definir o bit menos significativo como 0. A maneira óbvia de fazer isso é AND bit a bit com 126 (ou 254 etc.), mas é mais curto configurá-lo como 1 (via OR bit a bit com 1) em vez disso e, em seguida, diminua o resultado. Por fim, precisamos corrigir as novas linhas manualmente:
Programa B
(Desatualizado, será atualizado amanhã.)
Este programa pode simplesmente definir o bit menos significativo como 1 via OR bit a bit com 1 agora. Mas ele deve verificar os dois
\v
(código de caractere 0x0B) e<DEL>
(código de caractere 0xFF) manualmente e defini-los como~
alternativa. No GolfScript, eu não tinha acesso ao eval, mas você pode adicionar uma string a um bloco (que se torna parte do código desse bloco), que eu poderia mapear na entrada com%
:E quanto ao código gerado no bloco:
fonte
Java - 1088 bytes + Java - 1144 bytes = 2232 bytes
Obrigado a @ durron597 por ajudar a obter 1090 bytes de golfe a partir do primeiro programa.
Prova de que é possível fazer em um idioma (e não um esolang nesse idioma).
Use o truque unicode para converter o primeiro em todos os caracteres unicode. O segundo utiliza reflexão para obter acesso ao System.out para imprimir em std. Fora. Não foi possível usar o u porque foi usado no primeiro programa. Eu sei que isso pode ser mais eficaz, mas eu queria publicar uma solução válida primeiro.
Os grupos são mapeados de maneira arbitrária, mas basicamente o primeiro exigia apenas u, \ e os dígitos hexadecimais (em qualquer caso).
Os grupos:
Primeiro programa:
Equivalente a
Segundo programa:
Experimente aqui: https://ideone.com/Q3gqmQ
fonte
void x(int z)
, esses são caracteres na primeira charset tambémFIXO! Pitão - 23 bytes + Pitão - 30 bytes = 53 bytes
oops Erro de correção --- seja pacientemesma divisão ASCII que a de Martin:
Prog # 1: Teste on-line
Prog # 2: Teste on-line
fonte