Moją pracą domową jest napisanie eseju marsjańskiego (patrz poniżej) zawierającego od 729 do 810 słów włącznie. Twoim zadaniem jest napisanie programu, który wygeneruje esej.
Historia
Na przełomie XIX i XX wieku spirytystka Catherine-Elise Müller rzekomo komunikowała się z Marsjanami. Podczas somnambulacyjnych transów pisała pisma marsjańskie. Psycholog Théodore Flourney odkryła, że jej pisma marsjańskie są bardzo podobne do jej ojczystego francuskiego, aw swojej książce „From India to the Planet Mars” udokumentował marsjański alfabet Catherine.
Poniższy tekst jest luźno oparty na tym alfabecie z rozszerzonymi mitami.
opis problemu
Język marsjański ma 21 liter, pokazanych tutaj obok każdego odpowiednika łacińskiego:
Niestety, nie ma Unicode dla Marsa (pomimo tego, że Mars jest częścią wszechświata), więc utknęliśmy przy użyciu znaków łacińskich.
Podczas gdy w języku angielskim nasze fonemy dzielą się na dwa główne typy (spółgłosek / samogłosek), które luźno mapujemy na litery, Martian ma trzy typy liter:
- Samogłoski: aeimnou
- Twarde spółgłosek: bcdgkpt
- Miękkie spółgłoski: fhlrsvz
Oprócz tego język marsjański zawiera pojedynczy znak interpunkcyjny - kropkę.
Martian słowo to zestaw 3 do 9 liter. Wszystkie słowa marsjańskie mają co najmniej jedną samogłoskę, jedną twardą spółgłoskę i jedną miękką spółgłoskę (w dowolnym układzie). Na przykład fng
, cdaz
, vpi
, i pascal
są marsjańskie słowa.
Zdanie Marsa jest zestaw 3 do 9 Marsjańskich słowy ograniczonymi przestrzeniami a następnie przez okres.
Ustęp Marsa to zestaw 3 do 9 zdań marsjańskich oddzielonych spacjami i zakończoną nową linią.
Martian esej jest zbiorem marsjańskich punktach, które nie zawiera ciągłych powtórzeń słów.
Ciągłe powtarzanie słowa jakikolwiek SS konstrukt, gdzie S jest ciągły zestaw słów. Zauważ, że ta definicja ignoruje granice zdań i akapitów.
Przykłady
Uwaga: po każdym przykładzie znajduje się jedna nowa linia (ponieważ wszystkie akapity marsjańskie kończą się nową linią)
Nie esej marsjański
Lorem ipsum dolor sit amet. quis nostrud Exercitation ullamco laboris.
...Z wielu powodów. Ten przykład ilustruje kilka różnych zasad:
- lorem nie jest słowem marsjańskim, ponieważ nie ma twardych spółgłosek.
- amet nie jest słowem marsjańskim, ponieważ nie ma miękkich spółgłosek. (
m
jest samogłoską marsjańską). - quis nie jest słowem marsjańskim, ponieważ nie ma twardych spółgłosek
- quis nie jest słowem marsjańskim, ponieważ q nie jest literą marsjańską
- Ćwiczenie nie jest słowem marsjańskim, ponieważ ma więcej niż 9 liter
- ćwiczenie nie jest słowem marsjańskim, ponieważ x nie jest literą marsjańską
Esej marsjański
fng cdaz vpi. pascal złamał podstawowy. popplersy świetnie smakują.
... ponieważ jest to akapit marsjański. Akapit marsjański zawiera trzy zdania marsjańskie.
Nie esej marsjański
fng cdaz vpi. pascal złamał podstawowy. zasady darmowego pascala.
... ponieważ free pascal rules.
nie jest to zdanie marsjańskie, ponieważ free
ani rules
słowa marsjańskie nie są, ponieważ nie mają twardych spółgłosek.
Esej marsjański
fng cdaz vpi. pascal złamał podstawowy. popplersy świetnie smakują. cdaz vpi fng. podstawowe przerwy pascal. popplers uderzają mocno. fng cdaz vpi.
... który zawiera dwa akapity marsjańskie. To zdanie fng cdaz vpi.
pojawia się dwa razy, ale jest w porządku.
Nie esej marsjański
popplers smakują fng. cdaz vpi pascal. złamał fng cdaz vpi. Pascal rozbił planety Omicron. podstawowe przeraża kozy. vpi piv vpi.
... ponieważ konstrukcja fng. cdaz vpi pascal. broke fng cdaz vpi. [nl] pascal broke
jest ciągłym powtarzaniem słów.
Wyzwanie
Twoim wyzwaniem jest napisanie funkcji lub programu, który nie przyjmuje żadnych danych wejściowych, co powoduje, że moje wyniki pracy domowej są moje; to znaczy, twój program powinien wygenerować esej marsjański zawierający od 729 do 810 słów (włącznie). Pamiętaj, że wyniki twojego programu muszą być prawidłowym esejem marsjańskim, ale nie musisz generować go losowo lub inaczej za każdym razem. Liczy się wszystko, co zrobisz, aby wygenerować prawidłowy esej marsjański .
Napisałem program w C ++, aby sprawdzić eseje, których możesz używać.
To jest kod golfowy. Najkrótszy kod w bajtach wygrywa. Standardowe luki zabronione.
Odpowiedzi:
05AB1E ,
25242220 bajtów-2 bajty dzięki Emignie (znaczący reaktor, dzięki człowieku).
Wypróbuj online!
Okazuje się, że wersja 810 słów jest krótsza niż wersja 729 słów.
Wydajność:
źródło
"."
może być'.
zapisany na 1 bajt.A7£œJðý72ô€¨'.«9ô9£»
na 20Galaretka ,
28 26 25 2423 bajtów-1 bajt dzięki carusocomputing (zastąpić słowo
thimble
zabcdefg
)TryItOnline!
W jaki sposób?
Tworzy listę wszystkich
362880
permutacji pierwszychsiedmiudziewięciu liter alfabetu angielskiegoabcdefghi
, z których wszystkie mają właściwości marsjańskich słów i wszystkie są odrębne, i formatuje je w esej, używając pierwszych729
słów.* Kropka
źródło
abcdefg
.Rubin,
86 83 8279 bajtówSztuczka: wydrukuj wszystkie liczby od 102000000 do 102222222 w bazie 3
źródło
Python 3,
121119 bajtówrepl.it
W jaki sposób?
Odlicza
i=729
i otrzymuje listę liter i-tej permutacji'thimble'
jako następnego wyraźnego słowa marsjańskiego (list(permutations('thimble'))[i]
).Unika
''.join(...)
za pomocą a,*expression
aby rozpakować listę, zmieniając domyślny separator dlaprint
spacji na pusty ciąg znaków (sep=''
).Używa
end
argumentu,print
aby opcjonalnie dodawać spacje, kropki i przesunięcia wiersza zgodnie z wymaganiami przy użyciu arytmetyki modułowej. Kropka kończy się po każdym dziewiątym słowie ('.'*(i%9<1)
), a przejście do wiersza następuje po każdym osiemdziesięciu pierwszym słowie, w przeciwnym razie następuje spacja, uzyskana przez indeksowanie w łańcuch dwóch znaków (' \n'[i%81<1]
).źródło
Mathematica, 113 bajtów
Nienazwana funkcja, która generuje ciąg wyjściowy; ten ciąg jest marsjańskim esejem, w którym każde zdanie ma trzy słowa, a każdy akapit ma trzy zdania. (Jego deterministyczny wynik jest poniżej.)
Rdzeń algorytmu wykorzystuje fajny matematyczny fakt, że różnice w sekwencji Thue – Morse tworzą nieskończoną sekwencję trzech symboli –1, 0 i 1, która nie ma ciągłych powtórzeń cyfr.
Differences@Array[ThueMorse,730]
generuje tę sekwencję, do długości 729.Następnie
"ark"["bus","car"][[#]]&/@
stosuje się do tej sekwencji; to konwertuje każdy 1 na „bus” (pierwszy argument), każdy –1 na „car” (ostatni argument), a każdy 0 na „ark” (szef funkcji).(p=Partition)[...,3]~p~3
dzieli tę sekwencję słów na listy zagnieżdżone, z których każda składa się z trzech list po trzy słowa każda. Wreszcie,StringRiffle[...,n=".\n",". "," "]
łączy wszystkie słowa razem, z różnymi separatorami w zależności od poziomów listy; i<>n
dołącza ostatni okres i nową linię.Wyjście na pewno nie wygląda na powtórkę ....
Mathematica, 100 bajtów
Bezpośredni port algorytmu galaretowego Jonathana Allena.
źródło
Print@"fng cdaz vpi. pascal broke basic. popplers taste great."
PHP, 86 bajtów
Generuje losowy esej zawierający 729 słów, który nie powtarza żadnych słów.
Użyj jak:
Wyjaśnienie:
źródło
///, 95 bajtów
(dodatkowa nowa linia na końcu, niewidoczna tutaj)
Wypróbuj online!
Praca pisemna:
źródło
JavaScript (ES6), 130 bajtów
Ten esej zawiera 774 marsjańskich słów ze słownika zawierającego 308 różnych słów, utworzonych ze wszystkich marsjańskich liter.
Listy są wybierane w sposób pseudolosowy, przy użyciu następującego wzoru:
Gdzie
71
jest najmniejsza liczba pierwsza [1], dla której nie występuje ciągłe powtarzanie słów w tym module.Pokaż fragment kodu
[1] Testowałem liczby pierwsze tylko w czasie, gdy pisałem ten kod. Najmniejszy kandydat inny niż główny jest
56
.źródło
Python 3,
404270332339285266259 bajtówJest to próba stworzenia losowego eseju marsjańskiego, polegającego na losowym próbkowaniu alfabetu marsjańskiego i sprawdzeniu, które słowa działają.
Edit: -10 bajtów z sugestią Zachary T do użytku
R=range
. -9 bajtów od zmiany.intersection(w)
na&set(w)
. -7 bajtów od zmianyA[random.randrange(21)]
narandom.choice(A)
.Ungolfing
źródło
import
)range(9)
do zmiennej, a także&
zamiast.intersection
?range
, a następnie używając tej?