Penafian: sementara saya telah berada di situs ini untuk tujuan hiburan untuk sementara waktu sekarang, ini adalah pertanyaan pertama saya, jadi tolong maafkan kesalahan kecil apa pun.
Latar Belakang
Ketika menugaskan kami mengerjakan PR, guruku benar-benar menyebalkan dan menulis semua masalah yang harus kami lakukan secara individual. Karena itu, saya perlu selamanya menyalin masalah mana yang harus saya lakukan. Saya pikir untuk membuat hidup saya lebih mudah, saya akan mengirimnya sebuah program yang bisa membuat daftar masalah tidak memakan banyak ruang.
Saat menuliskan daftar nomor halaman atau masalah, kami menggunakan tanda hubung untuk menunjukkan rentang. Misalnya, 19-21
menjadi 19, 20, 21
. Jika ada celah di antaranya, dua rentang yang dipisahkan koma digunakan: 19-21, 27-31
menjadi 19, 20, 21, 27, 28, 29, 30, 31
.
Saat ini, Anda mungkin berpikir: "ini sepertinya cukup sepele". Sebenarnya, ini sudah dijawab di sini dan di sini .
Namun, ada yang menangkap. Jika kami memiliki rentang dengan digit berurutan yang sama, digit yang diulang dapat diabaikan. Misalnya: 15, 16, 17
menjadi 15-7
, dan 107, 108, 109
menjadi107-9
. Untuk bonus, jika digit terakhir yang sama berturut-turut adalah 1 lebih besar dan digit terakhir batas atas kurang dari atau sama dengan yang lebih rendah, berikut ini dapat dihilangkan (maaf jika itu terdengar membingungkan; mungkin beberapa contoh akan menjernihkannya) . 109-113
menjadi109-3
, karena angka terakhir yang lebih rendah menyiratkan peningkatan tempat 10-an.
Tantangan
Program Anda harus mengambil daftar bilangan bulat melalui input (apa pun standar untuk bahasa Anda, atau fungsi). Anda dapat memutuskan apakah daftar ini dipisahkan oleh koma, dipisahkan oleh ruang, atau sebagai daftar / larik yang sebenarnya.
Output cara terpendek (pertama diurutkan berdasarkan jumlah rentang, maka jumlah karakter termasuk dalam rentang) untuk mewakili bahwa daftar menggunakan notasi ini. Setiap rentang putus-putus harus di garis yang sama, tetapi rentang dapat dipisahkan dengan koma atau baris baru (trailing baris baru atau koma diizinkan). Rentang ini harus berurutan.
Karena sekolah kami, Wi-Fi sangat buruk , saya harus membuat file sekecil mungkin untuk mengirimkannya kepadanya. Kode terpendek (dalam byte) menang.
Bonus
Guru saya ceroboh, jadi ada beberapa hal yang akan membantunya. Beberapa bonus menumpuk melalui perkalian, misalnya bonus -10% (x 90%) dan bonus -25% (x 75%) = 90% * 75% = x 67,5% (-32,5% bonus).
- Terkadang dia menempatkan mereka dalam urutan yang salah (dia bukan guru matematika). Ambil bonus -20% jika program Anda dapat menerima bilangan bulat yang tidak diurutkan paling tidak hingga terbesar.
- Buku kami aneh, dan setiap bagian mulai menghitung masalah pada -10. Jika program Anda dapat menerima angka negatif, ambil -25%.
- Jika ia menerima bonus dari digit terakhir yang lebih rendah yang meningkatkan tempat 10, misalnya
25-32
mengurangi menjadi25-2
, ambil bonus -50%.
Uji Kasus
In: 1, 2, 3, 4, 5
Out: 1-5
In: 3, 4, 5, 9, 10, 11, 12
Out: 3-5, 9-12
In: 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160
Out: 149-60
In: 1 2 3 4
Out: 1-4
For bonuses:
In: 109, 110, 111, 112, 113
Out: 109-3
In: 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29
Out: 19-9
In: -3, -2, -1, 0, 1, 2
Out: -3-2
In: -3, -2, -1
Out: -3--1
Jawaban akan diterima pada hari Sabtu, 19 Desember 2015.
GLHF!
1-4 9-2
?149 150 151 152 153 154 155 156 157 178 159 160
?19-9
untuk19,20,...,29
dan bukan19-29
seperti yang tersirat dalam teks. Jadi mana yang benar?Jawaban:
LabVIEW, 97 * 0.8 * 0.75 * 0.5 = 29.1 Primview LabVIEW
ini bekerja dengan menghitung ke atas jika suksesi elemts adalah 1 terpisah dan kemudian membuat string dari nomor dan jumlah - menghitung modulo 10 dan beberapa multiplikasi menyebabkan negatif adalah menyebalkan.
Gif menampilkan input
8,9,10,11
dan output8-1
. Untuk input-5,-4,-3,1,3,4,5
-5--3,1,3-5
keluar.sumber
C ++ 11, 451 * 80% * 75% * 50% = 135,3 byte
Disimpan 9 byte berkat @ kirbyfan64sos.
Disimpan 19 byte berkat @JosephMalle dan @cat.
Disimpan 11 byte berkat @ pinkfloydx33.
Ini memenuhi syarat untuk semua bonus.
Pengujian dan hasil parameter sampel:
sumber
int
bukanunsigned int
? Menghemat 9 byte.gcc
memberi:a.cpp: In function ‘std::string f(std::vector<int>)’: a.cpp:8:83: error: ‘to_string’ was not declared in this scope
-std=c++11
; > = 5.0 mengaktifkannya secara default (sebenarnya itu-std=gnu11
, tetapi cukup dekat).Ruby,
120118 * 0.8 * 0.75 * 0.5 = 35.4 bytesMengambil argumen baris perintah sebagai input (koma tidak masalah); mencetak satu rentang per baris ke output standar.
Dengan spasi / komentar:
Uji kasus
Fitur yang tidak dicakup oleh kasus uji
Input & rentang elemen tunggal tidak berurutan:
Rentang negatif (tidak mungkin untuk menyingkat angka yang lebih besar dengan ini):
Singkatan dari angka angka yang berubah-ubah (ekspansi bash biasa digunakan untuk input di sini):
sumber
((n=c.shift-1)>m)
denganm<n=c.shift-1
Javascript ES6, 229 * 80% * 75% * 50% = 68,7 byte
Input Uji
Saya menggunakan data tes berikut:
Dasar: 229 byte
Versi ini memenuhi persyaratan pertanyaan (a) dengan semua bonus (c, d, e), tetapi tergantung pada satu halaman. Itu juga dapat menangani duplikat (f). Ini menangani halaman negatif hingga -10.000, yang dapat dengan mudah ditingkatkan dengan kehilangan kecepatan (besar).
(Output di atas menunjukkan spasi alih-alih baris baru aktual untuk singkatnya)
Halaman tunggal: 233 byte
Versi yang sedikit lebih panjang ini memenuhi (e) dan menampilkan satu halaman sebagai rentang dengan batas bawah dan atas yang sama
sumber
GAP , 355 Bytes * 0.8 * 0.75 * 0.5 = 106.5
Ini memuaskan semua bonus. Harganya hampir 100 byte ekstra untuk membuat semuanya bekerja dengan baik. Fungsi ini hanya menghilangkan digit terdepan jika celah tidak meluap satu kali. Misalnya
9 10 11
output9-1
tetapi9 10 11 12 .. 20 21
output9-21
.Jika GAP sedikit kurang bertele-tele, saya bisa mendapatkan ini cukup pendek (juga bisa menyelamatkan banyak byte jika saya tidak mengikuti sintaks yang tepat.) Saya mungkin akan mencoba bermain golf ini sedikit lebih keras besok. Lihat di bawah untuk kasus uji.
ungolfed:
Perhatikan bahwa dalam sintaks GAP,
[a..b]
setara dengan[a,a+1,...,b]
. Saya percaya bahwa test case ini menunjukkan bahwa program ini memenuhi semua persyaratan. Jika ada sesuatu yang salah, beri tahu saya.sumber
Lua, 322 * 80% * 75% * 50% = 96,6 Bytes
Akhirnya dilakukan dengan 3 tantangan, Skor di bawah 100 byte: D
Golf
Tidak disatukan
Anda dapat menguji lua online , untuk melihat kinerjanya terhadap kasus uji, salin tempel fungsi, diikuti oleh kode ini:
sumber
Java, 252 * 80% * 75% * 50% = 75,6 byte
Saya telah memutuskan untuk menggunakan metode (jauh lebih kecil di Jawa), ini adalah versi golfnya:
Golf
Dan ini adalah versi yang dapat dibaca:
Ketika diuji ini hasilnya:
Keluaran:
Memperbarui:
Sekarang dapat menangani angka negatif juga, menambah bonus.
sumber
p=s=c=0;c--;
menjadip=s=0;c=-1;
?c=~(p=s=0)
untuk poin gaya.Japt, 127 byte * 80% * 75% * 50% = 38.1
Wow, itu salah satu tantangan untuk memasukkan semua bonus. Mungkin bisa dibuat lebih pendek.
Cobalah online!
Bagaimana itu bekerja
Penjelasannya sangat kasar; jangan ragu untuk mengajukan pertanyaan yang mungkin Anda miliki.
sumber
R, 167 byte x 80% x 75% x 50% -> 50.1
Diindentasi, dengan baris baru:
Kasus uji:
Ini bekerja untuk bonus -50%:
Ia menerima input yang tidak disortir:
Ini menerima angka negatif:
sumber
sh, 135 * .8 * .75 * .5 = 40.5
skrip shell
naskah awk
di mana
s
awal dari urutan saat ini dano
merupakan nilai input sebelumnya.sumber
-31, -30, -29, -28
kenaikan tempat 10 ini dari-3
ke-2
dan oleh karena itu harus kental untuk-31-8
. Saya juga melihat ambiguitas yang diciptakannya, tetapi itulah yang diminta.