Inspirado em github.com/JackToaster/Reassuring-Parable-Generator , por sua vez, inspirado em xkcd.com/1263 . As palavras possíveis são derivadas do reassuring.cfg desse repositório.
É recomendável dar uma olhada no reassuring.cfg (use a 12ª confirmação) para ver a gramática correspondente à saída (a saída é uma lista de todas as sequências correspondentes à gramática).
Tarefa: Seu programa deve gerar todas as 7968 linhas com distinção entre maiúsculas e minúsculas do texto exato contido em pastebin pastebin.com/2SNAJ1VH . Uma cópia do pastebin é salva no Wayback Machine
Aqui está uma amostra de 33 linhas motivadoras da pastabin:
Computers can't enjoy a salad.
Computers can't enjoy a cake.
Computers can't enjoy a ice cream cone.
Computers can't enjoy a meal.
Computers can't enjoy a drink.
Computers can't enjoy a steak.
Computers can't enjoy a chicken dinner.
Computers can't enjoy a piece of cake.
Computers can't enjoy a piece of pie.
Computers can't enjoy a cookie.
Computers can't enjoy a sandwich.
Computers can't taste a salad.
Computers can't taste a cake.
Computers can't taste a ice cream cone.
Computers can't taste a meal.
Computers can't taste a drink.
Computers can't taste a steak.
Computers can't taste a chicken dinner.
Computers can't taste a piece of cake.
Computers can't taste a piece of pie.
Computers can't taste a cookie.
Computers can't taste a sandwich.
Computers can't experience eating a salad.
Computers can't experience eating a cake.
Computers can't experience eating a ice cream cone.
Computers can't experience eating a meal.
Computers can't experience eating a drink.
Computers can't experience eating a steak.
Computers can't experience eating a chicken dinner.
Computers can't experience eating a piece of cake.
Computers can't experience eating a piece of pie.
Computers can't experience eating a cookie.
Computers can't experience eating a sandwich.
Regras do desafio:
- A saída das linhas pode ser solicitada da maneira que você desejar, mas todos os 7968 deles devem ser incluídos.
- A saída deve ser como uma única cadeia plana, não como uma lista de cadeias.
- Seu programa não deve aceitar nenhuma entrada ou uma entrada não utilizada vazia.
- Seu programa não pode buscar dados de nenhuma fonte online.
- Uma única nova linha à direita é opcional.
Isso é código-golfe , então o código mais curto vence.
code-golf
string
kolmogorov-complexity
grammars
fireflame241
fonte
fonte
No computer {can} {action}.
é repetido duas vezes eComputers {cannot_present}
produz frases como "Computadores não podem". Intencional?Respostas:
Zsh , 765 bytes
Esta pode ser a primeira coisa que eu já escrevi no zsh, mas tem o recurso incrivelmente conveniente de poder converter matrizes para preparar expansões (embora não seja tão conveniente quanto deveria ser ... ). Execute com
zsh -P
(contado como +1 byte), que é ativadoRC_EXPAND_PARAM
.Experimente online!
fonte
JavaScript (ES6),
12341091 bytesÉ uma boa contagem de bytes para começar! Hora de jogar golfe nessa enorme corda.
Menos golfe:
Quão?
(Este é de longe um dos meus golfe mais favoritos de todos os tempos!)
A gramática é armazenada na matriz
G
, que avalia isso:F
é uma função que divide uma string pelo delimitador|
e itera através dela. Por enquanto, tudo bem.Agora, o que está acontecendo com essa função interna?
Primeiro, inicializamos uma matriz
A
. Em seguida, encontramos todos os dígitos na string passadas
e construímos um subprograma: Usando cada dígiton
, geramos um loopfor
-of
que itera pelas entradas emG[n]
(armazenadas como propriedades deF
, já que funções em JavaScript também são objetos). Os loops são anexados um após o outro.Por exemplo, o subprograma gerado para
s="1 2 3"
inicia assim:Em cada iteração, o subprograma substitui cada dígito
s
por sua substituição correspondente, armazenadaF[n]
e o resultado é enviado paraA
. O subprograma éeval
ed eA
é retornado implicitamente.Usando
F
, o restante do programa simplesmente cria o restante da gramática a partir das regras de produção que já existem; substituições são simplesmente definidas por um índice de um dígito emG
.fonte
f
. Portanto,f=
deve ser adicionado à contagem de bytes.F
, em vez def
.)PHP, 877 bytes
Ah, isso foi divertido!
Sinta-se à vontade para tentar desenterrar mais um byte, se puder.
destroçado
explicação
A saída pode ser dividida em 48 blocos de 166 linhas cada. Dentro de cada pedaço, cada linha começa com um dos
Computers|A computer|No computer
seguidos por um dos 14 recursos negativos (paraComputers
eA computer
) ou 9 positivos (paraNo computer
).Codifiquei esses pedaços para 6 bits cada (3 assuntos diferentes -> menos 2 bits; os caps positivos e negativos compartilham chaves -> 4 bits superiores) e (provavelmente óbvio) adicionei 65 para usar os valores como códigos ASCII.
Dentro desses blocos, 8 combinações de verbo / adjetivo para 11 alimentos diferentes e 13 combinações diferentes para 6 artes diferentes, sempre na mesma ordem; para que eles possam simplesmente ser repetidos, usando a tecla do verbo / adjetivo para determinar se preciso listar alimentos ou bebidas no próximo loop.
Uma parte complicada permaneceu: algumas das letras maiúsculas requerem a forma gerúndria do verbo; e alguns dos verbos perdem um
e
na transformação. O índice de limite informa se é necessário ou não.(e, graças à ordem dos bits na codificação, posso simplesmente usar o caractere ASCII para a comparação).
Mas como? Depois de fazer malabarismos com expressões regulares por um tempo, eu simplesmente coloco um local
1
onde oe
item deve ser substituídoing
e um0
localing
que deve ser anexado e deixostrtr
fazer o trabalho.Essa é a história da versão não destruída acima. (1199 bytes compactados)
O golfe consistiu principalmente em 3 etapas:
strtr
foi estendido a tudo, exceto o assunto, a fim de mover variáveis parastrtr
.strtr
.A 19a palavra,
tast
foi substituída por uma letra maiúscula para se livrar de algumas aspas.Eu me pergunto o que aconteceria se eu também codificasse as combinações de verbo / adjetivo.
Talvez eu pudesse vencer Zsh; mas não tenho certeza se me pergunto o suficiente para tentar.
fonte
Retina,
12491192 bytesA saída excede as limitações do TIO. Eu queria usar
%`
estágios para evitar tudo,$%'¶$%`
mas por algum motivo isso não faz o que eu quero. Editar: salvou 57 bytes graças a @ fireflame241.fonte
ing
e o `Ito` é usado várias vezes. Cada chamada para1
,2
e5
é precedido e seguido por um espaço, por isso estes podem ser colocados na substituição. Da mesma forma,6
e7
sempre são seguidos por um período.3
parece ser usado apenas uma vez.Bubblegum , 23353 bytes
Sim. A maior parte não cabe em uma resposta, então ... Tanto o código quanto o link TIO estão em pastas.
Código (um hexdump do código)
Link TIO (a saída excede as limitações do TIO)
fonte