Erzeugen Sie ein aussprechbares Wort


16

Die Herausforderung ist einfach:

ein Wort generieren.

Spezifikationen:

  • Das Wort muss aussprechbar sein.
    • Dies wird als "Wechsel zwischen einem Konsonanten und einem Vokal" definiert.
    • Ein Konsonant ist einer der folgenden Buchstaben: bcdfghjklmnpqrstvwxz
    • Ein Vokal ist einer der folgenden Buchstaben: aeiouy
  • Das Wort muss zufällig generiert werden.
  • Wörter müssen in der Lage sein, jeden Konsonanten und Vokal zu enthalten. (Sie können nicht nur bcdffür Konsonanten und aeifür Vokale verwenden.)
  • Das Wort muss 10 Buchstaben enthalten.
  • Kürzester Code (in Zeichenanzahl) gewinnt.


7
In Anbetracht dieses xkcd-Stripsecho buxitiwymu entspricht das Programm technisch den Spezifikationen. Ich versichere Ihnen, ich habe das Wort zufällig generiert: P
AardvarkSoup

1
@AardvarkSoup "Wörter müssen in der Lage sein, jeden Konsonanten und Vokal zu enthalten"
Türknauf

1
@Kartik hängt vom Kontext ab, in 'Ja' ist es ein Konsonant, in 'Warum' ist es ein Vokal, aber dies würde es unmöglich machen, ein aussprechbares Wort als Wechsel zwischen Vokalen und Konsonanten zu definieren, z. JJJJJJJ wäre ein gültiges Wort.
CJStuart,

1
Ich habe vor einiger Zeit einen Generator für Scratch gemacht. Es gab spezielle Regeln dafür, wann Sie ywie einen Vokal behandeln können , wo Sie qund verwenden xkönnen und wann Sie Kombinationen aus zwei Buchstaben wie ngoder verwenden könnenea
Esolanging Fruit

Antworten:



8

Ruby: 56 Zeichen

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

Beispielausgaben:

  • itopytojog
  • umapujojim
  • ipagodusas
  • yfoqinifyw
  • Ebylipodiz

1
'aeiouy'.charswäre ein char kürzer.
Howard

@Howard dann wirft der SubtraktionsoperatorTypeError: can't convert Enumerator into Array
John Dvorak

@ JanDvorak Sorry, vergessen zu erwähnen, dass Sie für diesen Trick Ruby 2.0 benötigen.
Howard

7

Python, 81

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

Viel Glück beim Aussprechen.


Sie sind eigentlich recht einfach auszusprechen, zum Beispiel war das erste Wort, das ich bekam, "viketuziwo":P
Türklinke

@Doorknob vielleicht ist es nur mein Glück. Ich bekomme immer wieder Worte wie "qijepyjyga". Die Versuche meines Computers, sie auszusprechen, machen das wieder
wett

3
Ich hatte einfach viel Spaß python grc.py | sayan meiner Maschine. Danke für die Idee.
Kaya

7

Cobol, 255

Also lerne ich gerade COBOL. Verwendete diese Frage als Übung. Ich habe versucht, Golf zu spielen.

Es ist 255 ohne das führende Leerzeichen und 286 Bytes mit.

Für das, was es wert ist, läuft dies in Microfocus COBOL für VS2012, und ich habe keine Ahnung, ob es irgendwo anders laufen wird.

       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


6

JavaScript, 74

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

Erzeugt nicht alle Kombinationen, aber ich denke, dass alle Konsonanten und Vokale erscheinen.

JavaScript, 79

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

Mehr "zufällige" Version.


Wofür ist das ^0?
Alpha

1
@Alpha Math.randomgibt ein float, wir brauchen eine ganze Zahl. ^0schneidet die Nummer ab
kopiere am

Cleverer Trick. Ich habe den ^Operator noch nie in JavaScript gesehen und weniger davon gehört, einen Float damit abzuschneiden. Vielen Dank!
Alpha

@copy Ich mag die Verwendung von^
Math Chiller

4

Ruby: 70 66 Zeichen

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

Probelauf:

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

Sie können 10.timesfür ein Zeichen weniger verwenden.
Howard

1
Auch erfordert die Frage nicht, dass jeder Buchstabe die gleiche Wahrscheinlichkeit haben muss. *10-> *4, überspringen *3, rand 60-> rand 20und Sie haben 3 Zeichen gespeichert.
Howard

