Meu dever de casa é escrever um ensaio marciano (veja abaixo) entre 729 e 810 palavras, inclusive. Sua tarefa é escrever um programa que gere o ensaio.
História
Por volta da virada do século XX, a espiritualista Catherine-Elise Müller teria se comunicado com os marcianos. Durante transes sonâmbulos, ela escrevia roteiros marcianos. O psicólogo Théodore Flourney descobriu que seus escritos marcianos eram muito semelhantes aos franceses nativos e, em seu livro "Da Índia ao planeta Marte", ele documentou o alfabeto marciano de Catherine.
O que se segue é vagamente baseado nesse alfabeto com um mito extenso.
Descrição do Problema
A língua marciana tem 21 letras, mostradas aqui ao lado de cada equivalente latino:
Infelizmente, não há Unicode para Marciano (apesar de Marte fazer parte do universo), por isso estamos presos a caracteres latinos.
Enquanto em inglês nossos fonemas se dividem em dois tipos principais (consoantes / vogais) que mapeamos livremente para letras, Marciano possui três tipos de letras:
- As vogais: aeimnou
- As consoantes difíceis: bcdgkpt
- As consoantes suaves: fhlrsvz
Além disso, o idioma marciano contém um único sinal de pontuação - o período.
Uma palavra marciana é um conjunto de 3 a 9 letras. Todas as palavras marcianas têm pelo menos uma vogal, uma consoante dura e uma consoante suave (em qualquer arranjo). Por exemplo, fng
, cdaz
, vpi
, e pascal
são palavras marcianas.
Uma frase marciana é um conjunto de 3 a 9 palavras marcianas delimitadas por espaços e seguidas por um ponto final.
Um parágrafo marciano é um conjunto de 3 a 9 sentenças marcianas delimitadas por espaços e seguidas por uma nova linha.
Um ensaio marciano é uma coleção de parágrafos marcianos que não contêm repetições de palavras contíguas.
Uma repetição contígua de palavras é qualquer constructo SS em que S é um conjunto contíguo de palavras. Observe que essa definição ignora os limites de sentenças e parágrafos.
Exemplos
Observação: existe uma nova linha posterior à direita após cada exemplo (já que todos os parágrafos marcianos terminam em uma nova linha)
Ensaio não marciano
lorem ipsum dolor sit amet. quis nostrud exercício ullamco laboris.
...por muitas razões. Este exemplo é para ilustrar algumas regras diversas:
- Lorem não é uma palavra marciana porque não tem consoantes difíceis.
- amet não é uma palavra marciana porque não tem consoantes suaves. (
m
é uma vogal marciana). - quis não é uma palavra marciana porque não tem consoantes difíceis
- quis não é uma palavra marciana porque q não é uma letra marciana
- exercício não é uma palavra marciana porque tem mais de 9 letras
- exercício não é uma palavra marciana porque x não é uma letra marciana
Ensaio marciano
fng cdaz vpi. pascal quebrou básico. popplers gosto muito.
... porque é um parágrafo marciano. O parágrafo marciano contém três frases marcianas.
Ensaio não marciano
fng cdaz vpi. pascal quebrou básico. regras pascal gratuitas.
... já que free pascal rules.
não é uma sentença marciana, porque free
nem rules
são palavras marcianas, porque elas não têm consoantes difíceis.
Ensaio marciano
fng cdaz vpi. pascal quebrou básico. popplers gosto muito. cdaz vpi fng. pausas básicas pascal. popplers soco forte. fng cdaz vpi.
... que contém dois parágrafos marcianos. A frase fng cdaz vpi.
aparece duas vezes, mas está perfeitamente bem.
Ensaio não marciano
popplers gosto fng. cdaz vpi pascal. quebrou fng cdaz vpi. Pascal quebrou planetas omicron. sustos básicos cabras. vpi piv vpi.
... porque o construto fng. cdaz vpi pascal. broke fng cdaz vpi. [nl] pascal broke
é uma repetição de palavras contígua.
Desafio
Seu desafio é escrever uma função ou programa que não aceite nenhuma entrada, que produz como saída minha lição de casa; isto é, seu programa deve gerar um ensaio marciano entre 729 e 810 palavras (inclusive). Lembre-se de que a saída do seu programa deve ser um ensaio marciano válido, mas você não precisa gerá-lo aleatoriamente ou diferente a cada vez. Tudo o que você faz para gerar um ensaio marciano válido conta.
Eu escrevi um programa C ++ para verificar ensaios que você tem permissão para usar.
Isso é código de golfe. O menor código em bytes vence. Lacunas padrão não permitidas.
Respostas:
05AB1E ,
25242220 bytes-2 bytes graças a Emigna (refator significativo, obrigado cara).
Experimente online!
Acontece que a versão de 810 palavras é mais curta que a versão de 729 palavras.
Saída:
fonte
"."
pode ter'.
1 byte salvo.A7£œJðý72ô€¨'.«9ô9£»
para 20.Gelatina ,
28 26 25 2423 bytes-1 byte graças a carusocomputing (substitua a palavra
thimble
porabcdefg
)TryItOnline!
Quão?
Faz uma lista de todas as
362880
permutações dasseteprimeiras nove letras do alfabeto inglêsabcdefghi
, todas com propriedades de palavras marcianas e todas distintas, e as formata em um ensaio usando as primeiras729
palavras.* período
fonte
abcdefg
.Ruby,
86 83 8279 bytesO truque: imprima todos os números entre 102000000 e 102222222 na base 3
fonte
Python 3,
121119 bytesrepl.it
Quão?
Faz a contagem regressiva
i=729
e obtém uma lista das letras da i-ésima permutação'thimble'
como a próxima palavra marciana distinta (list(permutations('thimble'))[i]
).Evita o
''.join(...)
uso de a*expression
para descompactar a lista enquanto altera o separador padrãoprint
de um espaço para a sequência vazia (sep=''
).Utiliza o
end
argumento de,print
opcionalmente, para adicionar espaços, pontos finais e avanço de linha conforme necessário, usando aritmética modular. Um ponto final ocorre após cada nona palavra ('.'*(i%9<1)
) e um avanço de linha ocorre após cada oitenta e uma palavra, caso contrário, ocorre um espaço, obtido pela indexação em uma cadeia de dois caracteres (' \n'[i%81<1]
).fonte
Mathematica, 113 bytes
Função sem nome que produz uma string como saída; essa sequência é um ensaio marciano em que cada sentença tem três palavras e cada parágrafo tem três sentenças. (Sua saída determinística está abaixo.)
O núcleo do algoritmo usa o fato matemático interessante de que as diferenças da sequência de Thue – Morse formam uma sequência infinita dos três símbolos –1, 0 e 1 que não possuem repetições de dígitos contíguos.
Differences@Array[ThueMorse,730]
gera essa sequência, com o comprimento 729.Então
"ark"["bus","car"][[#]]&/@
é aplicado a esta sequência; isso converte cada 1 em "barramento" (o primeiro argumento), cada -1 em "carro" (o último argumento) e cada 0 em "arca" (a cabeça da função).(p=Partition)[...,3]~p~3
divide essa sequência de palavras em listas aninhadas, cada uma consistindo em três listas de três palavras cada. Por fim,StringRiffle[...,n=".\n",". "," "]
concatena todas as palavras juntas, com diferentes separadores, dependendo dos níveis da lista; e<>n
anexa o período final e a nova linha.A saída com certeza não parece livre de repetição ....
Mathematica, 100 bytes
Uma porta direta do algoritmo Jelly de Jonathan Allen.
fonte
Print@"fng cdaz vpi. pascal broke basic. popplers taste great."
PHP, 86 bytes
Gera um ensaio aleatório de 729 palavras que não repete nenhuma palavra.
Use como:
Explicação:
fonte
///, 95 bytes
(nova linha adicional no final, não visível aqui)
Experimente online!
Redação:
fonte
JavaScript (ES6), 130 bytes
Este ensaio contém 774 palavras marcianas, de um dicionário de 308 palavras distintas, composto por todas as letras marcianas.
As letras são escolhidas de maneira pseudo-aleatória, usando a seguinte fórmula:
Onde
71
é o menor primo [1] para o qual nenhuma repetição contígua de palavras aparece com este módulo.Mostrar snippet de código
[1] Só testei primos no momento em que escrevi esse código. O menor candidato não privilegiado é
56
.fonte
Python 3,
404270332339285266259 bytesEsta é uma tentativa de criar um ensaio marciano aleatório, amostrando aleatoriamente o alfabeto marciano e verificando depois quais palavras funcionam.
Editar: -10 bytes da sugestão de Zachary T para usar
R=range
. -9 bytes de mudar.intersection(w)
para&set(w)
. -7 bytes de mudarA[random.randrange(21)]
pararandom.choice(A)
.Ungolfing
fonte
import
)range(9)
a uma variável e também em&
vez de.intersection
?range
, e usando isso?