Aviso: Este desafio contém alguns spoilers leves de O Segredo da Ilha dos Macacos.
No final do jogo, você está sendo conduzido pelas catacumbas por uma cabeça de um navegador magicamente preservada:
Você precisa do colar do globo ocular, mas a Cabeça reluta em dar a você. Uma maneira de obtê-lo é apenas continuar implorando:
Guybrush: Por favor, posso ter esse colar?
Cabeça: Não, mas obrigado por perguntar tão educadamente.
Guybrush: Oh, vamos lá, pleeeeease?
Cabeça: Você pode implorar o quanto quiser, mas não pode tê-lo.
Guybrush: Muito por favor?
Cabeça: Você pode implorar o quanto quiser, mas não pode tê-lo.
Guybrush: MUITO BONITO, por favor?
Cabeça: Você pode implorar o quanto quiser, mas não pode tê-lo.
Guybrush: Por favor, com açúcar por cima?
Cabeça: Oh, tudo bem, seu bebê grande. Você pode ter isso. Ei, de que serve um colar se você não tem ombros?
O desafio
Escreva um programa completo que imprima o diálogo acima. O problema é que cada vez que o programa é chamado, ele deve imprimir apenas duas linhas (uma suplicando por Guybrush e a resposta do chefe). Por exemplo, se sua submissão for escrita em Python, o uso deve ser assim:
$> python please.py
Guybrush: May I please have that necklace?
Head: No, but thanks for asking so politely.
$> python please.py
Guybrush: Oh come on, pleeeeease?
Head: You can beg all you want, but you can't have it.
$> python please.py
Guybrush: Pretty please?
Head: You can beg all you want, but you can't have it.
$> python please.py
Guybrush: Pretty PRETTY please?
Head: You can beg all you want, but you can't have it.
$> python please.py
Guybrush: Pretty please with sugar on top?
Head: Oh, all right, you big baby. You can have it. Hey, what good's a necklace if you don't have shoulders?
A chamada do programa mais de 5 vezes pode resultar em um comportamento indefinido; portanto, você pode fazer um loop, continuar imprimindo as duas últimas linhas ou o programa pode até ser interrompido após a 5ª chamada.
Você pode gravar em um arquivo no diretório de trabalho ou modificar o código fonte do próprio programa para acompanhar as invocações. Neste último caso, seu programa não deve depender de seu próprio nome de arquivo. (No primeiro caso, você pode assumir que o nome do arquivo do seu programa não entrará em conflito com os nomes dos quais o programa depende.)
Você não deve assumir um ambiente semelhante ao REPL ou que quaisquer dados sejam mantidos na RAM entre as invocações. Por exemplo, se você responder no Mathematica, você deve assumir que eu encerrei o kernel entre invocações.
Isso é código de golfe, a resposta mais curta (em bytes) vence. Se o seu programa depender da existência de arquivos adicionais antes da primeira chamada , inclua o nome e o conteúdo na contagem de bytes.
fonte
node please.js
produzindo 5 saídas diferentes.Respostas:
Python, 224 + 97 + 1 = 322 caracteres
A solução mais simples para começar todos nós. Obrigado ao gnibbler por me ajudar a eliminar 18 bytes!
Requer que o arquivo
z
esteja presente no mesmo diretório (+1 para o nome do arquivo, +224 para o tamanho do arquivo):Você pode gerar
z
com o seguinte:Resultado:
fonte
line1\nline2|line3\nline4|line5\nline6|line7\nline8|line9\nline10
Agora você pode dividir em|
e apenasprint D[n]
Lisp comum (SBCL): 659 caracteres
Explicações
format
comnil
).Esse não será o envio mais curto, mas achei que era uma boa abordagem para o problema.
Invocação de Firt
Invocações subsequentes
fonte
C # - 593 + 1 + 1 caracteres (595)
Edições: atualizadas com sugestões de Martin e várias outras otimizações
O primeiro +1 é um nome de arquivo. O segundo +1 é o conteúdo desse arquivo. Sem todos os espaços e quebras de linha removidos, você pode lê-lo:
Explicação
Confia em um arquivo de texto chamado "x" para estar presente no diretório Inicialmente deve conter um zero e é usado para armazenar o progresso.
O programa retira o elemento relevante da matriz de strings de acordo com o progresso e grava o progresso no final. Algumas linhas foram reutilizadas para diminuir o comprimento, daí a lógica de seleção de índices
h+b[(a+5)/6*2+1]
para a seleção de respostas.Resultado
Meu primeiro código de golfe, provavelmente não o mais curto possível em C #, mas ei - Monkey Island, não resisti!
Código retirado:
fonte
a<1?1:a<8?3:9
, se o C # suportar números inteiros verdadeiros, tambéma?a<8?3:9:1
. Mas você provavelmente pode até fazer uso da divisão inteira e fazer(a+5)/6*2
e mover a string final da cabeça para substituir a primeira vazia (índice 5). E tente coisas comousing s=System.String;
. (Ah, e você pode ser capaz de omitir o namespace, ou até mesmo usar namespaceSystem
para evitarSystem
em todo o usando.)JS,
488473Atualizar 5 vezes a página que contém esse código exibe as 5 caixas de diálogo diferentes.
Demo:
http://c99.nl/f/212197.html
fonte
Perl - 356 bytes
Uma abordagem auto-modificadora, com substituições de strings comuns.
Uso da amostra:
fonte