Pengantar:
Saya ingat, ketika saya masih kecil, saya akan mendapatkan kalkulator dan terus menekan +
tombol, dan melihat seberapa tinggi saya bisa menghitung. Sekarang, saya suka memprogram, dan saya sedang mengembangkan untuk iOS.
Menghitung adalah keterampilan mendasar bagi manusia dan komputer. Tanpa itu, sisa matematika tidak bisa dilakukan. Ini dilakukan hanya dengan memulai 1
dan secara berulang menambahkannya 1
.
Tantangan:
Ini hanyalah tantangan sederhana. Apa yang saya ingin program Anda lakukan adalah mencetak dari 1
apa pun Integer
yang diperlukan. Namun, saya akan melintirnya, karena penghitungan desimal agak membosankan:
Penghitungan tidak bisa di basis 10, itu harus menunjukkan dirinya menghitung dalam biner.
Jadi, untuk menghitung sampai 5, menggunakan bilangan bulat 32-bit, akan terlihat seperti ini:
0000 0000 0000 0000 0000 0000 0000 0001 ..... 1
0000 0000 0000 0000 0000 0000 0000 0010 ..... 2
0000 0000 0000 0000 0000 0000 0000 0011 ..... 3
0000 0000 0000 0000 0000 0000 0000 0100 ..... 4
0000 0000 0000 0000 0000 0000 0000 0101 ..... 5
Ini komputer. Mereka tahu biner terbaik. Input Anda dapat berupa bilangan bulat 32-bit atau 64-bit. Ini benar-benar terserah Anda. Namun, jika Anda menggunakan bilangan bulat 32-bit, output Anda harus bilangan bulat 32-bit dalam biner , dan jika Anda menggunakan bilangan bulat 64-bit, output Anda harus bilangan bulat 64-bit dalam biner .
Input sampel:
integer 32-bit, 5
Output sampel:
0000 0000 0000 0000 0000 0000 0000 0001
0000 0000 0000 0000 0000 0000 0000 0010
0000 0000 0000 0000 0000 0000 0000 0011
0000 0000 0000 0000 0000 0000 0000 0100
0000 0000 0000 0000 0000 0000 0000 0101
Mencetak:
Skor Anda sama dengan berapa banyak byte kode Anda. Karena ini Golf Code, skor terendah akan menang.
Poin bonus:
Jika Anda menunjukkan, dalam output, angka itu sebagai angka basis 10 (misalnya, 0000 0000 0000 0000 0000 0000 0000 0001
dalam biner sama dengan basis 10 1
), kalikan skor Anda dengan 0.8
.
Jika Anda mengelompokkan 4 digit output seperti yang saya lakukan, maka kalikan skor Anda dengan 0.8
(lagi). Ini tidak wajib.
Jangan mengumpulkan, dan jangan membulatkan ke bawah. Skor Anda adalah angka floating-point.
int
)?Jawaban:
APL, 10 karakter
Lain di dalam APL. Asumsikan
⎕IO←1
(default). Tidak ada poin bonus. Membaca nomor dari perangkat input. Jika APL Anda menggunakan integer 64 bit alih-alih 32 bit integer, gantikan 64 untuk 32 sesuai kebutuhan.Perhatikan bahwa APL secara transparan mengkonversi ke angka floating point ketika rentang bilangan bulat terlampaui. Sangat sulit untuk mengatakan dengan pasti apa yang bekerja dengan ukuran integ APL.
penjelasan
sumber
JavaScript ( ES6 ) 56.8 (71 * 0.8)
Versi 32 bit, karena JavaScript tidak dapat menangani presisi 64 bit (paling banyak 53 bit menggunakan floating point doubles)
Tanpa pengelompokan
Dengan pengelompokan - skor 60.16 (94 * .64)
Uji di browser apa saja (ES5)
sumber
Pyth, 18 * 0.8 * 0.8 = 11.52 byte
Contoh output:
sumber
Pyth, 19 * 0,8 * 0,8 = 12,16 byte
Contoh output untuk input 5:
Demonstrasi.
sumber
Python 2, 48 * 0.8 = 38.4
Mengonversi angka menjadi biner, menggunakan pemformatan string untuk mengubahnya menjadi biner dengan 32 digit, dan kemudian juga mencetak angka desimal untuk bonus. Menggunakan
exec
loop untuk menambah dari1
ke nilai input.sumber
OverflowError: repeated string is too long
. Tidak yakin apakah itu hanya batas pada mesin saya saja.CJam, 13,44 (21 × 0,64)
Cobalah online.
sumber
APL, 23.68 (37 × .8 × .8)
sumber
KDB (Q), 50 * 0.8 * 0.8 = 32
Saya merasa sedikit sedih dengan kiriman saya :( Seharusnya ada cara yang lebih baik untuk melakukan ini!
Penjelasan
Uji
sumber
k){-1{" "/:,/'$:(0N 4#0b\:x),x}@'1+!x}
Common Lisp, 96.0
Skor:
(* 150 .8 .8)
Contoh
Memanggil fungsi dengan 10:
Penjelasan
(format()"~39,'0b ~:*~d" #b101010101010)
memberi:String perantara (array) dimodifikasi untuk menempatkan karakter spasi pada indeks berbasis nol berikut: 4 9 14 19 24 29 34. Kemudian dicetak.
Perhatikan bahwa
(format t"~39,'0,' ,4:b ~:*~d" #b101010101010)
format yang tampaknya langsung tidak melakukan apa yang kita inginkan. Mencetak:(padding tidak dikelompokkan berdasarkan 4)
sumber
Ruby, 28 (35 * 0.8)
sumber
C, 97 * 0.8 * 0.8 = 62.08
Contoh output untuk input "5":
Saya dapat menambahkan satu lagi karakter spasi putih untuk memisahkan angka desimal dari angka biner, tetapi secara teknis masalahnya tidak memerlukannya, saya pikir?Sunting: Terima kasih, CL!sumber
x%-4-1
denganx%-4-2
untuk menambahkan ruang antara biner dan desimal tanpa biaya byte tambahan. (Ini juga akan menghilangkan ruang ekstra di awal setiap baris.)Oktaf, 23 karakter
Contoh output untuk input 5:
sumber
MatLab, 19 byte
Tidak terlalu banyak untuk yang ini, MatLab memiliki built in decimal to binary converter dan secara otomatis mencetak hasilnya.
sumber
Julia, 42 byte
Ini sedikit lebih pendek tanpa bonus.
Ini menciptakan fungsi tanpa nama yang mengambil integer dan mencetak representasi biner dari setiap angka dari 1 hingga n , masing-masing dibiarkan dengan nol hingga 64 karakter.
Dengan bonus, 78 byte * 0.8 * 0.8 = 49.92
Ini menciptakan fungsi tanpa nama yang mengambil integer dan mencetak representasi biner seperti sebelumnya, kali ini dipecah menjadi kelompok-kelompok 4 dengan angka di basis 10 di akhir.
sumber
Gangguan Umum, skor: 64.0
100 byte * 0.8 * 0.8
Saya cukup senang dengan skor saya, tetapi saya masih merasa harus ada kemungkinan untuk menyederhanakan kode saya sedikit.
Keluaran
Kode
Penjelasan
Seperti yang dijelaskan dalam jawaban coredump , format string
tidak menghasilkan angka-angka base2 tetapi tampaknya tidak ada kemungkinan untuk mendapatkan pengelompokan yang tepat juga. Karenanya saya memaksa string ke dalam daftar dan mengulanginya dengan memilih grup 4 dengan string format ini:
"~ {~ a ~ a ~ a ~ a ~} ~ a ~%"
Setelah setiap kelompok 4 ada yang kosong, dan setelah kelompok terakhir, nomor base10 dicetak.
Tanpa pengelompokan (60x0.8 => 48.0)
Ini menggunakan ~: * untuk memproses argumen format (tunggal) lagi.
sumber
PHP, 51.84 (81 × .8 × .8)
Versi 32-bit, karena PHP hanya terbatas pada 32-bit pada Windows terlepas dari apakah OS 64-bit.
Mengambil satu argumen baris perintah.
sumber
CoffeeScript, 60.8 (76 × .8)
Versi 32-bit untuk alasan yang disebutkan di atas , ketika CoffeeScript mengkompilasi ke JavaScript.
Dengan pengelompokan menjadi sedikit lebih lama: 64,64 (101 × 0,8 × 0,8)
sumber
Haskell, 56 byte
Pemakaian:
Untuk 64bit, ganti
32
dengan64
. Setiap angka lainnya juga berfungsi.sumber
J, 20 byte
Input dan output sampel:
sumber
Swift: 98,56 (154 * 0.8 * 0.8)
sumber
Ruby, 64 bit
70 * 0.8 * 0.8 = 44.8 byte (split, desimal)
51 * 0.8 = 40.8 byte (desimal)
67 * 0.8 = 53.6 byte (terpisah)
44 byte (tidak ada bonus)
sumber
05AB1E ,
1311 byte-2 byte terima kasih kepada @ Mr.Xcoder .
Output tanpa pembatas ruang atau nomor urut.
Cobalah online.
Penjelasan:
sumber
Lb32jsäð0:»
bekerja untuk 11 bytej
prepend sehingga menjadi panjang yang benar.