Pegolf malam yang baik!
Tantangan Anda adalah sepenuhnya membatalkan serangkaian angka.
Memasukkan
Tepatnya 100 bilangan bulat akan diumpankan ke program Anda. Program Anda dapat menerima input baik sebagai file, atau melalui stdin. Setiap integer akan dipisahkan oleh karakter baris baru.
Ke-100 bilangan bulat itu akan berkisar dari nilai minimal hingga maksimal dari bilangan bulat yang ditandatangani dalam bahasa pilihan Anda.
Tidak akan ada nilai duplikat. Nilai-nilai dapat dipesan, tidak disusun atau dipesan sebagian - program Anda harus dapat menangani setiap kasus.
Keluaran
Output harus masing-masing dari 100 bilangan bulat, benar-benar tidak disortir, masing-masing dipisahkan oleh karakter baris baru. Outputnya bisa melalui stdout, atau ke file.
Benar-benar Tidak Disortir berarti bahwa tidak ada nilai yang bersebelahan dengan nilai apa pun yang akan berdekatan jika daftar itu sepenuhnya diurutkan dalam urutan yang diurutkan.
Skor
1 poin per karakter, dan skor terendah menang. Ada bonus -100 untuk solusi apa pun tanpa menggunakan fungsi sortir bawaan atau pustaka. Ada bonus -20 untuk solusi apa pun yang menggunakan fungsi angka acak bawaan.
Saya telah mencoba mendefinisikan pertanyaan ini selengkap mungkin. Jika Anda memiliki pertanyaan, silakan tanyakan. Jika Anda memiliki komentar tentang bagaimana saya dapat melakukan yang lebih baik lain kali, beri tahu saya.
Depan!
sumber
Jawaban:
GolfScript (skor 27 - 120 = -93)
Catatan: itu
$
mereferensikan elemen pada stack. Ada penyortiran, tetapi dilakukan dengan semacam gelembung yang dikodekan secara manual.Terima kasih kepada Howard, untuk -90 => -92; dan Ilmari, yang menginspirasi -92 => -93.
sumber
$
- itu sebabnya saya sebutkan$
di dalam program tidak macam (tergantung konteks). Mayoritas program (28 dari 42 karakter) mendefinisikan fungsi^
; versi pertama, menggunakan bawaan, hanya 14 karakter.2/{~p}%n*
.2/zip~+n*
dan.);\+2%n*
juga melakukan trik untuk jumlah karakter yang sama dengan versi @ Howard. Sayangnya, saya belum berhasil menemukan sesuatu yang lebih pendek.Python -26
(94-120): Baru, pendekatan kasar. Terus popping elemen terendah ke daftar baru untuk mendapatkan elemen diurutkan, lalu iterate:
Python -13
(107-120): Pendekatan pertama: Menghapus empat elemen terendah sekaligus, lalu cetak empat elemen ini dalam urutan lain:
sumber
t=l=[]
danexec't+=[input()];'*100
akan menyelamatkan Anda beberapa karakterexec
pernyataan untuk lebih dari satu putaran.t=l=[]
t dan l menunjuk ke objek yang sama dan tidak berhasil. Melewatkan tanda kurungexec
itu bagus.t=t+[input()];
, ini menciptakan objek baru setiap kali. Dan Anda bahkan dapat melakukan loop cetak dalam pernyataan exec:';i+=1;print l[i*3%100]'*100
.%3
dan menghindari pengulangan100
.C: 11 (131 - 120)
Program membaca dari stdin dan melakukan semacam sisipan sederhana, setelah itu mencetak n bersama-sama dengan nomor n + 50, seperti banyak solusi lainnya.
sumber
Mathematica
-56 44 4(95-120) = -25Edit :
Versi ini tidak bergantung pada fungsi bawaan untuk menyortir daftar, atau fungsi pengacakan.
sumber
Sort
fungsi sortir bawaan?J, -63 (57-120) karakter
Karena semua orang akan melalui rute semacam yang ditulis sendiri ...
Tidak menggunakan fungsi angka acak, atau jenis bawaan apa pun.
Menggunakan semacam seleksi rekursif sederhana untuk mengurutkan input.
sumber
Ruby 1.9, -59
(61-120)
Pengulangan! Yang ini sebenarnya, tidak seperti upaya Ruby saya sebelumnya, batalkan daftar tanpa mempedulikan urutan aslinya.
Upaya sebelumnya
Cute one-liner, sekarang menggunakan sortir bawaan untuk bekerja dengan baik:
Pertama - Tidak perlu membatalkan 4 nilai terakhir:
sumber
Python 2: 90 char
upaya malas tetapi hanya untuk pemula
sumber
Python 48 = (148 - 100)
Belum menguji ini karena tidak dijamin (atau mungkin) berjalan dalam jumlah waktu yang wajar, tetapi harus bekerja secara teori dengan waktu yang tak terbatas.
sumber
x=map(input,['']*100)
[]
, hanya string karakter apa pun.Python 27 (147 - 100 - 20)
Catatan: spasi sebelum
if L[i]>...
harus tab tetapi tampaknya muncul sebagai spasi di blok kode.sumber
R=range
Anda dapat menyimpan 5 karakter.a=map(input,['']*100)
Perl 5: 95 - 120 = -25 karakter
Menghitung baris perintah berikut:
sumber
Ruby: -50 (70 karakter - 120)
Saya melakukan hal yang sama seperti banyak jawaban lain: menghapus secara maksimal maks dan min dari daftar input dan menambahkannya ke output. Namun, saya menyadari bahwa jika 2 angka di kedua sisi median itu berurutan, outputnya akan salah (karena 2 angka berurutan itu akan muncul bersamaan di akhir output). Untuk memperbaiki ini, saya memutar daftar "tidak disortir" tepat oleh 1 elemen:
Atau, untuk bekerja dengan banyak input sembarang (hanya menggunakan 4 karakter lagi):
Catatan: Beberapa jawaban Ruby yang lebih sedikit telah diposkan, tetapi solusi itu tidak mengatasi masalah median (dan / atau mengasumsikan daftar input yang diurutkan).
sumber
J 37 - 100 = -63
Tidak menggunakan penyortiran (meskipun menggunakan peringkat ke atas) Menggunakan angka acak.
Penjelasan:
sumber
Brachylog , 22 byte - 120 = -98
Cobalah online!
TIO link hanya memiliki input delapan bilangan bulat, bukan seratus, karena ini sangat lambat sehingga tidak dapat menangani lagi dalam 60 detik. Alasan untuk ini adalah bahwa, antara lain, daripada menerapkan beberapa algoritma penyortiran sederhana tapi normal untuk bonus wajib, saya demi singkatnya menggunakan jumlah yang setara dengan bogosort deterministik:
p≤₁
backtracks melalui setiap permutasi input sampai menemukan satu yang tidak menurun. Walaupun alasan yang lebih besar mungkin adalah bahwa ia menggunakan tingkat yang sama dari brute force untuk menemukan output, dan bahwa itu menghitung ulang versi yang diurutkan setiap kali ... Saya berusaha mengujinya pada input aktual ukuran 100, tapi saya tidak yakin berapa hari lagi.Versi keseluruhan yang lebih baik:
Brachylog , 14 byte - 20 = -6
Cobalah online!
Ini mengabaikan persyaratan I / O kuno untuk singkatnya, dan lalai untuk mengambil bonus -100 sehingga mungkin dapat diuji tanpa superkomputer (meskipun saat menulis ini, saya sudah menjalankannya hanya pada 20 item selama beberapa menit dan itu masih belum memberi saya apa-apa).
sumber
Keempat (gforth) , 79 - 120 = -21 byte
Cobalah online!
Abaikan persyaratan input kuno dan ambil input sebagai alamat di memori tempat nomor disimpan.
Penjelasan
Loop melalui semua angka dari 0 hingga 99. Untuk setiap angka (n):
Lain (n adalah genap):
Keluarkan baris baru
Penjelasan Kode
sumber