Guter Fang für die Regel, @Howard. Vielen Dank.
Manatwork

4

R: 105 Zeichen

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="")

4

J (51)

,|:>(<"1[5?6 20){&.>'aeiouy';'bcdfghjklmnpqrstvwxz'

4

Verarbeitung, 100 99 93 87

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

Bei näherer Betrachtung der Frage sehe ich, dass keine Ausgabe erforderlich ist. Ich habe das entsprechend angepasst.


3

Objective-C, 129

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

Mit der Hilfe von Daniero

(Ich benutze die tendenziell gerne als Operator (->)


3

Java AKA ist die ausführlichste Sprache, die jemals erstellt wurde, 176 mit Hilfe von Doorknob, Daniero und Peter Taylor (Danke Jungs!)

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)));}}

Ungolfed:

    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)));
            }
     }

}


1
Verbesserungsvorschläge: Ändern String a[]auf String[]a(-1 Zeichen), Ändern w W = new w();auf w W=new w();(-2 Zeichen)
Türklinke

Vorschläge: Lassen Sie das Wort immer mit einem Konsonanten (oder Wovel) beginnen; keine Notwendigkeit, dies zufällig zu ordnen, wenn die Frage es nicht erwähnt! Überspringen Sie also den Booleschen Wert fund verwenden Sie i%2stattdessen. Die forSchleife kann auch gekürzt werden, und Sie können beide Zeichenfolgen in den bedingten Operator einfügen (hier sind auch keine Parens erforderlich) und die charAtauf der Außenseite verwenden. Hier ist das Ganze, 195 CHARS, 38 SAVED :import 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)));}}
Daniero

2
"Java AKA ist die ausführlichste Sprache, die jemals erstellt wurde" - Haben Sie jemals Shakespeare ausprobiert ? ;-)
manatwork

1
@manatwork, vergessen Sie nicht, den Import zu entfernen, wenn Sie ihn nur an einem Ort verwenden möchten.
Peter Taylor

1
@manatwork vielleicht mögen wir lisp ?? ok, sorry, werde jene Klammer heraus zu nehmen , wenn ich von der Arbeit nach Hause kommen
jsedano

3

Javascript, 85

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

Wenn von der Konsole ausgeführt, wird die Ausgabe angezeigt. Die explizite Anzeige würde alert(s)8 Zeichen hinzufügen , immer noch kürzer als die anderen JS-Lösungen.

Danke C5H8NNaO4 und Howard!


Schön, rette ein Zeichen, indem du das letzte ';' entfernst.
C5H8NNaO4

1
Stattdessen ~~(###)können Sie schreiben, ###|0was 4 Zeichen spart.
Howard

3

Javascript, 135 122 96 86 Zeichen

s='';c=5;r=Math.random;while(c--)s+='bcdfghjklmnpqrstvwxz'[r()*20|0]+'aeiouy'[r()*6|0]

3

PHP, 100 Zeichen

<?while($i<6){echo substr('bcdfghjklmnpqrstvwxz',rand(0,20),1).substr('aeiouy',rand(0,5),1);$i++;}?>

Eigentlich denke ich, dass das 100 Zeichen lang ist
Cristian Lupascu

3

Unix-Tools: 73 Byte

Und keine garantierte Laufzeit :)

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

Das einzige Problem ist, dass die generierte Zeichenfolge jedes Mal mit einem "Vokal" beginnt.

(edit: geändert , ' 'um ''in den args der Paste) ( eine andere edit: entfernt -P von grep Optionen, dank Manatwork )


Um die grepParameter herum könnte etwas fein abgestimmt werden. Ich habe "von e ap ag ak".
Manatwork

Hmm ... seltsam. Ich habe nichts dergleichen. Ich dachte, -awäre genug.
Pgy

1
Mein Test zeigt, dass dies -Pder richtige ist. Der Mann warnt anscheinend mit einem Grund vor seinem höchst experimentellen Status. ( grep2.16) Aber auf jeden Fall funktioniert es auch ohne -P.
Manatwork

Sie haben recht, danke, das habe ich nicht bedacht. Ich weiß nicht mal, warum ich das überhaupt benutzt habe -P. Ich werde meine Antwort bearbeiten.
Pgy

1
Ist übrigens tr -d \\nkürzer zum Verbinden der Leitungen.
Manatwork

3

Pyth, 26 Zeichen

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

