Wygeneruj wymawiane słowo

16

Wyzwanie jest proste:

wygenerować słowo.

Dane techniczne:

  • Słowo musi być wymawiane.
    • Jest to definiowane jako „na przemian między spółgłoską i samogłoską”.
    • Spółgłoska to jedna z następujących liter: bcdfghjklmnpqrstvwxz
    • Samogłoska to jedna z następujących liter: aeiouy
  • Słowo musi być generowane losowo.
  • Słowa muszą zawierać każdą spółgłoskę i samogłoskę. (Nie możesz używać tylko bcdfspółgłosek i aeisamogłosek).
  • Słowo musi zawierać 10 liter.
  • Najkrótszy kod (pod względem liczby znaków) wygrywa.
Klamka
źródło
7
Mając na uwadze ten pasek xkcd , program echo buxitiwymujest technicznie zgodny ze specyfikacją. Zapewniam cię, wygenerowałem słowo losowo: P
AardvarkSoup,
1
@AardvarkSoup „Słowa muszą zawierać każdą spółgłoskę i samogłoskę”
Klamka
1
@Kartik zależy od kontekstu, w „tak” jest spółgłoską, w „dlaczego” jest samogłoską, ale uniemożliwiłoby to zdefiniowanie wymawianego słowa jako na przemian samogłosek i spółgłosek, np. rrrrrrr byłby prawidłowym słowem.
CJStuart
1
Jakiś czas temu stworzyłem generator w Scratch. Miał określone zasady określające, kiedy możesz traktować yjak samogłoskę, gdzie możesz używać qi x, a kiedy możesz używać dwuliterowych kombinacji, takich jak nglubea
Esolanging Fruit

Odpowiedzi:

7

GolfScript, 32 znaki

['aeiouy'.123,97>^]5*{.,rand=}%+

Uruchom to online .

Howard
źródło
8

Rubin: 56 znaków

([v=%w(a e i o u y),[*?a..?z]-v]*5).map{|a|$><<a.sample}

Przykładowe wyniki:

  • itopytojog
  • umapujojim
  • ipagodusas
  • yfoqinifyw
  • ebylipodiz
Paul Prestidge
źródło
1
'aeiouy'.charsbyłby o jeden węgiel krótszy.
Howard
@Howard następnie podnosi operator odejmowaniaTypeError: can't convert Enumerator into Array
John Dvorak
@JanDvorak Przepraszamy, zapomniałem wspomnieć, że do tej sztuczki potrzebujesz Ruby 2.0.
Howard,
7

Python, 81

from random import*
print''.join(map(choice,["bcdfghjklmnpqrstvwxz","aeiouy"]*5))

Powodzenia w ich ogłaszaniu.

grc
źródło
Są całkiem łatwe do wymówienia, na przykład pierwsze słowo Dostałem „viketuziwo”:P
Gałka
@Doorknob może to tylko moje szczęście. Ciągle otrzymuję „słowa” jak „qijepyjyga”. Jednak próby mojego wymówienia przez komputer to nadrabiają :)
grc
3
Po prostu dobrze się bawiłem python grc.py | sayna moim komputerze. Dzięki za pomysł.
Kaya
7

COBOL, 255

W tej chwili uczę się języka COBOL. Użyłem tego pytania jako pewnej praktyki. Próbowałem zagrać w golfa.

Jest 255 bez wiodących białych znaków i 286 bajtów z.

Co do tego warte, działa w Microfocus COBOL dla VS2012 i nie mam pojęcia, czy będzie działać gdzie indziej.

       1 l pic 99 1 s pic x(26) value'aeiouybcdfghjklmnpqrstvwxz' 1 r
       pic 99 1 v pic 9 1 q pic 99. accept q perform test after varying
       l from 1 by 1 until l>9 compute v=function mod(l,2) compute r=1+
       function random(q*l)*5+v*15+v*5 display s(r:1)end-perform exit
Płatki śniadaniowe
źródło
6

APL (34)

,⍉↑(V[5?6])((⎕A~V←'AEIOUY')[5?20])
marinus
źródło
6

JavaScript, 74

for(a=b=[];a++-5;)b+="bcdfghjklmnpqrstvwxz"[c=new Date*a%20]+"aeiouy"[c%6]

Nie generuje wszystkich kombinacji, ale myślę, że pojawiają się wszystkie spółgłosek i samogłoski.

JavaScript, 79

for(a=b=[];a--+5;)b+="bcdfghjklmnpqrstvwxz"[c=Math.random()*20^0]+"aeiouy"[c%6]

Bardziej „losowa” wersja.

