Sebuah palindrom beberapa string yang dieja dengan cara yang sama baik belakang dan ke depan. Misalnya, 'Eva, bisakah aku menusuk kelelawar di gua?' adalah palindrome (EVACANISTAB | BATSINACAVE)
Untuk golf kode ini, menggunakan bahasa pilihan Anda, tentukan apakah string yang diberikan adalah palindrom atau tidak.
Kasus tepi:
- Tanda baca tidak diperhitungkan sebagai palindrominess.
- Karakter kontrol tidak diperhitungkan dalam palindrominess.
- Spasi tidak diperhitungkan dalam palindrominess.
- Angka dihitung menuju palindrominess.
- Kasus dalam tantangan ini tidak diperhitungkan sebagai palindrominess.
- Tidak ada batasan untuk panjang string untuk mengevaluasi, kecuali untuk apa yang dipaksakan oleh bahasa pilihan Anda.
- Untuk tantangan ini, batasi diri Anda pada rangkaian karakter ASCII.
Persyaratan Teknis:
- Hanya badan metode yang dibutuhkan; hal-hal tambahan seperti tanda tangan metode, deklarasi struktur data, dll. tidak diperhitungkan dalam persyaratan kemenangan.
- Kode harus dikompilasi atau ditafsirkan tanpa kesalahan atau pengecualian waktu kompilasi.
- Kode tidak boleh membuang pengecualian atau gangguan yang tidak ditangani. (Hampir tak perlu dikatakan. Hampir.)
- Kode harus mengembalikan beberapa nilai yang menunjukkan palindrominess. Jenis data tergantung pada bahasa yang Anda gunakan (misalnya pengguna C # mungkin menggunakan a
bool
, sedangkan pengguna JavaScript dapat menggunakan avar
.) - Anda tidak boleh menulis juru bahasa Anda sendiri yang melakukan tugas ini sebagai kemampuan 'asli' sehingga Anda bisa 'bermain golf' dengan skor yang hampir menang. (Semoga tak perlu dikatakan.)
Kondisi kemenangan:
- Kode terpendek dalam karakter menang.
Pemimpin Saat Ini: tmartin (k, 25 karakter)
... Ingin tanda centang hijau ajaib dengan jawaban Anda ? Kalahkan jawaban orang ini!
code-golf
palindrome
decision-problem
Andrew Gray
sumber
sumber
Jawaban:
K, 25
.
sumber
{x~(|)x:(_)x inter(,/).Q`a`A`n}
{#|:\_x@&x in,/.Q`a`A`n}
, di mana 1 benar dan 2 salahPerl, 26 char
Mengevaluasi ke 1 kapan
$_
palindrom,""
(salah satu dari nilai false Perl) ketika tidak.Penggunaan sampel:
keluaran:
sumber
_
dalam string kan? Dan itu tidak membutuhkan input apa pun jadi tidakkah Anda perlu menggunakan-p
opsi ini?\W
di regex tidak termasuk garis bawah. Saya khawatir Anda akan perlu[^a-z\d]
di regex Anda. Saya khawatir saya dipukuli._|\W
bukan[_\W]
._|\W
menjadi\Pl
: ideone.com/0ufdaQ . Seharusnya hanya huruf Unicode.\Pl
tidak akan cocok dengan angka, jadi saya kira_|\W
adalah yang terbaik yang bisa Anda lakukan.Hanya C # 82 :)
Tidak dapat menahan diri dari godaan untuk menulis program bebas boilerplate dalam bahasa favorit saya.
Tes tersedia di sini: http://ideone.com/8bwz7z
sumber
GolfScript,
36 34 3130 karakterAlgoritma serupa dengan solusi saya sebelumnya (Javascript) .
0"0:A[a{"@{>^}+/
- Dioptimalkan oleh Peter Taylor dan Howard. Versi saya adalah"/9@Z"{1$<},,2%\;
. Howard menyumbangkan penggabungan fungsi dan Peter Taylor menyumbangkan XOR untuk modulo-2. Ini pada dasarnya metode generik membandingkan jika nilainya dalam urutan rentang.{.96>32*-}%
(11 karakter) tidak benar-benar merupakan peningkatan dari Javascript.toUpperCase()
(14 karakter), terutama karena itu membuat beberapa tanda baca aneh yang mengikutiz
tabel ASCII (yang tidak masalah di sini).Namun seperti yang disarankan Peter Taylor, jika kita memfilter alfanumerik terlebih dahulu, kita dapat mengonversi menjadi huruf kecil dan angka hanya dengan menetapkan satu bit di setiap karakter:
{32|}
.-1%=
Apakah semua angkat berat palindromic. Satu bagian yang tidak terlalu saya sukai adalah berapa lama waktu yang saya butuhkan untuk mengetahui cara membalikkan array. Saya seharusnya membaca dokumen. Dua karakter lainnya melakukan manajemen tumpukan dan perbandingan.Uji: http://golfscript.apphb.com/?c=IkV2YSwgY2FuIEkgc3RhYiBiYXRzIGluIGEgY2F2ZT8iCgp7IjA6QVtheyJcez59KywsMiV9LHszMnx9JS4tMSU9
Lebih lanjut, jika saya dapat berasumsi bahwa tidak ada karakter kontrol berikut yang hadir: (Data link escape, control perangkat 1-4, negative acknowledgment, idle synchronous, end of transmission block, cancel, end of medium) (kami semua sepakat bahwa ini adalah semua sangat tidak jelas) atau jika saya dapat memperlakukan mereka sebagai versi huruf besar dari angka 0-9, kita dapat menyimpan dua karakter lainnya:
GolfScript, 28 karakter
Uji: http://golfscript.apphb.com/?c=IkV2YSwgY2FuIEkgc3RhYiBiYXRzIGluIGEgY2F2ZT8iCgp7MzJ8fSV7MCIwOmF7IkB7Pl59Ky99LC4tMSU9
sumber
{"0:A["\{>}+,,2%},
+
tentang balok. Itu trik yang keren.a{
ke daftar karakter filter untuk menyertakan huruf kecil, tetapi Anda kemudian dapat huruf besar dengan adil{32|}%
. Hasil akhirnya adalah{"0:A[a{"\{>}+,,2%},{32|}%.-1%=
0"0:A[a{"@{>^}+/
juga pekerjaannya.Javascript, 53 karakter:
adalah ekspresi javascript yang mengevaluasi true jika
x
palindrom, menjadi false jika tidak. Diasumsikanx
sebagai string. Jika itu tidak dijamin, silakanx+="",
Ini remah roti: Karena cara
reverse()
kerjanya,gagal Namun,
baik-baik saja.
sumber
+""
string, dilemparkan ke+
angka,|0
dan~~
dilemparkan ke integer, dilemparkan ke!!
boolean./[^\W_]/g
R: 66
Pemakaian:
sumber
Bash:
524846 karakterIni membutuhkan sengatan untuk memeriksa sebagai parameter pertama dan menetapkan kode keluar ke 0 untuk palindrome dan 1 untuk tidak.
Contoh dijalankan:
sumber
Python 2: 49 (tanpa menghitung tanda tangan metode)
Program yang lengkap, dengan input dan output dapat ditulis dalam 74 karakter.
Contoh penggunaan:
(
huge_palindrome.txt
Mengandung ini 17.826 kata palindrom)Solusi ini dapat disesuaikan dengan python 3 menambahkan beberapa karakter:
Python 3: 55
sumber
sys.stdin.read
pada dasarnya sama denganraw_input
s
variabel. Saya memutuskan untuk memberikan definisi yang lengkap tetapi, seperti kebiasaan pada tahun 2013, tidak menyertakan metode tanda tangan dalam panjangnyaJAVA (atau bahasa yang paling verbose),
1029695 charPenggunaan (dengan kode ungolfed):
Dipersingkat dengan bantuan komentator di bawah ini
sumber
if(s==null) return 1==0;
? Atau apakah Java memberlakukan ikal padaif
pernyataan?null
kebiasaan yang baik, tetapi tidak dipraktikkan di CodeGolf. Seperti yang saya tahu, tidak ada orang lain yang melakukannya dalam pertanyaan ini. Lewati. 2) Ruang antar argumen membantu keterbacaan, tetapi tidak bermain golf. Singkirkan; 3) Alih-alih secara eksplisittoLowerCase()
menggunakan stringequalsIgnoreCase()
nantiequals()
. Dengan cara ini Anda harus menyesuaikan ekspresi reguler, tetapi masih 1 karakter lebih pendek. pastebin.com/s7H84fajreplaceAll("[^A-Za-z0-9]","")
=>replaceAll("\\W","")
replaceAll("\\W|_","");
untuk menghapus_
juga => 95 karakterMathematica
5453Satu byte disimpan berkat CatsAreFluffy:
Bagi mereka yang memiliki versi 10.2 atau yang lebih lama:
Contoh
sumber
PalindromeQ
lebih pendek 1 byte dari#==Reverse@#&
PalindromeQ= #==Reverse@#&
J, 30 karakter
Pemakaian:
sumber
k (
50 48 4538 karakter)Menekan semua kesalahan, mengembalikan default
0b
(salah).Contoh:
sunting: mencukur tiga karakter lagi dengan menghindari variabel perantara. H / T, CS. -7: Tidak perlu menekan kesalahan.
sumber
Ruby:
4338 karakterContoh dijalankan:
sumber
s.tr!('^A-Za-z0-9','').upcase!.reverse==s
!
metode! Kamu membuatku luar biasa @Howard dengan trikmu.tr
dantr!
tampaknya berperilaku berbeda ketika mereka tidak memiliki sesuatu untuk transliterasi: pastebin.com/4YThW2qN Itu membuatp['757']
tes untuk crash dengan "NoMethodError: metode undefined` upcase! ' untuk nil: NilClass ”error.s=s.upcase.tr('^A-Z0-9','');s==s.reverse
C ++,
107(salah hitung),100(salah hitung), 81using namespace std;
.Digunakan
int
karena lebih pendek darichar
atauauto
.sumber
Lua, 56
sumber
%W
ada sesuatu seperti\W
di regex, itu juga mengecualikan karakter seperti garis bawah. Ini tidak diinginkan.%w
tidak termasuk_
(%W
jelas termasuk, lalu)s=s:lower():gsub('%W','')return s:reverse()==s
46 charsfunction(s)
Python 3/2 59 karakter:
sumber
Haskell, 43
Menggunakan perpustakaan standar
Control.Monad
,Control.Monad.Instances
danData.Char
:sumber
import Data.Char
import Control.Monad
ap(==)reverse.map toLower.filter isAlphaNum
tidak juga dengan menambahkan spasi atau semacamnya, maaf saya tidak terlalu tertarik dengan Haskell :)Control.Monad.Instances
. (Saya menggunakan instance Reader monad denganap
, tetapi instance itu tidak diekspor olehControl.Monad
.)PHP 60 karakter.
Pertama coba codegolf.
Contoh:
sumber
echo($x=preg_replace('/\W/','',strtolower($c)))==strrev($x);
.Python 2 64 Charecters:
sumber
77
versi karakter. Tidak tahu mengapa abhiram memposting versi yang tidak disenangi.re.findall('[a-z0-9]+',input.lower())
bagian 3 karakter lebih pendek.Haskell 48
digunakan seperti ini:
sumber
Smalltalk , Squeak / Pharo beraroma
116 karakter menggunakan format tradisional dengan tab
Anda menambahkan dua metode ke String:
Kita tentu saja dapat menghilangkan beberapa ruang, atau menggunakan nama metode yang lebih pendek, tetapi jangan mengkhianati semangat Smalltalk.
Terlebih lagi, ini akan menangani palindrom Prancis, seperti di http://fr.wikipedia.org/wiki/Liste_de_palindromes_fran%C3%A7saya , tidak banyak jawaban di halaman ini bisa.
sumber
Python 3 (51 char)
dan mungkin Python 2
berdasarkan solusi abhiram (dengan golf yang lebih agresif)
dapat disingkat menjadi 46 karakter, menggunakan RE '\ w'
dan varian dengan fungsi tubuh yang sangat singkat (27 karakter)
sumber
Windows PowerShell,
564745 karakterDiperbarui (lihat komentar), dan dapat menghapus tanda kurung di sekitar regex:
Asli (56)
Asli Tidak golf:
sumber
($s=$s-replace'[\W]')-eq(-join$s[$s.length..0])
($s=$s-replace'\W')-eq-join$s[$s.length..0]
.C ++, 74 byte
Kode ini sebenarnya sangat elegan, dan mudah dimengerti (bila diformat dengan benar). Saya tidak percaya itu mungkin untuk mendapatkan lebih pendek di C ++, dan tidak menggunakan fungsi pustaka standar.
Contoh penggunaan:
Versi yang diformat dengan baik:
sumber
error: ISO C++ forbids declaration of ‘p’ with no type
fungsi Anda harus memiliki tipe pengembalian.while(*++e);
alih - alihwhile(*e)++e;
. Tetapi seperti yang disebutkan Titus, jawaban ini tidak valid.PHP,
26 84 80 78 6263 bytemengambil input dari argumen baris perintah pertama; cetakan
1
untuk string yang benar dan kosong untuk kepalsuan.I18n adalah ekspansif kecil, karena tidak ada alternatif multibyte untuk
strrev
(110 byte; dijalankan dengan-r
):utf8_strrev secara terang-terangan dicuri dari manual PHP . Anda mungkin juga ingin melihat posting blog ini .
sumber
-R
akan menyebabkan masalah dengan putus baris dalam string untuk menguji bukan? Dari spec "-R <code> Jalankan PHP <code> untuk setiap baris input". Apalagi<?=strrev($s=strtolower(preg_replace("#\W#","",$argn)))==$s;
akan lebih pendek.$argn
tanpa-R
.$argv[1]="O Genie, der Herr ehre dein Ego!"; # :D
Ruby, 48
Cukup sederhana, dan dibuat dengan tergesa-gesa sehingga tidak terlalu banyak bermain golf. Saya akan bermain golf nanti.
sumber
Pylongolf2 , 24 byte
c
mengambil input,╨2
untuk mengkonversi ke huruf kecil.Saya kemudian mendorong regex ke tumpukan dan gunakan
-
untuk menghapus semua karakter non-abjad dalam input._
duplikat input.╨1
membalikkannya dan=
kemudian membandingkannya.~
mencetak tumpukan di ujung yang mencetak salah satutrue
ataufalse
.sumber
PowerShell,
194190 byteImplementasi rekursif untuk menunjukkan bagaimana scriptblock PowerShell yang tidak bernama dapat memanggil dirinya sendiri.
ungolfed:
tes:
sumber
[^a-z0-9]
?05AB1E , 4 byte (tidak bersaing)
Non-bersaing , karena bahasa tersebut mengungguli tantangan. Kode:
Penjelasan:
Menggunakan pengkodean CP-1252 . Cobalah online! .
sumber
Jelly, 10 Karakter (Non-bersaing)
Mengembalikan 1 jika benar, 0 jika salah
Cobalah secara Online!
sumber
fØBŒlŒḂ
:f
saringan untuk menjagaØB
set [a-zA-Z0-9] danŒl
convert ke huruf kecil, makaŒḂ
uji apakah palindrom.