Kekuatan yang ingin dapat dengan cepat mengkonversi nomor apa pun yang mereka miliki menjadi basis nomor mereka sendiri menggunakan format apa pun yang mereka inginkan.
Memasukkan
Program Anda harus menerima 3 parameter.
- Nomor: Nomor string yang akan dikonversi
- InputFormat: string dasar nomor saat ini
- OutputFormat: string dasar yang nomornya akan dikonversi.
Keluaran
Program Anda harus mengonversi Number
dari basis angka lama InputFormat
ke basis angka baruOutputFormat
Contohnya
("1","0123456789","9876543210") = "8"
("985724","9876543210","0123456789ABCDEF") = "37C3"
("FF","0123456789ABCDEF","0123456789") = "255"
("FF","0123456789ABCDEF","01234567") = "377"
("18457184548971248772157", "0123456789","Aa0Bb1Cc2Dd3Ee4Ff5Gg6Hh7Ii8Jj9Kk,Ll.Mm[Nn]Oo@Pp#Qq}Rr{Ss-Tt+Uu=Vv_Ww!Xx%Yy*Zz") = ",sekYFg_fdXb"
Tambahan
Tes base 77 baru tidak diperlukan alat peraga jika itu bekerja
- jika Anda menggunakan bahasa tempat Anda harus mengonversi ke nomor terlebih dahulu dan dikunci dalam 32Bit Anda dapat melewatinya.
- karena ini merupakan tes tambahan.
Semua contoh dihasilkan oleh PHP 7.2 dengan ekstensi bcmath menggunakan kode berikut (vars mnt tetapi kode diformat). mungkin akan ada cara yang lebih pendek ini hanya cara saya datang dengan sistem saya perlu melakukan ini dengan akan menyenangkan untuk melihat apakah ada yang bisa datang dengan versi yang lebih pendek.
PHP 7.2 (bcmath - ekstensi) 614 byte
<?php
function f($a, $b, $c)
{
$d= str_split($b,1);
$e= str_split($c,1);
$f= str_split($a,1);
$g=strlen($b);
$h=strlen($c);
$k=strlen($a);
$r='';
if ($c== '0123456789')
{
$r=0;
for ($i = 1;$i <= $k; $i++)
$retval = bcadd($retval, bcmul(array_search($f[$i-1], $d),bcpow($g,$k-$i)));
return $r;
}
if ($b!= '0123456789')
$l=f($a, $b, '0123456789');
else
$l= $a;
if ($l<strlen($c))
return $e[$l];
while($l!= '0')
{
$r= $e[bcmod($l,$h)].$r;
$l= bcdiv($l,$h,0);
}
return $r;
}
Mencetak gol
Ini adalah kode golf; kode menang paling pendek. Celah standar berlaku.
sumber
["zX", "tXdsyqzSDRP02", "brFNC02bc"] => "cb"
. (atau apa pun yang seharusnya, jika itu salah)Jawaban:
MATL , 2 byte
Cobalah online!
Semua uji kasus.
Untuk tuan Za !
sumber
Za
melakukan konversi basis tetapi dokumen pada matl.suever tidak jelas bahwa ia menerima karakter basis, jadi saya tidak mencobanya. RIP aku!R , 124 byte
Cobalah online!
Ugh, ini doozy. Saya menggunakan trik konversi basis khas untuk R, tetapi manipulasi string dalam R masih berantakan!
sumber
log(N+1,T)
tetapi menyebabkan nol memimpin kadang-kadang misalnya ketika Anda mengkonversi 31 dari basis 10 ke basis 2 :(log(N+!N,T)
tentu saja dapat menggunakan!
dengan arti aslinyaAPL (Dyalog Unicode) , 22 byte
Lambda infix Anonim. Dibawa
InputFormat
sebagai argumen kiri danOutputFormat
sebagai argumen kanan, dan memintaNumber
dari stdin. Diasumsikan⎕IO
( I ndex O rigin)0
, yang merupakan default pada banyak sistem.Cobalah online!
{
...}
"dfn";⍺
adalah argumen kiri, argumen⍵
kanan(mnemonik: ujung kiri dan kanan alfabet Yunani)
⍵[
...]
indeks format output dengan yang berikut:⎕
meminta input⍺⍳
ɩ menemukan karakter-karakter tersebut dalam format input(
...)⊥
evaluasilah dalam basis berikut:≢⍺
panjang format input⊢
hasilkan itu (terpisah¯1
dari(≢⍺)
)(
...)⊥⍣¯1
konversikan ke basis berikut:≢⍺
panjang format outputsumber
Japt, 5 byte
Bersantai kembali ke golf setelah istirahat 2 minggu
Cobalah
Penjelasan
sumber
C (gcc), 79 + 46 = 125 byte
Ini harus dikompilasi dengan
bendera. (Ya, ini sangat samar, itulah sebabnya saya menyimpan jawaban lama saya di bawah ini.) Ini mendefinisikan makro
f
yang menampilkan jawaban untuk STDOUT.Cobalah online!
C (gcc),
133131 byteCobalah online!
Ini mendefinisikan fungsi
f
yang menampilkan jawaban untuk STDOUT.sumber
putchar
alih-alihwrite
dan sedikit mengubah loop decoding: Coba online!index
Fungsi ini menyelamatkan saya satu byte juga dengan pendekatan saya, tidak tahu tentang itu;)05AB1E , 5 byte
Cobalah online!
Ini tidak berfungsi di versi lawas 05AB1E. Ini hanya berfungsi pada versi baru, penulisan ulang Elixir.
Bagaimana itu bekerja
sumber
MATL , 5 byte
Sundar menemukan builtin nyata untuk melakukan ini! Pilih jawaban itu alih-alih jawaban bodoh saya :-(
Cobalah online!
sumber
Arang , 5 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
The
BaseString
fungsi secara otomatis mengkonversi antara jumlah dan tali tergantung pada jenis parameter pertama.sumber
Python 2 ,
132129122121 byteCobalah online!
Fungsi anonim (terima kasih, Erik the Outgolfer !) Yang mengubah angka asli menjadi integer basis 10, kemudian meneruskan integer dan string basis baru ke fungsi g (), yang secara rekursif mengkonversi ke basis baru. Sekarang melewati panjang OutputFormat sebagai parameter ke g ().
Diperbarui g () untuk bytecount yang lebih rendah. (terima kasih, Dennis !)
Indeks diganti () dengan find (). (terima kasih, Tuan Xcoder !)
Penjelasan Tidak Dikunci:
sumber
f=
, fungsi anonim diizinkan secara default.g=lambda n,c:c[n:n+1]or g(n/len(c),c)+c[n%len(c)]
.lambda n,a,b:g(sum(len(a)**i*a.find(j)for i,j in enumerate(n[::-1])),b,len(b))
.Jelly , 11 byte
Cobalah online!
Urutan argumen: InputFormat, Nomor, OutputFormat. Pastikan untuk mengutip argumen dengan melarikan diri!
sumber
Pyth, 21 byte
Suite uji
Penjelasan:sumber
Haskell , 119 byte
Cobalah online!
sumber
Perl 6 ,
10097 byteCobalah online!
Blok kode anonim yang mengambil 3 string dalam urutan, input, format input dan format output, kemudian mengembalikan sebuah string
Penjelasan:
sumber
VBA, 182 byte
Subrutin yang dideklarasikan yang mengambil input
n
, dalam bahasay
dan memproyeksikannya ke dalam bahasaz
.sumber
JavaScript (ES6),
9086 byteMengambil input sebagai
(input_format)(output_format)(number)
.Cobalah online!
sumber
C (gcc) ,
130129 byteCobalah online!
-1 byte
index
sebagai gantinyastrchr
.Ini adalah pendekatan berulang sederhana, menggunakan kembali beberapa variabel (dan dengan demikian menyalahgunakan
sizeof(int) == sizeof(char *)
pada TIO) untuk menyimpan byte.Memasukkan:
i
nomor inputs
karakter basis sumbert
karakter basis targetKeluaran:
r
nomor hasil (penunjuk ke buffer)Penjelasan:
sumber
bcopy(r,r+1,++i)
alih-alihmemmove(r+1,r,++i)
Python 2 ,
9795 byteTerima kasih kepada Chas Brown untuk -2 byte.
Cobalah online!
sumber
Java 10, 131 byte
Seorang lambda mengambil parameter dalam urutan sebagai string dan mengembalikan string.
Cobalah secara Online
Tidak disatukan
sumber