Kopiuj
źródło
Co to jest ^0za?
Alpha
1
@Alpha Math.randompodaje liczbę zmiennoprzecinkową, potrzebujemy liczby całkowitej. ^0obcina liczbę
skopiuj
Sprytna sztuczka. Nie widziałem wcześniej ^operatora w JavaScript i rzadziej słyszałem o używaniu go do obcinania pływaka. Dzięki!
Alpha
@copy Lubię użycie^
Math chiller
4

Rubinowy: 70 66 znaków

10.times{|i|$><<["aeiouy"*4,"bcdfghjklmnpqrstvwxz"][i%2][rand 20]}

Przykładowy przebieg:

bash-4.1$ ruby -e '10.times{|i|$><<["aeiouy"*4,"bcdfghjklmnpqrstvwxz"][i%2][rand 20]}'
izogoreroz

bash-4.1$ ruby -e '10.times{|i|$><<["aeiouy"*4,"bcdfghjklmnpqrstvwxz"][i%2][rand 20]}'
onewijolen

bash-4.1$ ruby -e '10.times{|i|$><<["aeiouy"*4,"bcdfghjklmnpqrstvwxz"][i%2][rand 20]}'
amilyfilil
człowiek w pracy
źródło
Możesz użyć 10.timesza jeden char mniej.
Howard
1
Pytanie nie wymaga również, aby każda litera miała takie samo prawdopodobieństwo. *10-> *4, pomiń *3, rand 60-> rand 20i zapisałeś 3 znaki.
Howard,
Dobra reguła, @Howard. Dziękuję Ci.
manatwork,
4

R: 105 znaków

a=c(1,5,9,15,21,25)
l=letters
s=sample
cat(apply(cbind(s(l[-a],5),s(l[a],5)),1,paste,collapse=""),sep="")
plannapus
źródło
4

J (51)

