Saya yakin Anda tahu tentang skema harga $ 9,99, daripada menggunakan $ 10. Nah, dalam pekerjaan baru Anda sebagai admin sistem di sebuah toko ritel besar, mereka ingin harga mematuhi skema serupa:
- Semua harga dalam dolar penuh, tidak ada sen.
- Semua harga harus diakhiri dengan 5 atau 9, pembulatan ke yang terdekat tetapi naik jika digit terakhir tepat antara 5 dan 9. (Berlaku untuk digit terakhir 2 dan 7)
- Input terendah adalah $ 1, dan harga output terendah adalah $ 5.
Input Anda adalah daftar bilangan bulat:
12
8
41
27
144
99
3
Dan output harus daftar harga baru. Dalam kasus di atas:
15
9
39
29
145
99
5
Jawaban:
Brainfuck, 4428 byte (tidak valid)
Setelah saya tahu algoritme berfungsi, saya kehilangan minat dan tidak menyelesaikan input handler. Itu sebabnya solusi ini secara teknis menyelesaikan masalah, tetapi sangat sulit digunakan. Saat Anda memulai program dengan juru bahasa interaktif (lebih cepat lebih baik), Anda dapat memasukkan "nomor" Anda. Itu harus dimasukkan dalam Base256 jika juru bahasa Anda tidak mendukung konversi nomor (milik saya). Karena itu, harga maksimum yang dapat Anda masukkan adalah 255.
Ini kemudian melakukan perulangan modulo jika angkanya lebih besar dari 9 untuk memisahkan semua digit kecuali yang terakhir. Hasil pembagian disimpan, sedangkan digit terakhir dibulatkan menjadi 5 atau 9. Kemudian ditambahkan dan dicetak. Kemudian program membersihkan semua register yang digunakan (mungkin berlebihan) dan meminta nomor berikutnya.
Ini menangani semua kasus khusus (
$1
,$20/$21 -> $19
dll.). Tonton terus untuk nomornya di4
sini (sekitar 3 menit, video disingkat):Kode
sumber
CJam,
1917 byteUji di sini.
Mengambil input sebagai daftar gaya-CJam dan mengembalikan garis keluaran yang baru dipisahkan.
Penjelasan
sumber
Python 2, 47
Jika kita melihat urutan nilai-nilai bulat, kita melihat bahwa mereka datang dalam blok 5.
Kami menemukan blok nomor apa yang kami pakai
(n+3)/5
(sebut nilai iniJ
). Kemudian, kita mendapatkan kelipatan5
dengan yang benarJ*5
, dan menyesuaikan hal-hal seperti30
turun29
dengan mengurangi1
setiap kaliJ
genap.Untuk
1
pemberian kasus khusus dan5
bukan-1
, kami meneruskan hasilnyamax(5,_)
.sumber
meS,-*hJ/-d2K5K%J2KQ
m-|*K5hJ/-d2K6%J2Q
lambda l:[((n+3)/5*5or 6)-(n-2)/5%2for n in l]
Retina, 32 byte
Menerima input dalam daftar yang dipisahkan koma. Harus ada koma tertinggal. Output dalam format yang sama.
Penjelasan:
sumber
R,
51494743 byteHarus ada ruang untuk meningkatkan ini, tetapi saya pikir strategi yang berbeda mungkin lebih baik. Mengambil vektor bilangan bulat dari pemindaian dan menghasilkan vektor bilangan bulat. Pada dasarnya ini menggunakan divisi integer untuk membulatkan angka ke bawah, menambah 1 dan mengalikannya dengan lima. Apa pun yang habis dibagi 10 telah diambil. Jika n = 1 maka ia menambah pembagian bilangan bulat dengan 1.
Uji coba
sumber
Python 3,
7482 byteSaya berjuang untuk singkatnya nilai kurang dari 11 dan persyaratan untuk 1 untuk mengevaluasi ke 5.
sumber
Pyth,
21182928 byteTerima kasih kepada @Jakube untuk memotong 3 byte!
Coba di sini.
EDIT: Rupanya itu tidak valid. Saya memperbaikinya dengan biaya 11 byte; Saya akan mencoba golf lebih banyak.
sumber
eQ
adalah hal yang sama seperti%Q10
, Anda juga dapat sebaris tugas:I<KeQ6+-QK5;E+-QK9
9
, jika digit terakhir adalah0
atau1
Pyth, 21 byte
Sayangnya saya harus menghabiskan 4 byte untuk menangani $ 1 dengan benar.
sumber
1
dengan hanya 2 byte.mt|t+d@jC"²a<"6ed6Q
Pyth, 18 byte
Cobalah online: Demonstrasi atau Test Suite
Jawaban ini didasarkan pada solusi Python / Pyth @xor. Perbedaan utamanya adalah, saya menangani kasus khusus secara
1
berbeda. Hasil aktual untuk1
menjadi0 - 1 = -1
. Menggunakan Python,or
saya bisa mengganti0
dengan6
, menghasilkan6 - 1 = 5
. Ini menghemat rasa sakit dari mengambil maksimum5
dan hasilnya.Penjelasan:
sumber
Hassium , 133 Bytes
Jalankan dan lihat diperluas secara online: http://hassiumlang.com/Hassium/index.php?code=4f1c14f4d699b11da7a6392a74b720c4
sumber
TI-BASIC, 19 byte
Menggunakan algoritma xnor. TI-BASIC mendapatkan vektorisasi dan perkalian secara gratis, tetapi kami menghabiskan beberapa byte lagi karena tidak memiliki modulo.
sumber
Haskell, 114 byte
Penjelasan:
Fungsi
g
kembali9-n
jikan>6
atau5-n
jikan>1
tidak-n-1
.g
diberikan digit terakhir dan mengembalikan apa yang harus ditambahkan ke nomor input.f
gunakang
untuk mendapatkan solusinya (ditambah banyak manipulasi string).main
menampilkan hasilf
untuk setiap jalur input.sumber
Rubi,
5550 +1 byteMenjalankannya dengan
n
bendera, seperti:ruby -n prices.rb
. Masukkan setiap harga pada baris terpisah.sumber