Tallying adalah sistem penghitungan sederhana yang bekerja di basis 5. Ada berbagai sistem penghitungan yang berbeda yang digunakan di seluruh dunia, tetapi sistem penghitungan yang digunakan di sebagian besar negara berbahasa Inggris mungkin merupakan yang paling sederhana - unit penghitungan dengan menandai garis vertikal, lalu untuk setiap tanda ke-5 letakkan garis horizontal melalui koleksi sebelumnya yang terdiri dari empat. Ini mengelompokkan tanda penghitungan dalam kelompok 5 (dan membuatnya lebih mudah untuk dihitung dengan cepat).
Anda akan menulis sebuah program yang menampilkan tanda penghitungan hingga nilai yang diberikan. Tapi, menghitung hanya di base 5 itu membosankan! Karena itu, program Anda juga harus dapat menampilkan penghitungan di pangkalan yang berbeda.
Memasukkan
Input akan berupa satu atau dua nilai integer non-negatif yang dipisahkan oleh koma (misalnya 9
atau 8,4
). Angka pertama adalah nilai yang harus ditampilkan oleh penghitungan. Nilai kedua adalah basis penghitungan. Jika nilai kedua tidak diberikan, gunakan basis 5 .
Keluaran
Keluarannya adalah nilai yang dimasukkan sebagai tanda penghitungan ASCII. Berikut adalah beberapa contoh yang dapat Anda uji terhadap program Anda - output Anda harus sama persis!
Masukan: 12
atau12,5
| | | | | | | | | |
-+-+-+-+- -+-+-+-+- | |
| | | | | | | | | |
Memasukkan: 7,3
| | | | |
-+-+- -+-+- |
| | | | |
Memasukkan: 4,2
| |
-+- -+-
| |
Input: 6,1
atau 6,10
(perhatikan spasi utama)
| | | | | |
| | | | | |
| | | | | |
Perhatikan juga bahwa basis 1 dimaksudkan tidak konsisten - hanya garis vertikal yang harus digunakan.
Jika salah satu dari nilai yang dimasukkan adalah 0, seharusnya tidak ada output apa pun (dan program Anda harus berakhir dengan anggun).
Aturan
- Ini adalah kode-golf , sehingga implementasi terpendek yang benar (dalam byte) menang.
- Input / output dapat dalam media yang sesuai (mis. Stdin / stdout, file ...).
- Input dapat berupa beberapa argumen baris perintah atau dipisahkan dengan spasi, dll. Jika lebih cocok untuk bahasa target Anda.
- Trailing newlines diizinkan dalam output. Ruang tambahan tidak. Aturan ini hanya berlaku ketika ada output (yaitu tidak ketika nilai yang dimasukkan adalah 0).
- Kode Anda harus default ke basis 5 ketika tidak ada basis dimasukkan.
6,1
lebih mirip-+- -+- -+- -+- -+- -+-
?-+-
akan mewakili dua, karena ada garis vertikal dan skor horizontal melaluinya. Basis 1 hanya akan memiliki garis vertikal. @AndoDaan diamandemen.--- --- --- --- --- ---
begitu. Untuk konsistensi dengan pangkalan lain, Anda harus melakukan pukulan horizontal melaluib-1
garis vertikal. Jika dimaksudkan tidak konsisten, Anda harus menyatakannya secara eksplisit.Jawaban:
CJam 103 85 72 karakter
Cobalah di http://cjam.aditsu.net/ .
asli
Bekerja dengan mendefinisikan satu set penghitungan dengan spasi, garis dan l untuk spasi yang harus tetap spasi. Kemudian manfaatkan fungsi er (tranliteration) untuk membuat baris kedua. Bagian yang paling tidak efisien adalah berurusan dengan kasus khusus 1 dan 0. Akan mengedit saat saya memperbaikinya. Kiat saya terlalu lama untuk disadari: karena input kedua adalah 1 sama dengan tak terbatas atau input pertama +1, mendefinisikannya kembali sama dengan 1 menghemat banyak pekerjaan.
paling baik sejauh ini dengan dibatasi koma
paling ditingkatkan sejauh ini dengan input terbatas ruang
Tentu saja CJam benar-benar dirancang untuk input terbatas ruang. Menempatkan input pada 20 3 bukannya 20,3 adalah manfaat besar.
sumber
Python 2 -
111 108 119 144 140 136 135134 - CobalahOk, mari kita coba:
Sunting: Saya telah mengabaikan bahwa seharusnya tidak ada output jika
n==0
ataub==0
. Harganya 11 karakter. :(Sunting: Ok, setelah memperbaiki masalah kedua yang disebutkan dalam komentar solusi saya pada dasarnya konvergen dengan yang ada di BeetDemGuise.
sumber
b
harus 5 dalam kasus ini). Saya akan membuatnya lebih jelas dalam pertanyaan. Sunting: oh, sudahlah, Anda memperbaikinya sama seperti saya membuat komentar ini!n/b
bukann//b
?Pesta,
239 228 199 189188Ini usaha saya, bisa banyak bermain golf.
Catatan: baris kedua tidak mengurangi 5 dari 2, ini menetapkan nilai default jika
$2
kosong!sumber
{1..$n}
berfungsi`seq $n`
?h=8;echo {1..$h}
output{1..8}
Python -
171143Program ini sangat mudah:
t,b
. Jika gagal, cukup berikan nilai yang benar.1
, ubah nilainya menjadi sesuatu yang dapat menangani semua garis vertikal dengan mudah (t+1
).t
danb
bukan nol.EDIT 1: Gunakan
input
fungsi alih-alihraw_input
setelah beberapa bermain-main.EDIT 2: Terima kasih kepada Falko untuk menunjukkan bug kecil dengan pengecekan tidak nol saya. Sekarang kode kita pada dasarnya identik, kurang beberapa nama variabel dan beberapa logika kecil.
EDIT 3: Berkat cara Python membandingkan sekuens dan tipe yang berbeda , kita dapat membandingkannya
i
denganlist
untuk mendapatkan versi yang lebih pendek daritry...except
blok kita .Ini adalah versi yang tidak dikoleksi:
sumber
t&b
adalahFalse
untuk 10,5. Kalau tidak, solusi kami sedang berkumpul! ;)i
itu skalar atau daftar. Lalu kita bisa menjatuhkantry ... except
monster itu.list
selalu lebih besar dari int. Juga,list
s dibandingkan dalam urutan leksikografis. Jadi jika kita membandingkan[0]<i
ini akan selalu kembaliFalse
jikai
adalah angka danTrue
jikai
adalah daftar (dengan elemen pertama yang tidak nol).Jawa, 343
Kurang bermain golf:
sumber
i
sebuahlong
sehingga Anda tidak harus menyatakan secara terpisah. Beberapa lagi dengan melakukani++%b>0
di loop Anda alih-alih menambahkannya secara terpisah (dani++<n%b
di loop ketiga). Satu lagi dengan menggunakanb=b<2?(int)2e9:b
.Perl -
167165156ungolfed
sumber
C - 193
Saya minta maaf. Berurusan dengan kasus khusus untuk 1 adalah sedikit hack yang buruk jadi saya kira ini bisa bermain golf lebih dengan pendekatan yang lebih baik. Juga, kode ini termasuk baris baru di awal output, jadi jika ini tidak diizinkan, beri tahu saya.
Tentu saja, definisi yang sangat jelek selalu membantu :)
Hitungan karakter hanya mencakup spasi yang diperlukan dan baris baru.
sumber
printf
denganputs
, dan menggantireturn
dengan operator ternary.puts
adalah ia menambahkan baris baru setiap kali :(. Dan untuk operator ternary, tidak mungkin untuk menambahkanreturn
s ataufor
s di dalamnya !. Komentar Anda memang memberi saya ide untuk menyimpan beberapa karakter lebih banyak lagi. mudah dengan menghapusreturn
C # 271bytes
Bukan yang terpendek, saya tidak bisa memasukkan input bacaan karena perlu menerima 0 sebagai input.
Kode yang diformat:
sumber
Lua -
219203 byteSaya mencari salinan d dari b salinan "|", lalu menambahkan r salinan "|" pada akhirnya. Saya merasa mungkin saya harus pergi dengan 'tally' the | | s ke string satu per satu.
ungolfed:
Sampel:
sumber
JavaScript (193)
Ini mungkin terlalu rumit.
Versi yang dikomentari
sumber
Python -
127123122Hanya menyelinap masuk dengan versi python yang sedikit lebih pendek.
sunting: Memperbaiki 0 tidak mencetak apa-apa dan bergabung kembali, berakhir dengan panjang yang sama
sumber
C (207 karakter)
Baris baru sebelum
exit
ini hanya untuk keterbacaan.scanf
penggunaan tanpa malu-malu dicuri dari Allbeert. Perhatikan bahwa solusi ini tidak dapat dikompilasi dengan gcc karena mencoba untuk menegakkan prototipe yang tidak adaexit
. Kompilasi dengan kompiler C yang berfungsi sepertitcc
. Selain itu, fungsi ini mungkin atau mungkin tidak berfungsi pada platform 64 bit. Gunakan dengan hati-hati.Berikut ini adalah implementasi ungolfed asli berdasarkan ini:
sumber
Python 2 ,
134126123114 byteCobalah online!
Pertanyaan lama yang saya tahu tetapi tetap menyenangkan untuk dicoba. Peluang untuk mencoba beberapa trik yang saya pelajari sejak bergabung.
sumber