สร้างคำที่ออกเสียงได้


16

ความท้าทายนั้นง่าย:

สร้างคำ

ข้อมูลจำเพาะ:

  • คำต้องออกเสียงได้
    • สิ่งนี้ถูกนิยามว่าเป็น "การสลับระหว่างพยัญชนะและสระ"
    • พยัญชนะเป็นหนึ่งในตัวอักษรต่อไปนี้: bcdfghjklmnpqrstvwxz
    • เสียงสระเป็นหนึ่งในตัวอักษรต่อไปนี้: aeiouy
  • Word ต้องถูกสร้างแบบสุ่ม
  • คำต่างๆต้องมีพยัญชนะและสระทุกตัว (คุณไม่สามารถใช้bcdfสำหรับพยัญชนะและaeiสระเท่านั้น)
  • Word ต้องมี 10 ตัวอักษร
  • รหัสที่สั้นที่สุด (ในจำนวนตัวอักษร) ชนะ


7
ด้วยแถบ xkcd นี้ในใจโปรแกรมecho buxitiwymuจะสอดคล้องกับข้อกำหนดทางเทคนิค ฉันรับรองคุณฉันสร้างคำแบบสุ่ม: P
AardvarkSoup

1
@ArdvarkSoup "คำพูดต้องมีพยัญชนะและสระทุกตัว"
Doorknob

1
@Kartik ขึ้นอยู่กับบริบทใน 'ใช่' มันเป็นเสียงพยัญชนะใน 'ทำไม' มันเป็นเสียงสระ yyyyyyyy จะเป็นคำที่ถูกต้อง
CJStuart

1
จริง ๆ แล้วฉันสร้างตัวสร้างบน Scratch ในขณะที่กลับ มันมีกฎเฉพาะเมื่อคุณสามารถใช้yเป็นสระซึ่งคุณสามารถใช้qและxและเมื่อคุณสามารถใช้ชุดตัวอักษรสองตัวเช่นngหรือea
Esolanging Fruit

คำตอบ:



8

Ruby: 56 ตัวอักษร

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

ตัวอย่างผลลัพธ์:

  • itopytojog
  • umapujojim
  • ipagodusas
  • yfoqinifyw
  • ebylipodiz

1
'aeiouy'.charsจะเป็นหนึ่งตัวถังที่สั้นกว่า
Howard

@Howard ผู้ประกอบการลบเพิ่มขึ้นTypeError: can't convert Enumerator into Array
John Dvorak

@JanDvorak ขออภัยลืมพูดถึงว่าคุณต้องการ Ruby 2.0 สำหรับเคล็ดลับนี้
Howard

7

Python 81

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

ขอให้โชคดีออกเสียงพวกเขา


จริงๆแล้วมันออกเสียงง่ายเช่นคำแรกที่ฉันได้คือ "viketuziwo":P
Doorknob

@ Doorknob อาจเป็นเพียงโชคของฉัน ฉันได้รับ 'คำ' เหมือน "qijepyjyga" ความพยายามของคอมพิวเตอร์ของฉันที่จะออกเสียงให้พวกเขาทำขึ้นสำหรับมันแม้ว่า :)
GRC

3
ฉันสนุกมากกับการทำpython grc.py | sayบนเครื่องของฉัน ขอบคุณสำหรับความคิด
Kaya

7

COBOL, 255

ตอนนี้ฉันกำลังเรียนภาษาโคบอล ใช้คำถามนี้เป็นแนวทางปฏิบัติ พยายามที่จะเล่นกอล์ฟมัน

มันคือ 255 โดยไม่มีช่องว่างนำหน้าและ 286 ไบต์ด้วย

สำหรับสิ่งที่มีค่าการทำงานใน Microfocus COBOL สำหรับ VS2012 และฉันไม่รู้ว่ามันจะทำงานที่อื่นหรือไม่

       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]

ไม่ได้สร้างชุดค่าผสมทั้งหมด แต่ฉันคิดว่าพยัญชนะและสระทั้งหมดปรากฏขึ้น

JavaScript, 79

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

รุ่น "สุ่ม" เพิ่มเติม


อะไร^0หา?
อัลฟ่า

1
@ อัลฟ่าMath.randomให้ลอยเราต้องการจำนวนเต็ม ^0ตัดทอนหมายเลข
คัดลอก

เคล็ดลับที่ฉลาด ฉันไม่เคยเห็น^โอเปอเรเตอร์ใน JavaScript มาก่อนและไม่ค่อยได้ยินเรื่องการใช้มันเพื่อตัดทอน ขอบคุณ!
อัลฟ่า

