Tantangan ini merupakan penghargaan bagi pemenang Best Picture di Oscar 2017, La La Land Moonlight !
Tulis fungsi / program yang mengambil string yang hanya berisi huruf [A-Za-z]
, empat simbol yang umum dalam kalimat .,'?
dan spasi setiap hari , dan output string dalam gaya La La Land.
Untuk lebih spesifik, ambil huruf hingga, dan termasuk, grup vokal pertama, dan cetak / output dua kali menambahkan spasi setiap kali, lalu cetak / output seluruh string. y adalah vokal dalam tantangan ini. Tanda baca dan huruf besar harus dipertahankan.
Anda dapat mengasumsikan bahwa semua string berisi setidaknya satu vokal, dan bahwa semua string dimulai dengan huruf.
Kasus uji:
Land
La La Land
Moonlight
Moo Moo Moonlight
quEueIng
quEueI quEueI quEueIng
This isn't a single word.
Thi Thi This isn't a single word.
It's fun to play golf
I I It's fun to play golf
Ooo
Ooo Ooo Ooo
I'm okay
I I I'm okay
Hmm, no. There will be at least one vowel, but it can be anywhere.
Hmm, no Hmm, no Hmm, no. There will be at least one vowel, but it can be anywhere.
Why is y a vowel?
Why Why Why is y a vowel?
Ini adalah kode-golf sehingga kode terpendek dalam setiap bahasa menang. Penjelasan didorong , juga dalam bahasa umum.
MOONLIGHT
. Dan hanya untuk bersenang-senang:Why did the chicken cross the road?
Jawaban:
Sed 30 byte
sumber
*
bukan\+
?05AB1E ,
231918 byteDisimpan 1 byte berkat Okx .
Cobalah online! atau sebagai Test suite
Penjelasan
sumber
Jelly ,
24 22 20 1914 byte-5 byte dengan memanfaatkan trik dari jawaban brilian Emigna (lihat 10 di daftar isVowel)
Cobalah online! (tidak yakin bagaimana membuat test suite untuk program lengkap ini)
Alternatif 15 byte:
Berikut ini adalah paket tes lengkap.
Bagaimana?
sumber
Python, 61 byte
Di sinilah bahasa berbasis non-regex pertama (menggunakan regex).
Disimpan 1 byte berkat Neil .
sumber
JavaScript (ES6), 40
46Edit 5 + 1 byte yang disimpan thx @Arnauld
Terlalu lama dibandingkan dengan yang lain menggunakan trik yang sama (seperti biasa)
sumber
'$& $& $&'
- Saya selalu lupa karakter dolar spesial. Terima kasih. Sayangnya sekarang ini benar-benar pelabuhan jawaban retina Martin.^
diperlukan di Retina yang - saya pikir - mencari semua pertandingan secara default. Tetapi apakah kita benar-benar membutuhkannya di sini?x=>(y=/.*?[aeiouy]+/i.exec(x)+' ')+y+x
Retina , 24 byte
Cobalah online!
sumber
Batch, 180 byte
Menerapkan mesin negara.
g
melacak apakah kita pernah melihat vokal, jadi jika huruf saat ini bukan vokal, kita tahu apakah akan menampilkan atau melanjutkan dengan huruf berikutnya.sumber
PowerShell ,
4647413938 byteCobalah online!
Terima kasih kepada Maarten Bamelis untuk perbaikan bugnya
Disimpan 6 byte berkat Rynant
Disimpan
23 byte berkat Joeysumber
Rubi,
313230 BytesDua byte disimpan berkat GB dan Cyoce.
sumber
PHP,
5554 byteCatatan: versi yang disandikan menggunakan penyandian IBM-850.
Jalankan seperti ini:
Penjelasan
Hanya ganti regex dengan non-pencocokan karakter apa pun di awal string, diikuti oleh jumlah vokal apa pun (gunakan
i
opsi untuk ketidakpekaan huruf). Grup tangkapan itu kemudian dicetak dua kali, diikuti oleh seluruh string.Tweaks
-R
agar$argn
tersedia (Thx Titus)sumber
Javascript (ES6), 38 byte
sumber
Perl, 25 + 1 (
-p
bendera)sumber
Perl 6 , 30 byte
Cobalah online!
sumber
{S:i/.*?<[aeiouy]>+/$/ $/ $//}
C,
202196195193190180i,j,k,m,n;f(char*a){if((a[i/12]-"AEIOUY"[i++%6])%32==0)k=n=24-(i%12);else if(k&&!n--){m=j=(i-13)/12;for(i=0;i<j*2;)printf("%c%c",a[i%j],(i==j-1)*32),i++;printf(" %s", a);}m?:f(a);}
Cobalah online!
Hal yang tersisa untuk golf:
• Perkecil dua printf menjadi satu.
• Mencetak ruang char saya dapat diubah menjadi
%*c
logika saya yakin.• Saya menggunakan kondisional yang bisa dihapus entah bagaimana
•
j=(i-13)/12
kemungkinan bisa dipersingkat.• [AY] memeriksa kondisi jika
==0
yang biasanya tidak diperlukan, meskipun saya saat ini terjebak pada yang satu itu (mencoba mengganti if-else dan membuang==0
semuanya tetapi itu membutuhkan penambahan lebih banyak {kurung} dan menambah ukuran byte)Trik yang saya gunakan untuk bermain golf ini:
• Menggabungkan pencarian string loop ganda dengan menggunakan modulo untuk sumbu x dan pembagian integer untuk sumbu y (string input vs string vokal). (Sumbu X dilingkarkan dua kali sebelum iterasi sekali pada sumbu y; pertama dengan [AZ] dan yang kedua dengan [az] menggunakan nilai karakter 32 diferensial.
• Bypassed harus menggunakan "[AY] dan [ay]" dengan hanya mengambil jarak antara set karakter dan modulo 32. Dengan begitu jika jaraknya 0 (AA) atau jika jaraknya 32 (aA)
• Menggunakan kembali variabel integer yang tidak lagi digunakan sebagai variabel boolean.
• Secara berulang memanggil fungsi dengan string yang sama untuk memprosesnya dan menghindari for-loop kedua.
• Atur nilai BOOL ke logika pengaturan variabel lain. (misalnya bool = i = 5;) untuk melumpuhkan keduanya dengan satu batu.
• Pelecehan eksploit yang benar-benar kosong. (GCC)
Format yang Dapat Dibaca:
Menurunkan 10 byte berkat Keyu Gan (dalam komentar)
sumber
j=(i-13)/12
kemungkinan bisa dipersingkat.i=j=k=m=n=0;
?i,j,k,m,n;
untuk inisialisasi.MATL, 33 byte
Cobalah di MATL Online
Penjelasan
sumber
'(^.*?[yY%s]+)'13Y2YD'$1 '8:)YX
menghemat 2 byte'(^.*?[%s]+)'19Y2YD'$1 '8:)YX
menyimpan 2 lainnya19Y2
tidak ada ketika jawaban ini diajukan sayangnyaV ,
21, 20 byteCobalah online!
Penjelasan:
Hexdump:
Versi alternatif (21 byte):
Cobalah online!
Ini menggunakan kompresi regex konyol, dan masih berhasil mendapatkan itu ditendang oleh bahasa golf lainnya. Sebagai referensi, ini sekitar dua pertiga panjang versi "tidak terkompresi" reguler, yaitu:
Penjelasan:
Ini hexdump:
sumber
Python 3 ,
7568 byteCobalah online!
Penjelasan:
Bekerja dengan menghasilkan nilai boolean untuk setiap karakter dalam string input berdasarkan pada apakah itu vokal, dan menemukan indeks terendah
0
, non-vokal pertama (tidak termasuk karakter pertama). Ini mengembalikan substring ke indeks ini dua kali, dipisahkan oleh spasi, dan string asli.sumber
Clojure,
192188181 byte-4 byte dengan inlining
first-sp-pred
(whoops).-7 byte dengan menghapus beberapa ruang yang terlewat
Ini jauh lebih menantang daripada yang saya kira akan terjadi! Saya secara manual menguraikan string ... karena saya masih belum sempat belajar regex: /
Lihat kode pra-golf untuk rincian:
sumber
Python 3 ,
10196 byteCobalah online!
solusi non-regex
Berkomentar:
sumber
w=c in a
denganw=c in'aAeEiIoOuUyY'
Ohm , 19 byte (CP437), tidak bersaing
Bahasa baru, dan karena itu, saya harus menambahkan beberapa fitur baru untuk membuat karya ini, yang sayangnya membuat ini tidak kompetitif (karena celah).
Penjelasan:
sumber
Q
), pencarian subarray (u
), string / array slicing (├
), dan konstanta vokal (αv
danαy
).PHP,
69 6553 bytemembutuhkan PHP 5.3 atau yang lebih baru. Jalankan sebagai pipa dengan
-F
atau coba beberapa versi online .Disimpan 4 byte (dan memperbaiki kode) dengan regex dicuri dari @aross;
10 lagi dengan
preg_filter
bukanpreg_match
dan-F
dan dua lagi dengan regex yang ditingkatkan.
7581 byte untuk versi non-regex:membutuhkan PHP 5 atau lebih baru; ganti
?:
dengan?1:
untuk PHP yang lebih lama. Jalankan dengan-nR
Kerusakan
sumber
This isn't a single word
T T This isn't a single word.
i
pengubah yang membuat case regex tidak sensitif. Versi lainnya hanya memeriksa huruf kecil. Tetap.R, 49bytes
sub("(.*?[aeiouy]+)","\\1 \\1 \\1",scan(,""),T,T)
Ganti berbasis Regex, cocokkan semuanya hingga bukan vokal, tangkap dan ganti dengan sendirinya 3 kali.
scan
menunggudouble
input tipe, untuk mengatakannya untuk menggunakancharacter
tipe kita harus memberikannya dua argumen, pertama adalah default, string emtpy untuk stdin, dan untuk yang kedua evaluasi R memungkinkan untuk menggunakan hanyac
karena tidak ambigu untukcharacter
dalam konteks ini.T
berdiri untukTRUE
dan menyimpan beberapa char sebagai parameter ke-4 dan ke-5 untuk sub untuk mengatakannya untuk mengabaikan kasus dan menggunakan PCRE (keserakahan tidak sama dengan sintaks R regex)4 byte disimpan milik Sumner18 bersama dengan tautan Tio untuk menjalankan kode
sumber
Java 8,
147140 byteGolf:
Tidak Terkumpul:
Catatan: literal
2
dalam kode adalah nilaijava.util.regex.Pattern.CASE_INSENSITIVE
.sumber
import java.util.regex.*;
untuk menyimpan beberapa byte.C, 123 byte
Panggil sebagai:
sumber
Pyke , 22 byte
Cobalah online!
Ini adalah 4 byte lebih lama dari yang seharusnya saya menerapkan cara yang lebih pendek untuk mendapatkan vokal termasuk
y
.sumber
Retina, 24 byte
Cobalah online
sumber
Python 3 ,
130102 byteCobalah online!
Tidak menggunakan fungsi apa pun dan tidak ada perpustakaan eksternal! (Kecuali cetak dan input dihitung sebagai fungsi, yang mereka lakukan).
Bekerja dengan melihat apakah itu keluar dari konsonan di awal judul ke 'zona vokal'. Jika berada di 'zona vokal' dan mendeteksi konsonan, maka ia mencetak judul.
Disimpan 28 byte berkat @LliwTelracs
sumber
MATLAB / Oktaf,
5851 byte7 Bytes disimpan berkat @HughNolan
Membuat fungsi anonim bernama
ans
yang dapat dipanggil dengan meneruskan string ke sana:ans('Land')
Demo online
Untuk kompatibilitas MATLAB,
$0
harus digunakan sebagai pengganti$1
fungsi di atas.sumber
@(x)regexprep(x,'^.*?[aeiouyAEIOUY]+','$0 $0 $0 ');
- juga Matlab tampaknya menggunakan $ 0 daripada $ 1 anehnyaC (gcc) ,
111110 byteCobalah online!
Ini hanya menggunakan fungsi pustaka
strspn()
danstrcspn()
dan mengeksploitasi urutan di mana gcc mengevaluasi parameter fungsi. Sedikit kurang golfTerima kasih kepada @gastropner untuk -1.
sumber
Pyth - 24 byte
Test Suite .
sumber
y
?