Twoim zadaniem jest wygenerowanie nonsensownego słowa, które można rozsądnie wymówić przy użyciu określonej liczby „sylab”. Każde uruchomienie programu może skutkować innym bezsensownym słowem.
Zdolność do wymawiania
Wymawiane słowo składa się z sylab, które z kolei składają się z grupy samogłoskowej, która prawdopodobnie jest umieszczona pomiędzy dwiema grupami spółgłoskowymi. Nie wszystkie dźwięki są wymawiane we wszystkich pozycjach, a ponieważ zależy to od języka, użyjemy wzorców zrozumiałych dla osób mówiących po angielsku
Początkowe grupy spółgłoskowe:
b c d f g h j k l m n p r s t v w y z bl br ch cl cr dr fl fr gh gl gn gr kn ph pl pr qu sc sh sk sl sm sm sp sp st th tr wh wr sch scr shm shr squ str thr thr
Grupy samogłoskowe:
a e o o ae ai ao au ea ee ei eu ia ie io oa oe oi oo ou ue ui
Kończące grupy Consonant:
bcdfglmnprstxz bt ch ck ct ft gh gn lb ld lf lk ll lm ln lp lt mb mn mp nk ng nt ph pt rb rc rd rf rg rk rk rl rl rm rn rp rt rv rz sh sk sp ss st zz lch lsh lth rch rsh rst rth sch tch
Łączenie sylab
Zarówno początkowa, jak i końcowa grupa spółgłoskowa są na ogół opcjonalne, jednak nie można umieszczać sylaby kończącej się samogłoską bezpośrednio przed tą rozpoczynającą się od samogłoski.
Zrzeczenie się
W trosce o prostotę, niektóre angielskie słowa nie mogą być generowane w ten sposób, takie jak próżnia, ksylofon, mnemonik, pterodaktyl, piękny, bla, one, wow, i większość liczby mnogiej.
Przegląd
Możliwe wzorce sylab przy użyciu tego klucza:
(SC) = początkowa spółgłoska; (V) = grupa samogłosek; (EC) = kończąca spółgłoska
Dla jednej sylaby:
- (SC) (V) (WE)
- (V) (WE)
- (SC) (V)
- (V)
Z dwiema sylabami:
- (SC) (V) (EC) (SC) (V) (EC)
- (SC) (V) (EC) (SC) (V)
- (SC) (V) (EC) (V) (EC)
(SC) (V) (EC) (V)
(SC) (V) (SC) (V) (EC)
(SC) (V) (SC) (V)
(V) (WE) (SC) (V) (WE)
- (V) (WE) (SC) (V)
- (V) (WE) (V) (WE)
(V) (WE) (V)
(V) (SC) (V) (WE)
- (V) (SC) (V)
... i tak dalej
Przykłady
1 sylaba
- charst
- uda
- shriegn
- eess
- shue
- z oo
- Cheezz
2 sylaby
- jazzcrap
- whylprog
- jedzenie
- umba
- ola
- mieć
- ingsoc
- greespheurz
- bleuspoo
3 sylaby
- brokiompic
- squirdshlicker
- kapitał
- opengtrass
- dwuznaczne
- duży brat
- phoebliaptmoo
- skolfblauquent
4 sylaby
- Strawishoepick
- patchworkzombie
- prearneajoomie
- slephotoschou
- doubleplusgood
Kodowanie
Dane wejściowe: liczba całkowita liczby sylab do wygenerowania
Wyjście: (prawdopodobnie) nonsensowne słowo, które ma wiele sylab
Zasady
- Wymagana jest jakaś forma losowości (psuedo). Wszystkie kombinacje sylab powinny być (teoretycznie) możliwe do wygenerowania, chociaż rozkład nie musi być jednolity.
- Możesz założyć, że twój generator jest nieokresowy, więc nie musi być matematycznie możliwe wygenerowanie każdego możliwego słowa (w rzeczywistości może nie mieć wystarczająco długiego okresu) i nie musisz przedstawiać żadnego dowodu, że twój generator może w rzeczywistości wygenerować każde możliwe słowo.
- Twój generator musi być w stanie wygenerować co najmniej 255 różnych wartości, więc nie możesz po prostu zwrócić 4 za każdym razem, gdy generator jest wywoływany.
- Ostatecznie ważne jest to, że w jakiś sposób włączysz wszystkie powyższe grupy liter do swojego kodu, że każda grupa liter ma niezerowe prawdopodobieństwo, że zostanie wybrany, a każdy wzorzec sylaby ma niezerowe prawdopodobieństwo wystąpienia (jeśli zostanie podana prawdziwa losowość).
- Musisz obsłużyć do 16 sylab słów
- Oprócz zasad łączenia sylab słowo wyjściowe nie może mieć:
- 3 kolejne samogłoski (
a
e
i
o
u
; może się tak zdarzyć w przypadkuqu
słów) - 3 kolejne dopasowane spółgłoski
- 3 kolejne samogłoski (
Powodzenia!
Zauważ, że różni się to od Wygeneruj wymawiane słowo z kilku powodów:
- Zmienna liczba sylab określona przez dane wejściowe zamiast ścisłego wymogu 10 liter.
- To wyzwanie dodaje niewyczerpujące grupy liter, które muszą być (sprytnie) zakodowane i pozwala na więcej wariantów sylab, więc kodu nie można po prostu skopiować z innego wyzwania
- Squirdshlicker. Czy muszę powiedzieć więcej?
Zapomniałem też oszukiwać, ale okazuje się, że przynosi to wystarczająco dużo nowego do stołu, że to nie ma znaczenia. W końcu istnieją setki różnych wariantów quine.
Odpowiedzi:
JavaScript (ES6),
407403 bajtówWypróbuj online!
źródło
[^aeiou]{3}
to prawda? Opierając się na słowie „dopasowywanie” i 3-sylabowym przykładziesquirdshlicker
zawierającymrdshl
, myślę, że OP oznacza tylko 3 takie same sąsiednie spółgłosek (tj.bbb
Nie jest dozwolone), zamiast 3 sąsiednich spółgłosek w ogóle.05AB1E ,
237234230228 bajtów-2 bajty dzięki @MagicOctopusUrn .
Wypróbuj online lub uzyskaj kilka dodatkowych wyników .
Wyjaśnienie:
Zobacz tę końcówkę 05AB1E kopalni (sekcja Jak kompresować strun nie Część słownika? , Jak skompresować dużych liczb całkowitych? I jak skompresować list całkowitych? ) , Aby zrozumieć, jak działa zamienne kompresji.
źródło
žM•ô#‰¦λu¢!¡°gU€•6BS<èJ
Jest również 4 mniejsze niż.•!m1±P1Ÿ6ºZ dâ4∍m–G¢”ãÔ2g•
(konwersja i wymiana podstawy 6 przy użyciu wbudowanego w AEIOU). Link TIO za długi.žM•·Áy&ŒGηΩ¼αŸKq•6вèJ
. :) PS: Możesz używać skracaczy adresów URL, takich jak tinyurl.com na PPCG, w przeciwieństwie do większości innych SE. :)Galaretka , 231 bajtów
Wypróbuj online!
Pełny program, który przyjmuje pojedynczy argument, wymaganą liczbę sylab.
Wyjaśnienie
Trzon tego stanowi 66-wyrazowy skompresowany ciąg słownika. Jeśli słowa są podzielone na grupy spółgłosek i samogłosek, a pierwsze 3 grupy są brane dla każdego słowa, generują pożądane grupy początkowe, samogłoski i końcowe z pytania. Wyjątkami są
Łącze pomocnicze 1: sprawdź, czy więcej niż 3 samogłoski z rzędu czy więcej niż 3 tej samej litery z rzędu Łącze pomocnicze 2: Trzy grupy ciągów Główny linkqu
isqu
ponieważ mają one samogłoskę, więc są one dodawane ręcznie. Lista słów została zbudowana algorytmicznie ze słownika Jelly przy użyciu skryptu Python. Zauważ, że niektóre grupy liter są powtarzane, ale pytanie pozwala, aby dane wyjściowe nie reprezentowały w sposób jednolity każdej możliwej kombinacji. Gdyby to było preferowane, byłoby łatwo uczynić każdą grupę unikalną kosztem dwóch bajtów (Q€
).źródło
gnuignaalfbi
wejściowe4
, aleaa
nie powinno być to możliwe, jeśli poprawnie zrozumiałem wyzwanie. Sekcja łącząca sylaby stwierdza: „ ... ale nie można umieścić sylaby kończącej się samogłoską bezpośrednio przed tą rozpoczynającą się od samogłoski. ”shmooze gaolbird hailshot shriech waeful furze ghaut
haha. xD Jak duży jest słownik Jelly?Python 2 ,
522510 bajtówWypróbuj online!
źródło
Pyth,
346335 bajtówWypróbuj online tutaj .
źródło
Rubinowy ,
381379375 bajtówUżywa niechlujnych dopasowań wyrażeń regularnych, aby uzyskać grupy spółgłoskowe. Prawdopodobnie można go zoptymalizować.
Wypróbuj online!
źródło