@ คัดลอกฉันชอบการใช้^
Math chiller

4

ทับทิม: 70 66 ตัวอักษร

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

วิ่งตัวอย่าง:

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

คุณสามารถใช้10.timesสำหรับตัวอักษรตัวหนึ่งน้อย
Howard

1
คำถามก็ไม่จำเป็นว่าจดหมายแต่ละฉบับจะต้องมีความน่าจะเป็นเหมือนกัน *10-> *4, ข้าม*3, rand 60-> rand 20และคุณได้บันทึกไว้ 3 ตัวอักษร
Howard

เข้าใจกฎแล้ว @Howard ขอขอบคุณ.
จัดการ



4

กำลังดำเนินการ, 100 99 93 87

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

เมื่อตรวจสอบคำถามอย่างใกล้ชิดฉันเห็นว่าไม่ต้องการผลลัพธ์ใด ๆ ฉันได้ปรับปรุงสิ่งนี้ตาม


3

วัตถุประสงค์ -C, 129

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

ด้วยความช่วยเหลือของ Daniero

(ฉันชอบที่จะใช้มีแนวโน้มที่จะผู้ประกอบการ (->)


3

Java AKA ภาษาที่ละเอียดที่สุดเท่าที่เคยสร้างมา 176 ด้วยความช่วยเหลือของ Doorknob, Daniero และ Peter Taylor (ขอบคุณมาก!)

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
การปรับปรุงที่แนะนำ: เปลี่ยนString a[]เป็นString[]a(-1 ตัวอักษร) เปลี่ยนw W = new w();เป็นw W=new w();(-2 ตัวอักษร)
Doorknob

คำแนะนำ: ให้คำเริ่มต้นด้วยพยัญชนะ (หรือ wovel) เสมอ; ไม่จำเป็นต้องสุ่มสิ่งนี้เมื่อคำถามไม่ได้พูดถึง! ดังนั้นข้ามบูลีนfและใช้i%2แทน นอกจากนี้การforวนซ้ำสามารถสั้นลงและคุณสามารถใส่ทั้งสองสตริงภายในตัวดำเนินการตามเงื่อนไข (เช่นไม่จำเป็นต้องมี parens ที่นี่) และใช้charAtด้านนอก นี่คือเรื่องทั้งหมด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 ภาษา verbose มากที่สุดที่เคยสร้าง” - เคยลองเช็คสเปียร์หรือไม่? ;-)
จัดการ

1
@ การทำงานอย่าลืมลบการนำเข้าเมื่อคุณนำมันไปใช้ในที่เดียวเท่านั้น
Peter Taylor

1
@ การผลิตบางทีเราชอบเสียงกระเพื่อม? ok ขอโทษ gonna นำวงเล็บเหล่านั้นออกเมื่อฉันได้รับบ้านจากการทำงาน
jsedano

3

Javascript, 85

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

หากเรียกใช้จากคอนโซลเอาต์พุตจะปรากฏขึ้น การแสดงผลที่ชัดเจนจะเพิ่มalert(s)ที่ 8 ตัวอักษรซึ่งยังสั้นกว่าโซลูชัน JS อื่น ๆ

ขอบคุณ C5H8NNaO4 และ Howard!


Nice one, save a character by removing the last ';'
C5H8NNaO4

1
Instead of ~~(###) you can write ###|0 which saves 4 chars.
Howard



3

Unix tools: 73 bytes

And not guaranteed running time :)

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

Only problem is that the generated string will start with a "vowel" every time.

(edit: changed ' ' to '' in the args of paste) (another edit: removed -P from grep options, thanks to manatwork)


Something could be fine tuned around the grep parameters. I got “of e� ap ag ak”.
manatwork

Hmm... strange. I got nothing like that. I thought -a would be enough.
pgy

1
การทดสอบของฉันระบุว่า-Pเป็นสิ่งนั้น ดูเหมือนว่าชายเตือนเกี่ยวกับสถานะการทดลองสูงด้วยเหตุผล ( grep2.16) แต่มันก็ใช้ได้ดีถ้าไม่มี-P.
manatwork

You are right thank you, I didn't consider that. I don't even know why I used -P in the first place. I'll edit my answer.
pgy

1
ยังไงซะ, tr -d \\n is shorter for joining the lines.
manatwork

3

Pyth, 26 ตัวอักษร

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

