Mi tarea es escribir un ensayo marciano (ver abajo) entre 729 y 810 palabras, inclusive. Su tarea es escribir un programa que generará el ensayo.
Historia
A principios del siglo XX, la espiritualista Catherine-Elise Müller presuntamente se comunicó con los marcianos. Durante los trances somnambulatorios, ella escribía guiones marcianos. El psicólogo Théodore Flourney descubrió que sus escritos marcianos eran muy similares a su francés nativo, y en su libro "De la India al planeta Marte", documentó el alfabeto marciano de Catherine.
Lo siguiente se basa libremente en ese alfabeto con un mito extendido.
Descripción del problema
El idioma marciano tiene 21 letras, que se muestran aquí al lado de cada equivalente latino:
Desafortunadamente, no hay Unicode para Martian (a pesar de que Marte es parte del universo), por lo que estamos atrapados usando caracteres latinos.
Mientras que en inglés nuestros fonemas se dividen en dos tipos principales (consonantes / vocales) que asignamos libremente a las letras, Martian tiene tres tipos de letras:
- Las vocales: aeimnou
- Las consonantes duras: bcdgkpt
- Las consonantes suaves: fhlrsvz
Además de esto, el idioma marciano contiene un único signo de puntuación: el punto.
Una palabra marciana es un conjunto de 3 a 9 letras. Todas las palabras marcianas tienen al menos una vocal, una consonante dura y una consonante suave (en cualquier disposición). Por ejemplo, fng
, cdaz
, vpi
, y pascal
son palabras de Marte.
Una oración marciana es un conjunto de 3 a 9 palabras marcianas delimitadas por espacios y seguidas de un punto.
Un párrafo marciano es un conjunto de 3 a 9 oraciones marcianas delimitadas por espacios y seguidas de una nueva línea.
Un ensayo marciano es una colección de párrafos marcianos que no contiene repeticiones de palabras contiguas.
Una repetición de palabras contiguas es cualquier construcción SS donde S es un conjunto de palabras contiguas. Tenga en cuenta que esta definición ignora los límites de las oraciones y los párrafos.
Ejemplos
Tenga en cuenta: hay una nueva línea final después de cada ejemplo (ya que todos los párrafos marcianos terminan en una nueva línea)
Ensayo no marciano
lorem ipsum dolor sentarse amet. quis nostrud exercitation ullamco laboris.
...por muchos motivos. Este ejemplo es para ilustrar algunas reglas diversas:
- lorem no es una palabra marciana porque no tiene consonantes duras.
- amet no es una palabra marciana porque no tiene consonantes suaves. (
m
es una vocal marciana). - quis no es una palabra marciana porque no tiene consonantes duras
- quis no es una palabra marciana porque q no es una letra marciana
- la ejercitación no es una palabra marciana porque tiene más de 9 letras
- la ejercitación no es una palabra marciana porque x no es una letra marciana
Ensayo marciano
fng cdaz vpi. Pascal rompió lo básico. los popplers saben muy bien.
... porque es un párrafo marciano. El párrafo marciano contiene tres oraciones marcianas.
Ensayo no marciano
fng cdaz vpi. Pascal rompió lo básico. reglas pascales gratis.
... ya free pascal rules.
que no es una oración marciana, porque free
tampoco lo rules
son las palabras marcianas, porque no tienen consonantes duras.
Ensayo marciano
fng cdaz vpi. Pascal rompió lo básico. los popplers saben muy bien. cdaz vpi fng. descansos basicos pascal. los popplers golpean fuerte. fng cdaz vpi.
... que contiene dos párrafos marcianos. La oración fng cdaz vpi.
aparece dos veces, pero eso está perfectamente bien.
Ensayo no marciano
popplers gusto fng. cdaz vpi pascal. rompió fng cdaz vpi. Pascal rompió planetas omicron. Asusta a las cabras básicas. vpi piv vpi.
... porque la construcción fng. cdaz vpi pascal. broke fng cdaz vpi. [nl] pascal broke
es una repetición de palabras contiguas.
Reto
Su desafío es escribir una función o programa que no acepte ninguna entrada, lo que produce como salida mi tarea; es decir, su programa debe generar un ensayo marciano entre 729 y 810 palabras (inclusive). Tenga en cuenta que el resultado de su programa debe ser un ensayo marciano válido, pero no tiene que generarlo de forma aleatoria o diferente cada vez. Todo lo que haga para generar un ensayo marciano válido cuenta.
He escrito un programa en C ++ para verificar los ensayos que puedes usar.
Este es el código de golf. El código más corto en bytes gana. Lagunas estándar no permitidas.
Respuestas:
05AB1E ,
25242220 bytes-2 bytes gracias a Emigna (refactor significativo, gracias hombre).
Pruébalo en línea!
Resulta que la versión de 810 palabras es más corta que la versión de 729 palabras.
Salida:
fuente
"."
puede ser'.
por 1 byte guardado.A7£œJðý72ô€¨'.«9ô9£»
por 20.jalea ,
28 26 25 2423 bytes-1 byte gracias a carusocomputing (reemplaza la palabra
thimble
conabcdefg
)TryItOnline!
¿Cómo?
Hace una lista de todas las
362880
permutaciones de las primerassietenueve letras del alfabeto inglésabcdefghi
, que tienen las propiedades de las palabras marcianas y son distintas, y las formatea en un ensayo usando las primeras729
palabras.* periodo
fuente
abcdefg
.Ruby,
86 83 8279 bytesEl truco: imprima todos los números entre 102000000 y 102222222 en la base 3
fuente
Python 3,
121119 bytesrepl.it
¿Cómo?
Cuenta atrás
i=729
y obtiene una lista de las letras de la i-ésima permutación de'thimble'
como la siguiente palabra marciana distinta (list(permutations('thimble'))[i]
).Evita
''.join(...)
uso de a*expression
para desempaquetar la lista al cambiar el separador predeterminadoprint
de un espacio a la cadena vacía (sep=''
).Utiliza el
end
argumento deprint
agregar opcionalmente espacios, paradas completas y avances de línea según sea necesario utilizando aritmética modular. Un punto final va después de cada novena palabra ('.'*(i%9<1)
) y un avance de línea va después de cada ochenta y una primera palabra; de lo contrario, se hace un espacio al indexar en una cadena de dos caracteres (' \n'[i%81<1]
).fuente
Mathematica, 113 bytes
Función sin nombre que produce una cadena como salida; esa cadena es un ensayo marciano donde cada oración tiene tres palabras y cada párrafo tiene tres oraciones. (Su salida determinista está abajo).
El núcleo del algoritmo utiliza el hecho matemático genial de que las diferencias de la secuencia Thue – Morse forman una secuencia infinita de los tres símbolos –1, 0 y 1 que no tiene repeticiones de dígitos contiguas.
Differences@Array[ThueMorse,730]
genera esa secuencia, a la longitud 729.Luego
"ark"["bus","car"][[#]]&/@
se aplica a esta secuencia; esto convierte cada 1 en "bus" (el primer argumento), cada –1 en "car" (el último argumento) y cada 0 en "ark" (el encabezado de la función).(p=Partition)[...,3]~p~3
divide esta secuencia de palabras en listas anidadas, cada una de las cuales consta de tres listas de tres palabras cada una. Finalmente,StringRiffle[...,n=".\n",". "," "]
concatena todas las palabras juntas, con diferentes separadores dependiendo de los niveles de la lista; y<>n
agrega el período final y la nueva línea.La salida seguramente no se ve libre de repeticiones ...
Mathematica, 100 bytes
Un puerto directo del algoritmo Jelly de Jonathan Allen.
fuente
Print@"fng cdaz vpi. pascal broke basic. popplers taste great."
PHP, 86 bytes
Genera un ensayo aleatorio de 729 palabras que no repite palabras.
Usar como:
Explicación:
fuente
///, 95 bytes
(nueva línea adicional al final, no visible aquí)
Pruébalo en línea!
Ensayo:
fuente
JavaScript (ES6), 130 bytes
Este ensayo contiene 774 palabras marcianas, de un diccionario de 308 palabras distintas, hechas de todas las letras marcianas.
Las letras se seleccionan de forma pseudoaleatoria, utilizando la siguiente fórmula:
Donde
71
es el primo más pequeño [1] para el cual no aparece la repetición de palabras contiguas con este módulo.Mostrar fragmento de código
[1] Solo probé los números primos cuando escribí este código. El candidato no primo más pequeño es
56
.fuente
Python 3,
404270332339285266259 bytesEste es un intento de crear un ensayo marciano aleatorio, probando al azar el alfabeto marciano y comprobando después qué palabras funcionan.
Editar: -10 bytes de la sugerencia de Zachary T para usar
R=range
. -9 bytes de cambiar.intersection(w)
a&set(w)
. -7 bytes de cambiarA[random.randrange(21)]
arandom.choice(A)
.Ungolfing
fuente
import
)range(9)
a una variable, así como en&
lugar de.intersection
?range
, luego usándola?