Maafkan judul titny.
Ini adalah pertanyaan yang diinspirasi oleh A Curious Property of 82000 . Di dalamnya, penulis menunjukkan bahwa angka 82000 adalah biner di basis 2, 3, 4, dan 5. Posting kemudian mengajukan pertanyaan "apakah ada angka yang biner di basis 2, 3, 4, 5, dan 6 "? (Bagi mereka yang penasaran, saya telah memeriksa nilai hingga 10 ^ 1.000.000 dan sejauh ini jawabannya adalah tidak.)
Hal ini membuat saya berpikir: diberi nomor, apa basis adalah hal biner dalam?
Nomor penasaran kami, 82000, sebenarnya biner dalam enam basis:
Base 2 = 10100000001010000
Base 3 = 11011111001
Base 4 = 110001100
Base 5 = 10111000
Base 81999 = 11
Base 82000 = 10
Tidak semua angka akan memiliki basis biner yang berurutan. Pertimbangkan nomor 83521. Biner di pangkalan 2, 17, 289, 83520, dan 83521.
Tantangan Anda adalah menentukan dan menampilkan basis nomor mana yang biner.
Aturan
- Suatu angka dianggap "biner" dalam basis tertentu jika perwakilannya dalam basis itu hanya terdiri dari nol dan satu.
110110
adalah nilai biner, sementara12345
tidak,A380F
pasti tidak. - Nomor Anda akan diberikan pada input standar. Ini akan menjadi nilai integer antara 2 dan 2 ^ 32-1 inklusif dan akan disediakan dalam format basis-10.
- Dalam urutan menaik, perlihatkan setiap basis lebih besar dari satu yang jumlahnya biner. Setiap basis harus pada barisnya sendiri. Jika Anda memasukkan nilai biner di basis itu (lihat skor bonus di bawah), pisahkan basis dan nilai biner dengan spasi. Hanya keluaran ke standar yang akan dinilai, kesalahan standar dan sumber lainnya akan diabaikan.
Mencetak gol
Skor Anda adalah ukuran program Anda dalam byte. Semakin rendah skor, semakin baik.
Bonus :
Jika program Anda juga menampilkan nilai-nilai biner di basis yang ditemukan, kalikan skor Anda dengan 0,75
Nilai biner Anda yang ditampilkan tidak boleh memiliki tanda baca tambahan, tidak ada nol di luar, tidak ada angka desimal, hanya nol dan yang.
Contohnya
Memasukkan:
82000
Output (menerima bonus):
2 10100000001010000
3 11011111001
4 110001100
5 10111000
81999 11
82000 10
Memasukkan:
1234321
Output (tidak ada bonus):
2
1111
1234320
1234321
sumber
n
selalu setidaknya biner dalam basis1
(tidak dihitung),2
,n-1
, dann
.[1, 0, 1, 1, 0]
baik-baik saja, atau apakah angka harus digabung seperti10110
?Jawaban:
Pyth,
1413Terima kasih kepada Jakube karena menunjukkan
S
fungsi baru .Coba di sini.
Versi online terlalu lambat untuk dilakukan
1234321
. Ini hanya mengkonversi input ke setiap basis dari 2 ke basis itu sendiri dan membuang hasil yang mengandung nilai selain 0 dan 1.Penjelasan:
Selain itu, ini adalah (
tidak baik golfedsekarang juga golfed, lagi berkat Jakube) versi bonus (20 * 0,75 = 15):Coba di sini
sumber
VQI!-JjQK+2NU2pdKjkJ
Terkadang pemrograman fungsional bukanlah pendekatan terbaik.Julia,
7270 byteIni sebenarnya lebih lama dengan bonus, jadi tidak ada bonus di sini.
Ini membaca baris dari STDIN, mengubahnya menjadi integer, dan mencetak hasilnya. Meskipun merupakan metode brute force, input 1234321 membutuhkan waktu kurang dari 1 detik untuk saya.
Penjelasan + tidak dikumpulkan:
Contoh:
CATATAN : Jika input dapat diambil sebagai argumen fungsi alih-alih dari STDIN (menunggu konfirmasi dari OP), solusinya adalah 55 byte.
sumber
CJam, 20 byte (atau 27 byte * 0,75 = 20.25)
Ini adalah versi no bonus, 20 byte:
Coba ini di sini.
Hanya untuk bersenang-senang, ini adalah versi bonusnya, 27 byte:
Cobalah online di sini
sumber
ri_,f{2+S@2$bN}4/{2=2,-!},
(19,5 byte)Mathematica, 59 byte
Ugh ...
IntegerDigits
D:Tidak banyak yang bisa dijelaskan tentang kode ... 12 byte terbuang oleh persyaratan untuk menggunakan STDIN dan STDOUT.
Saya tidak berpikir saya bisa mengklaim bonus. Yang terbaik yang saya dapatkan adalah 84 byte (yang menghasilkan skor lebih dari 60):
sumber
Python 2,
88 8680Cukup mudah, tidak ada bonus. Python bagus dan ringan dengan variabel global.
Terbaik yang berhasil saya dapatkan untuk bonus adalah 118 * .75 = 87.75 :
sumber
g(N)
bukann=N
.g(N,b)
begitu koma membuat keduanya sama), tapi apa maksudmu aku tidak perlu variabel untuk N?g(n/b)
ke(g(n/b)+'n%b')
mana 'merupakan backtick a?Python 2, 90 * 0.75 = 67.5
Pendekatan iteratif yang cukup mudah.
Tanpa bonus, ini adalah 73 byte:
sumber
SQL (PostgreSQL),
247.5255230.25 (307 * .75)Karena SQL dikenal luar biasa dalam tantangan semacam ini, saya pikir saya lebih baik menyatukannya :) Bonusnya sangat berharga untuk yang satu ini.
Seharusnya sesuai dengan spec, tetapi saya tidak memiliki cara mudah untuk menguji COPY I FROM STDIN .
Edit pesanan tetap. Mengubah cara kolom R ditangani untuk menggunakan array.
Sebagai ujian saya hanya menggunakan sisipan lurus ke dalam
I
tabel. Uji coba diperluas dan dikomentari.sumber
order by
. Sekarang untuk melihat apakah saya bisa mendapatkan kembali karakter-karakter ituHaskell 109 * 0,75 = 81,75 byte
Contoh penggunaan (catatan: nilai biner adalah lsb pertama):
Tanpa batasan input / output, yaitu input melalui argumen fungsi, output dalam format asli melalui REPL):
Haskell, 67 * 0,75 = 50,25 byte
Mengembalikan daftar pasangan (basis, nilai). Nilai-nilai adalah lsb pertama, misalnya (baris baru / spasi ditambahkan untuk tampilan yang lebih baik):
sumber
R, 111
Mungkin banyak ruang untuk memperbaikinya saat ini
Dijalankan dengan peringatan
sumber
I%/%b
logika dalamany()
klausa. `Java,
181155.25 (207 * .75)151.5 (202 * .75) byteDiperluas dengan penjelasan:
Asli (tanpa bonus):
3,75 byte terima kasih kepada Ypnypn :)
sumber
R,
948379Pemakaian:
Inti dari fungsi ini adalah
!sapply(2:n,function(x){while(n&n%%x<2)n=n%/%x;n})
, untuk setiap basis x dari 2 ke n, menjaga hasil bagi n / x selama sisanya adalah 0 dan 1. Kemudian output hasilnya (yaitu 0 jika semua sisa adalah 1 atau 0) dan meniadakannya (0 meniadakan ke TRUE, yang lainnya meniadakan ke SALAH). Berkat lingkup fungsi, tidak perlu membuat variabel dummy untuk n. Vektor yang dihasilkan dari boolean kemudian digunakan untuk mengindeks2:n
dan karenanya hanya menghasilkan basis yang berfungsi.sumber
TI-Basic, 45 byte
Penjelasan
Bagian yang rumit
Baris kedua berfungsi sebagai berikut:
Catatan
Program berjalan secara signifikan lebih cepat jika tanda kurung tutup
)
ditempatkan pada akhir baris kedua. Lihat di sini untuk informasi lebih lanjut tentang ini.sumber
TI-BASIC,
3129Ini mungkin optimal untuk TI-BASIC.
Penjelasan:
randIntNoRep(1,32)
mengembalikan permutasi acak dari angka dari 1 hingga 32 (Yang kita butuhkan adalah angka-angka itu dalam beberapa urutan; TI-BASIC tidak memiliki apa pun seperti perintah iota APL). 32 elemen sudah cukup karena basis terkecil yang mungkin adalah 2 dan jumlah terbesar adalah 2 ^ 32-1.B^randIntNoRep(1,31)
meningkatkan daftar itu ke kekuatan Bth, yang menghasilkan daftar yang berisi semuaB^1,B^2,...,B^32
(dalam urutan tertentu).Kemudian input (dalam
Ans
variabel wer, yang merupakan input ke dalam formulir[number]:[program name]
) dibagi dengan angka itu. Jika input Anda adalah 42 dan basisnya adalah 2, hasilnya akan menjadi daftar21,10.5,5.25,...,42/32,42/64,[lots of numbers less than 1/2]
, sekali lagi dalam urutan tertentu.Mengambil bagian pecahan dan mengalikan angka dengan basis Anda memberikan angka pada posisi itu dalam representasi basis-b. Jika semua digit kurang dari 2, maka digit terbesar akan kurang dari 2.
Seperti Ypnypn menyatakan, tanda kurung tutup pada
For
pernyataan mempercepat ini karena bug parser.31-> 31: Menyimpan byte tetapi memperbaiki kesalahan pembulatan yang menambahkan byte lagi.
31-> 29: Menyimpan dua byte dengan menggunakan
RandIntNoRep()
alih-alihcumSum(binomcdf())
.sumber
seq(expression, variable, start, end[, step])
. Jika tidak ada langkah yang diberikan, defaultnya adalah 1. Namun,cumSum(binomcdf(31,0
adalah 8 byte sedangkanseq(X,X,1,32
9 byte.Jelly , 9 byte
Cobalah online!
Dilakukan bersama caird coinheringaahing dalam obrolan .
Bagaimana itu bekerja
sumber
Javascript, ES6,
118 * .75 = 88.5110 * .75 = 82.5Versi sebelumnya:
Memeriksa:
sumber
JavaScript ( ES6 ) 65
68 byte untuk fungsi dengan parameter dan output konsol.
65 byte dengan I / O via popup
Mengklaim bonus: 88 * 0.75 => 66
sumber
Mathematica, 76 * 0,75 = 57
Awalnya lupa tentang persyaratan input ... Untungnya, itu tidak menambah terlalu banyak.
sumber
Ruby , 44 byte
Cobalah online!
sumber
Perl 5 , 63 byte
Cobalah online!
Tidak ada bonus untuk ini karena skornya sedikit lebih baik daripada versi saya dengan bonus:
Perl 5 , 85 byte * 0,75 = 63,75
Cobalah online!
sumber