Tạo một từ có thể phát âm


16

Thử thách rất đơn giản:

tạo ra một từ

Thông số kỹ thuật:

  • Lời phải được phát âm.
    • Điều này được định nghĩa là "xen kẽ giữa một phụ âm và nguyên âm."
    • Một phụ âm là một trong những chữ cái sau đây: bcdfghjklmnpqrstvwxz
    • Nguyên âm là một trong những chữ cái sau: aeiouy
  • Từ phải được tạo ngẫu nhiên.
  • Các từ phải có khả năng chứa mọi phụ âm và nguyên âm. (Bạn không thể chỉ sử dụng bcdfcho phụ âm và aeinguyên âm.)
  • Word phải chứa 10 chữ cái.
  • Mã ngắn nhất (tính theo số ký tự) sẽ thắng.


7
Với dải xkcd này , chương trình echo buxitiwymuphù hợp về mặt kỹ thuật. Tôi đảm bảo với bạn, tôi đã tạo ra từ một cách ngẫu nhiên: P
AardvarkSoup

1
@AardvarkSoup "Các từ phải có thể chứa mọi phụ âm và nguyên âm"
Doorknob

1
@Kartik phụ thuộc vào ngữ cảnh, trong 'có' đó là một phụ âm, trong 'tại sao' nó là một nguyên âm, nhưng điều này sẽ không thể định nghĩa một từ có thể phát âm là xen kẽ giữa nguyên âm và phụ âm, ví dụ. yyyyyyyy sẽ là một từ hợp lệ.
CJStuart 17/2/2015

1
Tôi thực sự đã tạo một máy phát điện trên Scratch một lúc trước. Nó có quy tắc cụ thể cho khi bạn có thể coi ynhư một nguyên âm, nơi mà bạn có thể sử dụng qx, và khi bạn có thể sử dụng kết hợp hai chữ cái giống như nghoặcea
Esolanging Fruit

Câu trả lời:



8

Ruby: 56 ký tự

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

Kết quả ví dụ:

  • itopytojog
  • umapujojim
  • ipagodusas
  • yfoqinifyw
  • ebylipodiz

1
'aeiouy'.charssẽ là một char ngắn hơn.
Howard

@ Sau đó, toán tử trừ tăng lênTypeError: can't convert Enumerator into Array
John Dvorak

@JanDvorak Xin lỗi, quên đề cập rằng bạn cần Ruby 2.0 cho thủ thuật này.
Howard

7

Con trăn, 81

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

Chúc may mắn phát âm chúng.


Chúng thực sự khá dễ phát âm, ví dụ từ đầu tiên tôi nhận được là "viketuziwo":P
Doorknob

@Doorknob có lẽ đó chỉ là may mắn của tôi. Tôi tiếp tục nhận được "từ" như "qijepyjyga". Mặc dù vậy, máy tính của tôi đã cố gắng phát âm chúng để bù lại :)
grc

3
Tôi chỉ có rất nhiều niềm vui khi làm python grc.py | saytrên máy của tôi. Cảm ơn ý kiến.
Kaya

7

LỚP, 255

Vì vậy, hiện tại tôi đang học COBOL. Sử dụng câu hỏi này như một số thực hành. Đã thử chơi golf nó.

Đó là 255 mà không có khoảng trắng hàng đầu và 286 byte với.

Đối với những gì nó có giá trị, điều này chạy trong Microf Focus COBOL cho VS2012, và tôi không biết liệu nó có chạy ở bất kỳ nơi nào khác không.

       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]

Không tạo ra tất cả các kết hợp, nhưng tôi nghĩ rằng tất cả các phụ âm và nguyên âm xuất hiện.

JavaScript, 79

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

Phiên bản "ngẫu nhiên" hơn.


Để làm gì ^0?
Alpha

1
@Alpha Math.randomcho một float, chúng ta cần một số nguyên. ^0cắt ngắn số
sao chép

Khéo léo thông minh. Tôi chưa từng thấy ^toán tử trong JavaScript trước đây và ít nghe về việc sử dụng nó để cắt bớt một số float. Cảm ơn!
Alpha

@copy tôi thích việc sử dụng^
làm lạnh toán học

4

Ruby: 70 66 ký tự

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

Chạy mẫu:

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

Bạn có thể sử dụng 10.timescho một char ít hơn.
Howard

