Tantangan:
Dalam bahasa pemrograman pilihan Anda, terima bilangan bulat sebagai input pada basis 10, dan hasilkan dalam notasi negatif , yang juga dikenal sebagai basis -10
Algoritme contoh:
Function toNegativeBase(Number As Integer , base As Integer) As System.Collections.Generic.List(Of Integer)
Dim digits As New System.Collections.Generic.List(Of Integer)
while Number <> 0
Dim remainder As Integer= Number Mod base
Number = CInt(Number / base)
if remainder < 0 then
remainder += system.math.abs(base)
Number+=1
end if
digits.Insert(0, remainder)
end while
return digits
end function
Jelas, Anda dapat menggunakan algoritma apa pun, asalkan memenuhi tantangan
Contoh input / output:
Memasukkan:
12
Keluaran:
192
Contoh lain:
Memasukkan:
2048
Keluaran:
18168
Aturan:
Anda tidak boleh menggunakan metode bawaan yang memecahkan masalah ini yang ada dalam bahasa pemrograman Anda
Ini adalah kode-golf , sehingga kode terpendek menang!
code-golf
math
base-conversion
P. Ktinos
sumber
sumber
[0, 1, 8, 1, 6, 8]
akan menjadi input yang dapat diterima untuk input2048
?Jawaban:
JavaScript (ES6),
514537 byteUji kasus
Tampilkan cuplikan kode
sumber
Japt , 11 byte
Uji secara online!
Penjelasan
sumber
Batch, 82 byte
Divisi Batch terpotong menjadi nol, jadi jika sisanya negatif saya perlu menambahkan 1 (dan juga menambahkan 10 ke sisanya) untuk mengimbangi. Digit-digit tersebut kemudian diakumulasikan
%2
hingga hasilnya menjadi nol.sumber
Jelly , 9 byte
Ini adalah inversi brute-force dari konversi negadecimal-to-integer.
Cobalah online!
Bagaimana itu bekerja
sumber
Pyth - 9 byte
Biarkan emoji menangis di dalamnya.
Test Suite .
sumber
Python 3, 35 byte
Port Python dari algoritma Arnauld .
Atau, untuk 102 byte fungsi generik menggunakan algoritma dari pos asli:
sumber
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44)
.k
ataun
di tempat lain dalam kode?-n//10
tidak-(n//10)
: meniadakann
, lalu membelah lantai dengan10
, yang membulatkan ke arah tak terhingga negatif, bukan 0. Sebaliknya,0-n//10
apakah0-(n//10)
, yang membelah lantai pertama dengan 10, kemudian meniadakan. Untuk alasan apa pun, Python memperlakukan negasi unary dengan prioritas lebih tinggi daripada biner minus. Lihat tabel diutamakan ini . Saya pernah mengalami situasi yang sama ini sebelumnya dalam bermain golf.Jelly , 10 byte
Cobalah online!
Latar Belakang
Mengonversi daftar non-negatif dari basis b ke integer dapat dicapai dengan melipat-kiri dengan fungsi x, y ↦ bx + y . Untuk mengkonversi dan integer ke basis b , kita harus membalik fungsi itu, yaitu, menemukan ekspresi untuk bx + y ↦ x, y .
Dalam Python (dan, dengan ekstensi, Jelly), hasil dari operator modulo selalu non-negatif, jadi (bx + y)% | b | = y .
Juga, pembagian integer selalu dibulatkan ke bawah, memastikan bahwa jika q = n / d dan r = n% d , persamaan n = qd + r berlaku. Jika s adalah tanda b , maka (sx) | b | + y = bx + y , jadi sx = (bx + y) / | b | dan maka dari itu, s ((bx + y) / | b |) = x.
Bagaimana itu bekerja
sumber
SimpleTemplate , 147 byte
Ini adalah bahasa templat yang telah saya kerjakan.
Tidak berarti itu dimaksudkan untuk bermain golf.
Bahkan tidak memiliki matematika dasar yang lengkap, tetapi memungkinkan untuk menulis potongan kecil PHP secara langsung.
Ini mengatasi masalah itu.
Ini melempar banyak peringatan.
Kode ini "dikompilasi" ke dalam PHP.
Tidak disatukan, dengan spasi putih sampah:
Jika diperlukan, penjelasan set-by-step dapat ditambahkan, tapi saya percaya itu cukup mudah.
Penolakan :
Komit terakhir, pada saat menuliskan jawaban ini, adalah pada 2017-01-07 20:36 UTC + 00: 00.
Ini berfungsi pada commit 140e56ff38f45fa4fd40fd3ec382094e707b1bad mulai 2017-01-06 23:27 UTC + 00: 00.
Itu adalah versi yang digunakan untuk menjalankan jawaban ini.
Kode PHP tersedia di https://raw.githubusercontent.com/ismael-miguel/SimpleTemplate/140e56ff38f45fa4fd40fd3ec382094e707b1bad/SimpleTemplate.php
Saya merekomendasikan menjalankan ini dengan versi terakhir, tetapi yang satu berfungsi dengan baik untuk pertanyaan ini.
Bagaimana cara menjalankannya?
Buat file dengan kode dan jalankan seperti ini:
Nilai tersebut kemudian akan ditampilkan di layar.
sumber
PHP,
7167 byteatau 62 byte untuk port jawaban Arnauld :
sumber
Mathematica, 49 byte
Mendefinisikan fungsi dengan
d
mengambil satu argumen integer, dan mengembalikan sebuah string. Algoritma rekursif — tampak seperti algoritma yang sama dalam jawaban Arnauld . Itu bekerja pada angka negatif juga. (Ini mengembalikan string kosong intsead "0" jika inputnya adalah 0.) Catatan untuk pegolf Mathematica: menggunakan±
membutuhkan satu set kurung tambahan dan dengan demikian tampaknya tidak lebih pendek.sumber
C, 68 byte
Alih-alih mencetak nomor yang dihasilkan program hanya mengembalikannya. Jelas ini adalah jawaban Arnauld , satu-satunya perbedaan adalah bahwa karena C bukan bahasa yang ditafsirkan saya merasa seperti saya harus menjadikannya program yang penuh bukan hanya fungsi.
sumber
f
keluar dari ruang lingkup ketika fungsi kembali kecuali saya benar-benar bodoh.Rust, 88 byte
Ini hanya versi rekursif dari algoritma yang disediakan dalam pertanyaan.
sumber