Terinspirasi oleh xkcd ini
Anda bekerja untuk Shazam dan mereka punya proyek untuk Anda. Beberapa pelanggan mengeluh tentang aplikasi mereka yang menghabiskan terlalu banyak ruang di ponsel mereka, sehingga mereka ingin Anda membuat kode versi aplikasi yang ringan. Sayangnya, kode Anda yang ada hanya dapat memahami kata "na", dan Anda harus segera mengirimnya. Tidak apa-apa, kami akan melakukan yang terbaik dengan apa yang kami punya.
Tantangan
Anda harus menulis program lengkap yang mengambil input pengguna, atau mengambil argumen baris perintah, dan mencetak judul dan artis lagu tersebut. Karena kami berusaha memperbaiki pelanggan yang mengeluh tentang ukuran program, kode Anda harus sesingkat mungkin. Input akan berupa string yang seluruhnya terdiri dari na, dengan satu spasi di antara mereka. Huruf kecil / huruf besar bersifat arbitrer. Ini dianggap sebagai input yang valid: Na Na nA na NA
Ini adalah input yang tidak valid: nah nah NA naNa banana
Anda harus menentukan lagu apa yang diputar dan mencetaknya persis format ini:
Song: <trackname>
Artist: <artist>
Jika inputnya persis 8 na, ini cocok dengan dua lagu yang terpisah, jadi Anda harus mencetak keduanya:
Song: Batman Theme
Artist: Neal Hefti
dan
Song: Na Na Hey Hey Kiss Him Goodbye
Artist: Steam
Jika inputnya persis 10 na, Anda harus mencetak:
Song: Katamari Damacy
Artist: Yuu Miyake
Jika inputnya persis 11 na, Anda harus mencetak:
Song: Hey Jude
Artist: The Beatles
Jika inputnya 12 atau lebih banyak, Anda harus mencetak
Song: Land Of 1000 Dances
Artist: Wilson Pickett
Terakhir, jika input tidak valid, ada kurang dari 8 na, atau ada kata-kata yang tidak "na", program Anda gagal memahami musik. Jadi secara logis, hanya ada satu lagu lain yang mungkin. Anda harus mencetak:
Song: Africa
Artist: Toto
Seperti biasa, celah standar berlaku, dan jawaban terpendek dalam byte akan menang.
sumber
na
s? Saya hanya mendengarkannya dan saya pikir itu (dalam hal panjang note)quarter quarter quarter quarter / eighth sixteenth sixteenth quarter-quarter-quarter / eighth sixteenth quarter-quarter-quarter
, yaitu 12na
detik.onnnnnnnnne-one-three-one-a-two-threeeeeeeeeee-one-a-two-threeeeeeee-hey-jude
pasti 11na na / na na / na na / na na
x2batman
. Saya perhatikan bahwa kedua kalinya saya melihat komik.Jawaban:
Retina , 242
Cobalah online!
Bagaimana itu bekerja:
Bendera IgnoreCase + Grep mode flag + Regex
^na( na)*$
. Jika inputnya valid, cetaklah apa adanya. Jika tidak, cetak apa-apa.Bendera IgnoreCase + Mode pencocokan bendera + Regex
na
. Hitung "na" dan cetak nomornya.Jika string persis "8", ganti dengan baris kedua.
Jika string persis "10", ganti dengan baris kedua.
Jika string persis "11", ganti dengan baris kedua.
Jika string cocok
[0-9].+
, ganti dengan baris kedua. Ini tidak berlaku untuk angka satu digit,10
dan11
karena mereka telah diganti atau pun string pengganti di atas.Jika tidak ada yang di atas cocok, string masih dimulai dengan angka. Default untuk Toto, Afrika.
Ganti placeholder
>
dan,
denganSong:
danArtist:
.sumber
JavaScript (ES6), 276 byte
Penjelasan
Input secara opsional dapat mengandung satu ruang tambahan.
Uji
Tampilkan cuplikan kode
sumber
PowerShell, 278 byte
Tidak disatukan
Pemakaian
sumber
sh + coreutils, 290
Meskipun lebih lama dari pada pengajuan saya yang lain, yang ini mudah dan tidak banyak diserang, jadi saya tetap memasukkannya.
Bagaimana itu bekerja:
Jika inputnya valid, cetaklah apa adanya. Jika tidak, cetak apa-apa.
Hitung kata-katanya.
Tabel pencarian sederhana,
Song:
danArtist:
disimpan dalam variabel.sumber
^(na ?)+$
.Python
453440406380 byteEDIT: Terima kasih kepada Cyoce karena mengurangi 13 byte!
EDIT: Terima kasih lagi untuk Cyoce!
EDIT: Terima kasih kepada RainerP. untuk membantu saya meningkatkan algoritma pada kasus-kasus tertentu yang tidak valid.
Ini adalah konsep kasar dari program Python. Saya percaya itu pasti bisa golf, mungkin 300-400 byte. Tapi akan segera dikerjakan.
Coba di sini!
sumber
"Batman Theme,Neal Hefti,Na Na Hey Kiss Him Goodbye,Steam,Katamari Damacy,Yuu Miyake,Hey Jude,Beatles,Land of the 1000 Dances,Wilson Pickett,Africa,Toto".split(',')
if i not in ["n","a"," "]: ...
saya percaya Anda bisa menggunakanif i not in 'na ': ...
. Selain itu,if f==0: somecode; else: somemorecode
dapat dikurangi menjadiif f: somemorecode; else: somecode
(0 adalah Falsy)"\nArtist:"
tiga kali. coba atur variabel, misalnyaA="\nArtist:"
, lalu gunakanA
sebagai ganti string literal. Hal yang sama bisa dilakukan dengan"Song:"
. Juga, saya pikir ituif n<8or n==9:f=10
bisa dipindahkan ke atas pernyataan if dan diubah menjadiif n!=8:f=10
Batman Theme
bukanAfrica
untukna na na nan na na na na
.Julia, 325 byte
Mungkin bisa bermain golf lebih lanjut.
sumber
^(na ?)+$
.<
dan>
bukan==
:&&(c=length(split(ARGS[1],"na"))-1)<9?(p("Batman Theme","Neal Hefti"),p("Na Na Hey Hey Kiss Him Goodbye","Steam"))c>11?p("Land Of 1000 Dances","Wilson Pickett"):c>10?p("Hey Jude","The Beatles"):c>9?p("Katamari Damacy","Yuu Miyake"):p("Africa","Toto")
. Di luar topik: Saya suka Avatar Anda. Selesai menonton SAO minggu lalu. ;)Karat,
501477 byteTidak disatukan
Edit: menghapus to_string yang tidak perlu dan ketik anotasi
sumber
Perl 5
-pa
, 248 byteCobalah online!
sumber
Perl 5 ,
312292 byteCobalah online!
Tidak Disatukan:
sumber
C (gcc) ,
403395370365 byte-8 -5 bytes berkat ceilingcat
Cukup lurus ke depan.
Cobalah online!
sumber
Java 8, 353 byte
Penjelasan:
Cobalah online.
sumber