Inspiração . Postado com permissão .
Imprima um dos possíveis "fatos" do calendário XKCD:
Você pode obter o texto bruto e a estrutura da minha implementação de referência da APL ou da transcrição do Explain XKCD (incluindo o texto do título logo abaixo da ilustração).
Regras
Em todo nó de decisão, deve haver uma chance aleatória igual (pseudo-) de cada escolha.
Você pode usar todas as letras maiúsculas.
Você deve gerar três frases; uma pergunta, uma razão e um texto de título.
Os três frases devem ser encerrado por ?
, .
e, .
respectivamente, e separados entre si por um único espaço.
O único espaço em branco extra que você pode incluir é um espaço à direita e / ou quebra de linha.
Exemplos
Did you know that the Latest Sunset drifts out of sync with the Zodiac because of time zone legislation in Indiana? Apparently it's getting worse and no one knows why. While it may seem like trivia, it has to be corrected for by GPS satellites.
Did you know that Leap Year happens later every year because of precession of the equator? Apparently scientists are really worried. While it may seem like trivia, it is taken advantage of by high-speed traders.
Did you know that Easter drifts out of sync with the atomic clock in Colorado because of a decree by the pope in the 1500s? Apparently scientists are really worried. While it may seem like trivia, it causes huge headaches for software developers.
Did you know that shark week happens at the wrong time every year because of an arbitrary decision by Benjamin Franklin? Apparently it causes a predictable increase in car accidents.
Eu ... quero dizer ... eu ... Ok.Respostas:
Befunge-93,
19591930 bytesExperimente online!
Explicação
Nas três primeiras linhas, começamos construindo uma espécie de tabela de estados na pilha, representando o gráfico de todas as frases possíveis. Essas entradas da pilha são agrupadas em pares, para que haja primeiro um item de sequência e, em seguida, um salto ou ramificação. Onde necessário, o gráfico é preenchido com cadeias vazias e saltos de comprimento zero para atender a esse requisito.
Nosso loop principal começa então ao exibir um número, representando um item de string, da pilha. Esse número é interpretado como um deslocamento na tabela de strings na seção inferior da fonte. A tabela de strings é essencialmente um tipo de lista vinculada, agrupada em várias linhas para caber no espaço de memória restrito do Befunge.
Após a saída de uma sequência, o próximo item na pilha é um salto ou ramificação. Se o número for menor que 32, é um salto, que interpretamos retirando muitos pares de itens da pilha. Se o número for 32 ou mais, é uma ramificação e usamos o valor (menos 32) para pesquisar os detalhes da ramificação da tabela na última linha da fonte.
As entradas na tabela da ramificação consistem em uma contagem, seguida de uma lista de compensações. Uma vez que sabemos qual ramificação usar, simplesmente geramos um número aleatório, modulo a contagem de ramificações, para procurar o deslocamento apropriado. Esse deslocamento é então interpretado como um salto, eliminando o número necessário de itens da pilha.
Repetimos esse processo, produzindo uma string e, em seguida, executando um salto ou ramificação, até ficar sem entradas de pilha. Nesse ponto, simplesmente produzimos um "." para marcar o final da frase final e sair.
fonte
Javascript (ES6),
1698151015061501 bytesGraças a 12Me21 por corrigir um erro no código, que adicionou 2 bytes
f=
edocument.write(f())
não fazem parte da contagem de bytesfonte
Python 2 , 1297 bytes
-419 bytes graças a ovs.
Experimente online!
O código real:
Isso foi cansativo. Eu nem sequer joguei golfe básico. Alguém por favor escreva um script para jogar isso.
fonte
Carvão , 806 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
R ,
190317511743 bytesUma solução simples de força bruta. Pode ser uma maneira de jogar golfe um pouco mais.
Experimente online!
fonte
JavaScript (ES6), 1275 bytes
onde o
...
representa o resultado da execuçãoatob()
nessa cadeia e da substituição\
por\\
,`
com\`
, 0x00 por\0
e 0x0D por\r
:Experimente aqui, menos o
btoa
:fonte
APL (Dyalog) , 1302 bytes
Experimente online!
Adám ajudou com este ... então me desafiou a terminar. : P
-11 graças a Adám (usando sua nova ferramenta SBCS, posso abusar da codificação sem custo adicional).
fonte
Haskell ,
19491938 bytesExperimente online! (Possui 2 bytes extras para
f=
)Escrevi isso principalmente para que eu pudesse criar a estrutura de dados. Definitivamente isso poderia ser melhorado, mas estou cansado e tenho que sair em breve de qualquer maneira. Acho que a capitalização está correta, mas converterei tudo em maiúsculas, se estiver errado. Isso não mudará a contagem de bytes ou qualquer coisa, pois eu não fiz nada de estranho com os dados da string.
A ideia básica é uma lista vinculada de árvores em que cada nó está vazio (
E
), um sinal de pontuação (P
) ou um rótulo de sequência com filhos. Todos os nós, exceto osE
nós, têm um nó "seguidor" que vem depois deles.Edição: apenas notei um erro de ortografia (eu escrevi "ninguém sabe por que" em vez de "ninguém sabe por que"), então eu tive que adicionar um byte para corrigi-lo, mas também encontrei algum código que poderia ser cortado
fonte
APL (Dyalog Unicode) , 1593 bytes
C←?∘≢⊃⊢
S←C'|'∘≠⊆⊢
∊'Did you know that '(C('the '(S'Fall|Spring')' Equinox ')('the '(S'Winter |Summer ')(S'Solstice |Olympics '))('the '(S'Earliest |Latest ')(S'Sunrise |Sunset '))('Leap ',S'Day |Year ')'Easter '('the '(S'Harvest|Super|Blood')' Moon ')'Toyota Truck Month '('Daylight Savings Time '~C's∘')'Shark Week ')(C('happens '(S'earlier|later|at the wrong time')' every year ')('drifts out of sync with the '(S'Sun |Moon |Zodiac |atomic clock in Colorado|',' Calendar ',⍨S'Gregorian|Mayan|Lunar|iPhone'))('might '(S'not happen|happen twice')' this year '))'because of '(C('time zone legislation in ',S'Indiana|Arizona|Russia')'a decree by the pope in the 1500s'((S'precession|libration|nutation|libation|eccentricity|obliquity')' of the '(S'Moon|Sun|Earth''s axis|equator|prime meridian|',' line',⍨S'international date|mason-dixon'))'magnetic field reversal'('an arbitrary decision by ',S'Benjamin Franklin|Isaac Newton|FDR'))'? Apparently '(C'it causes a predictable increase in car accidents'('it was even more extreme during the ',S'Bronze Age|Ice Age|Cretaceous|1990s')'that''s why we have leap seconds'('there''s a proposal to fix it, but it ',S'will never happen|actually makes things worse|is stalled in congress|might be unconstitutional')'scientists are really worried' 'it''s getting worse and no one knows why')'. While it may seem like trivia, it '(S'causes huge headaches for software developers|is taken advantage of by high-speed traders|triggered the 2003 Northeast Blackout|has to be corrected for by GPS satellites|is now recognized as a major cause of World War I')'.'
Experimente online!
Define duas funções auxiliares e as usa em uma expressão gigante:
C←
C (para C hoose) é?∘≢
um número aleatório até o número de elementos na⊃
seleção⊢
de argumentos dos argumentosS←
S (para S plit e S elect) éC
escolhido entre'|'∘≠
o argumento⊆
particionado onde não é canalizado⊢
∊
£ nlist (flatten)C
escolhe a partir de uma lista de strings eS
escolhe entre os substrings de uma|
string delimitada, e estes são apenas usadas em combinação para construir um "fato".fonte