,|:>(<"1[5?6 20){&.>'aeiouy';'bcdfghjklmnpqrstvwxz'
marinus
źródło
4

Przetwarzanie, 100 99 93 87

int i=10;while(i-->0)"aeiouybcdfghjklmnpqrstvwxz".charAt((int)random(i%2*6,6+i%2*i*2));

Po bliższym zbadaniu pytania widzę, że nie wymaga ono żadnych wyników. Dostosowałem to odpowiednio.

Płatki śniadaniowe
źródło
3

Cel C, 129

main(){int i=10;while(i-->0)printf("%c",[(i%2==0)?@"aeiouy":@"bcdfghjklmnpqrstvwxz"characterAtIndex:arc4random()%(6+(i%2)*14)]);}

Z pomocą Daniero

(Uwielbiam używać tendencji do operatora (->)

Jsedano
źródło
3

Java AKA najbardziej szczegółowy język, jaki kiedykolwiek stworzono, 176 z pomocą Doorknob, Daniero i Petera Taylora (dzięki chłopaki!)

class w{public static void main(String[]a){int i=11;while(--i>0)System.out.print((i%2==0?"aeiouy":"bcdfghjklmnpqrstvwxz").charAt(new java.util.Random().nextInt(6+(i%2)*14)));}}

Nie golfowany:

    class w {

        public static void main(String[] a) {
            int i = 11;
            while (--i > 0) {
                System.out.print((i % 2 == 0 ? "aeiouy" : "bcdfghjklmnpqrstvwxz").charAt(new java.util.Random().nextInt(6 + (i % 2) * 14)));
            }
     }

}

Jsedano
źródło
1
Sugerowane ulepszenia: zmiana String a[]na String[]a(-1 znaków), zmiana w W = new w();na w W=new w();(-2 znaków)
Klamka
Sugestie: Niech słowo zawsze zaczyna się na spółgłoskę (lub wowel); nie ma potrzeby losowania tego, gdy pytanie nie wspomina o tym! Pomiń boolean fi użyj i%2zamiast tego. Ponadto, forpętla może zostać skrócony, a można umieścić zarówno ciągi wewnątrz operatora warunkowego (także, nie ma potrzeby parens tutaj), i używać charAtna zewnątrz. Oto całość: 195 CHARSÓW, 38import java.util.*;class w{public static void main(String[]a){Random r=new Random();for(int i=0;++i<11;)System.out.print((i%2>0?"bcdfghjklmnpqrstvwxz":"aeiouy").charAt(r.nextInt(6+(i%2)*14)));}}
ZAPISANYCH
2
„Java AKA to najbardziej szczegółowy język, jaki kiedykolwiek stworzono” - Czy kiedykolwiek próbowałeś Szekspira ? ;-)
manatwork
1
@manatwork, nie zapomnij usunąć importu, gdy już będziesz go używać tylko w jednym miejscu.
Peter Taylor,
1
@manatwork może lubimy seplenienie ?? ok, przepraszam, wezmę te nawiasy, kiedy wrócę z pracy do domu
jsedano
3

JavaScript, 85

for(r=Math.random,s="",i=5;i--;)s+="bcdfghjklmnpqrstvwxz"[20*r()|0]+"aeiouy"[6*r()|0]

W przypadku uruchamiania z konsoli wyświetlane są dane wyjściowe. Jawne wyświetlanie dodałoby alert(s)8 znaków, wciąż krótszych niż inne rozwiązania JS.

Dzięki C5H8NNaO4 i Howard!

Tomsmeding
źródło
Fajny, zapisz postać, usuwając ostatni ';'
C5H8NNaO4
1
Zamiast tego ~~(###)możesz pisać, ###|0co oszczędza 4 znaki.
Howard
3

JavaScript, 135 122 96 86 znaków

s='';c=5;r=Math.random;while(c--)s+='bcdfghjklmnpqrstvwxz'[r()*20|0]+'aeiouy'[r()*6|0]
Klamka
źródło
3

PHP, 100 znaków

<?while($i<6){echo substr('bcdfghjklmnpqrstvwxz',rand(0,20),1).substr('aeiouy',rand(0,5),1);$i++;}?>
Juan José Sedano
źródło
wydaje mi się, że to 100 znaków
Cristian Lupascu,
3

Narzędzia uniksowe: 73 bajty

I nie gwarantujemy czasu działania :)

</dev/urandom grep -ao '[aeiouy][bcdfghjklmnpqrstvwxz]'|head -5|paste -sd ''

Jedynym problemem jest to, że generowany ciąg zaczyna się od „samogłoski” za każdym razem.

(edycja: zmieniono ' 'na ''w argumentach wklejania) (kolejna edycja: usunięto -P z opcji grep, dzięki manatwork )

pgy
źródło
Coś można by dostroić wokół grepparametrów. Dostałem „of e ap ag ak”.
manatwork
Hmm ... dziwne. Nic takiego nie mam. Myślałem, -aże wystarczy.
pgy
1
Mój test wskazuje, że -Pto ten. Wygląda na to, że mężczyzna ostrzega przed bardzo wysoce eksperymentalnym statusem bez powodu. ( grep2.16) Ale tak czy inaczej, działa dobrze bez -P.
manatwork
Masz rację, dziękuję, nie brałem tego pod uwagę. Nie wiem nawet, dlaczego użyłem -Pw pierwszej kolejności. Zmienię swoją odpowiedź.
pgy
1
Nawiasem mówiąc, tr -d \\njest krótszy do łączenia linii.
manatwork
3

Pyth, 26 znaków

J-G"aeiouy"VT=k+kOJ=J-GJ;k

Możesz spróbować w kompilatorze online tutaj.

Ktoś wysłał bardzo podobne wyzwanie, ale zostało zamknięte po tym, jak opracowałem rozwiązanie. Nie zdawałem sobie z tego sprawy, ale to pytanie faktycznie poprzedza stworzenie Pytha. W każdym razie oto podział:

J                             Set string J equal to:
  G                            the entire alphabet (lowercase, in order)
 - "aeiouy"                    minus the vowels
           VT                 For n in range(1, 10):
             =k                   Set string k to:
                k                  k (defaults to empty string)
               + OJ                plus a random character from J
                   =J             Set J to:
                      G            the entire alphabet
                     - J           minus J
                        ;     End of loop
                         k    print k

Za każdym razem, gdy pętla jest uruchamiana, J zmienia się z listy spółgłosek na listę samogłosek. W ten sposób możemy za każdym razem wybrać losową literę z litery J.
Może istnieć sposób na zainicjowanie J w pętli lub usunięcie jawnych przypisań z pętli, ale nie udało mi się jeszcze z żadnym powodzeniem.

Mike Bufardeci
źródło
1
Zastawianie starych pytań jest ogólnie uważane za dobre. Jeśli jednak używasz języka nowszego niż pytanie (stworzyłem Pyth w 2014 r.), Powinieneś zanotować to w swojej odpowiedzi.
isaacg,
Dzięki za posprzątanie tego za mnie. Nie zdawałem sobie sprawy, że Pyth powstał po tym pytaniu i dodałem to do odpowiedzi.
Mike Bufardeci,
3

APL 30 26

,('EIOUY'∪⎕A)[6(|,+)⍪5?20]

Wyjaśnienie jest bardzo podobne do poprzedniej wersji poniżej, po prostu zmieniono nieco, aby rozwiązać golfa.

Uwaga: ⎕IO jest ustawione na 0


('EIOUY'∪⎕A)[,6(|,(⍪+))5?20]

Wyjaśnienie:

'EIOUY'∪⎕A    puts vowels in front of all letters.
5?20            for the indexes we start choosing 5 random numbers between 0 and 19
6(|,(⍪+))        then we sum 6 and the random numbers, convert to 5x1 matrix (⍪), add a column before this one containing 6 modulo the random numbers. 
                [[[ this one can be rewritten as: (6|n) , ⍪(6+n)  for easier understanding]]]
,6(|,(⍪+))5?20  the leading comma just converts the matrix to a vector, mixing the vowel and consonants indexes.

Tryapl.org

Moris Zucca
źródło
1
('AEIOUY'∪⎕A) ≡ (∪'AEIOUY',⎕A)ale jest o jeden bajt krótszy.
lstefano
1
Odłożenie „A” w celu ⎕Azaoszczędzenia kolejnego bajtu:,('EIOUY'∪⎕A)[6(|,+)⍪5?20]
Adám
Ładny! do 26. Dzięki
Moris Zucca
2

PHP 79 bajtów

<?for($c=bcdfghjklmnpqrstvwxz,$v=aeiouy;5>$i++;)echo$c[rand()%20],$v[rand()%6];

Dość zwięzłe.

primo
źródło
2

C: 101

main(){int x=5;while(x-->0){putchar("bcdfghjklmnpqrstvwxyz"[rand()%21]);putchar("aeiou"[rand()%5]);}}
Kevin
źródło
2

JavaScript, 104 87

a="";for(e=10;e--;)a+=(b=e&1?"bcdfghjklmnpqrstvwxz":"aeiouy")[0|Math.random()*b.length]

grał w golfa wiele prostych, niepotrzebnych rzeczy, wciąż nie tak przyjemnych, jak te z gry Copys

Aha, a ten właśnie wpadł na pomysł podczas gry w golfa: „dydudelidu”

Teraz spróbowałem użyć dwóch znaków naraz. Okazuje się, że jest prawie taki sam jak drugi Copys, więc nie mogę go policzyć, również w 79. a="";for(e=5;e--;)a+="bcdfghjklmnpqrstvwxz"[m=0|20*Math.random()]+"aeiouy"[m%6]

C5H8NNaO4
źródło
2

Brachylog , 9 bajtów

Ḍ;Ẉṣᵐzh₅c

Wypróbuj online!

Podaje dane wyjściowe jako listę liter poprzez zmienną wyjściową.

   ṣ         Randomly shuffle
 ;  ᵐ        both
Ḍ            the consonants without y
  Ẉ          and the vowels with y,
     z       zip them into pairs,
      h₅     take the first five pairs,
             and output
        c    their concatenation.
Niepowiązany ciąg
źródło
1

F # , 166 znaków

open System;String.Join("",(Random(),"aeiouybcdfghjklmnpqrstvwxz")|>(fun(r,s)->[0..5]|>List.collect(fun t->[s.Substring(6+r.Next()%20,1);s.Substring(r.Next()%6,1)])))
Shredderroy
źródło
1

K, 40 bajtów

,/+5?/:("bcdfghjklmnpqrstvwxz";"aeiouy")

5?"abc" wygeneruje 5 losowych liter z podanego ciągu.

5?/: wygeneruje 5 losowych liter z każdego łańcucha po prawej stronie, tworząc dwie listy.

+ transponuje te dwie listy, dając nam listę krotek z jednym losowym znakiem z pierwszej listy, a następnie jedną z drugiej listy.

,/ jest „raze” - połącz wszystkie te krotki w sekwencji.

K5 może to zrobić w 33 bajtach, budując alfabet bardziej sprytnie, a następnie używając „oprócz” ( ^), aby usunąć samogłoski, ale K5 jest zbyt nowy, aby być legalnym w tym pytaniu:

,/+5?/:((`c$97+!26)^v;v:"aeiouy")
JohnE
źródło
1

R, 83 bajty

cat(outer((l<-letters)[a<-c(1,5,9,15,21,25)],l[-a],paste0)[sample(1:120,5)],sep="")

Wygeneruj wszystkie możliwe sekwencje samogłoskowo-spółgłoskowe w macierzy, a następnie losowo próbkuj 5 z nich, uzyskując 10-literowe słowo.

rturnbull
źródło
0

Galaretka , 13 bajtów

Øy,ØYẊ€Zs5ḢŒl

Wyjaśnienie:

Øy,ØYẊ€Zs5ḢŒl
Øy,ØY         Makes a list of two lists of characters: [[list-of-vowels-with-y], [list-of-consonants-without-y]]
     Ẋ€       Shuffle €ach.
       Z      Zip those two lists together. [[random-vowel, random-consonant],...]
        s5    Split them into chunks of five (because each pair contains two letters, this splits them into chunks of 10 letters)
          Ḣ   Take the list of 5 pairs.
           Œl Make each of the characters in it lowercase
              Implicit concatenation and print.

Wypróbuj online!

Towarzyszu SparklePony
źródło