Sie können es hier im Online-Compiler ausprobieren.

Jemand hat eine sehr ähnliche Herausforderung gestellt, die jedoch geschlossen wurde, nachdem ich eine Lösung gefunden hatte. Ich habe es nicht bemerkt, aber diese Frage geht der Entstehung von Pyth voraus. Wie auch immer, hier ist die Aufschlüsselung:

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

Jedes Mal, wenn die Schleife ausgeführt wird, wechselt J von einer Liste von Konsonanten zu einer Liste von Vokalen. Auf diese Weise können wir jedes Mal einen zufälligen Buchstaben von J auswählen.
Es kann eine Möglichkeit geben, J in der Schleife zu initialisieren oder die expliziten Zuweisungen aus der Schleife zu entfernen, aber ich hatte noch keinen Erfolg damit.


1
Das Beauftragen alter Fragen wird im Allgemeinen als in Ordnung angesehen. Wenn Sie jedoch eine Sprache verwenden, die neuer ist als die Frage (ich habe Pyth 2014 erstellt), sollten Sie dies in Ihrer Antwort vermerken.
isaacg

Danke, dass du das für mich geklärt hast. Ich habe nicht bemerkt, dass Pyth nach dieser Frage erstellt wurde, und ich habe das zur Antwort hinzugefügt.
Mike Bufardeci

3

APL 30 26

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

Die Erklärung ist der vorherigen Version sehr ähnlich. Sie wurde nur ein wenig neu angeordnet, um die Lösung zu verbessern.

Hinweis: ⎕IO ist auf 0 eingestellt


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

Erläuterung:

'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


1
('AEIOUY'∪⎕A) ≡ (∪'AEIOUY',⎕A)aber es ist ein Byte kürzer.
Lstefano

1
'A' aufschieben, um ein ⎕Aweiteres Byte zu speichern:,('EIOUY'∪⎕A)[6(|,+)⍪5?20]
Adám

Nett! Danke
Moris Zucca

2

PHP 79 Bytes

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

Ziemlich prägnant.


2

C: 101

main(){int x=5;while(x-->0){putchar("bcdfghjklmnpqrstvwxyz"[rand()%21]);putchar("aeiou"[rand()%5]);}}

2

Javascript, 104 87

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

Golfen Sie eine ganze Menge einfacher, unnötiger Dinge, die noch nicht annähernd so schön sind wie die eines Copys

Oh, und das hat sich gerade beim Golfen gewehrt : "dydudelidu"

Jetzt habe ich einen mit den 2 Zeichen auf einmal Ansatz versucht. Es stellt sich heraus, dass es fast das Gleiche ist wie das zweite Exemplar, also kann ich es auch mit 79 nicht zählen. a="";for(e=5;e--;)a+="bcdfghjklmnpqrstvwxz"[m=0|20*Math.random()]+"aeiouy"[m%6]


2

Brachylog , 9 Bytes

Ḍ;Ẉṣᵐzh₅c

Probieren Sie es online!

Gibt die Ausgabe als Liste von Buchstaben über die Ausgabevariable aus.

   ṣ         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.

1

F # , 166 Zeichen

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)])))

1

K, 40 Bytes

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

5?"abc" generiert 5 zufällige Buchstaben aus der angegebenen Zeichenfolge.

5?/: erzeugt 5 zufällige Buchstaben aus jeder der Zeichenfolgen auf der rechten Seite und erzeugt zwei Listen.

+ transponiert diese beiden Listen und gibt uns eine Liste von Tupeln mit einem zufälligen Zeichen aus der ersten Liste und einem aus der zweiten Liste.

,/ ist "raze" - verschmelze alle diese Tupel der Reihe nach.

K5 kann dies in 33 Bytes tun, indem es das Alphabet geschickter erstellt und dann "except" ( ^) verwendet, um die Vokale zu entfernen, aber K5 ist viel zu neu, um in dieser Frage legal zu sein:

,/+5?/:((`c$97+!26)^v;v:"aeiouy")

1

R 83 Bytes

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

Generieren Sie alle möglichen Vokal-Konsonanten-Sequenzen in einer Matrix und stichprobenartig 5 von ihnen, wobei Sie ein Wort mit 10 Buchstaben erhalten.



0

Gelee , 13 Bytes

Øy,ØYẊ€Zs5ḢŒl

Erläuterung:

Ø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.

Probieren Sie es online!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.