Создайте произносимое слово


16

Задача проста:

создать слово.

Характеристики:

  • Слово должно быть произносимым.
    • Это определяется как «чередование согласных и гласных».
    • Согласный - это одно из следующих букв: bcdfghjklmnpqrstvwxz
    • Гласный - это одно из следующих букв: aeiouy
  • Слово должно генерироваться случайным образом.
  • Слова должны содержать все согласные и гласные. (Вы не можете использовать только bcdfдля согласных и aeiгласных.)
  • Слово должно содержать 10 букв.
  • Самый короткий код (в количестве символов) выигрывает.


7
Учитывая эту полосу xkcd , программа echo buxitiwymuтехнически соответствует спецификации. Уверяю вас, я произвел слово случайно: P
AardvarkSoup

1
@AardvarkSoup «Слова должны содержать каждый согласный и гласный»
Doorknob

1
@Kartik зависит от контекста, в «да» это согласный, в «почему» это гласный, но это делает невозможным определение произносимого слова как чередующихся между гласными и согласными, например. yyyyyyyy будет правильным словом.
CJStuart

1
Я на самом деле сделал генератор на Scratch некоторое время назад. В нем были определенные правила для yqxngea
случаев,

Ответы:



8

Рубин: 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будет на один символ короче.
Говард

@ Как тогда поднимается оператор вычитанияTypeError: can't convert Enumerator into Array
Джон Дворак

@JanDvorak Извините, забыл упомянуть, что вам нужен Ruby 2.0 для этого трюка.
Говард

7

Python, 81

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

Удачи, произнося их.


Их на самом деле довольно легко произнести, например, первое слово, которое я получил, было «viketuziwo»:P
дверная ручка

@ Doorknob может быть, это просто моя удача. Я продолжаю получать «слова», как «qijepyjyga». Хотя попытки моего компьютера произнести их восполняют это :)
grc

3
Я просто очень повеселился python grc.py | sayна своей машине. Спасибо за идею.
Кая

7

КОБОЛ, 255

Так что сейчас я изучаю COBOL. Использовал этот вопрос как некоторую практику. Пытался в гольф это.

Это 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на один символ меньше.
Говард

1
Также вопрос не требует, чтобы каждая буква имела одинаковую вероятность. *10-> *4, пропустить *3, rand 60-> rand 20и вы сохранили 3 символа.
Говард

Хороший улов правила, @Howard. Спасибо.
Манатворк

4

R: 105 символов

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

Обработка, 100 99 93 87

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

При ближайшем рассмотрении вопроса, я вижу, что не требует никакого вывода. Я настроил это соответственно.


3

Objective-C, 129

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

С помощью Даньеро

(Я люблю использовать тенденцию к оператору (->)


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 символа)
Ручка двери

Предложения: Пусть слово всегда начинается с согласного (или wovel); нет необходимости рандомизировать это, когда вопрос не упоминает об этом! Итак, пропустите логическое значение fи используйте i%2вместо него. Кроме того, forцикл может быть сокращен, и вы можете поместить обе строки в условный оператор (кроме того, здесь нет необходимости в скобках) и использовать charAtих снаружи. Вот и все, 195 ЧАРСОВ, 38 СОХРАНЕНО :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)));}}
Даниеро

2
«Java AKA - самый многословный язык, который когда-либо создавался» - когда-нибудь пробовал Шекспира ? ;-)
manatwork

1
@manatwork, не забудьте удалить импорт, как только он будет использован только в одном месте.
Питер Тейлор

1
@ Manatwork может быть, нам нравится LISP? хорошо, извините, собираюсь убрать эти скобки, когда я вернусь домой с работы
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 и Говарду!


Хороший, сохранить символ, удалив последний ';'
C5H8NNaO4

1
Вместо этого ~~(###)вы можете написать, ###|0что экономит 4 символа.
Говард



3

Инструменты Unix: 73 байта

И не гарантируется время работы :)

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

Единственная проблема заключается в том, что сгенерированная строка будет начинаться с «гласной» каждый раз.

(редактирование: изменено ' 'на ''в аргументах пасты) (другое редактирование: удаленный -P из вариантов Grep, благодаря manatwork )


Что-то может быть точно настроено вокруг grepпараметров. Я получил «изо всех сил».
manatwork

Хм ... странно. У меня ничего такого нет. Я думал, -aчто будет достаточно.
pgy

1
Мой тест показывает, что -Pэто тот самый. Кажется, человек предупреждает о своем крайне экспериментальном статусе с разумом. ( grep2,16) Но в любом случае, это работает отлично без -P.
manatwork

Вы правы, спасибо, я не учел это. Я даже не знаю, почему я использовал -Pв первую очередь. Я отредактирую свой ответ.
pgy

1
Кстати, tr -d \\nкороче для объединения линий.
manatwork

3

Pyth, 26 символов

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

Вы можете попробовать это в онлайн-компиляторе здесь.

Кто-то отправил очень похожий вызов, но он был закрыт после того, как я принял решение. Я не осознавал этого, но этот вопрос на самом деле предшествовал созданию Пита. Во всяком случае, вот разбивка:

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 каждый раз.
Может быть способ инициализировать J в цикле или удалить явные назначения из цикла, но я пока не добился успеха.


1
Поднять старые вопросы, как правило, считается нормальным. Однако, когда вы используете язык, более новый, чем вопрос (я создал Pyth в 2014 году), вы должны отметить это в своем ответе.
Исаак

Спасибо за разъяснение этого для меня. Я не понял, что Pyth был создан после этого вопроса, и я добавил это к ответу.
Майк Буфардечи

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)но это на один байт короче.
Стефано

1
Отсрочка «А» для ⎕Aсохранения другого байта:,('EIOUY'∪⎕A)[6(|,+)⍪5?20]
Адам

Ницца! до 26. Спасибо
Морис Зукка

2

PHP 79 байт

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

Довольно лаконично.


2

С: 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]

играли в гольф много простых ненужных вещей, все еще не так хорошо, как копи

Ох, и тот, кто только что выступил против во время игры в гольф: "dydudelidu"

Теперь я попробовал один, используя подход 2 символов одновременно. Оказывается, это почти то же самое, что и вторая копия, так что я не могу сосчитать, также на 79. a="";for(e=5;e--;)a+="bcdfghjklmnpqrstvwxz"[m=0|20*Math.random()]+"aeiouy"[m%6]



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

К, 40 байт

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

5?"abc" сгенерирует 5 случайных букв из заданной строки.

5?/: сгенерирует 5 случайных букв из каждой строки справа, создав два списка.

+ транспонирует эти два списка, давая нам список кортежей с одним случайным символом из первого списка, а затем один из второго списка.

,/ is "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

Желе , 13 байт

Øy,ØYẊ€Zs5ḢŒl

Объяснение:

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

Попробуйте онлайн!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.