Dalam membawakan musik Les Miserables, sebuah lagu muncul berjudul "Red and Black." Ini bagian dari lagu itu:
Merah - darah orang-orang yang marah!
Hitam - kegelapan zaman lampau!
Merah - dunia yang akan terbit!
Hitam - malam yang akhirnya berakhir!
Tugas Anda adalah mengubah input menjadi lagu "Merah dan Hitam" yang mantap.
Memasukkan
Teks dibatasi oleh baris baru, atau input teks yang cocok serupa. Sebagai contoh,
The blood of angry men!
The dark of ages past!
A world about to dawn!
The night that ends at last!
Input kosong tidak terdefinisi (di luar ruang lingkup).
Keluaran
Jika panjang (jumlah baris, atau panjang array input, atau serupa) dari input tersebut ganjil, baik output nothing atau output falsey. Kiriman Anda mungkin tidak menghasilkan kesalahan atau mencoba untuk menghasilkan output yang benar.
Jika tidak, ubah input menjadi lirik Merah / Hitam. Ubah huruf besar apa pun di awal baris menjadi huruf kecil. Tambahkan Red
plus pembatas di depan garis ganjil, dan Black
ditambah pembatas (terlihat) ke depan garis genap. Pembatas juga harus dikelilingi dalam ruang-ruang, sehingga keluarannya terlihat tidak berbingkai (dan tidak ditandai;)).
Anda sekarang memiliki hasil Anda.
Uji Kasus
Pembatas keluaran adalah -
.
In:
The blood of angry men!
The dark of ages past!
A world about to dawn!
The night that ends at last!
Out:
Red - the blood of angry men!
Black - the dark of ages past!
Red - a world about to dawn!
Black - the night that ends at last!
In:
test test
1
[][][]
BBB
Out:
Red - test test
Black - 1
Red - [][][]
Black - bBB
In:
I feel my soul on fire!
The color of desire!
The color of despair!
Out:
falsey OR nothing
In:
Red - I feel my soul on fire!
Black - My world if she's not there!
Out:
Red - red - I feel my soul on fire!
Black - black - My world if she's not there!
Jawaban:
05AB1E , 26 byte
Kode:
Menggunakan penyandian 05AB1E . Cobalah online!
Penjelasan:
sumber
V ,
31, 30 byteCobalah online!
Hexdump:
Ini sepele dalam V, tetapi kasus tepi input ganjil membuatnya rumit karena V tidak benar-benar memiliki persyaratan. Untungnya, kami dapat menangani ini dengan biaya
+6
byte yang relatif kecil .sumber
Haskell ,
104120113112112110 byteCobalah online!
Tidak diganggu dengan penjelasan
f
adalah fungsi yang mengambil daftar string (alias daftar daftarChar
s), dan mengembalikanMaybe
yang sama. Fungsi Haskell cukup "murni", jadi kami harus menjelaskan bahwa fungsi ini mungkin tidak mengembalikan apa pun. (Fungsi tipeMaybe a
mengembalikan salah satuNothing
atauJust a
).The
|
operator adalah penjaga - semacam bersyarat. Cabang pertama diikuti jikaeven $ length $ x
(yang merupakan cara penulisan laineven (length x)
)True
. Kalau tidak, yang kedua (1<2
dalam contoh golf, yang tentu saja selalu benar) diikuti dan kami kembaliNothing
.zipWith
mengambil fungsi dua argumen dan menerapkannya ke setiap elemen dari dua daftar. Fungsi yang kami gunakan di sini adalah\(h : t) x -> x ++ toLower h : t
.h : t
secara implisit memisahkan karakter pertama dari argumen pertama kami, yang merupakan jenis hal baik yang dapat Anda lakukan di Haskell. Daftar pertama adalah input (yang sudah kita ketahui mengandung jumlah garis genap), dan yang kedua hanya secara bergantian bolak-balik "Merah -" dan "Hitam -" (daftar tak terbatas adalah hal baik lain yang mungkin, kali ini karena Haskell adalah lazy - hanya peduli sebanyak yang Anda gunakan).sumber
(h:t)!x=x++toLower h:t
menghemat beberapa byte.f x|odd$length$x=Nothing|1<2=Just ...
mempty
menghemat 1 byte dibandingkan denganNothing
!c="Red - ":"Black - ":c
dan menggunakanc
alih-alihcycle["Red - ","Black - "]
: Coba online!Jelly , 29 byte
Program lengkap.
Menggunakan opsi keluaran "falsey" untuk input dengan jumlah garis ganjil.
Cobalah online!
Bagaimana?
sumber
Japt ,
363534 byteOutput
0
untukfalse
. Termasuk yang tidak diinginkan setelah yang keduaR
.Cobalah online
sumber
C,
11210710510399 byte-4 Terima kasih untuk ASCII-hanya
-2 terima kasih kepada Mego
Mengambil "array" sebagai input. Contoh:
Bagaimana itu bekerja
i
menciptakan variabeli
luar semua fungsi, yang berarti secara otomatis diinisialisasi ke 0.main(a,s)char**s;{
mendeklarasikan fungsi utama, yang membutuhkan dua argumen - anint a
(# argumen baris perintah), danchar ** s
(array argumen baris perintah).for(;a%2&++i<a;)
adalah loop yang memeriksa apakaha
genap (a%2
) dan jika kurang dari jumlah argumen baris perintah yang dilewati (i<a
).printf("%s - %c%s\n",i%2"Red":"Black",tolower(*s[i]),s[i]+1
cetakan:i
aneh, "Hitam" jikai
genap (i%2?"Red":"Black"
)tolower(*s[i])
)s[i]+1
)Cobalah online!
sumber
=0
bagian untuk menyimpan 2 byte lebih.Röda , 97 byte
Cobalah online!
sumber
Jelly , 30 byte
Cobalah online!
sumber
Retina , 58 byte
Cobalah online!
sumber
CJam, 41 byte
sumber
JavaScript (ES6), 93 byte
Mengambil lagu sebagai array garis.
Tampilkan cuplikan kode
sumber
Python 2 , 215-> 184-> 165 byte
Disimpan 31 byte sesuai dengan komentar Stephen S.
Challenger5 mendapatkannya hingga 165 byte
Cobalah online!
sumber
Javascript, 118 byte
Uji
Tampilkan cuplikan kode
sumber