Biorąc pod uwagę ciąg wejściowy, wyjściowy ciąg ze wszystkimi samogłosek a
, e
, i
, o
i u
zamienione na oślep między sobą.
Na przykład, w ciągu this is a test
istnieją 4 samogłoski: [i, i, a, e]
. Prawidłowe tasowanie tych samogłosek może [a, i, e, i]
zatem dać wynik thas is e tist
.
O tasowaniu
Wszystkie przetasowania będą jednakowo prawdopodobne, jeśli uznamy równe samogłoski za odrębne . W powyższym przykładzie możliwe są 24 losowe losowania:
[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 ]
Każdy powinien być równie prawdopodobny.
Nie możesz próbować losowych losowań całego łańcucha, dopóki nie znajdziesz takiego, w którym wszystkie samogłoski są we właściwym miejscu. Krótko mówiąc, czas działania kodu powinien być stały, jeśli dane wejściowe są stałe.
Wejścia i wyjścia
Możesz założyć, że wszystkie litery na wejściu będą małe lub wielkie. Możesz również obsługiwać mieszane obudowy, ale to nie da ci żadnej premii.
Dane wejściowe zawsze będą składały się z drukowalnych znaków ASCII. Wszystkie znaki, które są na wejściu, powinny być na wyjściu, tylko samogłoski muszą być tasowane i nic więcej.
Dane wejściowe mogą być puste. Nie ma gwarancji, że dane wejściowe będą zawierać co najmniej jedną samogłoskę lub co najmniej jedną samogłoskę.
Możesz wziąć dane wejściowe
STDIN
jako parametr funkcji lub coś podobnego.Możesz wydrukować dane wyjściowe
STDOUT
, zwrócić je z funkcji lub coś podobnego.
Przypadki testowe
Pierwszy wiersz to dane wejściowe. Druga linia jest jednym z możliwych wyników.
<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
Punktacja
To jest golf-golf , który jest jednym z najlepszych graczy .
źródło
y
samogłoski ..;)y
się za samogłoskę, ale ostatnie wyzwanie, w którym powiedziałem, żey
to samogłoska, mnie zapytało, dlaczego to wybrałem!Odpowiedzi:
Galaretka , 15 bajtów
Wypróbuj online!
Jak to działa
źródło
/usr/share/dict/words
z komputera i włączyłem go do interpretera Jelly.R
9291Nie mogę jeszcze komentować, więc dodaję własną odpowiedź, choć bardzo podobną do odpowiedzi @ Andreï Kostyrka (wierzcie lub nie, ale wymyśliłem ją niezależnie).
Nie golfił
Oszczędność jednego bajtu dzięki @Vlo
źródło
s=strsplit(readline(),"")[[1]];s[v]=sample(s[v<-s%in%c("a","e","i","o","u")]);cat(s,sep="")
el()
zamiast[[1]]
.R,
999889 bajtówWydaje się być pierwszym rozwiązaniem czytelnym dla człowieka! Dzięki Giuseppe za uratowanie 9 bajtów!
Przypadki testowe:
Wydaje się, że nie ma sposobu na przypisanie zmiennej wewnętrznej (wewnątrz, na przykład,
cat
), i znowu niektórzy ludzie udowodnią, że się mylę ...źródło
letters[c(1,5,9,15,21)]
jest o 1 bajt dłuższy, a OEIS A161536 i A215721 również wydają się mało pomocne.z=grepl("[aeiou]",x)
byłby krótszy?CJam, 23 bajty
Wypróbuj online!
Wyjaśnienie
źródło
05AB1E , 17 bajtów
Wyjaśnienie
Wypróbuj online!
źródło
Python 3, 109 bajtów
Obsługuje tylko samogłoski pisane małymi literami.
Dzięki @Alissa za zapisanie dodatkowego bajtu.
Ideone to!
źródło
a.pop(random.randrange(0,len(a)))
zamiast tasowaćTSQL, 275 bajtów
Gra w golfa:
Nie golfowany:
Skrzypce
źródło
Perl, 38 bajtów
Obejmuje +1 dla
-p
Uruchom z zdaniem na STDIN
vawols.pl
:źródło
Java 7,
243241 bajtówTak, prawdopodobnie można go trochę pograć w golfa, ale Java nie ma żadnych przydatnych wbudowanych funkcji dla tego afaik .. Poza tym, zapomniałem trochę o wariancie tablicowym z kodowaniem dla
Collections.shuffle
..Przypadki bez golfa i testy:
Wypróbuj tutaj.
Możliwe wyjście:
źródło
i
w drugiej pętli?Arrays.shuffle
mnie zatrzymał właśnie tam…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 bajtów
Funkcja anonimowa. Zakłada wprowadzanie małych liter.
( spróbuj online )
źródło
Rubinowy 45 + 1 = 46 bajtów
+1 bajt dla
-p
flagiźródło
Brachylog , 39 bajtów
Wypróbuj online!
Wyjaśnienie
Główny predykat:
Predykat 1:
Predykat 2:
źródło
JavaScript (ES6),
7876 bajtówZaoszczędzono 2 bajty dzięki apsillerom
Alternatywna wersja proponowana przez apsillery (również 76 bajtów)
Test
źródło
l=...
całkowicie i użyj funkcji powiązanej[].pop.bind(s.match(r).sort(_=>Math.random()-.5)))
jako drugiego argumentureplace
(zamiast funkcji strzałki). Może na tej drodze można znaleźć poprawę, ale jeszcze jej nie znalazłem. Jeśli użyłeś języka superset JS, który ma operator powiązania::
, myślę, że możesz(s.match(r).sort(_=>Math.random()-.5)))::pop
.MATL , 15 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Japt v2.0a0,
1413 bajtówSpróbuj
Wyjaśnienie
źródło
Pyth, 26 bajtów
Program, który pobiera ciąg cudzysłowu i drukuje przetasowany ciąg.
Wypróbuj online
Jak to działa
źródło
PHP,
144129 bajtówKorzystanie z wprowadzania małych liter
Wyjaśnienie:
źródło
Właściwie 24 bajty
Wypróbuj online!
Wyjaśnienie:
źródło
Bash, 75 bajtów
Bierze ciąg jako argument i wypisuje wynik na standardowe wyjście.
Na przykład
odbitki
źródło
Bash, 89
Zakłada, że wszystkie dane wejściowe są pisane małymi literami.
źródło
PowerShell v3 +,
15599 bajtówWielkie rekwizyty dla @ Bena Owena dla 56-bajtowego golfa
Pobiera dane wejściowe
$n
, oczekując wszystkich małych liter, natychmiast rzuca je jakochar
tablicę.Mamy rura że w
Where-Object
klauzuli wyciągnąć te elementy, które-match
samogłoska, rura imSort-Object
się{Get-Random}
jako mechanizm sortowania. WywołanieGet-Random
bez kwalifikacji zwróci liczbę całkowitą pomiędzy0
i[int32]::MaxValue
- tj. Przypisując losowe wagi każdemu elementowi w locie. Przechowujemy losowe samogłoski w$a
.Wreszcie przechodzimy przez pętlę
$n
. Dla każdego elementu,|%{...}
jeśli gdzieś jest obecny znak-in
$a
, wypisujemy następny element$a
, zwiększając go$i
po raz kolejny. W przeciwnym razie wyświetlamy aktualny znak. To wszystko jest zamknięte w pareny i-join
połączone razem w ciąg. Ten ciąg jest pozostawiony w potoku, a wynik jest domyślny po zakończeniu programu.Przypadki testowe
źródło
$n
znakach i dopasowując je do każdej samogłoski, abychar
zamiast tego wyświetlać tablicę samogłosek. Coś w stylu:$a=[char[]]$n|?{$_-match'[aeiou]'}|sort{random}
$a
.Python 3, 106 bajtów
Tylko małe litery.
źródło
PHP> = 5,3 ,
139136 bajtów (i nie zgłoszono żadnych błędów)źródło
K (oK) , 29 bajtów
Rozwiązanie:
Wypróbuj online!
Przykłady:
Wyjaśnienie:
Znajdź lokalizacje samogłosek i zamień je na losowane w losowej kolejności.
źródło
APL (Dyalog Unicode) , 21 bajtów
Wypróbuj online!
Przyjmuje wielkie litery.
źródło
{⍵∊'AEIOU'}
→∊∘'AEIOU'
działałoby?({⍵[?⍨≢⍵]}@∊)∘'AEIOU'
.Kotlin ,
122118 bajtówWypróbuj online!
źródło