Kode terpendek yang menemukan semua "sub-palindrom" string yang unik , yaitu: setiap substring dengan panjang> 1 yang merupakan palindrom.
mis.1
input: "12131331"
output: "33", "121", "131", "313", "1331"
mis.2
input: "3333"
output: "33", "333", "3333"
code-golf
string
palindrome
subsequence
Eelvex
sumber
sumber
333
? Secara naif Anda akan mencetak33
dua kaliJawaban:
J, 24
3140Penggunaan sampel:
Ambillah itu, GolfScript!
sumber
/dev/random
sini untuk membodohi kami ;-)~.(#~(1<#*]-:|.)&>),<\\.
(24 karakter)?Python 124
sumber
Haskell 98, 88
9196sumber
Python -
138136Kode ini tidak menduplikasi sub-palindrom.
sumber
'"'+t+'"'
untukt
menghemat ruang, meskipun menggunakan tanda kutip tunggal.Ruby -
126 10297 karaktersumber
Golfscript, 48 karakter
subpalindrome.gs
Pemakaian:
Operasi pertama
{,}{(;}/
mengubah string menjadi daftar trailing-substring. Transformasi leading-substring serupa kemudian dipetakan pada hasilnya. Kemudian rata dengan{+}*
, filter untuk palindrom menggunakan predikat.,1>\.-1%=*
, ambil nilai unik dengan.&
, lalu cetak cantik.Akan lebih rapi untuk mengekstrak transformasi trailing-substring sebagai blok dan menggunakannya kembali sebagai pengganti untuk substring terkemuka setelah membalik setiap substring trailing, tetapi saya tidak dapat menemukan cara ringkas untuk melakukan itu.
sumber
Haskell -
170, 153sumber
main=getLine>>=(\x->putStrLn$intercalate", "$toList$p x)
denganmain=getLine>>=putStrLn.intercalate", ".toList.p
. Saya juga akan mengganti panggilanp
dengan tubuhnya.subsequences
! Program Anda melaporkan lebih banyak subpalindrom daripada keluaran referensi misalnya 1. ("1111" misalnya)J, 48
misalnya
sumber
Prolog, 92
Penggunaan sampel:
sumber
Windows PowerShell, 104
109111Ini mengharapkan input pada stdin dan akan membuang semua palindrom yang ditemukan satu per baris pada stdout:
(Ketika lari dari
cmd
itu menjadiecho 12131331|powershell -file subp.ps1
- Hanya saja itu$input
mengambil arti yang sedikit berbeda tergantung pada bagaimana skrip dipanggil, tetapi bisa stdin, hanya saja tidak secara interaktif.)2011-01-30 13:57 (111) - Upaya pertama.
2011-01-30 13:59 (109) - Deklarasi variabel inline.
2011-06-02 13:18 (104) - Mengulangi pencarian substring dengan bergabung dengan array char alih-alih memanggil
.Substring()
dan menambahkan sedikit lebih banyak.sumber
Q, 78
pemakaian
sumber
Retina ,
3427 byteCobalah online!
Test suite perlu
M
karena diikuti oleh tahap lain untuk memasukkan garis kosong di antara kasus uji.Penjelasan
Cetak (
!
) semua kecocokan unik (@
), tumpang tindih (&
) dari regex(.)+.?(?<-1>\1)+(?(1)^)
. Ini cocok dengan palindrome dengan panjang 2 atau lebih menggunakan kelompok penyeimbang. Ada peringatan untuk bagian "semua pertandingan yang tumpang tindih": kita bisa mendapatkan paling banyak satu pertandingan per posisi awal. Namun, jika dua palindrom dengan panjang yang berbeda mulai pada posisi yang sama, palindrom yang lebih pendek akan muncul lagi di ujung palindrom yang lebih panjang. Dan karena keserakahan dari+
prioritises cocok lebih lama, kita tetap mendapatkan semua palindrom.sumber
05AB1E ,
1110 byteCobalah online!
sumber
1›
ke≠
. :)Perl, 112
sumber
JavaScript (ES6), 120 byte
Fungsi ini mengambil string sebagai input dan output array.
sumber
Clojure, 81 byte
for
adalah pasangan yang sempurna di sini :) Dapat digunakan:when(=(reverse p)p)
jika input adalah daftar karakter ATAU string penuh tidak dihitung sebagai palindrom, sebenarnya dalam hal itu kisaran maksimumi
bisa(count %)
juga.Kasing paling ringkas untuk referensi:
sumber
Python, 83
102karakterFrasa
(t[1:]or())and...
ini setara dengan(...)if t[1:]else()
dan menyimpan satu karakter! Saya terlalu bangga dengan ini, mengingat penghematannya.Contoh:
sumber
Scala 127
Untuk menjaga agar perbandingan apel dengan apel ini dengan jawaban Scala lainnya, saya juga menjadikan saya objek yang memperluas Aplikasi. Daripada mengulangi string input secara manual dan menggunakan substring, saya meningkatkan sliding () untuk membuat urutan semua substring untuk saya.
sumber
Scala 156
170sumber
Perl 6 ,
3532 byteMenguji
Menguji
Diperluas:
sumber
Kelapa , 69 byte
Cobalah online!
Python 2 , 73 byte
Cobalah online!
sumber
Jelly , 9 byte
Cobalah online!
sumber
APL (Dyalog Classic) , 27 byte
Cobalah online!
sumber
∪w/⍨≡∘⌽¨⍨w←⊃,/1↓(⍳∘≢,/¨⊂)
tersebut valid.Japt , 14 byte
Cobalah online!
Penjelasan:
sumber
PowerShell , 99 byte
Cobalah online!
Kurang bermain golf:
sumber
Brachylog , 11 byte
Cobalah online!
(Header di tautan rusak pada saat posting, jadi inilah predikatnya (fungsi-setara di Brachylog) hanya pada case uji pertama, dengan
w
di bagian akhir untuk benar-benar mencetak output.)Saya merasa ada cara yang lebih pendek untuk memeriksa bahwa panjangnya lebih besar dari 1. (Jika tidak menyaring palindrom sepele, itu hanya akan menjadi
{s.↔}ᵘ
.)sumber
APL (NARS), 65 karakter, 130 byte
uji:
itu seseorang yang tahu lebih baik mengapa, dan dapat menjelaskan ini lebih baik, bebas dari perubahan ini semua ... Saya tidak begitu yakin dengan kode ini, mungkin jika contoh uji lebih banyak, ada yang salah ...
sumber
Japt , 9 byte
Cobalah
sumber
Java 8,
202201199 byteCoba di sini.
Jika fungsi tidak diizinkan dan program lengkap diperlukan, itu
256256253 byte sebagai gantinya:Coba di sini.
Penjelasan:
sumber
JavaScript (ES6), 107 byte
Mengembalikan Set .
Uji kasus
Tampilkan cuplikan kode
sumber