1
Ngoài ra câu hỏi không yêu cầu mỗi chữ cái phải có xác suất giống nhau. *10-> *4, bỏ qua *3, rand 60-> rand 20và bạn đã lưu 3 ký tự.
Howard

Bắt tốt theo quy tắc, @Howard. Cảm ơn bạn.
manatwork

4

R: 105 ký tự

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

Đang xử lý, 100 99 93 87

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

Khi kiểm tra kỹ hơn câu hỏi, tôi thấy nó không yêu cầu bất kỳ đầu ra nào. Tôi đã điều chỉnh điều này cho phù hợp.


3

Mục tiêu-C, 129

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

Với sự giúp đỡ của Daniero

(Tôi thích sử dụng xu hướng toán tử (->)


3

Java AKA là ngôn ngữ dài dòng nhất từng được tạo ra, 176 với sự giúp đỡ của Doorknob, Daniero và Peter Taylor (cảm ơn các bạn!)

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

Ung dung:

    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
Các cải tiến được đề xuất: Thay đổi String a[]thành String[]a(-1 ký tự), thay đổi w W = new w();thành w W=new w();(-2 ký tự)
Doorknob

Gợi ý: Hãy để từ luôn bắt đầu bằng một phụ âm (hoặc xẻng); không cần phải ngẫu nhiên điều này khi câu hỏi không đề cập đến nó! Vì vậy, bỏ qua boolean fvà sử dụng i%2thay thế. Ngoài ra, forvòng lặp có thể được rút ngắn và bạn có thể đặt cả hai chuỗi bên trong toán tử có điều kiện (cũng không cần parens ở đây) và sử dụng charAtbên ngoài. Đây là toàn bộ, 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
Ngôn ngữ Java AKA là ngôn ngữ dài dòng nhất từng được tạo ra - Bạn đã từng thử Shakespeare chưa? ;-)
thao tác

1
@manatwork, đừng quên xóa nhập sau khi bạn đã sử dụng nó ở một nơi duy nhất.
Peter Taylor

1
@manatwork có lẽ chúng ta thích lisp ?? ok, xin lỗi, sẽ mang những dấu ngoặc đơn đó ra khi tôi đi làm về
jsedano

3

Javascript, 85

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

Nếu chạy từ bàn điều khiển, đầu ra được hiển thị. Hiển thị rõ ràng sẽ thêm alert(s)8 ký tự, vẫn ngắn hơn các giải pháp JS khác.

Cảm ơn C5H8NNaO4 và Howard!


Đẹp, lưu một nhân vật bằng cách loại bỏ cuối cùng ';'
C5H8NNaO4

1
Thay vì ~~(###)bạn có thể viết ###|0mà tiết kiệm 4 ký tự.
Howard

3

Javascript, 135 122 96 86 ký tự

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

3

PHP, 100 ký tự

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

Về mặt thực tế, tôi nghĩ rằng đó là 100 ký tự dài
Cristian Lupascu

3

Công cụ Unix: 73 byte

Và không đảm bảo thời gian chạy :)

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

Vấn đề duy nhất là chuỗi được tạo sẽ bắt đầu bằng "nguyên âm" mỗi lần.

(chỉnh sửa: đã thay đổi ' 'thành ''trong đối số dán) (chỉnh sửa khác: đã xóa -P khỏi các tùy chọn grep, nhờ thao tác )


Một cái gì đó có thể được điều chỉnh tốt xung quanh các greptham số. Tôi đã nhận được của e ap ag ak.
manatwork 4/2/2015

Hừm ... lạ thật. Tôi không có gì như thế. Tôi nghĩ rằng -asẽ là đủ.
pgy

1
Thử nghiệm của tôi chỉ ra rằng đó -Plà một. Có vẻ như người đàn ông cảnh báo về tình trạng thử nghiệm cao của nó với một lý do. ( grep2.16) Nhưng dù sao, nó hoạt động tốt mà không có -P.
manatwork 4/2/2015

Bạn đúng cảm ơn bạn, tôi đã không xem xét điều đó. Tôi thậm chí không biết tại sao tôi sử dụng -Pở nơi đầu tiên. Tôi sẽ chỉnh sửa câu trả lời của tôi.
pgy

1
Nhân tiện, tr -d \\nlà ngắn hơn để tham gia các dòng.
manatwork 4/2/2015

3

Pyth, 26 ký tự

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

Bạn có thể thử nó trong trình biên dịch trực tuyến ở đây.

