W języku angielskim pewnym sposobem na stworzenie wymownej kombinacji nonsensownych liter jest całkowite wykorzystanie par spółgłoskowo-samogłoskowych, np. Wu ko pa ha , lub Me fa ro , najpierw spółgłoska , a następnie samogłoska .
Wyzwanie:
Napisz program lub funkcję, która na podstawie określonej przez użytkownika liczby liter utworzy losową nazwę, stosując tę zasadę. To takie proste.
Wejście:
Liczba całkowita większa lub równa 2, która oznacza wymaganą liczbę liter na wyjściu. Dane wejściowe mogą być pobierane z STDIN, argumentów wiersza poleceń lub argumentów funkcji.
Wynik:
Ciąg o podanej długości zawierający losowo wybrane pary spółgłosek i samogłoski. Można go wydrukować do STDOUT lub najbliższej alternatywy lub zwrócić w przypadku funkcji.
Zasady:
- Każda spółgłoska alfabetu angielskiego powinna mieć jednakowe prawdopodobieństwo wybrania pierwszego znaku każdej pary, a każda samogłoska alfabetu angielskiego powinna mieć równe prawdopodobieństwo wybrania drugiego znaku każdej pary.
- Pary liter można powtarzać.
- Ponieważ jest to nazwa, pierwsza litera musi być wielka.
- Jeśli dane wejściowe są nieparzyste, losowo wybrana para liter w nazwie powinna mieć na końcu y lub h . Wybór y lub h powinien być również losowy.
- Standardowe luki są niedozwolone.
- Najmniejszy kod w bajtach wygrywa.
Definicje liter:
Spółgłoski:
bcdfghjklmnpqrstvwxyz
Samogłoski:
aeiou
Przykład I / O:
Input: 6
Output: Mefaro
Input: 9
Output: Wukohpaha
Cieszyć się!
Odpowiedzi:
Pyth, 33 bajty
Demonstracja.
źródło
JavaScript ES6,
187180168 bajtówEdycja: przełączyłem się z używania regex replace na prostą pętlę for, co znacznie poprawiło długość. Kod niepoddany golfowi i testowanie interfejsu użytkownika poniżej. Wprowadź liczbę ujemną na własne ryzyko, ponieważ tworzy nieskończoną pętlę. (Dzięki bezczelności za zwrócenie na to uwagi.)
źródło
SWI-Prolog,
286285 bajtówPrzykład:
a(13).
wyjściaLeqihsekeqira
.Uwaga: Być może trzeba wymienić
`
ze"
jeśli masz starą wersję SWI-Prologu.źródło
Pyth,
5242 bajtyMożesz spróbować w kompilatorze online tutaj.
Dzięki Jakube za dalszą grę w golfa, NinjaBearMonkey za wyjaśnienie wyzwania i issacg za stworzenie Pytha i nieumyślne nauczenie mnie o
X
.Ten program losowo wybiera spółgłoskę i samogłoskę, aby wypełnić ciąg, dodaje „h” lub „y” do jednej pary, jeśli dane wejściowe są nieparzyste, a następnie dodaje pierwszy znak do dużej litery. Oto podział:
Dołączenie „h” lub „y” do pierwszej pary spółgłosek i samogłosek wydaje się nieskuteczne, a następnie zaszyfrowanie listy. Próbowałem dołączyć do losowej pary, ale kod był zawsze dłuższy.
źródło
rX1
literyX
.t
to to samo co_P_
.J
, ponieważ używaszJ
tylko raz.Perl,
253238 bajtówPrawdopodobnie mogę grać w golfa dalej, ale na razie powinno to wystarczyć.
Zmiany:
źródło
Julia, 141 bajtów
Tworzy to nienazwaną funkcję lambda, która przyjmuje liczbę całkowitą jako dane wejściowe i zwraca ciąg znaków. wykorzystuje fakt, że ciągi w Julii można indeksować i odwoływać do nich jak tablice znaków. Aby to nazwać, nadaj mu nazwę, np
f=n->...
.Niegolfowane + wyjaśnienie:
Przykłady:
źródło
Python 2,
148169156Edycja: Zdałem sobie sprawę, że pierwsza litera nie jest pisana wielką literą. Zobaczę, czy jutro mogę zagrać w golfa.
Edycja 2: Pamiętam,
.title
ale myślę, że to będzie to.źródło
SmileBASIC 2 (komputer Petit),
197177 bajtówEDYCJA WSPÓŁCZESNA MAJ 2018 : To była moja pierwsza praca w historii, prawie 3 lata temu! Od tego czasu moje umiejętności znacznie się poprawiły; -20 tylko z niewielkich korekt.
Zaczyna się od monitu (pozostawia się puste, aby zapisać bajty, więc jest to tylko?), W którym podajesz długość (przechowywaną w zmiennej
L
).Jestem pewien, że uczestnictwo w niejasnym języku BASIC nie przyniesie mi nic poza dziwnym wyglądem, ale udało mi się uczynić go dość małym dla BASIC. Wykorzystuje dziwne dziwactwa SB (takie jak warunek oceniający na 1 lub 0, ponieważ nie ma typu boolowskiego), aby wyeliminować tyle bajtów, ile mogłem, gdy napisałem to o 3 nad ranem.
źródło
Cudowny, 203 bajty
Sprawdź to tutaj (tłumacz online).Wejście za pomocą argumentów. Biblioteki i płytki cylindryczne muszą być włączone.
Skomentowana / czytelna wersja:
Jest to mniej więcej odpowiednik następującego pseudokodu (
random(a,b)
generuje liczby międzya
ib
włącznie):źródło
Ruby, 119 bajtów
13 bajtów na wielkie litery ...
Stosowanie:
Wynik:
źródło
C, 219 znaków
Wydaje się, że działa, wciąż jestem w tym nowy.
źródło
rand()%(n-1-i)<2
zamiast tegorand()%(n-1)<(i+2)
uzyskać jednolity rozkład, chyba że wygenerujesz tę liczbę losową tylko raz i zapiszesz ją gdzieś.🙋
Który używa więcej niż jednego bajtu.R 166 bajtów
Pobiera dane wejściowe ze STDIN i dane wyjściowe do STDOUT.
Wyjaśnienie
Niektóre testy
źródło
K5, 131 bajtów
To NIE będzie działać na Kona lub kdb +; trzeba używać tłumacza K5 jak oK .
Demo na żywo. (Spróbuj ustawić
5
na końcu inną liczbę, aby wypróbować różne dane wejściowe.)źródło
Rubin,
316 238216 znakówKombinacje liczb nieparzystych kończą się na
h
luby
.Dzięki @blutorange za pełny słownik rubinowych wskazówek golfowych.
Whoa, skróciłem mój kod o 100 znaków.
źródło
j
była literówka.for i in ?a..?z;...;end
można je zastąpić(?a..?z).map{...}
;then
Poif
to opcjonalne.v.include?(i)||c.push(i)
jest skrótem odunless v.include?(i);c.push(i)
. Użyjc<<i
dlac.push(i)
.c.map{}
jest krótszy niżc.each{}
.i%2==1?1:2
jest skrótem odif i%2==1;1;else;2;end
. Wprint "Enter..."
codegolf nie jest potrzebny; )Perl 5 , 112 bajtów
Wypróbuj online!
źródło