Guru saya selalu memberi saya satu set masalah matematika yang paling rumit untuk pekerjaan rumah. Seperti: pg. 546: 17-19, 22, 26, pg. 548: 35-67 odd, 79, 80-86 even
. Dan saya ingin tahu sebelumnya berapa banyak waktu yang harus saya sisihkan untuk pekerjaan rumah saya, tetapi saya tidak ingin harus mencari tahu semua itu. Itu sebabnya tugas Anda untuk memprogramnya untuk saya.
Spesifikasi
- Anda akan mendapatkan string yang merinci masalah yang harus saya selesaikan sebagai args, stdio, dll.
- Mereka akan dipisahkan koma (mungkin
comma-space
dipisahkan) - Ini akan mencakup masalah tunggal dalam bentuk hanya angka (misalnya
79
) - Dan rentang dalam bentuk
17-18
(sekali lagi, Anda harus berurusan dengan ruang opsional) - Rentang ini termasuk kedua ujungnya
- Rentang opsional akan diakhiri dengan
odd
ataueven
, yang harus Anda perhitungkan. - Satu set rentang / halaman akan didahului dengan nomor halaman dalam formulir
pg. 545:
, sekali lagi harus berurusan dengan spasi opsional. Anda dapat mengabaikan ini dengan aman, karena Anda perlu mendapatkan masalah di semua halaman - Teks mungkin dalam huruf besar atau kecil, tetapi tidak akan keduanya.
- Kembali, stdout, dll. Sejumlah masalah yang harus saya lakukan untuk pekerjaan rumah.
- Karena ini adalah kode-golf , kode terpendek dalam byte menang!
Uji Kasus
pg. 546: 17-19, 22, 26, pg. 548: 35-67 odd, 79, 80-86 even -> 27
pg. 34: 1 -> 1
PG. 565: 2-5,PG.345:7 -> 5
pg. 343: 5,8,13 - 56 even,pg. 345: 34 - 78,80 -> 70
pg.492: 2-4 odd,7-9 even -> 2
code-golf
natural-language
Maltysen
sumber
sumber
2-4 odd
? Tampaknya menyebabkan beberapa masalah untuk pendekatan yang lebih sederhana.pg.492: 2-4 odd,7-9 even -> 2
22-26,25-30
?Jawaban:
CJam,
6158514846434138 byteVerifikasi kasus uji dalam juru bahasa CJam .
Bagaimana itu bekerja
sumber
Perl - 47 Bytes
Diubah untuk lulus uji kasus baru.
Asli
Perl - 36 Bytes
Menghitung shebang sebagai 4, input diambil dari stdin.
Contoh Penggunaan
Peringatan
Untuk rentang genap / ganjil, diharapkan setidaknya satu titik akhir cocok dengan paritas rentang. Sebagai contoh,
11-19 odd
,11-20 odd
, dan10-19 odd
semua akan benar dihitung sebagai 5, tapi10-20 odd
akan lebih-dihitung sebagai 6.sumber
pg. 20: 13-15 even
? ataupg. 20: 13-14 even
?*
adalah satu karakter lebih pendek dari&&
, membuat peningkatan yang mudah:$\+=/\d+ ?-/*($'-$&>>/o|e/i)+1for@F}{
lc=~
.T^
bagian itu, tetapi entah bagaimana melewatkan itulc
mengubah kasus$'
. Bertambahlc
ke$'
akan sedikit lebih pendek. Itu masih harus bekerja untuk kedua pendekatan:lc$'!~(T^lc$_%2)
atau($_%2x9^lc$')!~T
!~T
jenius, terima kasih!Python 2,
259253249239 byteCoba di sini
Ini mungkin masih bisa lebih banyak golf.
Sunting: Memperbaiki bug yang menyebabkan pekerjaan saya tidak berfungsi
2-4 even
seperti yang saya harapkan. Kemudian buat penyesuaian untuk perbaikan itu. Perbaikan itu menyelamatkan saya empat byte!Sunting: Sekarang menggunakan
input()
dan +2 byte untuk dua tanda kutip yang harus dikelilingi input oleh pengguna.Kurang bermain golf (dengan komentar!: D):
Saya harap komentar ini membantu. Saya masih tidak yakin apakah saya menjelaskan garis kompleks terakhir dengan benar atau tidak.
sumber
s=raw_input()
dan menghapus beberapa indentasi.Pyth,
43424442 byteCobalah secara online: Demonstrasi atau Uji harness
Saya pikir saya masih bisa memotong satu atau dua byte.
Penjelasan
sumber
JavaScript (Konsol Spidermonkey) - 139
Hanya lebih mudah untuk menguji pada baris perintah.
Tidak Disatukan:
sumber
[,from,to]
begitu saja[from,to]
?r.exec
, yang berisi seluruh string yang cocok.Faktor - 488 byte:
sumber
Bash
344 315 306 294 262 252 242240Saya tidak berpikir saya telah bermain golf ini sebanyak mungkin tetapi tidak buruk untuk pengiriman pertama. Versi yang dikomentari di bawah ini.
Jalankan uji kasus:
Bergantung pada bagaimana saya membaca aturan itu, dimungkinkan untuk menyimpan 4 byte lagi. Jika genap / ganjil selalu huruf kecil
${1,,}
dapat diubah menjadi$1
sumber
JavaScript ( ES6 ), 149
Jalankan cuplikan di Firefox untuk menguji
sumber
C ++
226224222Saya tahu saya agak terlambat ke pesta, tapi ini sepertinya masalah yang menyenangkan dan kurangnya entri menggunakan bahasa C-family mengganggu saya.
Jadi, inilah fungsi C ++ yang tidak menggunakan regexp atau substitusi string, hanya beberapa matematika sederhana:
Tidak Disatukan :
Saya tidak mengatakan itu akan dapat dibaca, bukan? :) Operator ternary adalah neraka. Saya mencoba yang terbaik untuk (semacam) memformatnya, jadi saya harap ini membantu setidaknya sedikit.
Penggunaan :
sumber
Python 2 - 163 byte:
Coba di sini
Masukan harus diberikan di dalam tanda kutip
Penjelasan:
Pendekatan umum adalah mengubah input yang ada menjadi python yang valid, kemudian mengevaluasi ini. Setiap nilai yang dipisahkan koma dikonversi ke array, yang kemudian semuanya ditambahkan bersamaan dan panjangnya memberikan hasil akhir.
Misalnya, dengan input
12-15 odd,19
, sebelum evaluasi substitusi regex akan menghasilkan:Untuk memecah ini lebih lanjut:
15+1 if 15.0 else 12+1
Bit ini akan memastikan argumen kedua range () benar tergantung apakah ada range atau nilai tunggal yang diberikan (jika \ 3 kosong, \ 3.0 akan dievaluasi menjadi false).if x%2!="oe".find("o")
Bergantung pada nilai yang ditemukan dua karakter dari digit terakhir dalam rentang ((?=.(.))
di regex - lihat dua karakter tanpa mengkonsumsinya), ada tiga kemungkinan hasil:x%2!="oe".find("o")
mengevaluasi kex % 2 != 0
(hanya ganjil yang cocok)x%2!="oe".find("e")
mengevaluasi hinggax % 2 != 1
(hanya genap cocok)x%2!="oe".find("[")
mengevaluasi kex % 2 != -1
(karakter ini bisa beberapa hal karena hanya dua karakter dari digit terakhir, tetapi hanya akan menjadi o atau e jika ganjil / genap dimaksudkan)sumber