Ai đó đã đăng một thử thách rất giống nhưng nó đã bị đóng sau khi tôi đưa ra giải pháp. Tôi đã không nhận ra nó, nhưng câu hỏi này thực sự có trước khi tạo ra Pyth. Dù sao, đây là sự cố:

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

Mỗi khi vòng lặp được chạy, J chuyển từ một danh sách các phụ âm sang một danh sách các nguyên âm. Bằng cách đó chúng ta chỉ có thể chọn một chữ cái ngẫu nhiên từ J mỗi lần.
Có thể có một cách để khởi tạo J trong vòng lặp hoặc xóa các bài tập rõ ràng khỏi vòng lặp, nhưng tôi vẫn chưa thành công.


1
Trả lời các câu hỏi cũ thường được coi là tốt. Tuy nhiên, khi bạn sử dụng một ngôn ngữ mới hơn câu hỏi (Tôi đã tạo Pyth vào năm 2014), bạn nên lưu ý điều này trong câu trả lời của mình.
isaacg 7/07/2015

Cảm ơn cho sạch nó lên cho tôi. Tôi đã không nhận ra rằng Pyth đã được tạo ra sau câu hỏi này và tôi đã thêm nó vào câu trả lời.
Mike Bufardeci 7/07/2015

3

APL 30 26

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

Giải thích rất giống với phiên bản trước đây, chỉ cần sắp xếp lại một chút để đánh golf giải pháp.

Lưu ý: ⎕IO được đặt thành 0


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

Giải trình:

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

Dùng thử


1
('AEIOUY'∪⎕A) ≡ (∪'AEIOUY',⎕A)nhưng nó ngắn hơn một byte.
lstefano

1
Trì hoãn 'A' để ⎕Alưu một byte khác:,('EIOUY'∪⎕A)[6(|,+)⍪5?20]
Adám

Đẹp! xuống 26. Cảm ơn
Moris Zucca

2

PHP 79 byte

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

Khá súc tích.


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]

chơi golf rất nhiều thứ không cần thiết đơn giản, vẫn không đẹp như bản sao

Ồ, và người ta vừa bật lên trong khi chơi gôn: "dydudelidu"

Bây giờ tôi đã thử một bằng cách sử dụng 2 ký tự cùng một lúc. Hóa ra nó gần giống như bản thứ hai của bản sao, vì vậy tôi không thể đếm nó, cũng ở 79. a="";for(e=5;e--;)a+="bcdfghjklmnpqrstvwxz"[m=0|20*Math.random()]+"aeiouy"[m%6]


2

Brachylog , 9 byte

Ḍ;Ẉṣᵐzh₅c

Hãy thử trực tuyến!

Cung cấp đầu ra dưới dạng danh sách các chữ cái thông qua biến đầu ra.

   ṣ         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 ký tự

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" sẽ tạo ra 5 chữ cái ngẫu nhiên từ chuỗi đã cho.

5?/: sẽ tạo ra 5 chữ cái ngẫu nhiên từ mỗi chuỗi bên phải, tạo ra hai danh sách.

+ hoán đổi hai danh sách đó, cho chúng ta một danh sách các bộ dữ liệu với một ký tự ngẫu nhiên từ danh sách đầu tiên và sau đó một danh sách từ danh sách thứ hai.

,/ là "raze" - hợp nhất tất cả các bộ dữ liệu theo trình tự.

K5 có thể thực hiện việc này trong 33 byte bằng cách xây dựng bảng chữ cái một cách khéo léo hơn và sau đó sử dụng "ngoại trừ" ( ^) để loại bỏ các nguyên âm, nhưng K5 còn quá mới để trở thành hợp pháp trong câu hỏi này:

,/+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="")

Tạo tất cả các chuỗi nguyên âm phụ âm có thể có trong một ma trận, sau đó lấy mẫu ngẫu nhiên 5 trong số chúng, thu được một từ có 10 chữ cái.


1

05AB1E , 10 byte

5FžPΩ?žOΩ?

n

Giải trình:

Khá đơn giản:

5F      # Loop 5 times:
  žP    #  Push string "bcdfghjklmnpqrstvwxz"
    Ω   #  Pop and push a random character from this string
     ?  #  Output it without newline
  žOΩ?  #  Do the same with string "aeiouy"

0

Thạch , 13 byte

Øy,ØYẊ€Zs5ḢŒl

Giải trình:

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

Hãy thử trực tuyến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.