Anda menyediakan dukungan teknis untuk para Bruce Dickenson saat ia menghasilkan sesi rekaman Blue Oyster Cult. Ketika dia meminta lebih banyak cowbell , Anda bisa memberikannya kepadanya.
Tugas Anda
Tulis program atau fungsi yang mengambil string (atau setara dalam bahasa Anda) sebagai input, dan menghasilkan string terkait yang berisi satu cowbell lagi.
Berapa banyak cowbell yang berisi string?
Jumlah cowbell yang berisi string sama dengan jumlah maksimum salinan berbeda dari "cowbell" yang dapat diperoleh dengan meng-permutasi karakter string. Misalnya, "bbbccceeellllllooowwwwwwwww"
berisi 3 lonceng, sementara "bbccceeellllllooowwwwwwwww"
dan "bbbccceeelllllooowwwwwwwww"
masing - masing berisi 2 lonceng, dan "cowbel"
berisi 0 lonceng.
Bagaimana seharusnya output terkait dengan input?
Output harus terdiri dari rangkaian, dalam urutan ini, dari string input dan awalan terpendek dari string input yang diperlukan untuk meningkatkan jumlah cowbells.
Misalnya, "bbbccceeelllllooowwwwwwwww"
hanya perlu satu tambahan "l"
untuk mengandung 3 lonceng bukannya 2; awalan terpendek yang berisi bahwa "l"
adalah "bbbccceeel"
. Karena itu, jika inputnya adalah "bbbccceeelllllooowwwwwwwww"
, maka outputnya seharusnya "bbbccceeelllllooowwwwwwwwwbbbccceeel"
.
Teknisnya
- Anda dapat berasumsi bahwa input hanya berisi karakter ASCII yang dapat dicetak. Jika ada satu atau dua karakter yang mengganggu pemrosesan string bahasa Anda (seperti baris baru atau
\
), Anda dapat mengasumsikan bahwa input tidak mengandung mereka — sebutkan saja batasan ini. - Anda selanjutnya dapat mengasumsikan bahwa karakter alfabet dalam input semuanya huruf kecil, atau semua huruf besar. Jika Anda memilih untuk tidak mengambil salah satu dari ini, hitung cowbells case-insensitive.
- Anda juga dapat mengasumsikan bahwa input berisi setidaknya satu salinan dari masing-masing karakter
b
,c
,e
,l
,o
, danw
. Ini sama dengan mengasumsikan bahwa beberapa awalan string dapat digabungkan untuk menghasilkan string yang berisi lebih banyak cowbell. (Perhatikan bahwa string input itu sendiri tidak perlu berisi cowbell.) - Jika bahasa Anda memiliki builtin yang memecahkan masalah ini ... maka benar-benar menggunakannya, sungguh, betapa hebatnya itu.
Popok berlapis emas
Karena waktu studio rekaman mahal, kode Anda harus sesingkat mungkin. Entri dengan byte paling sedikit adalah pemenangnya!
Uji kasus
( tautan pastebin untuk lebih mudah menyalin / menempel)
Masukan tes # 1: "christopher walken begs for more cowbell!"
Tes keluaran # 1: "christopher walken begs for more cowbell!christopher wal"
Masukan tes 2: "the quick brown fox jumps over the lazy dog"
Tes keluaran # 2: "the quick brown fox jumps over the lazy dogthe quick brown fox jumps over the l"
Masukan tes 3: "cowbell"
Tes keluaran # 3: "cowbellcowbell"
Masukan tes # 4: "cowbell cowbell cowbell"
Tes keluaran # 4: "cowbell cowbell cowbellcowbell"
Masukan tes # 5: "cowbell cowbell cowbel"
Uji output # 5: "cowbell cowbell cowbelcowbel"
Masukan tes # 6: "bcelow"
Uji keluaran # 6: "bcelowbcel"
Masukan tes # 7: "abcdefghijklmnopqrstuvwxyz"
Tes keluaran # 7: "abcdefghijklmnopqrstuvwxyzabcdefghijkl"
Masukan tes 8: "cccowwwwbbeeeeelllll"
Tes keluaran # 8: "cccowwwwbbeeeeelllllccco"
Masukan tes 9: "be well, programming puzzles & code golf"
Uji keluaran # 9: "be well, programming puzzles & code golfbe well, programming puzzles & c"
Masukan tes # 10: "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. wow!"
Uji keluaran # 10: "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. wow!lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lab"
Masukan tes # 11:
"c-c-b-c
i have a cow, i have a bell.
uh! bell-cow!
i have a cow, i have a cowbell.
uh! cowbell-cow!
bell-cow, cowbell-cow.
uh! cow-cowbell-bell-cow.
cow-cowbell-bell-cow!
"
Hasil tes # 11:
"c-c-b-c
i have a cow, i have a bell.
uh! bell-cow!
i have a cow, i have a cowbell.
uh! cowbell-cow!
bell-cow, cowbell-cow.
uh! cow-cowbell-bell-cow.
cow-cowbell-bell-cow!
c-c-b-c
i have a cow, i have a bell"
test case -> result
dalam satu blok kode besar yang telah diformat. Ini jauh lebih bagus secara estetika dan lebih mudah untuk menyalin pasta.L
s dalam kata, ini bukan apa yang ditanyakan oleh tantangan.Jawaban:
Pip ,
504238 byteLewati string sebagai argumen baris perintah, dikutip jika perlu. Cobalah online!
Penjelasan
Saya akan menjelaskan ini dalam dua bagian: fungsi cowbell dan program lengkap. Pertama, inilah fungsi yang menghitung jumlah cowbell dalam sebuah string:
{...}
mendefinisikan suatu fungsi. Banyak operator Pip, ketika diterapkan pada suatu fungsi, mengembalikan fungsi lainnya; misalnya,-{a+1}
sama dengan{-(a+1)}
. Jadi di atas setara denganyang berfungsi sebagai berikut:
Sekarang kita memiliki itu, inilah program lengkapnya:
sumber
cowbell cowbell cowbee
dan hasilnyacowbellcowbelcowbel
tetapi saya mungkin menggunakan IDE yang salah (baru untuk PIP)cowbell cowbell cowbeecowbell
( coba online ). Apakah Anda menggunakan TIO atau salinan lokal?C,
511488474470463454Cobalah online
Format + penjelasan yang mudah dibaca:
Beberapa Trik Menyenangkan yang Digunakan:
• Saat memeriksa karakter, saya mengetik
'w'
karakter yang 3 byte, tetapi untuk karakter'c'
dan'b'
saya bisa mengetik nilai ASCII masing-masing 99 dan 98 untuk menghemat satu byte setiap kali. (Sunting: Terima kasih kepada @Titus, saya tahu melakukan ini dengan semua huruf COWBELL dengan menggunakan input huruf besar saja yang semuanya 2 byte nilai ascii numerik)•
r=~-l/2
adalahr=(l-1)/2
menggunakan bitshifts•
a[++i]
Saya mendapatkan karakter di indeks (i) dan mengulangi indeks pada waktu bersamaan. Aku hanya mulaii
dii=-1
bukannyai=0
(saya melakukan hal yang sama denganz
dan mulai sebagaiz=i
untuk menyimpan byte lain)sumber
c
) selalu ditetapkan sebagai 1 [...]." Kami akan senang memiliki pernyataan Anda tentang mengapa Anda berpikir begitu di sana karena sepertinya aneh bagi sebagian dari kita.c,o,w,b,e
untuk diinisialisasi ke nilai yang sama, bukan 1? Karena petunjuk Anda # 2 tampaknya tidak benar, setidaknya CI tidak tahu. Bisakah Anda mengklarifikasi? SO SOPython 2,
125113112 byten
menghitung jumlah lonceng-12 byte terima kasih kepada @Rod
-1 byte terima kasih kepada @Titus
sumber
[]
memahami daftar ketika itu adalah satu-satunya parameter, Anda juga dapat menjatuhkanenumerate
: dimin(s.count(c)/-~(c=='l')for c in"cowbel")
mana-~(n=='l')
cara yang lebih singkat untuk menulis1+(n=='l')
>>
lebih pendek dari itu/-~
?return
di loop-sementara itu?Perl 6 , 91 byte
Mengasumsikan input huruf kecil.
Bagaimana itu bekerja
Di dalam lambda, lambda lain untuk menghitung jumlah cowbells dalam string didefinisikan sebagai berikut:
Sisa kode menggunakan lambda dalam ini
&c
untuk menemukan hasilnya, seperti ini:sumber
MATL ,
3837 byte1 byte off berkat ide @ DLosc menggunakan string template
lcowbe
bukancowbel
Karakter input semuanya huruf kecil. Jika input berisi baris baru, karakter baris baru harus dimasukkan karena kode ASCII-nya digabungkan dengan karakter normal (lihat input terakhir di tautan dengan semua kotak uji).
Cobalah online! Atau verifikasi semua kasus uji .
sumber
JavaScript (ES6), 106
107 113 126 141 141Porting ke javascript jawaban Pip oleh @DLosc. Saya perlu waktu untuk memahaminya sepenuhnya, dan ini jenius.
Edit -15 byte mengikuti petunjuk oleh @Titus, langsung menambahkan karakter ke string input
a
dan menghindari pengembalian lebih awal (jadi tidak adafor/if
)Edit 2 menghitung nilai 6 untuk fungsi Min menyimpan 13 byte lainnya
Edit 3 fungsi c yang berubah lagi. Saya pikir verbose
length
dansplit
akan terlalu panjang. Saya salah.Dengan asumsi input huruf kecil
Kurang golf
Uji
sumber
k[x]++
akan gagal karenaundefined
. Tapi saya cukup yakin itufor(i=0;c(a)==c(a+=a[i++]);),a
berhasil.>>!i
menghemat 3 byte. Mengapa Anda tidak menggunakannyac(a+=z)
?c(a+=z)
. Bukan dalam versi yang kurang golf , seperti, Anda tahu, kurang golf. Menggunakan>>!i
menghemat 1 byte (dalam versi golf). Terima kasih lagiUtilitas Bash + Unix, 184 byte
Cobalah online!
Terima kasih kepada @AlbertRenshaw untuk bermain golf 2 byte.
sumber
!=
JavaScript (ES6),
124114 byteTerima kasih kepada Neil untuk menghemat beberapa byte
Karena ini sangat berbeda dari jawaban JavaScript yang sudah ada, dan saya cukup lama membahasnya, saya memutuskan untuk membuat jawaban sendiri.
Pemakaian
Keluaran
sumber
.sort()[0]
adalah ide yang luar biasa.eval
itu jahat. : DMath.min()
, tapi itu membutuhkan banyak karakter, dan saya pikir akan ada cara yang lebih pendek. Dan ya,eval
sangat bagus untuk bermain golf..sort()[0]
bekerja, itu hanya akan menelan biaya 10 byte, tetapi tidak, dan.sort((a,b)=>a-b)[0]
biaya 20 byte tetapiMath.min(...)
hanya biaya 13.Oktaf,
808797 byteCobalah secara Online!
sumber
l
s untuk menyelesaikan cowbell tambahan. Misalnya, pada inputcowbell
, itu salah mengembalikancowbellcowbel
daripadacowbellcowbell
. (Saya harap Anda dapat memperbaikinya — saya suka algoritma yang tidak lazim!)CJam, 37
Cobalah online
Jika saya dapat mengecualikan
"
dan\
karakter, maka ...35 byte
Cobalah online
Penjelasan
Kode berturut-turut menambahkan setiap karakter string ke string awal (pergi dari asli ke dua kali lipat), menentukan jumlah cowbell untuk setiap string (menghitung jumlah kemunculan setiap karakter dalam "cowbel" dan membagi satu untuk 'l' dengan 2, kemudian mengambil minimum), menemukan posisi string pertama di mana jumlah cowbell meningkat sebesar 1, kemudian mengambil awalan yang sesuai dari input dan meletakkannya setelah string input.
Untuk memasukkan string asli juga (tanpa menambahkan karakter), kode tersebut menambahkan karakter netral ke string yang sedang diulang. Versi pertama menambahkan spasi, dan versi 2 menggunakan representasi string, yaitu string antara tanda kutip ganda.
sumber
PHP, 133 byte
port PHP dari port JavaScript @ edc65 pada jawaban DLosc Pip.
mengambil input huruf kecil dari argumen baris perintah. Jalankan dengan
-nr
.kerusakan
sumber