Tentang Code-Bowling:
Dalam golf, Anda mencoba untuk mendapatkan skor terendah (aplikasi terkecil, paling elegan, dll). Di Bowling, Anda mencoba untuk mendapatkan skor tertinggi. Jadi jika Anda mengikuti, tujuan dari tantangan Code-Bowling adalah untuk membuat yang terbesar, paling bastardized, paling sulit untuk mempertahankan potongan kode yang masih memenuhi persyaratan tantangan. Namun, tidak ada gunanya membuat sumber lebih lama hanya untuk kepentingan itu. Perlu terlihat bahwa penambahan panjang itu dari desain dan bukan hanya padding.
Tantangan:
Buat program yang mengurutkan daftar angka dalam urutan menaik.
Contoh:
Input: 1, 4, 7, 2, 5
Output: 1, 2, 4, 5, 7
Kode: Jelas ini bukan jawaban yang baik, karena tidak banyak WTF di sana
function doSort(array $input) {
sort($input);
return $input;
}
Aturan:
Tidak ada aturan nyata. Selama fungsi program, miliki!
Ingat: Ini bowling kode, bukan golf. Tujuannya adalah untuk membuat kode terburuk, paling bastardisasi yang Anda bisa! Poin bonus untuk kode yang terlihat bagus, tetapi sebenarnya jahat ...
sumber
sort(sort(sort(sort(sort(sort(myarray))))))
Dijamin penyortiran sempurna!Jawaban:
Menyortir berdasarkan input pengguna. Apa yang bisa lebih buruk?
Lihat contoh langsung
sumber
Ah, keanggunan Ruby ... self.permutation menghasilkan enumerator. Belum ada salahnya dilakukan. Namun .min yang terlihat polos menghisap enumerator ini menjadi sebuah array. Ukuran array ini meledak ketika jumlah elemen naik. Belum lagi ini akan merusak jenis yang sudah ada sebelumnya.
sumber
Bogosort!
sumber
O(2n random)
Perl Bubble Sort
Saya pergi untuk tampilan "setiap baris terlihat seperti potongan noise yang sama". Baris input pertama (pada STDIN) memberi tahu program berapa jumlah angka, sedangkan jumlah baris N berikutnya berisi satu angka yang perlu disortir.
sumber
Bogog multicreaded generik di Jawa
46 detik untuk mengurutkan 4 angka
Saya pikir itu akan elegan dengan dukungan untuk obat generik. Juga, multithreading selalu baik, jadi saya menggunakannya daripada pengacakan: Program ini menghasilkan satu utas untuk setiap nomor yang akan diurutkan. Setiap utas mencoba memasukkan elemennya ke objek array, dan ketika semua elemen telah dimasukkan, program akan memeriksa apakah array diurutkan. Jika tidak, coba lagi. Tentu saja penyisipan ini perlu disinkronkan.
ElementInserter
Ini akan menjadi kelas yang kami gunakan untuk utas. Kelas ini menampung satu elemen dan mencoba memasukkannya ke
sortedArray
:Diurutkan Array
Olahraga metode memasukkan lurus ke depan. Ketika elemen terakhir telah dimasukkan, ia memeriksa apakah array diurutkan.
Metode utama
Mengurai argumen baris perintah sebagai Integer, membuat array baru dan utas baru untuk setiap Integer:
Uji coba
Waktu pelaksanaan akan tergantung pada urutan asli elemen dan implementasi penjadwal Anda. Ini ada pada dual-core 2,9 GHz Intel i7 MacBook Pro:
sumber
JavaScript (dengan animasi!). 8172 karakter. Beberapa jam untuk 6 angka.
Kami suka lotre, kan? Mirip dengan Bogosort oleh dan04, tetapi menggunakan fisika dan animasi ...
Namun, saya menggunakan sedikit Google Closure Compiler untuk, er ... Saya tidak tahu. Tapi itu terlihat lebih jelek, kan?
Ini seperti salah satu roda toilet, dan setiap kali berhenti itu bertukar dengan angka di tengah. Anda dapat bermain di sini: http://jsfiddle.net/VkJUE/5/ (untuk memahami apa yang saya maksud)
Itu memang berhasil, sedikit, kecuali mungkin butuh berjam-jam untuk 6 angka. Namun, saya mengujinya pada 3 angka dan berfungsi baik!
sumber
Meskipun saya tidak dapat mengambil kredit untuk kode Java ini , Smoothsort adalah contoh yang baik dari tradeoff antara keterbacaan dan kinerja:
(catatan: beberapa komentar dihapus untuk efek dan membuatnya lebih pendek; sumber diambil dari halaman wikipedia yang tertaut di atas)
sumber
The F # "Saya benci pemrograman fungsional":
sumber
Metasort Ruby
sumber
Subprogram Cobol untuk mengurutkan tabel bilangan bulat, dijamin memiliki WTF / menit lebih tinggi daripada bahasa lainnya. Untuk tujuan kinerja, algoritma QuickSort digunakan:
sumber
QwikSort
bukanQuickSort
? (yaitu pembatasan panjang atau Anda tidak dapat menggunakan huruf u dalam nama?) Karena itu akan membuatnya lebih menyenangkan: Phttp://www.jsfiddle.net/sAFMC/
sumber
Python quicksort menggunakan lambda
Sesuatu yang saya tulis di blog saya:
Inilah posting blog yang sebenarnya
sumber
Rubi
sumber
C ++ (4409)
Beberapa hal "buruk" tentang program ini:
Benar-benar keras. :) Saya bisa saja memasukkan angka secara langsung, daripada mengurai string untuk angka.
Menggunakan kelas yang berlebihan. Saya bisa menggunakan yang built-in juga, tapi coder yang buruk hanya akan menemukan kembali roda.
Loop untuk pengurutan sangat tidak efisien. Saya pikir ini adalah cara paling lambat yang mungkin, tanpa membuatnya tampak seperti saya benar-benar mencoba membuatnya lambat. Sebenarnya, bagian "sortir" sebenarnya dari kode hanya seperti 11 baris, termasuk kurung kurawal dan putus garis.
sumber
Yang ini O (n * n!)
Itu mengulangi semua permutasi daftar dan menguji apakah mereka diurutkan. Sangat mengerikan bahwa menyortir hanya 10 item membutuhkan waktu 17 detik
sumber
T-SQL
(SQL Server 2008 R2)
Secara alami, dengan T-SQL, Anda menggunakan "ORDER BY" untuk mengurutkan. Duhhh.
Lihat "ORDER BY"? Itu ada di sana di deklarasi kursor.
sumber
Implementasi Python dari Funnel Sort . Algoritma ini sebenarnya dapat memiliki kinerja cache yang baik ketika diimplementasikan dengan benar, yang dalam hal ini tentu saja tidak (itu, bagaimanapun, urutkan dengan benar).
sumber
Mengurutkan daftar bilangan bulat 32-bit. Ini sebenarnya cukup efisien untuk kebanyakan kasus biasa:
Contoh:
sumber
sumber
sort()
bekerja dengan referensi dan bahkan tidak mengembalikan apa pun ...C ++ , tidak yakin apakah ada nama untuk jenis ini, tapi begini
<ducks for cover/>
sumber
Solusi enterprisey (dalam pseudocode):
sumber
Di Ruby, representasi visual dari " Sort Spaghetti" , dirancang untuk dijalankan di terminal 80 kolom:
Pemakaian:
p sort (1..10).map{rand(100)}
sumber
PL \ SQL - 109 baris
Ini adalah tanggapan terhadap komentar @ eBusiness dalam jawaban @ steenslag. Tidak ada manfaatnya.
Ini memiliki 4 tahap:
Seperti yang Anda lihat itu konyol ... Hal-hal buruk termasuk:
Sebenarnya itu cukup banyak, itu harus sangat cepat.
sumber
Baik pilihan bahasa dan algoritma perlu dijelaskan.
Algoritma ini disebut slow sort. Saya bermaksud untuk mengalahkan omong kosong dari bogosort (uji permutasi acak sampai diurutkan) karena, meskipun secara algoritmik sangat tidak efisien, implementasinya terlalu sederhana dan Anda tidak dapat menjamin kelambatannya.
Saya mengkode Urutan lambat dalam Skema karena tujuan utama Skema adalah sederhana, yang menjadikan ini tantangan yang lebih besar. Fitur yang menarik dari Skema adalah ekstensibilitasnya yang tak terkalahkan; pada kenyataannya, implementasi bahasa umumnya (seringkali sepenuhnya) diimplementasikan dalam Skema itu sendiri. Bahkan lebih baik: yang Anda butuhkan hanyalah abstraksi (lambda) dan aplikasi. Aplikasi dievaluasi dalam notasi awalan:
... hanyalah gula sintaksis untuk:
... yang berlaku fungsi untuk daftar argumen.
Untuk melakukan pemogokan dari bowling kode ini, saya harus mendefinisikan kembali fungsi max untuk membagi daftar secara rekursif sampai dapat membandingkan dirinya sendiri. Fungsi min juga didefinisikan ulang secara rekursif menggunakan max dengan menghapus semua maksimum hingga satu angka tersisa. Akhirnya, pengurutan didefinisikan ulang dengan secara berturut-turut menambahkan minimum.
Sortir lambat didasarkan pada "multiply and menyerah", sebagai lawan dari "bagi dan taklukkan". Ini bekerja dengan menarik secara maksimum secara maksimum sampai Anda dibiarkan dengan minimum, menambahkan minimum yang dihasilkan setiap kali untuk solusi dan memulai kembali sampai semua minimum telah ditambahkan pada gilirannya. Meskipun sama sekali tidak efisien, implementasi saya menggunakan kembali komputasi sebanyak mungkin karena: 1) Diperlukan untuk algoritme 2) Anda mungkin ingin jenis ini berakhir suatu hari ...
sumber
Java dilebih-lebihkan berantakan / berat
Itu tadi menyenangkan! Aneh rasanya memposting sesuatu seperti ini.
sumber
Python
Hanya berfungsi jika semua item kurang dari 9e99 :)
Setiap kali melalui loop, ekstrak elemen terkecil dan ganti dengan 9e99
sumber
Python (634)
Jika daftar diurutkan, cetaklah. Jika tidak, tukar dua elemen yang ada di urutan yang salah, lalu buat skrip python yang menangani orde baru. Setelah menjalankan itu, hapus skrip yang dibuat.
sumber
Bogobogosort dengan Python
Algoritma ditemukan oleh David Morgan-Mar.
Peringatan: jangan coba ini dengan daftar yang lebih besar dari 5 elemen. Bahkan 5 sangat lambat.
sumber
Python
Solusi saya. Termasuk penanganan kesalahan, dan fitur yang mempertahankan spasi ketika menyortir angka, yaitu, spasi tetap di tempatnya; angka bergerak.
misalnya,
Kode:
sumber
Python 3
Program ini menerima daftar angka yang dipisahkan spasi pada input standar. Kemudian akan mencetak output standar pada urutan yang benar. Akhirnya.
Penjelasan: protokol acar sebenarnya memberikan banyak kebebasan, yang paling menonjol adalah kebebasan untuk mengimpor dan memanggil objek sewenang-wenang dengan argumen. Keterbatasan yang paling menonjol adalah bahwa acar VM tidak memiliki kontrol aliran, jadi kode apa pun yang murni diimplementasikan dalam acar VM harus menggunakan kontrol aliran di dalam fungsi pustaka standar python untuk mencapai efek yang sama. Implementasi penyortiran ini menggunakan sleepsort berbasis coroutine yang dibangun oleh aplikasi iterator dan aplikasi parsial.
Kode python yang setara akan menjadi seperti ini:
sumber