Dalam tantangan ini, Anda harus mengambil string yang cocok dengan regex ^[a-zA-Z]+$
atau apa pun yang masuk akal (Anda tidak harus mempertimbangkan huruf besar atau kecil jika Anda mau) (Anda dapat menganggap string cukup panjang, dan memiliki struktur yang tepat untuk semua operasi), dan menampilkan string lain, yang dihasilkan mirip dengan kata di akhir tweet dadaist oleh POTUS ( "Despite the constant negative press covfefe"
).
Cara mengabadikan string:
Pertama, dapatkan grup suara pertama (terdiri terminologi).
Bagaimana kamu melakukan ini? Baik:
Temukan vokal pertama (
y
juga vokal)v creation
Cari konsonan pertama setelah itu
v creation
Hapus sisa string
creat
Itu adalah grup suara pertama Anda.
Langkah berikutnya:
Dapatkan konsonan terakhir dari grup suara
t
dan menggantinya dengan versi bersuara atau tidak bersuara. Untuk melakukan ini, cari surat di tabel ini. Ganti dengan surat yang diberikan (yang mungkin surat yang sama)
b: p
c: g
d: t
f: v
g: k
h: h
j: j
k: g
l: l
m: m
n: n
p: b
q: q
r: r
s: z
t: d
v: f
w: w
x: x
z: s
jadi, kita dapatkan
d
Kemudian, ambil vokal berikutnya setelah konsonan itu. Anda dapat mengasumsikan bahwa konsonan ini bukan di akhir string. Gabungkan keduanya, lalu ulangi dua kali:
didi
Gabungkan ini ke grup suara pertama:
creatdidi
Anda selesai: string di-cfifikasi, dan sekarang Anda dapat meng-output-nya.
Kasus uji:
coverage: covfefe
example: exxaxa
programming: progkaka (the a is the first vowel after the g, even though it is not immediately after)
code: codtete
president: preszizi
Ini kode-golf , jadi harap buat program Anda sesingkat mungkin!
Jawaban:
Jelly ,
5857 byteProgram lengkap yang menerima daftar karakter huruf kecil dan mencetak hasilnya.
Cobalah online!
Bagaimana?
sumber
JavaScript (ES6),
107103 byteDisimpan 4 byte berkat GOTO 0
Uji kasus
Tampilkan cuplikan kode
sumber
s=>([,a,b,c]=s.match`(.*?[aeiouy]+(.)).*?([aeiouy])`,a+(b=(a="bcdfgszkvtgp")[11-a.search(b)]||b)+c+b+c)
Jelly ,
4539 byteCobalah online!
Bagaimana itu bekerja
sumber
CJam ,
59585756 byteCobalah online!
Penjelasan
sumber
C,
219213206179175 byteCobalah online!
sumber
#define
s dan fungsinya dengan flag preprocessor (-D...
).Perl 5 ,
8172 byteCobalah online!
sumber
\K
, tetapi Anda melakukannya 9 byte lebih baik daripada saya. Jawaban yang bagus!PHP, 121 Bytes
Cobalah online!
sumber
echo$t[1],$z=strtr($t[2].$t[3],bcdfgkpstvz,pgtvkgbzdfs),$z;
$argn
menjadi sesuatu yang lebih pendek?$a
, misalnya - itu -3 bytePyth, 54 byte
Ini mendefinisikan fungsi
y
, yang mengharapkan string. Cobalah online: Test Suitesumber
Python 3,
155139 bytedihapus 16 byte berkat @ovs
dihapus 1 byte berkat Gábor Fekete
sumber
'aeiouy]'
, mungkin itu akan menghemat beberapa byte. Anda juga dapat menghapus beberapa karakter dari string pengganti karena ada yang sama.IndexError
, dan menyimpanaeiouy])
tidak menyimpan byte.s='aeiouy])'
, Anda bisa menggunakannyab,c,v=re.findall('(.*?[%s([^%s.*?([%s'%(s,s,s)
. Ini tidak lebih pendek, tetapi mungkin mengarah pada cara untuk mempersingkatnya secara keseluruhan.k='aeiouy])'
danf'(.*?[{k}([^{k}.*?([{k}'
Java 8,
243236222 byteGunakan
.replaceAll
regex dengan grup tangkap untuk memfilter bagian yang tidak kita inginkan.Penjelasan:
Coba di sini.
sumber
Haskell ,
143141138137136 byteCobalah online!
sumber
nx
dengan sesuatu yang berhuruf satu akan menghemat 2 byte.z
luarf
dan beralih ke penjaga alih-alihlet
menyimpan dua byte lainnya: Cobalah secara online!(s,v)<-break z i,(m,c:x)<-span z v
ke dalam(s,(m,c:x))<-span z<$>break z i
.let
, terima kasih!z
darif
?Python,
261260 byteA Non regex, Bukan solusi esoterik. Butuh waktu sekitar 20 menit untuk membuatnya, dan satu jam lebih banyak untuk bermain golf.
Mungkin memiliki lebih banyak pemahaman daftar daripada seluruh perpustakaan standar python, terutama karena saya tidak tahu regex ...
Cobalah online! (Dengan testcases)
sumber
Ruby , 90 byte
Cobalah online!
Menghapus sedikit, kami memiliki sesuatu yang setara dengan:
sumber
Python 2,
251246245239237234229211 bytePengiriman pertama di sini.
Cobalah online!
Rekan pegolf yang membantu saya:
sumber
not n
ken<1
untuk 2 byte, karena Anda tahun
tidak akan pernah menjadi negatif. Anda juga dapat mengubahn==3
ken>2
karena Anda tahun
tidak akan lebih besar dari3
. Anda juga dapat menggunakan trik Python untuk conditional untuk mempersingkat pertama dan kedua terakhir lebih jauhn=[n,1][i in w and n<1]
:;r+=[0,r][n<2]
r,v,c=('',)*3
ker=v=c=''
, karena string yang berubah. Saya sudah mencoba banyak trik pintar lainnya, tetapi dengan frustrasi semuanya persis sama. Juga mungkin layak untuk ditambahkan Coba secara online! tautan ke posting AndaRuby ,
175141110 byteCobalah online!
tr
argumen yang disarankan dioptimalkanTidak disatukan
sumber
Hash[*"bpcgdtfvgkkgpbsztdvfzs".chars]
c=[^aeiou]
lebih pendek. Memiliki interpolasi pertama untuk setiap variabel menetapkan secara bersamaan untuk -2 byte:/^(.*?${v='[aeiou]'}+(#{c='[^aeiou]})).../
. Akhirnya,$2.tr("b-z","pgtevkhijgl-obqrzdufwxys")
bukannya solusi Hash.\g<n>
) bukan interpolasi, ditambah 14 lain menggunakan @ ValueInk ini[^aeiou]
saran:s=~/^(.*?([aeiouy])+([^aeiou]))\g<3>*(\g<2>)/
.programming
->progkaka
, yang saya tidak tahu.\g<3>
memperbarui nilai $ 3, jadi kami tidak dapat menggunakan pintasan ini.Crystal,
203194187186184163 bytesumber
c=v
o+=<...>
MATLAB / Oktaf -
159158 byteBerikut ini berfungsi dengan asumsi string input semuanya huruf kecil.
Penjelasan
a = input('','s');
: Mendapat string dari STDIN dan menyimpannya ke dalam variabela
.m=ismember(a,'aeiouy');
: Mengembalikan array Boolean yang ukurannya sama dengan string yanga
menentukan di mana vokal beradas='pgt vkh jglmn bqrzd fwx s';
Thecovfefe
pemetaan konsonan sebagai string. String ini panjangnya 25 karakter dan menghilangkan vokal. Posisi pertama di mana vokal'a'
seharusnya dihapus sedangkan posisi lain di mana vokal ditempatkan ditempatkan dengan karakter ruang dummy. Ini agar ketika kita menentukan konsonan pertama yang muncul setelah vokal, kita akan mengonversi konsonan ke posisi untuk mengakses karakter dalam string ini untuk menentukan komponen pertama dari kata yang dikonversi.m(1:find(m,1))=1
: Mengatur posisi pertama array Boolean ke tempat kami menemukan vokal pertama sebagai semua vokal. Ini akan terjadi sehingga ketika kita mencari konsonan berikutnya yang mengikuti vokal pertama, kita akan mengabaikan karakter-karakter ini.i=find(~m,1);
: Menemukan posisi pertama dari string yang merupakan konsonan setelah vokal pertama.f=a(1:i)
: Menghapus string setelah konsonan pertama yang mengikuti vokal. Kami cukup sampel dari posisi pertama string hingga titik ini.d=s(f(end)-97);
: Ambil karakter terakhir dari string yang tersisa dan temukan di mana kita perlu sampel dari string pencarian dan dapatkan karakter itu. Mengurangi karakter dan angka dalam MATLAB atau Oktaf bergabung untuk membentuk integer dengan mengubah karakter menjadi kode ASCII-nya. Dalam hal ini, kita kurangi karakter terakhir dengan karakter di awal alfabet untuk memberi kita posisi relatif terhadap awal. Namun, alih-alih mengurangi denganb
(98), kita mengurangia
sebagai MATLAB mulai mengindeks dengan 1 bukannya 0.'a'
kode ASCII adalah 97.m(1:i)=0;
: Mengambil topeng Boolean dan menetapkan semua karakter dalam string input dari posisi pertama ke konsonan pertama mengikuti vokal ke false.v=a(find(m,1));
: Menemukan vokal berikutnya yang mengikuti konsonan pertama dari string input.[f d v d v]
:covfefe
Keluarkan string ied kami .Contoh Berjalan
Cobalah online!
http://www.tutorialspoint.com/execute_octave_online.php?PID=0Bw_CjBb95KQMdjROYVR0aFNrWXM
Ketika Anda menekan tombol Execute di bagian atas, tunggu beberapa saat, lalu masukkan string yang diinginkan. Masukkan string secara perlahan karena tampaknya ada penundaan saat memasukkan teks.
sumber
Clojure,
182156 karakterBagaimana itu bekerja
Mengembalikan seq of
((\p \r) (\e) (\s) (\i) (\d) (\e) (\n \t))
Destructures seq ke
s=(\p \r)
,m=(\e)
,c=\s
,n=\i
.Atau "contoh" itu
s=[]
,m=(\e)
,c=\x
,n=\a
.Mengembalikan string keluaran dengan menyatukan potongan-potongan dan mengikatnya.
Dan kemudian saya hanya menghapus spasi sebanyak yang saya bisa sambil tetap mengkompilasi.
Diformulasi:
sumber
c
, misalnya. (Kami juga mengizinkan fungsi anonim, yang lebih pendek dalam banyak bahasa; Saya tidak yakin apakah mereka ada di Clojure). Saya melihat Anda telah melakukan perbaikan di bagian dalam kode Anda, jadi mungkin tidak banyak yang perlu diubah di sini.R, 341 karakter
Upaya R menghebohkan, mengapa string begitu keras
Versi yang dapat dibaca:
sumber
BlitzMax, 190 byte
Mengambil kata dari stdin dan mencetak hasilnya ke stdout. Kata input diasumsikan huruf kecil dan mengandung setidaknya satu vokal diikuti oleh konsonan.
Versi progam yang lebih mudah dibaca dengan pemformatan dan deklarasi variabel:
Bagaimana itu bekerja:
BlitzMax tidak memiliki fungsionalitas regin bawaan atau yang serupa, jadi loop digunakan untuk beralih pada karakter kata input hingga menemukan vokal diikuti oleh rantai setidaknya satu konsonan. Variabel c menyimpan posisi konsonan terakhir, yaitu v dari vokal. Lingkaran terus melihat apakah ada vokal lain setelah rantai dan jika demikian, v diperbarui sesuai. Kemudian konsonan pada c tampak dalam string "bpdtfvgkcgsz", yang bertindak sebagai tabel pengganti. Jika konsonan ditemukan dalam tabel di posisi mana pun, maka posisi itu adalah XOR-ed dengan 1 dan karakter pada posisi yang dihasilkan akan digunakan sebagai penggantinya. Operasi XOR mengubah 0 menjadi 1, 2 menjadi 3, 4 menjadi 5 dll. Dan sebaliknya, sehingga b bertukar dengan p, d dengan t dan seterusnya. Akhirnya, string asli hingga c,
Contoh hasil:
sumber
Perl, 71 byte
Juga dijalankan dengan
perl -pe
. Beberapa byte kurang dari solusi Perl sebelumnya. Memang saya juga mendapat inspirasi dari sana.sumber
05AB1E ,
10110488 byte-16 byte terima kasih kepada Okx
Saya berharap ini bisa dilakukan dengan cara yang lebih efisien.
Cobalah online!
Penjelasan
sumber
"bpcgdtfvgkhhjjkgllmmnnpbqqrrsztdvfwwxxzs"
dengan.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•
untuk menyimpan 15 bytežOÃćIsk
denganžOÃ0èk
untuk menyimpan byte lain.žOÃнk>[DIs£¤žPså#\>]©s[DIsèDžOså#\>]s\.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•S2ôDí«ø`®θkèìDJ
Coba online. Saya terutama menyingkirkan semua swap dan triple-swap dengan menggunakan variabel sebagai gantinya. Dan0è
bisaн
, dan saya sudah diganti2׫
denganDJ
untuk bergabung dengan seluruh tumpukan bersama. PS: Saya juga mengirim jawaban 55 byte 05AB1E menggunakan teknik yang berbeda. (Yang juga mencakup tautan untuk memahami kompresi dengan lebih baik di 05AB1E.: D)Crystal, 130 Bytes
Bagaimana itu bekerja
menyimpan regex untuk mencari vokal pertama
c
.pisahkan argumen pertama menjadi tiga bagian {"", String hingga satu karakter sebelum konsonan pertama setelah vokal pertama, sisa string} dan simpan masing-masing elemen menjadi x, y dan z.
dapatkan karakter pertama, konsonan yang relevan.
dapatkan indeks konsonan di dalam string kiri atau
nil
.jika
i
tidaknil
, gunakan indeks ini untuk string kedua (semacam hash golf).jika
i
adalahnil
, menggunakan karakter asli.selanjutnya, tambahkan vokal pertama
z
.akhirnya, cetak bagian pertama dari regex pertama
y
, konsonan pertamak
dan dua kali string yang dihitung sebelumnyab
.Cobalah online .
sumber
Retina , 68 byte
Cobalah online!
sumber
Lua,
164157 byteSunting 1: Dihapus 7 byte dengan mencari karakter apa pun setelah konsonan (lihat regex)
Cobalah online!
Program ini mengambil string dalam argumen CLI dan mencetak versi yang di-covfefied-nya.
Ini adalah pengajuan pertama saya ke kode golf! Saya tidak memeriksa yang lain secara terperinci sehingga saya mungkin telah melewatkan beberapa optimasi umum (dan jatuh dalam beberapa perangkap). Saya menggunakan Lua karena saya mulai menyukai bahasa kecil ini, dan saya mencoba menemukan regex yang sesuai dengan kebutuhan saya.
Ini versi yang lebih bersih, menggunakan fungsi (saya bermaksud menggunakannya, tetapi kata kunci di Lua terlalu panjang!):
Jangan ragu untuk memberikan umpan balik :)
Catatan: Jika Anda bertanya-tanya, panjangnya 149 byte menggunakan MoonScript!
sumber
JavaScript (ES5),
237229 byteCobalah online!
Mungkin bukan yang paling golf, tetapi ES5.
Baru-baru ini memperbaiki bug. Contoh output:
sumber
sed, 106 (105 +1) byte
Ini sed dengan
-E
bendera, yang tampaknya dihitung untuk satu byteCobalah online!
sumber
C #,
584581 byte-3 Bytes berkat Destructible Lemon
Ini adalah pengajuan pertama saya pada Code Golf dan di Stack Exchange secara umum. Saya tahu bahwa C # bukan bahasa golf yang bagus dan ini mungkin tidak sepenuhnya dioptimalkan tetapi saya ingin mencobanya: p. Ada tips yang diterima!
Versi Golf:
Versi yang Dapat Dibaca:
sumber
x++ < l
,, atau sesuatu (mungkinl > x++
jika yang pertama tidak berhasil). tidak yakinSmileBASIC 3, 195 byte
Sangat terlambat untuk pertanyaan ini, tetapi bagaimana saya bisa menolak tantangan yang bagus untuk SmileBASIC 3? Fitur seperti iterasi melalui urutan atau memanipulasi string tidak sekuat bahasa lain, jadi ini sedikit tantangan untuk melakukannya sekecil mungkin. Asumsikan kata-kata adalah UPPERCASE.
Penjelasan terperinci di sini!
sumber
05AB1E , 55 byte
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
Lihat 05AB1E ini kiat-kiat saya (bagian Cara kompres string bukan bagian dari kamus? ) Untuk memahami mengapa
.•gÍĆdQ¸G•
adalah"bcdfkszgvtgp"
.sumber