Tantangan:
Buat fungsi yang menemukan palindrom terpanjang di dalam string.
Catatan: Ini adalah pertanyaan troll kode . Tolong jangan menganggap pertanyaan dan / atau jawaban dengan serius. Informasi lebih lanjut di sini .
code-trolling
Joe Z.
sumber
sumber
code-trolling
juga tag favorit saya yang baru.Jawaban:
Pergi
Solusi berikut di Go menggunakan kekuatan tersembunyi dari konkurensi, penutupan, dan rekursif untuk menemukan palindrom terpanjang di dalam string yang diberikan:
Selain itu, sepenuhnya bergantung pada bahasa primitif dan tipe built-in - tidak ada perpustakaan standar - itulah cara Anda mengenali perangkat lunak berkualitas sejati.
Anda mungkin ingin mengubah utas, memori, dan batas ukuran tumpukan sedikit untuk string input yang lebih besar - ini karena solusi ini sangat cepat sehingga OS Anda akan merasa cemburu karenanya.
Edit - Perks:
lebih dari 160002049186 goroutine menelurkan untuk input"345345ABCDEabcde edcbaDEABC12312123"
sumber
Python
Contoh penggunaan:
Catatan: ini hanya dapat berfungsi untuk string tertentu.
sumber
Jelas, memeriksa Palindrom sulit.
Jadi solusinya cukup sederhana - hasilkan satu set setiap Palindrome yang mungkin sama besarnya dengan string yang Anda uji, dan lihat apakah string Anda mengandungnya.
C #
(Saya mungkin perlu memeriksa kode saya untuk kebenaran, tetapi sebaliknya itu cara yang sangat tidak efisien untuk memeriksa Palindrom)
sumber
Perl
Apakah semuanya meminta. Ini sebenarnya lebih baik, karena memperhitungkan setiap kemungkinan berikutnya . Apa yang menangkap? Ini beroperasi dalam waktu eksponensial, sehingga setiap karakter tambahan dalam string menggandakan waktu berjalan. Berikan lebih dari 20 karakter, dan itu akan memakan waktu seharian.
Input:
iybutrvubiuynug
. Output:ibutubi
.Input:
abcdefghijklmnopqrstuvwxyzzyxwvutsrqponmlkjihgfedcba
. Output: tidak akan terjadisumber
Masalah Anda mudah diselesaikan dengan ekspresi reguler, seperti pada gambar di bawah ini (tapi saya memutuskan untuk menggunakan java sebagai gantinya). Ini terjadi karena regex selalu merupakan alat terbaik yang dapat digunakan untuk apa pun yang melibatkan mengekstraksi atau menganalisis teks.
Kode ini jahat karena:
sumber
Python
Ini mengambil string, dan mengatur ulang ke palindrome terpanjang yang tersedia.
Sebagai contoh:
Input: Halo
Ouput: lol
sumber
interpretasi bioinformatika
Bung pertanyaan yang sangat keren!
Palindrom dalam bahasa normal tidak sepenuhnya ditentukan dengan jelas, misalnya jika ruang diizinkan atau tidak. Jadi tidak jelas apakah ini harus diizinkan sebagai palindrom atau tidak:
Ngomong-ngomong, saya pikir Anda mengacu pada makna ilmiah palindrom yang lebih spesifik: Agar urutan nukleotida dianggap sebagai palindrom, untaian komplementernya harus membaca sama di arah yang berlawanan. Kedua untai yaitu untai pergi dari 5 'ke 3' dan untai komplementer dari 3 'ke 5' harus saling melengkapi (lihat di sini ).
Ada beberapa penelitian yang dilakukan untuk pengenalan urutan palindrome dan saya pikir Anda harus benar-benar membaca setidaknya ini . Untuk mengatasi masalah Anda, Anda bisa menyalin pendekatan mereka! Profesor itu bahkan mengirimkan kode sumber jika Anda bertanya kepadanya.
Nah, sekarang untuk masalah yang dihadapi. Misalkan Anda memiliki urutan nukleotida yang diberikan sebagai string karakter. Cara terbaik untuk menemukan palindrom dalam urutan seperti itu adalah dengan menggunakan algoritma standar. Saya pikir taruhan terbaik Anda mungkin menggunakan alat online ini: http://www.alagu-molbio.net/palin.html
Karena Anda diharuskan untuk menyediakan fungsi yang melakukan tugas tersebut, Anda perlu memikirkan cara memasukkan string ke aplikasi ini? Nah, di sana kesenangan dimulai. Saya pikir Anda bisa menggunakan selenium untuk itu. Karena saya tidak ingin melakukan pekerjaan rumah Anda, saya hanya memberi Anda ide dasar. Di Jawa, dunia Anda mulai seperti ini:
Jika Anda tertarik pada palindrom bahasa, Anda dapat menggunakan teknik yang sama dengan layanan web lain seperti http://www.jimsabo.com/palindrome.html atau http://calculator.tutorvista.com/math/492/palindrome-checker .html
teknik kode-troll
hilangkan sumber yang benar-benar bermanfaat seperti http://rosettacode.org/wiki/Palindrome_detection
menarik tapi tidak membantu tentang bioinformatika
sengaja salah paham ini sebagai tugas bioinformatika
kecurangan - untuk memecahkan masalah layanan web digunakan
sumber
Python
String "palindrome terpanjang" diekstraksi dari docstring menjadi
longest_palindrome
.The
reversed()
mengembalikan fungsi iterator, sehinggareversed(substring) == substring
tidak akan pernah menjadi kenyataan danlongest_palindrome
tidak akan pernah ditimpa.Oleh karena itu, fungsi ini secara harfiah akan menemukan "palindrom terpanjang" di dalam string.
sumber
Javascript
Oh, itu mudah;). Ini dia:
:)
sumber
Ruby - Brute Force (Dioptimalkan dan Monkeymized!)
Saya menemukan cara terbaik untuk melakukan ini adalah melalui Algoritma Monyet terkenal, Anda mungkin dapat menemukannya di BOOST. Mereka selalu punya cara membuat Anda berbicara ...
Ini sangat tidak efisien, tetapi lebih lucu dan seperti ruby jika Anda mengubah nama semuanya menjadi nama aslinya: MaxMonkeys = len; MonkeyTalk = hasil, MonkeySpeed = strlen; monkeyA: a; monkeyB: b; getMonkeys: getMaxPalindrome.
Ini tidak ada nilainya bagi OP dan berisiko dia memutuskan untuk benar-benar berinteraksi dengan C, dan kita semua tahu bagaimana itu berakhir ...
sumber
Python 2.7
Saya menolak untuk menggunakan fungsi standar, karena tidak efisien. Semua orang tahu bahwa cara terbaik untuk mencari panjang adalah dengan memiliki tabel untuk referensi, jadi saya membuat tabel dari semua palindrom yang mungkin, dan mengurutkannya menggunakan bogosort pythonic, tetapi untuk meningkatkan efisiensi, saya menghapus duplikat terlebih dahulu . Pada saat itu, saya menghitung semua item yang merupakan palindrom, dan mengurutkannya berdasarkan panjangnya. Anda kemudian dapat mengambil panjang terakhir dalam daftar, yang memiliki pencarian O (n) dengan mengulangi daftar.
Kode:
Catatan
Tidak cocok untuk string yang lebih dari 4 karakter. Apakah "abba" baik-baik saja, tetapi saya pergi dan membeli kopi dan makan siang sebelum itu abcba
Masalah:
Penamaan variabel gila (dan juga tidak konsisten)
Pilihan algoritme yang membosankan (Hitung semua permutasi yang mungkin dari setiap substring dari string yang diberikan, periksa apakah itu palindrom, urutkan berdasarkan panjang dan cari nilai terakhir)
Sebenarnya berisi solusi untuk masalah tersebut
Algoritma sorting bodoh (bogosort) dan metode nutjob untuk memastikan daftar diurutkan.
Juga, ada kesalahan lekukan dalam pemeriksaan duplikat yang sebenarnya tidak melakukan apa-apa, itu hanya buang-buang waktu.
sumber
C
Menemukan palindrom adalah operasi yang sulit *, jadi harus dilakukan dengan kode yang sangat optimal. Berikut adalah lima trik pengoptimalan yang akan membantu menemukan solusi lebih cepat.
if this else that
formulir. (Ketika Anda melangkah lebih jauh dalam karir Anda, Anda harus menguasai Prediksi Cabang jika Anda ingin menjadi ninja kode sejati.) Kode ini menghindariif
masalah percabangan dengan menggunakanfor
pernyataan, yang memberi Anda 3 instruksi untuk harga satu.Tapi jangan berhemat pada nama variabel, keterbacaan itu penting.
* Palindrome-Bukan Palindrome
Selain troll yang jelas dalam komentar, ada beberapa masalah lain. Algoritme pencarian adalah implementasi yang valid dari Boyer-Moore-Horspool, tetapi tidak pernah menyimpan panjang string, sebaliknya memanggil strlen sesuatu seperti N * M kali, membuatnya jauh lebih lambat daripada pencarian sederhana. "Mencari string terpanjang lebih dulu" adalah benar, tetapi setelah itu tidak mencari berdasarkan urutan panjang, jadi keluar awal akan memberikan jawaban yang salah, jika itu diterapkan. Tapi tidak, jadi itu mencari semua N! kemungkinan pula. Dan hampir semua nama parameter (jarum / tumpukan jerami; src / dest) dibalik dari arti standarnya.
sumber
Inilah yang saya miliki sejauh ini di VB6:
Tapi saya pikir itu tidak berhasil, dan saya pikir saya bisa membuatnya lebih baik.
sumber
Inilah solusi Java untuk Anda:
sumber
AutoHotkey
Fungsi mengembalikan spasi juga karena mereka adalah bagian dari urutan palindrome dalam string. Jadi pengembalian di atas
<space>abcdedcba<space>
.sumber
Poliglot
Ini trolling karena meminta untuk "menemukan palindrom terpanjang dalam sebuah string", sehingga ia menemukan palindrom terpanjang dalam "string"
sumber
Saya tidak pernah tahu string dapat berisi palindrom, dapatkah Anda menunjukkan di mana Anda belajar ini? Dan jika Anda membutuhkan palindrome terpanjang, silakan kunjungi situs ini: http://www.norvig.com/pal2txt.html
sumber
Iterasi setiap karakter string. Kemudian periksa karakter sebelum dan sesudah karakter itu. Kemudian karakter dua sebelum dan dua setelah karakter itu. Terus ulangi sampai Anda mendapatkan karakter yang tidak sama. Ini akan memungkinkan Anda untuk mengidentifikasi panjang setiap palindrom dalam kata. Namun metode ini hanya akan bekerja untuk palindrom dengan panjang ganjil. Untuk memeriksa palindrom dengan panjang genap, periksa karakter di posisi i dan i-1, lalu i +1 dan i-2, lalu i + 2 dan i-3, dll. Semoga ini bisa membantu !!
sumber
Jawaban yang jelas adalah membandingkan string dengan kebalikannya sendiri dan menghitung urutan umum terpanjang.
Program Perl berikut tidak hanya itu. Anda mungkin perlu mengunduh modul Acme :: DonMartin, biasanya tidak diinstal secara default.
sumber
Lua / Python
Lua adalah bahasa yang sangat cepat (yang Anda butuhkan, karena ada banyak substring yang harus diperiksa!), Tetapi Python lebih baik dengan penanganan string. Jadi mengapa tidak menggunakan keduanya?
Karena saya pernah mendengar ada baiknya memiliki variabel lokal, saya punya satu. Juga, saya telah memisahkan fungsi panggilan dari argumen mereka, karena terlalu banyak argumen membuat ekspresi berantakan dan tidak dapat dibaca.
Juga, saya pikir ini akan bekerja dengan string apa pun yang ingin Anda coba, mungkin tidak akan ada masalah dengan input aneh apa pun.
(BTW, Anda tidak akan percaya berapa lama ini membuat saya berhasil.)
sumber
Python one-liner:
sumber
Python - 126 Karakter
Inilah saya saat ini:
Ini berfungsi baik dalam Python 2.x dan 3.x, saya percaya. Variabel k memegang jawabannya.
EDIT: Saya lupa mengatakan, p variabel harus memegang string untuk memeriksa palindrom.
Ini adalah implementasi yang sah, jadi itu akan bekerja untuk string apa pun.
sumber
Jawa
Jelas jika
aString
itu sendiri adalah palindrom makaaString
palindrom terpanjang di dalamnyaaString
. Anda bisa tahu itu bekerja dengan pernyataan pernyataan. Jangan terlalu memikirkan baris pertama dari kode yang dapat dieksekusi. Itu hanya standar java boilerplate.sumber
Bahasa Game Maker
sumber
Fortran
String terlalu sulit untuk dikerjakan di Fortran, jadi saya memilih untuk menggunakannya
iachar
untuk mengonversi semuanya menjadi bilangan bulat:Ini tidak bekerja. Mengingat tali
aabbaac
itu mengatakan yang terpanjang adalahaa
, tetapi mengingat taliacasdabbbaabb
, ia mengatakan yang terpanjang adalahabbba
. Cukup dekat.sumber
bbaabb
lebih lama di yang kedua.Anda tidak dapat bersaing di pasar saat ini hanya dengan melakukan apa yang diminta. Kode ini juga akan menemukan palindrom terpendek dan tidak sensitif huruf:
sumber
Lua
sumber
Implementasi Python paling efisien yang mengalahkan semua upaya lain:
Catatan:
Ini akan selalu menemukan "palindrom terpanjang"
Ini sensitif huruf.
Dengan beberapa modifikasi juga dapat dilakukan untuk menemukan string lain. Namun, Anda harus membuat kelas, menambahkan metode yang sesuai dan kemudian membuat subkelas untuk setiap string yang ditemukan.
Fungsi ini dapat ditingkatkan dengan porting ke FORTRAN 77 atau hard-coding ke kode mesin Intel 8008.
sumber
Ini adalah jawaban trolling kode pertama saya. Itu bukan troll yang sangat brutal, itu hanya menurutku cara konyol untuk menjawab pertanyaan itu
Troll adalah:
sumber
Python 3
Program yang sangat efisien. Ini mencari palindrom panjang dengan pusat di posisi berurutan (di char dan di antara) dan pilih terpanjang
sumber