Misi Anda adalah menulis fungsi / program yang mengubah array byte (yaitu: array bilangan bulat dari 0 hingga 255), menjadi base64.
Menggunakan enkode base64 bawaan tidak diizinkan.
Implementasi base64 yang diperlukan adalah RFC 2045. (menggunakan "+", "/", dan padding wajib dengan "=")
Kode terpendek (dalam byte) menang!
Contoh:
Input (array int): [99, 97, 102, 195, 169]
Output (string): Y2Fmw6k=
1 2
argumen66
?=
untuk bantalan mempersempitnya menjadi 4. Yang mana yang Anda inginkan? Atau Anda ingin varian non-standar yang tidak memiliki panjang garis maksimum?Jawaban:
JavaScript, 177
187198karakterUntuk menambahkan linebreak,,
\r\n
setelah setiap karakter ke-76, tambahkan 23 karakter ke kode:Kode demo:
sumber
Perakitan x86 32-bit, 59 byte
Kode byte:
Membongkar:
Panggil kode b64 dengan esi menunjuk ke buffer input, dan menunjuk ke buffer output.
Itu bisa dibuat lebih kecil jika pembungkus garis tidak digunakan.
sumber
perl, 126 byte
membaca stdin, output ke stdout
ungolfed:
sumber
\r\n
.Perl, 147 byte
Fungsi mengambil daftar bilangan bulat sebagai input dan output string, base64 disandikan.
Contoh:
cetakan
Tidak Disatukan:
Versi yang juga memvisualisasikan langkah-langkah perantara:
Keluaran:
Tes:
String tes berasal dari contoh dalam pertanyaan, contoh dalam artikel Wikipedia untuk Base64 .
Hasil tes:
sumber
\r\n
.Python, 234 karakter
sumber
\r\n
.GolfScript, 80 (77) byte
Di atas akan sesuai persis 76 karakter dalam satu baris, kecuali untuk baris terakhir. Semua jalur diakhiri oleh CRLF.
Perhatikan bahwa RFC 2045 menentukan variabel, panjang garis maksimum 76 karakter, sehingga dengan biaya keluaran yang cantik, kita dapat menghemat 3 byte tambahan.
Di atas akan mencetak satu karakter per baris, kecuali untuk baris terakhir, yang dapat berisi 0, 1 atau 2
=
karakter. GolfScript juga akan menambahkan LF akhir, yang, menurut RFC 2045, harus diabaikan oleh perangkat lunak decoding.Contoh
Bagaimana itu bekerja
sumber
PHP , 200 byte
Cobalah online!
Anda bisa mengganti string
("$s+/=")
dengan arrayarray_merge(range(A,Z),range(a,z),range(0,9),["+","/","="])
Hanya untuk membandingkan jumlah byte yang dapat dicapai dengan built-in yang tidak diizinkan
PHP , 45 byte
Cobalah online!
sumber
JavaScript (ES6), 220B
Jika browser Anda tidak mendukung ES6, Anda dapat mencoba versi ini (262B):
f([99, 97, 102, 195, 169])
kembali"Y2Fmw6k="
.sumber
\r\n
?Python -
310, 333Agak tidak terserang:
Contoh :
Modul base64 built-in Python hanya digunakan dalam contoh ini untuk memastikan
e
fungsi memiliki output yang benar,e
fungsi itu sendiri tidak menggunakannya.sumber
\r\n
.Jelly , 38 byte
Cobalah online!
Karena (hampir) setiap jawaban lainnya mencakup persyaratan RFC2045 tentang "paling banyak 76 karakter per baris dengan garis yang berakhir
\r\n
", saya mengikutinya.Bagaimana itu bekerja
sumber
ṃØbṙ1¤
agak terlalu lama untuk operasi sederhana.0,0,0
.