A tarefa
Nesse desafio, sua tarefa é escrever três programas que formam um tipo de sistema mútuo. Vamos chamar os programas A
, B
e C
. Se um dos programas receber a fonte de outro programa como entrada, ele fornecerá a fonte do terceiro programa. Por exemplo, se A
é dado B
como entrada, ele gera C
. Se os programas são dadas sua própria fonte como entrada, devem saída as três cordas "three"
, "mutual"
e "quines"
(sem aspas). Em todos os casos, eles podem gerar uma nova linha final à direita. Para outras entradas, os programas podem fazer qualquer coisa, incluindo falha.
Exemplo
Por exemplo, suponha que os códigos fonte de A
, B
e C
são aSdf
, ghJk
e zxcV
. Em seguida, os programas devem se comportar da seguinte maneira.
Source Input Output
--------------------
aSdf aSdf three
aSdf ghJk zxcV
aSdf zxcV ghJk
ghJk aSdf zxcV
ghJk ghJk mutual
ghJk zxcV aSdf
zxcV aSdf ghJk
zxcV ghJk aSdf
zxcV zxcV quines
Regras e pontuação
As soluções A
, B
e C
podem ser tanto funções ou programas completos, mas eles devem ser completamente independentes: não código compartilhado é permitido.
Aplicam- se brechas padrão e regras de quine , para que os programas não possam acessar seus próprios códigos-fonte de forma alguma.
Sua pontuação é a contagem combinada de bytes de A
, B
e C
, quanto menor a pontuação, melhor.
public static void main
parte em algum lugar.) Ou apenas que você não pode escrever uma função chamada pelos três?Respostas:
CJam,
16514711410899 bytesObrigado a @ MartinBüttner por uma sugestão que ajudou a economizar 48 bytes!
Experimente online no intérprete CJam .
Verificação
Idéia
O conjunto {0, 1, 2, 3} é um grupo sob a operação ^ (binário exclusivo OR), em que cada elemento é seu próprio inverso.
Se todos os três programas forem idênticos, exceto o primeiro caractere (um elemento de {0, 1, 2, 3} ), podemos distinguir e imprimi-los facilmente:
Começamos digitando o dígito no início do código fonte e da entrada.
Se o resultado estiver em 0 , a fonte e a entrada correspondem.
Assim, imprimimos uma das três palavras, selecionadas por esse dígito comum.
Se o resultado não for 0 , é o elemento {1, 2, 3} que não está na fonte nem na entrada.
Assim, nós a imprimimos, seguidos pelo restante da entrada.
Como funciona
fonte