Desafio
Escreva o programa mais curto P, de modo que
- P pega qualquer número inteiro positivo n como entrada e gera uma sequência de programas P 1
executar P 1 (sem entrada) gera uma sequência de programa P 2 ,
executar P 2 (sem entrada) gera uma sequência de programa P 3 ,
...
- execução de P n (sem entrada) envia exatamente "Olá!" (sem as aspas).
Esquematicamente:
P (n) → P 1 → P 2 → ... → P n → Olá!
Critério
- A E / S é via stdin / stdout.
- O comprimento do programa é medido em bytes.
- Os programas consistem apenas em caracteres imprimíveis ASCII.
- Não deve haver duplicatas entre os programas P, P 1 , ..., P n .
EDIT: Os programas P, P 1 , ..., P n devem ser código fonte e "executar o programa" refere-se a qualquer processamento que produz a saída (ou seja, interpretação, compilação e execução, etc.).
Respostas:
Golfscript
3914Exemplo:
Supondo que n = 4 e nosso programa seja P , estas são as etapas:
Execute P com o parâmetro 4 . A saída é
"\"\\\"\\\\\\\"Hello!\\\\\\\"\\\"\""
( P 1 )Execução de saídas P 1
"\"\\\"Hello!\\\"\""
( P 2 )Execução de saídas P 2
"\"Hello!\""
( P 3 )Execução de saídas P 3
"Hello!"
( P 4 )Executando saídas P 4
Hello!
. Se você não confia em mim, siga este link ☺.fonte
\'\\\'\\\\\\\'Hello!\\\\\\\'\\\'\'
(ou seja, sem as aspas externas), quando eu o executo tanto no Linux quanto no Linux. Win 7 (usandoecho 4 | ...
em um prompt de comando). Alguma idéia de qual possa ser o problema?~''\(,{)2\?('\\'*}/]"'"*:z"'Hello!"z-1%"'"
;"..."
, onde...
está a entrada. Por exemplo,;"4"
teria revelado o problema de cotações ausentes acima, enquanto simplesmente precedendo o programa por"4"
não.) ...;
. Quando escrevi o primeiro programa, esqueci-me disso ao longo do caminho, embora tenha sido eu quem o escreveu no meta site: meta.codegolf.stackexchange.com/a/521/3527JavaScript, 58 caracteres
fonte
_
for 0, ele gera, caso contrário, ele exibe a definição da função e chamada com "Olá!"_
um menosPerl (
4536)Corra com
perl -M5.010
para usarsay
.For
n=1
, saídassay q(Hello!)
For
n=2
, saídassay q(say q(Hello!))
Para
n=3
, saídassay q(say q(say q(Hello!)))
e assim por diante.
fonte
Python3, 66
fonte
Lisp comum, 68 caracteres
A única coisa não-direta: gera mais um nível de programa do que o necessário e avalia-o, porque
eval
é um caractere menor queprint
.fonte
Lisp comum: 65
Esta versão é menor que a resposta CL existente. Caso seu Lisp coaxe com um stackoverflow, você precisará usar isso, 81 bytes:
Sei que estou atrasado para a festa e tenho certeza de que isso ainda pode ser otimizado.
Demonstração (cuidado, alguns REPLs on-line não funcionam corretamente):
Observe que:
Testado usando SBCL 1.2.11.debian
Existem muitos avisos porque estou fazendo coisas que não deveriam ser feitas com seriedade. Felizmente, todos os avisos são impressos com ponto-e-vírgula, para que sejam tratados como comentários de qualquer maneira.
A duplicação ocorre porque um é o valor de retorno e uma saída real. Se o valor de retorno também conta, simplifica para 58 bytes:
#1=(SETF N(READ)(CADDR'#1#)(1- N)W(IF(= N 0)"Hello!"'#1#))
Eu ainda sei que estou atrasado para a festa
fonte
Python 2.7, 57
fonte
Haskell, 62
fonte
Bash, 47 ou 12 (se eu usar golfbash)
Código:
código golfbash:
Código anterior (49):
Usar:
Tornar programa P
Exemplo
Faça P1:
Faça P2:
Faça P3:
Faça P4:
Execute P4:
Digamos que eu criei uma nova linguagem de uso geral chamada golfbash - parecida com golfscript - que possui alguns comandos úteis como estes:
Então eu poderia escrever isso:
Isso seria legal, não é?
fonte
F #, 182
fonte
J - 31 char
Lembre-se de que J usa seqüências de caracteres no estilo Pascal:
'It''s too easy!'
Explicado:
".1!:1]1
- Leia uma linha do stdin e converta-a em um número.<:2^
- Leve 2 para a potência desse número e diminua.''''#~
- Faça uma sequência com tantas cópias do caractere de aspas simples.'Hello!'(],,)
- Anexe essas aspas à frente e atrás deHello!
.Uso:
fonte
Python 2.7: 75
Golfe pela primeira vez, não tenho certeza se estou fazendo certo; p
fonte
h
também seja conhecida nos programas subseqüentes? (Para que isso teria de ser executado em um REPL ou algo assim?)Clojure, 36 bytes
Símbolo
avalia como
Crie um símbolo com 5 aspas simples e execute o resultado até que não haja mais aspas.
fonte