Hasilkan kata yang bisa diucapkan


16

Tantangannya sederhana:

menghasilkan kata.

Spesifikasi:

  • Kata harus dapat diucapkan.
    • Ini didefinisikan sebagai "bergantian antara konsonan dan vokal."
    • Konsonan adalah salah satu dari surat-surat berikut: bcdfghjklmnpqrstvwxz
    • Vokal adalah salah satu dari surat-surat berikut: aeiouy
  • Kata harus dibuat secara acak.
  • Kata-kata harus dapat mengandung setiap konsonan dan vokal. (Anda tidak bisa hanya menggunakan bcdfuntuk konsonan dan aeiuntuk vokal.)
  • Kata harus mengandung 10 huruf.
  • Kode terpendek (dalam jumlah karakter) menang.


7
Dengan mempertimbangkan xkcd ini , program secara echo buxitiwymuteknis sesuai dengan spesifikasi. Saya yakinkan Anda, saya menghasilkan kata secara acak: P
AardvarkSoup

1
@AardvarkSoup "Kata-kata harus dapat mengandung setiap konsonan dan vokal"
Doorknob

1
@Kartik tergantung pada konteksnya, di 'ya' itu konsonan, di 'mengapa' itu adalah vokal, tetapi ini akan membuat tidak mungkin untuk mendefinisikan kata yang dapat diucapkan sebagai bolak-balik antara vokal dan konsonan, misalnya. yyyyyyyy akan menjadi kata yang valid.
CJStuart

1
Saya sebenarnya membuat generator di Scratch beberapa waktu lalu. Itu memiliki aturan khusus untuk kapan Anda dapat memperlakukan ysebagai vokal, di mana Anda dapat menggunakan qdan x, dan ketika Anda dapat menggunakan kombinasi dua huruf seperti ngatauea
Buah Esolanging

Jawaban:


7

GolfScript, 32 karakter

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

Jalankan secara online .


8

Ruby: 56 karakter

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

Output contoh:

  • itopytojog
  • umapujojim
  • ipagodusas
  • yfoqinifyw
  • ebylipodiz

1
'aeiouy'.charsakan menjadi satu char lebih pendek.
Howard

@ Howard maka operator pengurangan menaikkanTypeError: can't convert Enumerator into Array
John Dvorak

@ JanDvorak Maaf, lupa menyebutkan bahwa Anda memerlukan Ruby 2.0 untuk trik ini.
Howard

7

Python, 81

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

Semoga berhasil mengucapkannya.


Kata-kata itu sebenarnya cukup mudah diucapkan, misalnya kata pertama yang saya dapat adalah "viketuziwo":P
Doorknob

@ Doorknob mungkin hanya keberuntunganku. Saya terus mendapatkan 'kata-kata' seperti "qijepyjyga". Namun, upaya komputer saya untuk mengucapkan make-up make up untuknya :)
grc

3
Saya baru saja bersenang-senang mengerjakan python grc.py | saymesin saya. Terima kasih untuk idenya.
Kaya

7

COBOL, 255

Jadi saya sedang belajar COBOL saat ini. Menggunakan pertanyaan ini sebagai latihan. Mencoba bermain golf.

Ini 255 tanpa spasi putih terkemuka, dan 286 byte dengan.

Untuk apa nilainya, ini berjalan di Microfocus COBOL untuk VS2012, dan saya tidak tahu apakah itu akan berjalan di tempat lain.

       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]

Tidak menghasilkan semua kombinasi, tetapi saya pikir semua konsonan dan vokal muncul.

JavaScript, 79

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

Lebih banyak versi "acak".


Untuk apa ini ^0?
Alpha

1
@Alpha Math.randommemberikan float, kita perlu integer. ^0memotong nomor
salin

Trik cerdas. Saya belum pernah melihat ^operator dalam JavaScript sebelumnya dan kurang mendengar tentang menggunakannya untuk memotong float. Terima kasih!
Alpha

@ copy saya suka penggunaan^
Math chiller

4

Ruby: 70 66 karakter

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

Contoh dijalankan:

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

Anda dapat menggunakan 10.timessatu char lebih sedikit.
Howard

1
Juga pertanyaannya tidak mengharuskan setiap huruf harus memiliki probabilitas yang sama. *10-> *4, lewati *3, rand 60-> rand 20dan Anda telah menyimpan 3 karakter.
Howard

Bagus menangkap aturan, @Hard. Terima kasih.
manatwork

4

R: 105 karakter

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

Memproses, 100 99 93 87

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

Setelah memeriksa pertanyaan ini lebih dekat, saya melihat itu tidak memerlukan output. Saya telah menyesuaikan ini sesuai.


3

Objective-C, 129

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

Dengan bantuan Daniero

(Saya suka menggunakan kecenderungan untuk operator (->)


3

Java AKA bahasa paling verbose yang pernah dibuat, 176 dengan bantuan Doorknob, Daniero dan Peter Taylor (terima kasih kawan!)

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

Tidak Terkumpul:

    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
Perbaikan yang disarankan: Ubah String a[]ke String[]a(-1 karakter), ubah w W = new w();ke w W=new w();(-2 karakter)
Gagang Pintu

Saran: Biarkan kata selalu dimulai dengan konsonan (atau goyangan); tidak perlu mengacak ini ketika pertanyaan tidak menyebutkannya! Jadi, lewati boolean fdan gunakan i%2saja. Juga, forloop dapat dipersingkat, dan Anda dapat meletakkan kedua string di dalam operator kondisional (juga, tidak perlu untuk parens di sini), dan gunakan charAtdi luar. Inilah semuanya, 195 CHARS, 38 DISELAMATKAN :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 bahasa paling verbose yang pernah dibuat” - Pernah mencoba Shakespeare ? ;-)
manatwork