คุณสามารถลองได้ในคอมไพเลอร์ออนไลน์ที่นี่

มีคนโพสต์คำถามที่คล้ายกันมาก แต่ก็ถูกปิดหลังจากฉันได้แก้ปัญหาแล้ว ฉันไม่ได้ตระหนักถึงมัน แต่คำถามนี้จริง ๆ แล้วมีการสร้าง Pyth อย่างไรก็ตามนี่คือรายละเอียด:

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

ทุกครั้งที่มีการวนซ้ำ J จะสลับจากการเป็นรายการของพยัญชนะเป็นรายการของเสียงสระ ด้วยวิธีนี้เราสามารถเลือกสุ่มจดหมายจากเจในแต่ละครั้ง
อาจมีวิธีการเตรียมใช้งาน J ในลูปหรือลบการกำหนดที่ชัดเจนออกจากลูป แต่ฉันยังไม่ประสบความสำเร็จด้วยเช่นกัน


1
การถามคำถามเก่าโดยทั่วไปถือว่าดี อย่างไรก็ตามเมื่อคุณใช้ภาษาใหม่กว่าคำถาม (ฉันสร้าง Pyth ในปี 2014) คุณควรจดบันทึกสิ่งนี้ไว้ในคำตอบของคุณ
isaacg

ขอบคุณสำหรับการล้างที่สำหรับฉัน ฉันไม่ทราบว่า Pyth ถูกสร้างขึ้นหลังจากคำถามนี้และฉันได้เพิ่มเข้าไปในคำตอบ
Mike Bufardeci

3

APL 30 26

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

คำอธิบายคล้ายกับรุ่นที่ผ่านมาด้านล่างเพียงแค่เรียงลำดับใหม่เพื่อแก้ไขปัญหานี้

หมายเหตุ: ⎕IOถูกตั้งค่าเป็น 0


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

คำอธิบาย:

'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)แต่มันสั้นกว่าหนึ่งไบต์
lstefano

1
เลื่อนการ 'A' เพื่อ⎕Aบันทึกไบต์อื่น:,('EIOUY'∪⎕A)[6(|,+)⍪5?20]
59 เวลา 16:03 น

ดี! ลงไปที่ 26 ขอบคุณ
Moris Zucca



2

Javascript, 104 87

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

golfed สิ่งที่ไม่จำเป็นง่ายๆทั้งจำนวนมากยังไม่ดีเท่าCopys '

โอ้และสิ่งนั้นเพิ่งถูกขัดขวางระหว่างการเล่นกอล์ฟ: "dydudelidu"

ตอนนี้ฉันลองใช้ตัวละคร 2 ตัวพร้อมกัน ปรากฎว่ามันเกือบจะเหมือนกับตัวที่สองของ copys ดังนั้นฉันจึงไม่สามารถนับได้เช่นกันที่ 79 a="";for(e=5;e--;)a+="bcdfghjklmnpqrstvwxz"[m=0|20*Math.random()]+"aeiouy"[m%6]


2

Brachylogขนาด 9 ไบต์

Ḍ;Ẉṣᵐzh₅c

ลองออนไลน์!

ให้เอาต์พุตเป็นรายการตัวอักษรผ่านตัวแปรเอาต์พุต

   ṣ         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 ตัวอักษร

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" will generate 5 random letters from the given string.

5?/: will generate 5 random letters from each of the strings on the right, producing two lists.

+ สลับทั้งสองรายการให้รายการของสิ่งอันดับด้วยอักขระสุ่มหนึ่งตัวจากรายการแรกจากนั้นรายการหนึ่งจากรายการที่สอง

,/ คือ "raze" - หลอมรวมสิ่งอันดับทั้งหมดเข้าด้วยกัน

K5 สามารถทำได้ใน 33 ไบต์โดยการสร้างตัวอักษรอย่างชาญฉลาดยิ่งขึ้นจากนั้นใช้ "ยกเว้น" ( ^) เพื่อลบเสียงสระ แต่ K5 นั้นใหม่เกินไปที่จะถูกกฎหมายในคำถามนี้:

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

1

R, 83 ไบต์

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

สร้างลำดับเสียงสระ - พยัญชนะที่เป็นไปได้ทั้งหมดในเมทริกซ์จากนั้นสุ่มตัวอย่าง 5 ตัวจากนั้นสุ่มคำที่มี 10 ตัวอักษร



0

Jelly, 13 bytes

Øy,ØYẊ€Zs5ḢŒl

Explanation:

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

Try it online!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.