N.Puck,.Page,.Ford,.Ajax,.Act I:.Scene I:.[Enter Puck and Ford]Puck:Listen to thy heart!Ford:You is the difference between a cat and I.Scene V:.[Exeunt][Enter Page and Ajax]Ajax:You is the difference between a cat and Ford.Scene X:.Page:You is the product of Puck and I.Is you as big as zero?If so,you is the sum of the sum of the sum of a big big big big big cat and a big big big cat and a big cat and a cat.If not,you big big big big big cat.Speak thy mind!Ajax:You is the sum of you and a cat.Is you as big as Ford?If not,let us return to Scene X.Page:You is the sum of a big big big cat and a big cat.Speak thy mind![Exit Page][Enter Puck]Ajax:You is the sum of you and a cat.Is you as big as Ford?If not,let us return to Scene V.[Exeunt]
Experimente online!
Editar: tornou a resposta compatível com a implementação oficial do SPL - eu não conseguia fazê-lo funcionar antes.
Golpeou 6 bytes porque os números das cenas não precisam ser consecutivos.
Explicação :
SPL é um esolang projetado para se parecer com peças de Shakespeare. Substantivos positivos têm o valor de 1 (aqui gato é usado) e substantivos negativos têm o valor de -1 (nenhum foi usado, mas porco é um deles). Os adjetivos modificam uma constante multiplicando-a por 2.
N.
Tudo até o primeiro ponto é o título e não importa.
Puck,. row counter
Page,. column counter
Ford,. input
Ajax,. temp
Os caracteres são variáveis inteiras, cada um deles também tem uma pilha, mas eu não precisava usar esse recurso.
Act I:.
Scene I:.
Atos e cenas são usados como marcadores de goto
[Enter Puck and Ford]
Só é útil se exatamente dois personagens estiverem no palco ao mesmo tempo.
Puck:Listen to thy heart!
Lê um número e faz Ford se lembrar dele.
Ford:You is the difference between a cat and I.
Como você pode ver, o Engrish é válido no SPL. Isso torna o valor de Puck "o diferente entre um gato e eu". Mas o que isso significa? cat
é um substantivo positivo, por isso é Puck = 1 - Ford
.
Scene II:.
[Exeunt]
Exeunt é apenas um plural de "saída", e sem argumentos significa que todos no palco saem.
[Enter Page and Ajax]
Ajax:You is the difference between a cat and Ford.
Também é, Page = 1 - Ford
mas é falado por um ator diferente, então isso I
seria errado. Como é um loop, não posso simplesmente copiar o valor de Puck
.
Scene III:.
Page:You is the product of Puck and I.
Bem direto agora. Ajax = Puck * Page
.
Is you as big as zero?
"as [adj] as" é o ==
operador.
If so,you is the sum of the sum of the sum of a big big big big big cat and a big big big cat and a big cat and a cat.
Se Ajax == 0 ... "gato" é 1, "gato grande" é 2, "gato grande" é 4 e assim por diante. Depois de substituir as constantes simples, obtemos "a soma da soma da soma de 32 e 8 e 2 e 1" -> "a soma da soma de 40 e 2 e 1" -> "a soma de 42 e 1" -> "43", que é o ASCII para +.
If not,you fat fat fat fat fat cat.
caso contrário, é apenas "gordo gordo gordo gordo gordo", então o Ajax recebe o valor de 32, o ASCII por um espaço.
Speak thy mind!
Este é o comando para gerar um caractere.
Ajax:
You sum you and cat.Is you as big as Ford?If not,let us return to Scene III.
Esta é uma construção de loop. "Você soma você e gato" incrementa a página e if(Page != Ford) goto Scene III
. O restante do programa usa os mesmos componentes, portanto, aqui está uma versão mais legível do pseudocódigo:
Scene1:
input = [número da entrada];
linha = 0 - entrada + 1;
Scene2:
col = 0 - entrada + 1;
Scene3:
temp = linha * col;
if (temp == 0) {
temp = '+';
}outro{
temp = '';
}
putchar (temp);
Página = Página + 1;
if (Página! = Ford) vá para Scene3;
Ajax = 10;
putchar (Ajax);
Disco = Disco + 1;
if (Puck! = Ford) vá para Scene2;