Bulan lalu saya meminjam banyak buku dari perpustakaan. Mereka semua adalah buku yang bagus, penuh dengan emosi dan plot-twists. Sayangnya, pada beberapa titik saya menjadi sangat marah / sedih / kecewa, jadi saya merobek beberapa halaman.
Sekarang perpustakaan ingin tahu berapa banyak halaman yang telah saya buat untuk setiap buku.
Tujuan Anda adalah untuk menulis sebuah program, yang mengambil daftar angka yang diurutkan, dibatasi koma sebagai input dan mencetak jumlah halaman minimum dan maksimum yang mungkin bisa saya singkirkan. Setiap baris mewakili buku, setiap nomor mewakili halaman yang hilang dari buku.
Input contoh:
7,8,100,101,222,223
2,3,88,89,90,103,177
2,3,6,7,10,11
1
1,2
Contoh output:
4/5
5/6
3/6
1/1
1/2
4/5
berarti, bahwa saya mungkin telah merobek 4 atau 5 halaman, tergantung pada sisi mana penomoran halaman buku dimulai. Seseorang bisa saja merobek halaman 6/7, halaman 8/9, halaman 100/101, dan halaman 222/223 (4 halaman). Atau, seseorang dapat merobek halaman 7/8, halaman 99/100, halaman 101/102, halaman 221/222, dan halaman 223/224 (5 halaman).
Ingat bahwa halaman buku selalu memiliki sisi depan dan belakang. Penomoran halaman juga berbeda dari buku ke buku. Beberapa buku bahkan memiliki nomor halaman di halaman kiri; beberapa di halaman kanan. Semua buku dibaca dari kiri ke kanan.
Kode terpendek dalam byte menang. Format I / O yang ketat tidak diperlukan. Program Anda harus dapat mengambil satu atau lebih buku sebagai masukan. Selamat bersenang-senang.
4/5
dan5/4
)min/max
atau semuamax/min
. (Meskipun, secara pribadi, saya lebih suka itu tidak menjadi bagian dari spec!)programs must be able to take one or more books as input
memerintah? Sebagian besar (jika tidak semua) hanya akan membungkus kode untuk memverifikasi satu buku menjadi satu lingkaran atau sesuatu. IMHO itu hanya menambah overhead untuk jawaban dengan sedikit atau tidak ada keuntungan dari tantangan. Pertanyaan-pertanyaan ini sudah mendapat banyak jawaban, jadi lebih baik tetap seperti ini, tetapi ingatlah ini untuk Anda di masa depan.1,3,5,7,9,11,13,15,17,18
- untuk kepentingan bahasa yang built-insort
metode macam leksikografis secara default (dengan asumsi kebutuhan output konsisten diurutkan adalah ditambahkan ke spec).Jawaban:
05AB1E , 13 byte
Cobalah online!
Terima kasih kepada Emigna untuk informasi perubahan spec.
Penjelasan
sumber
Python 2 ,
72566867 byteCobalah online!
sumber
JavaScript,
104939285807974 byteAkan menjadi 57 byte jika bukan untuk persyaratan yang tidak perlu (menurut saya) bahwa setiap pasangan angka dalam output secara konsisten diurutkan, atau 47 byte jika kita hanya perlu mengambil satu buku sebagai input.
Input dan output keduanya array array.
Uji kasus
Kasing uji dibagi menjadi masing-masing buku untuk keterbacaan yang lebih baik dengan kasing terakhir (yang mencakup
[1,2]
kasing tepi) berfungsi untuk menggambarkan bahwa solusi ini mendukung banyak buku dalam input.Sejarah
Tampilkan cuplikan kode
sumber
[1,3,5,7,9,11,13,15,17,18]
.[0,.5]
alih menggunakang
ketika saya melihat komentar Anda. Tidak tahu mengapa saya memiliki mental block dengan operator bitwise! Saya berharap bahwa penyortiran output tidak menjadi persyaratan dan tidak ada yang akan melihat saya rusaksort()
sementara itu;) Perlu menyelesaikan beberapa pekerjaan sehingga akan segera kembali untuk memperbarui.y/2
? Apa alasan membagi nomor halaman menjadi dua untuk algoritma ini?Retina 0.8.2 , 60 byte
Cobalah online! Penjelasan:
Ubah nomor halaman menjadi unary.
Gandakan daftar, menempatkan a
/
.Tambahkan nomor halaman dalam satu salinan daftar.
Hitung jumlah halaman, tetapi nomor genap dan ganjil berturut-turut hanya dihitung sebagai satu halaman.
Urutkan hitungan ke dalam urutan.
Konversi penghitungan kembali ke desimal.
sumber
,(?=.*/)¶1,
bisa seperti itu,.*/¶1$&
?Haskell , 62 byte
Cobalah online!
sumber
Your goal is to write a program, which takes a sorted, comma-delimmited list of numbers as input
)Java (OpenJDK 9) , 163 byte
Cobalah online!
Penjelasan
Catatan: karena tidak ada persyaratan tentang itu, jumlah halaman minimum dan maksimum tidak dipesan.
sumber
size
denganadd
di Jawa untuk menyimpan beberapa byte? misalnyas.add(p/2).size
,.APL (Dyalog Unicode) , 37 byte
Cobalah online!
Ini dapat dilakukan untuk kurang dari setengah jumlah byte jika urutan output halaman tidak masalah:
Bagaimana?
sumber
Perl 5 , 95 + 1 (
-a
) = 96 byteCobalah online!
sumber
Bahasa Wolfram (Mathematica) , 37 byte
Terima kasih @MartinEnder selama 8 byte!
Cobalah online!
Penjelasan
Di:
{3, 4, 5}
Ambil (input) dan (input +1).
{{3, 4, 5}, {4, 5, 6}}
Untuk setiap angka dari atas, ambil angka genap terbesar dikurangi.
{{2, 4, 4}, {4, 4, 6}}
Untuk setiap daftar dari atas, bagi daftar dengan elemen yang sama
{{{2}, {4, 4}}, {{4, 4}, {6}}}
dan ambil masing-masing panjang:
{2, 2}
Sortir hasilnya.
sumber
SplitBy
:Length@Split@⌊#/2⌋&/@{#,#+1}&
bekerja. Tapi kemudian itu bahkan lebih pendek untuk melakukan lantai sebelum peta:Length@*Split/@⌊{#,#+1}/2⌋&
. Dan jika Anda suka, Anda bisa mendapatkan jumlah byte yang sama tanpa Unicode:Length@*Split/@{#,#+1}~Floor~2&
Bersih ,
222210204196 byteCobalah online!
Persyaratan program penuh benar-benar membunuh kemampuan Clean untuk bersaing.
Bagi mereka yang telah memperhatikan jawaban saya di Bersihkan, Anda akan melihat
import qualified
, yang merupakan peretasan jelek untuk berkeliling menggunakan modul yang tidak boleh digunakan bersama-sama, bersama-sama - yang hanya diperlukan di sini karena peretasan jelek lain untuk dilakukan denganGenLib
bergantung padaData.Maybe
alih-alihStdMaybe
, yang merupakan hasil dari peretasan jelek lainnya di perpustakaan yang diterjemahkan dari Haskell'sData
untuk mendapatkan fungsionalitas sebelum perpustakaan Clean sendiri sama-sama lengkap.Mengambil input melalui argumen baris perintah.
sumber
Perl, 40 byte
Termasuk
+1
untuka
Output tidak dipesan.
Diasumsikan nomor halaman positif (terutama tanpa halaman)
0
). Anggap halaman yang hilang hanya disebutkan satu kali. Tidak peduli apakah inputnya dipesan atau tidak.Memproses hanya satu buku per jalan menghemat
3
byte untuk37
:sumber