Ada beberapa upaya sebelumnya untuk mengajukan pertanyaan ini, tetapi tidak ada yang sesuai dengan standar modern di situs ini. Per diskusi tentang Meta , saya memposting ulang dengan cara yang memungkinkan untuk kompetisi yang adil di bawah aturan modern kita.
Latar Belakang
Sebuah palindrom adalah string yang "membaca depan yang sama dan mundur", yaitu kebalikan dari string adalah sama dengan string itu sendiri. Kita tidak berbicara tentang "palindrom yang nyaman" di sini, tetapi pembalikan karakter demi karakter yang ketat; misalnya, ()()
bukan palindrom, tetapi ())(
.
Tugas
Tulis program atau fungsi yang menggunakan string S (atau padanan yang sesuai dalam bahasa Anda) sebagai input, dan memiliki satu output Q (dari jenis pilihan Anda). Anda dapat menggunakan segala cara yang masuk akal untuk mengambil input dan memberikan output.
- Ketika input S adalah palindrom, output Q harus memiliki nilai A (yang sama untuk setiap palindromic S ).
- Ketika input S bukan palindrom, output Q harus memiliki nilai B (yaitu sama untuk S non-palindromik ).
- A dan B harus berbeda satu sama lain.
Atau dengan kata lain: memetakan semua palindrom ke satu nilai, dan semua non-palindrom ke yang lain.
Selain itu, program atau fungsi yang Anda tulis harus berupa palindrom itu sendiri (yaitu kode sumbernya harus palindromik), menjadikannya sebagai tantangan sumber terbatas .
Klarifikasi
- Meskipun
true
danfalse
merupakan pilihan yang jelas untuk A dan B , Anda dapat menggunakan dua nilai berbeda untuk output "is a palindrome" dan "bukan a palindrome", yang tidak harus berupa boolean. - Kami mendefinisikan pembalikan string pada level karakter di sini;
éé
adalah palindromik terlepas dari apakah program dikodekan dalam UTF-8 atau Latin-1, meskipun itu bukan urutan palindromik oktet setelah pengkodean UTF-8. - Namun, bahkan jika program Anda mengandung karakter non-ASCII, ia hanya perlu bekerja untuk input ASCII. Secara khusus, input S hanya akan berisi karakter ASCII yang dapat dicetak (termasuk spasi, tetapi tidak termasuk baris baru). Antara lain, ini berarti bahwa jika Anda memperlakukan input sebagai urutan byte dan bukan urutan karakter, program Anda mungkin masih akan memenuhi spesifikasi (kecuali jika pengkodean I / O bahasa Anda sangat aneh). Dengan demikian, definisi palindrome pada peluru sebelumnya hanya sangat penting ketika memeriksa bahwa program memiliki bentuk yang benar.
- Menyembunyikan setengah dari program dalam komentar atau string literal, sementara tidak kreatif, adalah legal; Anda dinilai panjang lebar, bukan kreativitas, jadi silakan menggunakan metode "membosankan" untuk memastikan program Anda adalah palindrom. Tentu saja, karena Anda dinilai panjang lebar, bagian dari program Anda yang tidak melakukan apa pun akan memperburuk skor Anda, sehingga dapat menggunakan kedua bagian dari program Anda akan sangat membantu jika Anda dapat mengelolanya .
- Karena kriteria kemenangan diukur dalam byte, Anda harus menentukan pengkodean di mana program Anda ditulis untuk dapat skor itu (meskipun dalam banyak kasus akan jelas pengkodean yang Anda gunakan).
Kriteria kemenangan
Meskipun program harus berupa palindrom pada level karakter, kami menggunakan byte untuk melihat siapa yang menang. Secara khusus, semakin pendek program Anda, diukur dalam byte, semakin baik; ini adalah tantangan kode-golf . Untuk memungkinkan pengiriman (terutama pengiriman dalam bahasa yang sama) untuk dibandingkan, tempatkan jumlah byte untuk program Anda di header pengiriman Anda (ditambah jumlah karakter, jika berbeda dari jumlah byte).
(
dengan a
dan )
dengan b
. Apakah abab
palindrome? Tidak, itu harus terjadi abba
. Maka ()()
bukan palindrome juga; itu harus ())(
.
()() is not a palindrome, but ())( is.
Selamat, Anda berhasil masuk ke reddit!