Mengingat string input, output string dengan semua vokal a
, e
, i
, o
dan u
bertukar secara acak antara satu sama lain.
Sebagai contoh, dalam string this is a test
, ada 4 vokal: [i, i, a, e]
. [a, i, e, i]
Oleh karena itu pengocokan vokal yang valid dapat menghasilkan output thas is e tist
.
Tentang pengocokan
Semua pengocokan akan memiliki kemungkinan yang sama jika kita menganggap vokal yang sama berbeda . Untuk contoh di atas, 24 pengocokan tersebut dimungkinkan:
[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 ]
Masing-masing harus sama mungkin.
Anda tidak dapat mencoba mengacak acak seluruh string hingga menemukan satu di mana semua vokal berada di tempat yang tepat. Singkatnya, waktu menjalankan kode Anda akan konstan jika inputnya konstan.
Masukan dan keluaran
Anda dapat mengasumsikan bahwa semua huruf dalam input akan berupa huruf kecil atau huruf besar. Anda juga dapat mendukung casing campuran, meskipun ini tidak akan memberi Anda bonus apa pun.
Input akan selalu terdiri dari karakter ASCII yang dapat dicetak. Semua karakter yang ada di input harus dalam output, hanya vokal yang harus dikocok dan tidak ada yang lain.
Masukan bisa kosong. Tidak ada jaminan bahwa input akan mengandung setidaknya satu vokal atau setidaknya satu non-vokal.
Anda dapat mengambil input dari
STDIN
, sebagai parameter fungsi, atau yang serupa.Anda dapat mencetak output ke
STDOUT
, mengembalikannya dari fungsi, atau yang serupa.
Uji kasus
Baris pertama adalah input yang diberikan. Baris kedua adalah salah satu output yang mungkin.
<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
Mencetak gol
Ini adalah kode-golf , kecuali untuk kemeja byte .
sumber
y
sebagai vokal ..;)y
menjadi vokal, tetapi tantangan terakhir di mana saya katakany
adalah vokal. Saya ditanya mengapa saya memilih itu!Jawaban:
Jelly , 15 byte
Cobalah online!
Bagaimana itu bekerja
sumber
/usr/share/dict/words
dari komputer saya dan memasukkannya ke dalam juru bahasa Jelly.R,
9291Tidak dapat berkomentar, jadi saya menambahkan jawaban saya sendiri walaupun sangat mirip dengan jawaban @ Andreï Kostyrka (percaya atau tidak tetapi muncul secara mandiri).
Tidak disatukan
Disimpan satu byte berkat @Vlo
sumber
s=strsplit(readline(),"")[[1]];s[v]=sample(s[v<-s%in%c("a","e","i","o","u")]);cat(s,sep="")
el()
alih-alih[[1]]
.R,
999889 byteTampaknya menjadi solusi yang dapat dibaca manusia pertama! Terima kasih kepada Giuseppe karena telah menghemat 9 byte!
Kasus uji:
Tampaknya tidak ada cara untuk membuat penugasan variabel internal (di dalam, seperti,
cat
), dan lagi beberapa orang akan membuktikan bahwa saya salah ...sumber
letters[c(1,5,9,15,21)]
adalah 1 byte lebih lama, dan OEIS A161536 dan A215721 tampaknya sedikit membantu juga.z=grepl("[aeiou]",x)
lebih pendek?CJam, 23 byte
Cobalah online!
Penjelasan
sumber
05AB1E , 17 byte
Penjelasan
Cobalah online!
sumber
Python 3, 109 byte
Hanya mendukung vokal huruf kecil.
Terima kasih kepada @Alissa karena telah menyimpan byte tambahan.
Ide itu!
sumber
a.pop(random.randrange(0,len(a)))
bukannya mengocokTSQL, 275 byte
Golf:
Tidak Disatukan:
Biola
sumber
Perl, 38 byte
Termasuk +1 untuk
-p
Jalankan dengan kalimat di STDIN
vawols.pl
:sumber
Java 7,
243241 byteYa, ini mungkin bisa golf sedikit, tetapi Java tidak memiliki built-in berguna untuk afaik ini .. Juga, saya agak lupa codegolfed array-varian untuk
Collections.shuffle
..Kasus yang tidak disatukan & uji:
Coba di sini.
Output yang mungkin:
sumber
i
pada loop kedua?Arrays.shuffle
menghentikan saya di sana ...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 byte
Fungsi anonim. Mengasumsikan input huruf kecil.
( coba online )
sumber
Ruby 45 + 1 = 46 byte
+1 byte untuk
-p
benderasumber
Brachylog , 39 byte
Cobalah online!
Penjelasan
Predikat utama:
Predikat 1:
Predikat 2:
sumber
Javascript (ES6),
7876 byteDisimpan 2 byte berkat apsillers
Versi alternatif yang diusulkan oleh apsillers (76 bytes juga)
Uji
sumber
l=...
seluruhnya dan gunakan fungsi terikat[].pop.bind(s.match(r).sort(_=>Math.random()-.5)))
sebagai argumen keduareplace
(bukan fungsi panah). Mungkin ada perbaikan yang ditemukan di jalan itu, tapi saya belum menemukannya. Jika Anda menggunakan bahasa JS-superset yang memiliki operator ikat::
, saya pikir Anda bisa melakukannya(s.match(r).sort(_=>Math.random()-.5)))::pop
.MATL , 15 byte
Cobalah online!
Penjelasan
sumber
Japt v2.0a0,
1413 byteCobalah
Penjelasan
sumber
Pyth, 26 byte
Suatu program yang mengambil input dari string yang dikutip dan mencetak string yang diacak.
Cobalah online
Bagaimana itu bekerja
sumber
PHP,
144129 byteMenggunakan input huruf kecil
Penjelasan:
sumber
Sebenarnya, 24 byte
Cobalah online!
Penjelasan:
sumber
Bash, 75 byte
Mengambil string sebagai argumen dan mencetak hasilnya ke stdout.
Misalnya
cetakan
sumber
Bash, 89
Mengasumsikan semua input menjadi huruf kecil.
sumber
PowerShell v3 +,
15599 byteAlat peraga besar untuk @ Ben Owen untuk golf 56-byte
Mengambil input
$n
, mengharapkan semua huruf kecil, segera melemparkannya sebagaichar
-array.Kami menyalurkannya ke dalam
Where-Object
klausa untuk menarik elemen-elemen yang-match
vokal, menyalurkannyaSort-Object
dengan{Get-Random}
sebagai mekanisme penyortiran. PanggilanGet-Random
tanpa kualifikasi akan menghasilkan bilangan bulat antara0
dan[int32]::MaxValue
- yaitu, menugaskan bobot acak untuk setiap elemen dengan cepat. Kami menyimpan vokal acak ke$a
.Akhirnya, kami mengulang
$n
. Untuk setiap elemen,,|%{...}
jika karakter saat ini ada di suatu tempat-in
$a
, kami menampilkan elemen berikutnya$a
, setelah kenaikan$i
untuk waktu berikutnya. Jika tidak, kami menampilkan karakter saat ini. Itu semua diringkas dalam parens dan diedit-join
menjadi sebuah string. String itu ditinggalkan di jalur pipa, dan output tersirat pada kesimpulan program.Uji kasus
sumber
$n
karakter-karakternya dan mencocokkan setiap vokal untuk menampilkanchar
-array vokal sebagai gantinya. Sesuatu seperti:$a=[char[]]$n|?{$_-match'[aeiou]'}|sort{random}
$a
.Python 3, 106 byte
Huruf kecil saja.
sumber
PHP> = 5.3 ,
139136 byte (dan tidak ada kesalahan yang terjadi)sumber
K (oK) , 29 byte
Larutan:
Cobalah online!
Contoh:
Penjelasan:
Temukan lokasi vokal dan ganti dengan vokal yang digambar dalam urutan acak.
sumber
APL (Dyalog Unicode) , 21 byte
Cobalah online!
Asumsikan huruf besar.
sumber
{⍵∊'AEIOU'}
→∊∘'AEIOU'
bekerja?({⍵[?⍨≢⍵]}@∊)∘'AEIOU'
.Kotlin ,
122118 byteCobalah online!
sumber