1
@manatwork, jangan lupa menghapus impor setelah Anda menggunakannya hanya di satu tempat.
Peter Taylor

1
@manatwork mungkin kita suka cadel ?? ok, maaf, akan mengambil kurung itu ketika saya pulang kerja
jsedano

3

Javascript, 85

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

Jika dijalankan dari konsol, output ditampilkan. Tampilan eksplisit akan menambah alert(s)8 karakter, masih lebih pendek dari solusi JS lainnya.

Terima kasih C5H8NNaO4 dan Howard!


Bagus, simpan karakter dengan menghapus ';' yang terakhir
C5H8NNaO4

1
Alih-alih ~~(###)Anda dapat menulis ###|0yang menyimpan 4 karakter.
Howard

3

Javascript, 135 122 96 86 karakter

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

3

PHP, 100 Karakter

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

sebenarnya saya pikir itu panjangnya 100 karakter
Cristian Lupascu

3

Alat Unix: 73 byte

Dan waktu dijamin tidak berjalan :)

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

Satu-satunya masalah adalah bahwa string yang dihasilkan akan mulai dengan "vokal" setiap kali.

(edit: diubah ' 'menjadi ''dalam argumen tempel) (edit lain: dihapus -P dari opsi grep, terima kasih kepada manatwork )


Sesuatu dapat disesuaikan di sekitar grepparameter. Saya mendapat "of e ap ag ak".
manatwork

Hmm ... aneh. Saya tidak mendapatkan yang seperti itu. Saya pikir -asudah cukup.
pgy

1
Tes saya menunjukkan itu -Padalah satu. Tampaknya pria itu memperingatkan tentang statusnya yang sangat eksperimental dengan suatu alasan. ( grep2.16) Tapi bagaimanapun, itu berfungsi dengan baik tanpa -P.
manatwork

Anda benar, terima kasih, saya tidak mempertimbangkan itu. Aku bahkan tidak tahu kenapa aku menggunakannya -P. Saya akan mengedit jawaban saya.
pgy

1
By the way, tr -d \\nlebih pendek untuk bergabung dengan garis.
manatwork

3

Pyth, 26 karakter

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

Anda dapat mencobanya di kompiler online di sini.

Seseorang memposting tantangan yang sangat mirip tetapi ditutup setelah saya membuat solusi. Saya tidak menyadarinya, tetapi pertanyaan ini sebenarnya mendahului penciptaan Pyth. Bagaimanapun, ini adalah rinciannya:

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

Setiap kali loop dijalankan, J beralih dari daftar konsonan ke daftar vokal. Dengan begitu kita bisa mengambil surat acak dari J setiap kali.
Mungkin ada cara untuk menginisialisasi J dalam loop atau menghapus tugas eksplisit dari loop, tetapi saya belum berhasil dengan baik.


1
Menabrak pertanyaan lama umumnya dianggap baik-baik saja. Namun, ketika Anda menggunakan bahasa yang lebih baru dari pertanyaan (Saya membuat Pyth di 2014) Anda harus mencatat ini dalam jawaban Anda.
isaacg

Terima kasih telah menjelaskannya untuk saya. Saya tidak menyadari bahwa Pyth dibuat setelah pertanyaan ini dan saya menambahkannya ke jawabannya.
Mike Bufardeci

3

APL 30 26

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

Penjelasannya sangat mirip dengan versi sebelumnya di bawah ini, hanya memesan sedikit untuk golf solusinya.

Catatan: ⎕IO diatur ke 0


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

Penjelasan:

'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)tapi satu byte lebih pendek.
lstefano

1
Menunda 'A' untuk ⎕Amenyimpan byte lain:,('EIOUY'∪⎕A)[6(|,+)⍪5?20]
Adám

Bagus! ke 26. Terima kasih
Moris Zucca

2

PHP 79 byte

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

Cukup singkat.


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]

bermain golf banyak hal-hal sederhana yang tidak perlu, masih tidak sebagus yang copys '

Oh, dan yang baru saja bermain golf: "dydudelidu"

Sekarang saya mencoba satu menggunakan 2 karakter sekaligus pendekatan. Ternyata itu hampir sama dengan yang kedua copys, jadi saya tidak bisa menghitungnya, juga di 79. a="";for(e=5;e--;)a+="bcdfghjklmnpqrstvwxz"[m=0|20*Math.random()]+"aeiouy"[m%6]


2

Brachylog , 9 byte

Ḍ;Ẉṣᵐzh₅c

Cobalah online!

Memberikan output sebagai daftar huruf melalui variabel output.

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

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 byte

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

5?"abc" akan menghasilkan 5 huruf acak dari string yang diberikan.

5?/: akan menghasilkan 5 huruf acak dari masing-masing string di sebelah kanan, menghasilkan dua daftar.

+ mentranspos kedua daftar itu, memberi kami daftar tupel dengan satu karakter acak dari daftar pertama dan kemudian satu dari daftar kedua.

,/ is "raze" - menyatukan semua tuple secara berurutan.

K5 dapat melakukan ini dalam 33 byte dengan membangun alfabet lebih cerdik dan kemudian menggunakan "kecuali" ( ^) untuk menghapus vokal, tetapi K5 terlalu baru untuk dianggap legal dalam pertanyaan ini:

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

1

R, 83 byte

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

Hasilkan semua barisan konsonan-vokal yang mungkin dalam sebuah matriks, kemudian sampel secara acak 5 dari mereka, menghasilkan kata 10 huruf.



0

Jelly , 13 byte

Øy,ØYẊ€Zs5ḢŒl

Penjelasan:

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

Cobalah online!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.