(Tantangan pertama, tolong beri tahu saya jika ada masalah dengannya.)
Sebuah heterogram adalah kata di mana tidak ada huruf alfabet terjadi lebih dari sekali, dan palindrom adalah ungkapan yang mundur sama dan ke depan.
Tantangannya di sini adalah untuk menulis sepotong kode yang mengambil kata (hanya huruf) sebagai input, dan menghasilkan apakah itu adalah heterogram (kebenaran / kepalsuan). Tangkapannya adalah bahwa program tersebut harus berupa palindrom - membaca yang sama mundur dan maju. Kapitalisasi tidak penting di sini, jadi untuk heterogram yang valid itu tidak bisa memiliki q dan Q, misalnya. Tidak ada komentar yang diizinkan, dan Anda tidak dapat menempatkan string yang berisi kode Anda (atau bagian penting dari kode Anda) untuk mencoba membuat bagian palindrome mudah: P
Ini kode-golf, jadi kode terpendek menang. Semoga berhasil!
EDIT: Parens, tanda kurung atau simbol lain yang memiliki bentuk kiri dan kanan harus dibalikkan dengan tepat untuk bagian palindrome. Jadi (helloolleh) adalah palindrom, tetapi (helloolleh (tidak. Rupanya ini disebut palindrome yang nyaman).
EDIT 2: Anda tidak akan mendapatkan input kosong, input dengan banyak kata atau input dengan karakter selain huruf. Jadi jangan khawatir tentang itu :)
sumber
(hellolleh)
palindrome yang valid? Mirip untuk[]
,,{}
dan<>
(jika perlu).asdsa
dianggap sama denganasd\nsa
?Jawaban:
Pyth - 11 byte
(Trailing dan memimpin ruang yang diperlukan dan dihitung).
Test Suite .
sumber
Pyth, 17 byte
Cobalah online di sini.
Ruang terdepan diperlukan. Saya telah menghitungnya dan spasi tambahan dalam hitungan byte.
Berikut rinciannya:
sumber
.q
di komentar Anda, tetapi.w
di program Anda.Python 3, 125
Masalah utama adalah membuat kebalikan dari kode yang dapat diuraikan. Kemudian kita bisa membiarkannya keluar dari pengidentifikasi yang tidak terdefinisi.
sumber
<
menjadi>
!Perl, 43 byte
Contoh penggunaan:
sumber
> <> ,
137131 BytesKetika saya melihat tantangan ini, saya pikir> <> mungkin akhirnya menjadi pilihan bahasa yang baik karena menggunakannya Anda kebanyakan dapat mengabaikan palindrom; sederhana untuk memastikan pointer hanya tetap di tempat yang seharusnya. Meskipun ini benar,> <> sayangnya membuat persyaratan bermain golf menyiksa (atau hanya bermain golf pada umumnya). Saya berharap untuk menggunakan beberapa trik aneh yang saya pikirkan untuk mengimbangi ini, tapi inilah jawaban "cepat" (tidak sebenarnya, baik program-bijaksana dan penciptaan-bijaksana). Anda dapat mencobanya online di sini .
Mengembalikan 1 untuk true dan -1 untuk false (saya bisa mengubahnya ke 0 tetapi panjangnya akan tetap sama, sayangnya)
Seperti biasa, beri tahu saya jika ini tidak berhasil dan jika Anda memiliki ide tentang cara menurunkannya. Saya mengujinya terhadap beberapa kasus uji, tetapi selalu ada pengecualian.
Ini versi lain, yang menurut saya sedikit lebih pintar, tetapi sayangnya sepuluh byte lebih. Nilai kebenaran / kesalahan saat ini adalah 1 dan kesalahan (
something smells fishy...
):Penjelasan:
Inilah kode tanpa bagian yang ditambahkan untuk menjadikannya palindrome. Yang ini tidak menggunakan trik "lebih pintar" yang saya coba gunakan untuk versi alternatif, jadi agak lebih mudah untuk menjelaskan (jika ada yang tertarik dengan penjelasan untuk "trik," saya akan dengan senang hati memberikan satu. , meskipun).
Baris 1:
Inilah cara swapping berbelit-belit (
:{:@=?v$
) bekerja - saya akan menggunakan test case stack ini: di[5,1,8,1]
mana karakter terakhir adalah atas.:{
Bagian atas tumpukan digandakan:,[5,1,8,1,1]
dan tumpukan bergeser ke kiri:[1,8,1,1,5]
:@
Atas digandakan:,[1,8,1,1,5,5]
maka tiga nilai teratas digeser ke kanan:[1,8,1,5,1,5]
=?v
Tidak perlu untuk bagian penjelasan ini$
Nilai teratas ditukar sekali lagi menghasilkan[1,8,1,5]
, yang, jika Anda akan perhatikan, adalah tumpukan asli bergeser sekali (seolah-olah{
telah menjadi satu-satunya perintah).Jadi apa yang dilakukan dalam bahasa Inggris ("Terima kasih Tuhan, dia benar-benar menjelaskan hal-hal") adalah memeriksa seluruh tumpukan terhadap nilai teratas dan pindah ke titik di baris kedua jika ada nilai yang sama dengan atas. Pemeriksaan ini dilakukan proporsional dengan berapa banyak nilai yang ada di tumpukan (
l - 1
, di manal
panjang tumpukan) sehingga semua nilai diperiksa satu sama lain.Baris 2:
sumber
><>
adalah palindrom itu sendiri (hanya bukan yang nyaman)PHP, 126 Bytes
Anda perlu menjalankan ini dengan
short_tags
direktif Penyanyi berubah off di 5.4 atau di atas.Golf pertama. Dua salinan, yang pertama mencetak sejumlah besar sampah dengan hasil palsu / benar:
Versi ini tidak akan mencetak jargon (162 byte):
Jalankan dari baris perintah dengan
Mungkin bisa bermain golf sedikit lebih jauh
sumber
?><?
, Anda bisa menggunakan//\\
. Itu harus menghapus persyaratan itu. Dan alih-alih__halt_compiler()
menggunakanreturn;
return;
itu masih berlaku.05AB1E, 9 byte
Cobalah online.
* Masukkan sesuatu tentang kembali ke tantangan pertama saya *
Non-bersaing sejak 05AB1E dibuat setelah tantangan ini.
Penjelasan
sumber
Brachylog , 3 byte, tantangan tanggal akhir bahasa
Cobalah online!
Ini adalah salah satu dari sedikit program yang bekerja baik di Brachylog 1 dan Brachylog 2. TIO link ke Brachylog 1 demi masa lalu. Juga secara tidak biasa untuk Brachylog, ini adalah program lengkap, bukan fungsi. (Program lengkap di Brachylog secara implisit menghasilkan boolean, yang memang kami inginkan untuk pertanyaan ini.)
Prinsip umum di sini adalah bahwa menempatkan predikat antara sepasang huruf besar identik adalah pernyataan bahwa nilai saat ini tidak berubah di bawah predikat itu. Jadi, Anda sering melihat hal-hal seperti
AoA
"diurutkan" ("invarian di bawah pengurutan");A↔A
akan (dalam Brachylog 2) berarti "adalah palindrome" ("invarian di bawah pembalikan"), dan sebagainya. Program ini "tidak berubah dalam menghapus duplikat", yaitu "tidak mengandung duplikat". Ini benar-benar nyaman bahwa metode ini menentukan invarian kebetulan palindrom.sumber
Brachylog , 3 byte
Cobalah online!
Predikat berhasil jika inputnya adalah heterogram dan gagal jika tidak.
sumber
MATL , 7 byte
Cobalah online!
Mengembalikan daftar [1, 1] jika inputnya adalah heterogram dan [0, 0] jika tidak.
Penjelasan:
sumber