Принимая во внимание входную строку, выходной , что строка со всеми гласные a
, e
, i
, o
и u
выгружена в случайном порядке друг между другом.
Например, в строке this is a test
, есть 4 гласных: [i, i, a, e]
. [a, i, e, i]
Таким образом, правильная перетасовка этих гласных может привести к получению результата thas is e tist
.
О перетасовке
Все тасования будут одинаково вероятны, если мы будем считать равные гласные разными . Для приведенного выше примера возможны эти 24 шаффла:
[i 1 , i 2 , a, e] [i 1 , i 2 , e, a] [i 1 , a, i 2 , e] [i 1 , a, e, i 2 ] [i 1 , e, i 2 , a] [i 1 , e, a, i 2 ] [i 2 , i 1 , a, e] [i 2 , i 1 , e, a] [i 2 , a, i 1 , e] [i 2 , a, e, i 1 ] [i 2 , e, i 1 , a] [i 2 , e, a, i 1 ] [a, i 1 , i 2 , e] [a, i 1 , e, i 2 ] [a, i 2 , i 1 , e] [a, i 2 , e, i 1 ] [a, e, i 1 , i 2 ] [a, e, i 2 , i 1 ] [e, i 1 , i 2 , a] [e, i 1 , a, i 2 ] [e, i 2 , i 1 , a] [e, i 2 , a, i 1 ] [e, a, i 1 , i 2 ] [e, a, i 2 , i 1 ]
Каждый из них должен быть одинаково вероятным.
Вы не можете использовать случайные тасовки всей строки, пока не найдете тот, в котором все гласные находятся в нужном месте. Короче говоря, время выполнения вашего кода должно быть постоянным, если ввод постоянный.
Входы и выходы
Вы можете предположить, что все буквы на входе будут строчными или прописными. Вы также можете поддерживать смешанный корпус, но это не даст вам никакого бонуса.
Ввод всегда будет состоять из печатных символов ASCII. Все символы, которые находятся на входе, должны быть на выходе, только гласные должны быть перемешаны и ничего больше.
Ввод может быть пустым. Нет никакой гарантии, что входные данные будут содержать хотя бы одну гласную или хотя бы одну не гласную.
Вы можете использовать входные данные
STDIN
как параметр функции или что-либо подобное.Вы можете распечатать вывод
STDOUT
, вернуть его из функции или чего-либо подобного.
Контрольные примеры
Первая строка - это заданный ввод. Вторая строка - один из возможных выходов.
<empty string>
<empty string>
a
a
cwm
cwm
the quick brown fox jumps over the lazy dog.
tho qeuck brewn fax jumps ovir the lozy dog.
abcdefghijklmnopqrstuvwxyz
abcdefghujklmnipqrstovwxyz
programming puzzles & code golf
pregromming pezzlos & coda gulf
fatalize
fitaleza
martin ender
mirten ander
счет
Это код-гольф , так называемый футболист .
источник
y
гласныхy
его гласным, но последний вызов, на котором я сказал,y
был гласным, и меня спросили, почему я выбрал это!Ответы:
Желе , 15 байт
Попробуйте онлайн!
Как это работает
источник
/usr/share/dict/words
со своего компьютера и включил его в интерпретатор Jelly.R
9291Пока не могу комментировать, поэтому я добавляю свой собственный ответ, хотя и очень похожий на ответ @ Andreï Kostyrka (хотите верьте, хотите нет, но придумал это самостоятельно).
Ungolfed
Сохранено один байт благодаря @Vlo
источник
s=strsplit(readline(),"")[[1]];s[v]=sample(s[v<-s%in%c("a","e","i","o","u")]);cat(s,sep="")
el()
вместо[[1]]
.R,
999889 байтКажется, это первое удобочитаемое решение! Спасибо Джузеппе за сохранение 9 байт!
Тестовые случаи:
Кажется, что нет никакого способа сделать внутреннее присвоение переменной (внутри, вроде бы
cat
), и снова некоторые люди собираются доказать, что я не прав ...источник
letters[c(1,5,9,15,21)]
на 1 байт длиннее, и OEIS A161536 и A215721, похоже, тоже мало помогают.z=grepl("[aeiou]",x)
будет короче?CJam, 23 байта
Попробуйте онлайн!
объяснение
источник
05AB1E , 17 байт
объяснение
Попробуйте онлайн!
источник
Python 3, 109 байт
Поддерживает только строчные гласные.
Спасибо @Alissa за сохранение дополнительного байта.
Идео это!
источник
a.pop(random.randrange(0,len(a)))
вместо того, чтобы перетасоватьTSQL, 275 байт
Golfed:
Ungolfed:
скрипка
источник
Perl, 38 байт
Включает +1 для
-p
Беги с предложением на STDIN
vawols.pl
:источник
Java 7,
243241 байтДа, это, вероятно, может быть немного в гольфе, но в Java нет удобных встроенных программ для этого афаика .. Кроме того, я вроде забыл вариант массива codegolfed для
Collections.shuffle
..Ungolfed и тестовые случаи:
Попробуй это здесь.
Возможный вывод:
источник
i
во втором цикле?Arrays.shuffle
остановила меня прямо там ...import java.util.*;String c(char[]z){List l=new ArrayList();int i=0,j=z.length;for(;i<j;i++)if("aeiou".indexOf(z[i])>=0){l.add(z[i]);z[i]=0;}Collections.shuffle(l);String r="";for(i=0;i<j;i++)r+=z[i]<1?(char)l.remove(0):z[i];return r;}
Perl 6 , 65 байт
Анонимная функция. Предполагает ввод строчных букв.
( попробуйте онлайн )
источник
Рубин 45 + 1 = 46 байт
+1 байт за
-p
флагисточник
Брахилог , 39 байт
Попробуйте онлайн!
объяснение
Основной предикат:
Предикат 1:
Предикат 2:
источник
Javascript (ES6),
7876 байтСохранено 2 байта благодаря апсиллерам
Альтернативная версия, предложенная апсиллерами (также 76 байтов)
Тест
источник
l=...
полностью и используйте связанную функцию[].pop.bind(s.match(r).sort(_=>Math.random()-.5)))
в качестве второго аргументаreplace
(вместо функции стрелки). Может быть, есть улучшение, которое можно найти на этом пути, но я еще не нашел его. Если бы вы использовали язык JS-superset, у которого есть оператор связывания::
, я думаю, вы могли бы это сделать(s.match(r).sort(_=>Math.random()-.5)))::pop
.MATL , 15 байт
Попробуйте онлайн!
объяснение
источник
Japt v2.0a0,
1413 байтПопытайся
объяснение
источник
Pyth, 26 байт
Программа, которая принимает ввод строки в кавычках и печатает перемешанную строку.
Попробуйте онлайн
Как это работает
источник
PHP,
144129 байтИспользование строчных букв
Объяснение:
источник
На самом деле, 24 байта
Попробуйте онлайн!
Объяснение:
источник
Баш, 75 байт
Принимает строку в качестве аргумента и печатает результат в стандартный вывод.
Например
печать
источник
Баш, 89
Предполагается, что все вводимые данные должны быть строчными.
источник
PowerShell v3 +,
15599 байтБольшой реквизит @ Ben Owen для 56-байтового гольфа
Принимает ввод
$n
, ожидая все строчные буквы, сразу же бросает его какchar
-array.Мы труба , что в
Where-Object
предложение , чтобы вытащить те элементы , которые-match
гласный, труба ихSort-Object
с{Get-Random}
как механизм сортировки. ВызовGet-Random
без квалификаторов вернет целое число между0
и[int32]::MaxValue
- т. Е. Присваивает случайные веса каждому элементу на лету. Мы храним случайные гласные в$a
.Наконец, мы проходим
$n
. Для каждого элемента,|%{...}
если текущий символ находится где-то-in
$a
, мы выводим следующий элемент$a
, после увеличения$i
в следующий раз. В противном случае мы выводим текущий символ. Это все заключено в параны и-join
объединено в строку. Эта строка остается в конвейере, и вывод неявен при завершении программы.Контрольные примеры
источник
$n
символы и сопоставляя каждую гласную, чтобыchar
вместо нее вывести -array из гласных. Что-то вроде:$a=[char[]]$n|?{$_-match'[aeiou]'}|sort{random}
$a
.Python 3, 106 байт
Только строчные.
источник
PHP> = 5,3 ,
139136 байт (без ошибок)источник
K (ок) , 29 байт
Решение:
Попробуйте онлайн!
Примеры:
Объяснение:
Найдите местоположения гласных и замените их гласными в случайном порядке.
источник
APL (Dyalog Unicode) , 21 байт
Попробуйте онлайн!
Предполагается в верхнем регистре.
источник
{⍵∊'AEIOU'}
→∊∘'AEIOU'
работать?({⍵[?⍨≢⍵]}@∊)∘'AEIOU'
.Котлин ,
122118 байтПопробуйте онлайн!
источник