Моя домашняя работа - написать марсианское сочинение (см. Ниже) от 729 до 810 слов включительно. Ваша задача - написать программу, которая будет генерировать эссе.
история
Примерно на рубеже 20-го века спиритуалист Екатерина Элиз Мюллер якобы общалась с марсианами. Во время сомнамбуляционных трансов она выписывала марсианские сценарии. Психолог Теодор Флурни обнаружил, что ее марсианские письма очень похожи на ее родной французский язык, и в своей книге «От Индии до планеты Марс» он задокументировал марсианский алфавит Екатерины.
Следующее свободно основано на этом алфавите с расширенными мифами.
описание проблемы
Марсианский язык имеет 21 букву, показанную здесь рядом с каждым латинским эквивалентом:
К сожалению, для марсиан нет Unicode (несмотря на то, что Марс является частью вселенной), поэтому мы застряли на латинских символах.
В то время как в английском языке наши фонемы разбиваются на два основных типа (согласные / гласные), которые мы свободно отображаем на буквы, у марсианского есть три типа букв:
- Гласные: aeimnou
- Твердые согласные: bcdgkpt
- Мягкие согласные: fhlrsvz
В дополнение к этому марсианский язык содержит один знак пунктуации - точку.
Марсианский слово представляет собой набор из 3 -х до 9 букв. У всех марсианских слов есть по крайней мере один гласный, один жесткий согласный и один мягкий согласный (в любом расположении). Так , например, fng
, cdaz
, vpi
и pascal
являются марсианские слова.
Марсианское предложение представляет собой набор из 3 до 9 марсианских слов , разделенных пробелами и последующего период.
Марсианское пункт представляет собой набор 3 до 9 марсианских предложений , разделенных пробелами и последующим переводом строки.
Марсианское эссе представляет собой сборник марсианских пунктов , который не содержит смежные повторов слов.
Смежное слово повторение любой конструкции СС , где S представляет собой непрерывный набор слов. Обратите внимание, что это определение игнорирует границы предложений и абзацев.
Примеры
Пожалуйста, обратите внимание: за каждым примером следует один завершающий символ новой строки (поскольку все марсианские абзацы заканчиваются символом новой строки)
Не марсианский очерк
Lorem Ipsum Dolor Sit Amet. Quis Nostrud упражнение Ullamco Labour.
...по многим причинам. Этот пример иллюстрирует некоторые разные правила:
- Lorem не является марсианским словом, потому что в нем нет твердых согласных.
- амет не является марсианским словом, потому что в нем нет мягких согласных. (
m
это марсианская гласная). - quis не является марсианским словом, потому что в нем нет твердых согласных
- Quis не марсианское слово, потому что Q не марсианская буква
- Упражнение не марсианское слово, потому что оно имеет более 9 букв
- упражнение не марсианское слово, потому что х не марсианская буква
Марсианский эссе
fng cdaz vpi. Паскаль сломал основной. Попплеры имеют прекрасный вкус.
... потому что это марсианский абзац. Марсианский параграф содержит три марсианских предложения.
Не марсианский очерк
fng cdaz vpi. Паскаль сломал основной. бесплатные правила паскаля.
... так как free pascal rules.
не марсианин предложение, потому что ни free
ни rules
не марсианские слова, потому что они не имеют каких - либо жестких согласных звуков.
Марсианский эссе
fng cdaz vpi. Паскаль сломал основной. Попплеры имеют прекрасный вкус. cdaz vpi fng. основные перерывы паскаль. Попплеры бьют сильно. fng cdaz vpi.
... который содержит два марсианских абзаца. Предложение fng cdaz vpi.
появляется дважды, но это прекрасно.
Не марсианский очерк
Попплерс вкус фщ. cdaz vpi паскаль. сломал фщ cdaz впи. паскаль разбил планеты омикрон. Основные паники коз. впи пив впи.
... потому что конструкция fng. cdaz vpi pascal. broke fng cdaz vpi. [nl] pascal broke
представляет собой непрерывное повторение слов.
Вызов
Ваша задача состоит в том, чтобы написать функцию или программу, которая не принимает входные данные, которая выдает в качестве выходных данных мою домашнюю работу; то есть ваша программа должна генерировать марсианский эссе от 729 до 810 слов (включительно). Помните, что вывод вашей программы должен быть действительным марсианским эссе, но вам не нужно генерировать его случайно или по-разному каждый раз. Все, что вы делаете для создания действительного марсианского эссе, имеет значение.
Я написал программу на C ++ для проверки эссе, которые вам разрешено использовать.
Это код гольф. Самый короткий код в байтах побеждает. Стандартные лазейки запрещены.
Ответы:
05AB1E ,
25242220 байтов-2 байта благодаря Emigna (значительный рефактор, спасибо, мужик).
Попробуйте онлайн!
Оказывается, версия из 810 слов короче, чем версия из 729 слов.
Выход:
источник
"."
может быть'.
сохранен на 1 байт.A7£œJðý72ô€¨'.«9ô9£»
за 20.Желе ,
28 26 25 2423 байт-1 байт благодаря carusocomputing (заменить слово
thimble
наabcdefg
)TryItOnline!
Как?
Составляет список всех
362880
перестановок первыхсеми-девяти букв английского алфавитаabcdefghi
, которые все имеют свойства марсианских слов, и все они различны, и форматирует их в эссе, используя первые729
слова.* период
источник
abcdefg
.Рубин,
86 83 8279 байтовХитрость: выведите все числа от 102000000 до 102222222 в базе 3
источник
Python 3,
121119 bytesrepl.it
How?
Counts down from
i=729
and gets a list of the letters of the ith permutation of'thimble'
as the next distinct Martian word (list(permutations('thimble'))[i]
).Avoids
''.join(...)
by use of a*expression
to unpack the list while changing the default separator forprint
from a space to the empty string (sep=''
).Uses the
end
argument ofprint
to optionally add spaces, full stops and line feeds as required using modular arithmetic. A full stop goes after every ninth word ('.'*(i%9<1)
) and a line feed goes after every eighty-first word, otherwise a space does, achieved by indexing into a two character string (' \n'[i%81<1]
).источник
Mathematica, 113 bytes
Unnamed function that produces a string as output; that string is a Martian essay where each sentence has three words and each paragraph has three sentences. (Its deterministic output is below.)
The core of the algorithm uses the cool mathematical fact that the differences of the Thue–Morse sequence form an infinite sequence of the three symbols –1, 0, and 1 that has no contiguous digit repetitions.
Differences@Array[ThueMorse,730]
generates that sequence, to length 729.Then
"ark"["bus","car"][[#]]&/@
is applied to this sequence; this converts each 1 to "bus" (the first argument), each –1 to "car" (the last argument), and each 0 to "ark" (the function head).(p=Partition)[...,3]~p~3
divides this sequence of words into nested lists, each consisting of three lists of three words each. Finally,StringRiffle[...,n=".\n",". "," "]
concatenates all the words together, with different separators depending on the list levels; and<>n
appends the final period and newline.The output sure doesn't look repetition-free....
Mathematica, 100 bytes
A direct port of Jonathan Allen's Jelly algorithm.
источник
Print@"fng cdaz vpi. pascal broke basic. popplers taste great."
PHP, 86 bytes
Generates a randomised 729 word essay that repeats no words.
Use like:
Explanation:
источник
///, 95 bytes
(additional new line at the end, not visible here)
Try it online!
Essay:
источник
JavaScript (ES6), 130 bytes
This essay contains 774 Martian words, from a dictionary of 308 distinct words, made of all Martian letters.
Letters are picked in a pseudo-random manner, using the following formula:
Where
71
is the smallest prime [1] for which no contiguous word repetition appear with this modulo.Show code snippet
[1] I only tested primes at the time I wrote this code. The smallest non-prime candidate is
56
.источник
Python 3,
404270332339285266259 bytesThis is an attempt to create a random Martian essay my randomly sampling the Martian alphabet and checking afterwards which words work.
Edit: -10 bytes from Zachary T's suggestion to use
R=range
. -9 bytes from changing.intersection(w)
to&set(w)
. -7 bytes from changingA[random.randrange(21)]
torandom.choice(A)
.Ungolfing
источник
import
)range(9)
to a variable, as well as&
instead of.intersection
?range
, then using that?