Deskripsi tugas
Terkadang, Anda benar-benar perlu memasukkan sesuatu yang Anda tulis di ruang kecil. Mungkin tergoda untuk menjatuhkan huruf vokal dan menulisnya - dan gagal itu, siapa yang benar-benar membutuhkan ruang? Thssprfctlrdbl! †
Tulis fungsi atau program yang menghilangkan vokal huruf kecil aeiou
, lalu spasi, lalu karakter apa pun dari string input . Selanjutnya, setiap kali Anda menghapus karakter, itu harus karakter paling kanan yang memenuhi syarat untuk dihapus. Ini harus mengulangi proses ini sampai string tidak lebih dari beberapa panjang input yang diberikan .
† “Ini benar-benar bisa dibaca!” Tetapi jika Anda membaca catatan kaki ini, mungkin tidak, sungguh ... :)
Contohnya
Di sini, Anda dapat melihat proses ini diterapkan untuk ukuran input yang lebih kecil secara berturut-turut:
23: Hello, Code Golf World!
22: Hello, Code Golf Wrld!
21: Hello, Code Glf Wrld!
20: Hello, Cod Glf Wrld!
19: Hello, Cd Glf Wrld!
18: Hell, Cd Glf Wrld!
17: Hll, Cd Glf Wrld!
16: Hll, Cd GlfWrld!
15: Hll, CdGlfWrld!
14: Hll,CdGlfWrld!
13: Hll,CdGlfWrld
12: Hll,CdGlfWrl
11: Hll,CdGlfWr
(etc.)
Setelah menekan string ke 17 karakter, kita kehabisan vokal untuk dihapus, jadi karakter berikutnya yang kita hapus adalah ruang paling kanan; ketika kami menekan 14 karakter, kami telah menghapus semua vokal dan spasi, jadi kami mulai mengunyah string dari kanan ke kiri.
Berikut adalah beberapa kode pseudocode Python yang memecahkan tantangan ini:
def crunch_string(string, to_length):
while len(string) > to_length:
# Store the best candidate index for deletion here.
best = None
# First, find the rightmost vowel's index.
for i in range(len(string)):
if string[i] in 'aeiou':
best = i
# If there were no vowels, find the rightmost space's index.
if best is None:
for i in range(len(string)):
if string[i] == ' ':
best = i
# If there were no spaces either, use the final index.
if best is None:
best = len(string) - 1
# Remove the selected character from the string.
string = string[:best] + string[best + 1:]
# Return the string once `len(string) <= to_length`.
return string
Aturan
Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
String input akan terdiri dari karakter ASCII yang dapat dicetak dari luar angkasa (
, desimal 32) hingga dan termasuk tilde (
~
, desimal 126). Tidak akan ada vokal huruf besarAEIOU
dalam string. Secara khusus, tidak akan ada Unicode, tab, atau baris baru yang terlibat.Panggil string input s , dan panjang target input t . Maka 0 <t ≤ panjang ( s ) ≤ 10000 dijamin. (Secara khusus, input string tidak akan pernah kosong. Jika t = panjang ( s ), Anda hanya harus kembali string yang tidak dimodifikasi.)
Uji kasus
Input: 50, Duis commodo scelerisque ex, ac consectetur metus rhoncus.
Output: Duis commodo scelerisque ex, ac cnscttr mts rhncs.
Input: 20, Maecenas tincidunt dictum nunc id facilisis.
Output: Mcnstncdntdctmnncdfc
Input: 150, golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf
Output: glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glfglfglfglfglfglfglfglfglfglf
y
vokal?aeiou
adalah vokal, danAEIOU
tidak akan muncul, untuk kesederhanaan. (Seluruh huruf besar / huruf kecil bukan apa yang ingin saya fokuskan.) Saya menambahkan klarifikasi.w
(misalnya, dalam kata co w ,w
adalah vokal!) Tentu saja, itu cocok untuk yang satu ini, tetapi untuk yang tidak menyatakan bahwa rangkaian vokal adalahaeiou
, Anda terkadang harus memasukkany
danw
. : -Ofor index, char in enumerate(string)
alih-alihrange(len(str))
konstruksiJawaban:
MATL , 20 byte
Cobalah online!
sumber
Perl,
484543 byteTermasuk +4 untuk
-Xlpi
(-X dapat diabaikan tetapi meninggalkan peringatan jelek di STDERR)Jalankan dengan nomor setelah
-i
opsi dan input pada STDIN (mendukung beberapa baris juga). misalnyaperl -Xlpi50 crunch.pl <<< "Duis commodo scelerisque ex, ac consectetur metus rhoncus."
crunch.pl
:sumber
/$+/
danwhile
JavaScript (ES6),
6661 byteDisimpan 5 byte berkat @Neil
Saya tidak berpikir regex bisa golf lebih jauh. Anehnya, yang terpendek yang dapat saya lakukan untuk menghapus front-to-back adalah satu byte lebih lama:
Upaya yang lebih menarik (ES7), 134 byte
Ini menggunakan pendekatan yang mirip dengan jawaban MATL.
sumber
|.$/,"$1$2"
untuk menghemat 5 byte.sh + gnu sed,
7861Berikan string
STDIN
, panjang sebagai argumen pertama.sumber
Lua, 120 byte
Mengambil input sebagai argumen baris perintah, dalam format
lua crunch.lua 10 "This is a string"
, dengan outputThs sstrng
.Penjelasan:
sumber
Perl, 68
Menghapus dari kanan menambah banyak karakter, mungkin ada cara yang lebih baik untuk melakukan ini.
Gunakan
-i
untuk memasukkan nomor. Ini adalah 65 karakter ditambah 3 untuki
,p
danl
pada baris perintah.Jalankan dengan:
sumber
y///c
sebagai gantinyalength
dan Anda dapat memindahkan loop sementara ke akhir:s///||s///||s///while$^I<y///c
Java 8, 303 byte
Ini terlalu panjang. Aku akan mencoba untuk mempersingkatnya segera. Akan jauh lebih pendek jika java memiliki metode untuk membalik string dan penggantian mundur.
Tes dengan yang berikut ini:
sumber
s->j->{...}
). Saya pikir Java tidak mendukungnya dengan baik atau saya salah mengaturnya.C #, 180 byte
Penguji:
sumber
Scala, 160 byte
Penguji:
sumber
Dyalog APL,
774542 bytet[
...]
huruf t dengan indeks ...t←⌽⍞
t mendapat input teks terbaliki←⍳⍴t
saya mendapat indeks panjang t/¨⊂i
beberapa (3) pilihan elemen boolean dari i :1.
(t∊'aeiou')
boolean di mana vokal2.
(' '=t)
boolean di mana ruang3.
1
semuanya∪∊
unik dari yang terdaftar ( diratakan) 3 pilihan⌽⎕↓⌽
drop karakter terakhir yang di-input-input (sama seperti(-⎕)↓
)⌽i~
membalikkan indeks yang tersisa setelah menghapus beberapaJawaban asli:
Ehm, ya, itu dia agak sulit untuk dibaca. Pada dasarnya terjemahan langsung OP ke APL:
sumber
Mathematica, 201 Bytes
Pasti ada cara yang lebih baik dari ini ..
sumber
R,
169143 byte* Edit 36 byte yang disimpan melalui penulisan ulang dengan
utf8ToInt
->intToUtf8
konversi tidakstrstplit
danpaste0(...,collapse)
ungolfed dengan penjelasan
sumber