FizzBuzz sederhana menggunakan string.
Diberikan
- 1 kata atau frasa (string)
- 2 karakter unik
Keluaran
Kata atau frasa dengan setiap kemunculan karakter pertama diganti dengan fiz dan masing-masing karakter kedua diganti dengan buzz
Aturan
- Huruf pertama dalam Fizz dan Buzz harus tetap menggunakan huruf kapital
- Untuk sisa kata fizz dan buzz, Anda harus mencocokkan case karakter yang diganti (jika tidak ada case maka tetap menggunakan huruf kecil)
- Jika karakter yang diberikan tidak ada dalam frasa, keluarkan frasa asli
Uji Kasus
Given: Hello, h, l
Output: FIZZeBuzzBuzzo
Given: test, a, b
Output: test
Given: PCG rocks!, , !
PCGFizzrocksBuzz
Given: This
Is
SPARTA!,
, S
Output: ThiBuzzFizzIBuzzFizzBUZZPARTA!
Given: FizzBuzz, a, b
Output: FizzBUZZuzz
Ini adalah kode-golf sehingga kode terpendek, dalam byte, menang!
Catatan
Secara teknis menangani kasus baris baru (Ini Apakah SPARTA!) Adalah bagian dari tantangan. Namun, saya tidak akan membatalkan jawaban karena tidak memasukkannya, karena sangat menantang atau bahkan tidak mungkin dalam beberapa bahasa.
you must match the case of the replaced character
danInput is not case sensitive
tampaknya saling bertentangan.ThiBuzzFizzIBuzzFizzBUZZPARTA
hilang tanda seru terakhir.aa, a, f
? Apa yang akan menjadi output yang diharapkan?BUZZizzBUZZizz
,,FizzFizz
atau keduanya diizinkan menurut opsi kami?FizzFizz
.Jawaban:
Jelly , 34 byte
Cobalah online!
Bagaimana?
sumber
Python 3 ,
180174168160152 byteIni hanya versi yang lebih golf dari jawaban Stephen , dalam Python 3. Chip ini menghilangkan 42% dari byte-nya. Python 2 akan menghemat satu byte pada cetakan, tetapi harga kemajuan seperti itu. Ini menangani baris baru dengan benar.
Terima kasih kepada Blckknight untuk menghemat 8 byte pada input.
sumber
fileinput
modul itu digunakan?from sys import*
dans,a,b=J(stdin).split(', ')
untuk menyimpan beberapa karakter?Python, 109 byte
Cobalah online!
Mengambil dua karakter sebagai string tunggal
Sunting: Menambahkan testcase ke tautan TIO, baris baru juga berfungsi
sumber
Python 2 ,
271, 261 byteCobalah online!
Wow yang satu ini doozie! Ternyata python tidak akan menerima input multi-line jadi
fileinput
harus digunakan.edit: harus lulus semua kasus sekarang :)
sumber
import fileinput as f
...for m in f.input():
MATLAB / Oktaf ,
106102111 byteIni mungkin dapat dioptimalkan lebih lanjut.
Ini menggunakan pengganti Regex sederhana. Namun langkah lanjutan diperlukan dengan mengganti karakter input dengan angka terlebih dahulu. Hal ini dimaksudkan agar jika input kedua menggantikan surat terkandung dalam
Fizz
bahwaFizz
tidak maka bisa diganti ketika regex berikutnya dilakukan.Ini tentu saja mengasumsikan tidak ada angka dalam input. Namun mengingat pertanyaan mengatakan input adalah kata atau frasa saya merasa bahwa ini adalah asumsi yang dapat diterima.
Kode akan menangani baris baru di input dengan benar.
Anda dapat mencobanya secara online!
sumber
Bash 4.4 + GNU sed,
70228222227 byteTampaknya
alias e=echo
melempar kesalahan jika dirujuk dalam Bash 4.3 atau di bawah, versi TIO tampaknya menggunakan. Oleh karena itu, kode Bash 4.3 yang lebih panjang dan setara diberikan dalam rangkaian uji TIO di bawah ini untuk kepentingan pengujian. Ini melewati semua kasus uji, jadi itu bagus.Cobalah online!
sumber
JavaScript (ES6), 92 byte
Mengambil input sebagai string dan array dua karakter. Mendukung baris baru.
Uji kasus
Tampilkan cuplikan kode
sumber
Pyth - 25 byte
Test Suite .
sumber
"Hl", Hello
tidak menggunakan huruf kapital dengan benar dan"hL", Hello
tidak menggantikan hurufl
s.GNU sed , 135 +1 (r flag) = 136 byte
Secara default, skrip sed dijalankan sebanyak yang ada baris input. Untuk menangani input multi-line, saya menggunakan loop untuk menambahkan semua kemungkinan baris yang tersisa ke yang pertama, tanpa memulai siklus baru.
Cobalah online!
Tabel pengganti yang digunakan pada baris 4, harus dalam urutan yang tepat, yaitu 'Fizz' dan 'Buzz' setelah bentuk huruf besar. Ini karena regex sed
.*
, yang digunakan selama pencarian tabel, serakah. Jika karakter saat ini yang perlu diganti bukan huruf (tidak ada huruf), maka string huruf kecil diperlukan (cocok terakhir).Karena sed tidak memiliki tipe data, saya menggunakan pembatas karakter untuk beralih string. Ini akan menandai posisi saya saat ini dan dalam satu lingkaran saya menggesernya dari kiri ke kanan. Untungnya, saya dapat menggunakan
,
ini, karena ini adalah pembatas data input.Penjelasan:
sumber
Haskell, 114 byte
r
mengambil karakter desis dan buzz sebagai daftar elemen 2 sebagai argumen pertama, dan string input sebagai argumen kedua. Baris baru dan unicode harus ditangani dengan tepat, meskipun fungsi sayangnya tidak total (memungkinkan input yang tidak valid disimpan 5 byte).sumber
u=Data.Char.toUpper
hanya bekerja dalam ghci sejauh yang saya tahu. Di Haskell standar, Anda memerlukanimport
. Namun Anda harus dapat menyimpan beberapa byte dengan menggunakan=<<
alih-alihconcatMap
.Mathematica, 94 byte
Fungsi anonim. Mengambil dua string sebagai input dan mengembalikan fungsi yang mengambil string sebagai input dan mengembalikan string sebagai output sebagai output. Itu harus dipanggil dalam format
prog["c1", "c2"]["s"]
, di mana"s"
string target dan"c1"
dan"c2"
adalah dua karakter. Mungkin bisa bermain golf lebih lanjut.sumber