Ini terinspirasi oleh jawaban 05AB1E oleh Magic Octupus Mm .
Diberikan dua argumen, bilangan bulat positif dan string / daftar karakter:
- Menerjemahkan angka ke base-n, di mana n adalah panjang string.
- Untuk setiap karakter, ganti setiap tampilan indeks karakter itu di angka dasar-n dengan karakter itu.
- Cetak atau kembalikan string baru.
Contoh:
Input:
2740, ["|","_"]
2740 -> 101010110100 in base 2
-> Replace 0s with "|" and 1s with "_"
Output: _|_|_|__|_||
Input:
698911, ["c","h","a","o"]
698911 -> 2222220133 in base 4
-> Replace 0s with "c", 1s with "h", 2s with "a", and 3s with "o"
Output -> "aaaaaachoo"
Input:
1928149325670647244912100789213626616560861130859431492905908574660758972167966, [" ","\n","|","_","-"]
Output:
__ __
| |_| |
___| |___
- - - -
- - - - - - -
- - - - - - - -
_______________
Input: 3446503265645381015412, [':', '\n', '.', '_', '=', ' ', ')', '(', ',']
Output:
_===_
(.,.)
( : )
( : )
Aturan:
- IO fleksibel .
- Anda dapat mengambil nomor di pangkalan apa pun, asalkan konsisten di antara input
- Daftar karakter harus diindeks 0, di mana 0 adalah karakter pertama dan n-1 adalah yang terakhir
- Kemungkinan karakter dapat berupa ASCII yang dapat dicetak, bersama dengan spasi putih seperti tab dan baris baru
- Daftar karakter yang diberikan akan memiliki panjang dalam kisaran
2-10
inklusif. Artinya, basis terkecil adalah biner dan yang terbesar adalah desimal ( tidak ada huruf sial di sini ) - Celah standar dilarang
- Jangan ragu untuk menjawab meskipun bahasa Anda tidak dapat menangani kasus uji yang lebih besar.
Karena ini adalah kode-golf , kode terpendek untuk setiap bahasa menang. ( Saya tahu semua bahasa golf Anda memiliki satu byte built-in yang siap digunakan ;)
code-golf
ascii-art
base-conversion
Jo King
sumber
sumber
Jawaban:
05AB1E ,
76 byteKarena itu terinspirasi oleh jawaban 05AB1E, jawaban yang diberikan dalam 05AB1E tampaknya cocok. :)
-1 byte terima kasih kepada @ Enigma dengan menghapus foreach dan melakukan ini secara implisit.
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
gв¹sèJ
untuk menyimpan byte.¹sè
diri saya sekarang .. (Saya tahu mengubah?
keJ
akan memberikan hasil yang sama dalam kasus ini.)Java 8,
7250 byte-22 byte terima kasih kepada @ OlivierGrégoire dengan mengembalikan
IntStream
alih - alih mencetak langsung.Cobalah online .
Penjelasan:
sumber
a->n->n.toString(a.length).chars().map(c->a[c-48])
(50 byte) karena "IO fleksibel"String f(char[]a,int n){return n>0?f(a,n/a.length)+a[n%a.length]:"";}
(69 byte) rekursif, untuk bersenang-senang.Python 3 , 49 byte
Tidak dapat berkomentar, jadi saya memposting jawaban Python 2 yang disesuaikan dengan Python 3.5.
sumber
Japt, 2 byte
Dapat mengambil input kedua sebagai array atau string. Gagal 2 uji kasus terakhir karena jumlahnya melebihi bilangan bulat maks JavaScript. Ganti
s
denganì
untuk menghasilkan array karakter sebagai gantinya.Cobalah
sumber
Haskell ,
4039 byteCobalah online!
Karena
Int
tipe Haskell terbatas9223372036854775807
, ini gagal untuk angka yang lebih besar.-1 byte terima kasih kepada Laikoni .
Tidak disatukan
Cobalah online!
sumber
cycle
bukanmod
!div n(length l)
menghemat satu byte.MATL , 2 byte
Cobalah online!
Input adalah angka dan string.
Gagal melebihi angka
2^53
, karena presisi titik apung.Penjelasan
Apa yang
YA
tahu, builtin (konversi basis dengan simbol target yang ditentukan).sumber
JavaScript (ES6), 48 byte
Mengambil input dalam sintaks currying
(c)(n)
, di mana c adalah daftar karakter dan n adalah integer.Hanya aman untuk n <2 53 .
Cobalah online!
JavaScript (ES6), 99 byte
Dengan dukungan untuk bilangan bulat besar
Mengambil input dalam sintaks currying
(c)(a)
, di mana c adalah daftar karakter dan a adalah daftar angka desimal (sebagai bilangan bulat).Cobalah online!
sumber
x86 kode mesin 32-bit (bilangan bulat 32-bit): 17 byte.
(juga lihat versi lain di bawah ini, termasuk 16 byte untuk 32-bit atau 64-bit, dengan konvensi pemanggilan DF = 1.)
Caller meneruskan args dalam register, termasuk pointer ke akhir buffer output (seperti jawaban C saya ; lihat untuk pembenaran dan penjelasan algoritme.) Internal glibc
_itoa
melakukan ini , jadi tidak hanya dibuat untuk kode-golf. Register arg-passing dekat dengan Sistem V86 x86-64, kecuali kami memiliki arg di EAX bukan EDX.Saat dikembalikan, EDI menunjuk ke byte pertama dari string C yang diakhiri 0 dalam buffer output. Register nilai pengembalian yang biasa adalah EAX / RAX, tetapi dalam bahasa assembly Anda dapat menggunakan konvensi panggilan apa pun yang nyaman untuk suatu fungsi. (
xchg eax,edi
pada akhirnya akan menambah 1 byte).Penelepon dapat menghitung panjang eksplisit jika diinginkan, dari
buffer_end - edi
. Tapi saya tidak berpikir kita bisa membenarkan menghilangkan terminator kecuali fungsinya benar-benar mengembalikan pointer awal + akhir atau panjang pointer. Itu akan menghemat 3 byte dalam versi ini, tapi saya rasa itu tidak bisa dibenarkan.idiv
. Arg lainnya tidak operan implisit.)dec edi
, jadi harus dalam 4GiB rendah)nasm -felf32 ascii-compress-base.asm -l /dev/stdout | cut -b -30,$((30+10))-
(Diedit tangan untuk mengecilkan komentar, penomoran baris itu aneh.)Mengejutkan bahwa versi yang paling sederhana tanpa dasarnya pengorbanan kecepatan / ukuran adalah yang terkecil, tetapi
std
/cld
biaya 2 byte untuk digunakanstosb
dalam urutan menurun dan masih mengikuti konvensi pemanggilan DF = 0 yang umum. (Dan pengurangan STOS setelah penyimpanan, membiarkan pointer menunjuk satu byte terlalu rendah pada loop keluar, dikenakan biaya tambahan byte untuk bekerja.)Versi:
Saya datang dengan 4 trik implementasi yang sangat berbeda (menggunakan
mov
load / store sederhana (di atas), menggunakanlea
/movsb
(rapi tapi tidak optimal), menggunakanxchg
/xlatb
/stosb
/xchg
, dan yang memasuki loop dengan hack instruksi yang tumpang tindih. Lihat kode di bawah) . Yang terakhir membutuhkan trailing0
di tabel pencarian untuk menyalin sebagai terminator string output, jadi saya menghitungnya sebagai +1 byte. Bergantung pada 32/64-bit (1-byteinc
atau tidak), dan apakah kita dapat mengasumsikan set pemanggil DF = 1 (stosb
turun) atau apa pun, versi yang berbeda (terikat untuk) terpendek.DF = 1 untuk disimpan dalam urutan menurun menjadikannya menang untuk xchg / stosb / xchg, tetapi pemanggil sering tidak menginginkannya; Rasanya seperti membongkar pekerjaan untuk penelepon dengan cara yang sulit dibenarkan. (Tidak seperti register arg-passing dan return-value kustom, yang biasanya tidak memerlukan biaya tambahan bagi pemanggil asm.) Namun dalam kode 64-bit,
cld
/scasb
berfungsi sebagaiinc rdi
, menghindari pemotongan pointer output ke 32-bit, jadi terkadang tidak nyaman untuk mempertahankan DF = 1 dalam fungsi 64-bit-clean. . (Pointer ke kode / data statis 32-bit di x86-64 non-PIE dapat dieksekusi di Linux, dan selalu di Linux x32 ABI, jadi versi x86-64 menggunakan pointer 32-bit dapat digunakan dalam beberapa kasus.) Bagaimanapun, interaksi ini membuatnya menarik untuk melihat berbagai kombinasi persyaratan.nostring
) .stosb_edx_arg
atauskew
) ; atau dengan DF yang masuk = tidak peduli, biarkan set: 16 + 1Bstosb_decode_overlap
atau 17Bstosb_edx_arg
stosb_decode_overlap
) , 18B (stosb_edx_arg
atauskew
)x86-64 dengan pointer 64-bit, penanganan DF lainnya: 16B (DF = 1
skew
) , 17B (nostring
dengan DF = 1, menggunakanscasb
bukandec
). 18B (stosb_edx_arg
mempertahankan DF = 1 dengan 3-byteinc rdi
).Atau jika kita membiarkan mengembalikan pointer ke 1 byte sebelum string, 15B (
stosb_edx_arg
tanpainc
di akhir). Semua siap untuk memanggil lagi dan memperluas string lain ke buffer dengan basis / tabel yang berbeda ... Tapi itu akan lebih masuk akal jika kita tidak menyimpan terminating0
juga, dan Anda mungkin meletakkan fungsi tubuh di dalam loop sehingga itu benar-benar sebuah masalah terpisah.x86-64 dengan pointer output 32-bit, DF = 0 konvensi pemanggilan: tidak ada peningkatan lebih dari pointer output 64-bit, tetapi 18B (
nostring
) terikat sekarang.skew
). Atau untuk mengatur DF = 1 dan membiarkannya, 17B untukskew
denganstd
tetapi tidakcld
. Atau 17 + 1B untukstosb_decode_overlap
denganinc edi
di akhir, bukancld
/scasb
.Dengan konvensi pemanggilan DF = 1: 16 byte (IA32 atau x86-64)
Membutuhkan DF = 1 pada input, biarkan diatur. Hampir tidak masuk akal , setidaknya berdasarkan fungsi masing-masing. Apakah hal yang sama seperti versi di atas, tetapi dengan xchg untuk mendapatkan sisa / keluar dari AL sebelum / sesudah XLATB (pencarian tabel dengan R / EBX sebagai basis) dan STOSB (
*output-- = al
).Dengan DF = 0 pada konvensi masuk / keluar yang normal, versi
std
/cld
/scasb
adalah 18 byte untuk kode 32 dan 64-bit, dan 64-bit bersih (berfungsi dengan pointer output 64-bit).Perhatikan bahwa input arg berada di register yang berbeda, termasuk RBX untuk tabel (untuk
xlatb
). Perhatikan juga bahwa perulangan ini dimulai dengan menyimpan AL, dan diakhiri dengan karakter terakhir yang belum disimpan (karena itumov
pada bagian akhir). Jadi loop "miring" relatif terhadap yang lain, maka namanya.Versi non-miring serupa melampaui EDI / RDI dan kemudian memperbaikinya.
Saya mencoba versi alternatif ini dengan
lea esi, [rbx+rdx]
/movsb
sebagai badan loop batin. (RSI diatur ulang setiap iterasi, tetapi RDI menurun). Tetapi tidak dapat menggunakan xor-zero / stos untuk terminator, jadi 1 byte lebih besar. (Dan itu tidak 64-bit bersih untuk tabel pencarian tanpa awalan REX pada LEA.)LUT dengan panjang eksplisit dan 0 terminator: 16 + 1 byte (32-bit)
Versi ini menetapkan DF = 1 dan membiarkannya demikian. Saya menghitung byte LUT tambahan yang diperlukan sebagai bagian dari jumlah byte total.
Trik keren di sini adalah memiliki byte yang sama mendekode dua cara yang berbeda . Kami jatuh ke tengah-tengah loop dengan sisa = basis dan hasil bagi = nomor input, dan salin terminator 0 ke tempatnya.
Pada saat pertama kali melalui fungsi, 3 byte pertama dari loop dikonsumsi sebagai byte tinggi dari disp32 untuk LEA. LEA yang menyalin basis (modulus) ke EDX,
idiv
menghasilkan sisanya untuk iterasi selanjutnya.Byte ke-2
idiv ebp
adalahFD
, yang merupakan opcode untukstd
instruksi yang dibutuhkan fungsi ini. (Ini adalah penemuan yang beruntung. Saya telah melihat ini dengan yangdiv
sebelumnya, yang membedakan dirinya dariidiv
menggunakan/r
bit dalam ModRM. Byte ke-2div epb
sebagaicmc
, yang tidak berbahaya tetapi tidak membantu. Tetapi denganidiv ebp
dapatkah kita benar-benar menghapusstd
dari atas fungsi.)Perhatikan register input berbeda sekali lagi: EBP untuk basis.
Trik decode yang tumpang tindih ini juga dapat digunakan dengan
cmp eax, imm32
: hanya dibutuhkan 1 byte untuk secara efektif melompat maju 4 byte, hanya flag clobbering. (Ini mengerikan untuk kinerja pada CPU yang menandai batas instruksi di L1i cache, BTW.)Tapi di sini, kami menggunakan 3 byte untuk menyalin register dan melompat ke loop. Itu biasanya akan mengambil 2 + 2 (mov + jmp), dan akan membiarkan kita melompat ke loop tepat sebelum STOS daripada sebelum XLATB. Tetapi kemudian kita membutuhkan STD terpisah, dan itu tidak akan sangat menarik.
Cobalah online! (dengan
_start
penelepon yang menggunakansys_write
hasil)Cara terbaik untuk debugging untuk menjalankannya di bawah
strace
, atau hexdump output, sehingga Anda dapat melihat memverifikasi bahwa ada\0
terminator di tempat yang tepat dan seterusnya. Tetapi Anda dapat melihat ini benar-benar bekerja, dan menghasilkanAAAAAACHOO
input(Sebenarnya
xxAAAAAACHOO\0x\0\0...
, karena kita membuang dari 2 byte sebelumnya di buffer ke panjang yang tetap. Jadi kita dapat melihat bahwa fungsi menulis byte yang seharusnya dan tidak menginjak byte yang seharusnya tidak ada. pointer-awal yang diteruskan ke fungsi adalah karakter ke-2 terakhirx
, yang diikuti oleh nol.)sumber
Jelly , 4 byte
Cobalah online!
ṃ
secara harfiah adalah built-in untuk ini. Akun tiga byte lainnya untuk pengindeksan satu berbasis Jelly.sumber
ṃ
" Base decompression; konversi x ke panjang basis (y) kemudian indeks menjadi y. "? Apakah itu untuk kasus yang sangat luar biasa di mana basis Anda semut untuk mengkonversi dan panjang string / integer / daftar sama? Ketika saya mencarinya, saya hanya dapat menemukan tiga jawaban menggunakannya: 1 ; 2 ; 3 . Agak builtin aneh di setiap hari tantangan kode-golf imo. : S“sspspdspdspfdspfdsp”
, tetapi dengan“çƥ÷£ḟ’ṃ“spdf”¤
Anda menyimpan enam byte. Ini sangat berguna dengan angka dasar 250 JellyPython 2 ,
4948 byte-1 byte terima kasih kepada Jo King
Cobalah online!
Versi alternatif (tidak akan selesai untuk jumlah besar),
4543 byte-2 byte terima kasih kepada Jo King
Cobalah online!
sumber
Arang ,
31 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Sunting: Disimpan 2 byte berkat hanya @ ASCII. Versi sebelumnya sebelum builtin ditambahkan, 8 byte:
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber
θη
? Tbh agak membingungkan. Mengapa tidak menghapusnya sepenuhnya dan pergi⍘
?D , 112 byte
Cobalah online!
Ini adalah port jawaban C ++ HatsuPointerKun
Gaya panggilan adalah
u(ulong(n), to!(char[])(b))
, di manan
danb
adalah argumen kiri dan kananD hal-hal spesifik
Sayangnya, kita perlu mengimpor
std.conv
untuk melakukan konversi tipe apa pun di atas konversi tipe yang sangat mendasar.Menggunakan sistem template golf, dan memberikan fungsi jenis yang diperlukan (itulah sebabnya menyebutnya bukan hanya adil
u(n,b)
), kita dapat mempersingkat kemunculanchar[]
danulong
ke1
byte masing-masing, ketika di dalam f fungsi.D menginisialisasi tipe kami untuk kami, demikian
C t;
juga singkatanC t=cast(char[])([])
to!C
mengkonversi integern%l
ke array karakter (menggunakan codepoint), dan~
merupakan gabunganforeach(ref c;t)
sepertifor(... : ...)
loop C ++ , tapi sedikit lebih lama.ref
seperti&
, itu memperlakukanc
sebagai disalin-oleh-referensi (yaitu, kita dapat memodifikasit
). Untungnya, D menyimpulkan jenisc
tanpa setiap jenis yang menunjukkan kata kunci.sumber
C ++,
150144 byte,uint64
masukan-6 byte terima kasih kepada Zacharý
Menggunakan variabel untuk menyimpan ukuran akan meningkatkan bytecount sebesar 1
Untuk memanggil fungsi:
Pertama angkanya, kedua adalah string (char array)
Kasus uji:
sumber
#include
, Anda bisa mengubahnya;;
menjadi adil;
, dan'0'
bisa saja48
for
loop:for(;n;n/=b.size())t=std::to_string(n%b.size())+t;
b.size()
tidak berubah dalam loop itu.Ranting, 66 byte
Dibuat
macro
yang harusimport
diedit menjadi templat.Nilai yang diharapkan:
Untuk argumen pertama (
n
):Untuk argumen kedua (
c
):Bagaimana cara menggunakan:
.twig
file{% import 'file.twig' as uncompress %}
uncompress.d()
Tidak disatukan (tidak berfungsi):
Anda dapat menguji kode ini di: https://twigfiddle.com/54a0i9
sumber
Pyth,
987 byteMenyimpan satu byte berkat hakr14 dan terima kasih lain kepada Tn. Xcoder.
Coba di sini
Penjelasan
sumber
m@Qd
dengan@LQ
vz
denganE
.C89, rentang terbatas ditandatangani
int n
,6453 bytechar **out
dan ubah, alih-alih mengambil dan mengembalikan achar *
Mengambil nomor sebagai
int
, tabel pencarian sebagai array + panjang.Keluaran ditulis menjadi a
char *outbuf
. Penelepon melewati (dengan referensi) pointer ke ujung buffer. Fungsi memodifikasi penunjuk itu untuk menunjuk ke byte pertama dari string saat kembali.Ini adalah C89 yang valid, dan berfungsi dengan benar bahkan jika optimasi diaktifkan. yaitu tidak bergantung pada
-O0
perilaku gcc ketika jatuh dari fungsi yang tidak kosong atau memiliki UB lainnya.Melewati sebuah pointer ke ujung buffer adalah normal untuk fungsi string int> yang dioptimalkan, seperti internal glibc
_itoa
. Lihat jawaban ini untuk penjelasan terperinci tentang memecah bilangan bulat menjadi digit dengan loop div / mod seperti yang kami lakukan di sini, di C serta as x86-64. Jika pangkalan adalah kekuatan 2, Anda dapat menggeser / menutupi untuk mengekstraksi angka MSD terlebih dahulu, tetapi jika tidak satu-satunya pilihan yang baik adalah paling tidak signifikan-digit pertama (dengan modulo).Cobalah online! . Versi tidak disatukan:
Dalam versi panjang-eksplisit ini, input adalah
char table[]
yang tidak memerlukan terminasi 0 byte, karena kita tidak pernah memperlakukannya sebagai string. Itu bisa menjadiint table[]
untuk semua yang kita pedulikan. C tidak memiliki wadah yang mengetahui panjangnya sendiri, jadi panjang penunjuk + adalah cara normal untuk melewatkan array dengan ukuran. Jadi kami memilih itu daripada perlustrlen
.Ukuran buffer maksimum kira-kira
sizeof(int)*CHAR_BIT + 1
, jadi kecil dan konstan waktu kompilasi. (Kami menggunakan banyak ruang ini dengan basis = 2 dan semua bit diatur ke 1.) misalnya 33 byte untuk bilangan bulat 32 bit, termasuk0
terminator.C89, ditandatangani
int
, tabel sebagai string C panjang implisit, 65 byteIni adalah hal yang sama tetapi inputnya adalah string panjang implisit sehingga kita harus menemukan panjangnya sendiri.
sumber
Utilitas inti Bash + , 49 byte
Cobalah online!
Komentar / penjelasan
Ini mengambil argumen baris perintah sebagai input (angka dalam basis 10, kemudian string tunggal dengan daftar karakter) dan output ke stdout. Karakter khusus seperti spasi, baris baru, dll dapat dimasukkan dalam notasi oktal (misalnya,
\040
untuk spasi), atau\n
untuk baris baru,\t
untuk tab, atau urutan pelarian lainnya yangecho -e
dantr
menafsirkannya secara identik.Banyak byte di sini untuk menangani karakter khusus dan kasus uji yang lebih besar. Jika saya hanya perlu menangani karakter yang tidak mengerikan dan jumlahnya kecil (misalnya, test case pertama), 24 byte berikut akan melakukannya:
Ini menggunakan ekspansi parameter
${#2}
untuk mendapatkan jumlah karakter dalam string, membangun program dc untuk melakukan konversi basis, dan kemudian mengirimkan nomor yang dikonversi melaluitr
.Ini tidak akan menangani baris baru atau spasi atau tab, jadi untuk menangani urutan pelarian tanpa mempengaruhi basis, saya menghitung jumlah karakter
wc -c
setelah menafsirkan lolos denganecho -en
. Ini memperluas program ke 38 byte:Sayangnya, dc memiliki "fitur" yang mengganggu di mana jika mengeluarkan sejumlah besar, ia akan membungkusnya dengan garis miring + baris baru, sehingga kotak uji yang lebih besar memiliki output tambahan ini. Untuk menghapusnya, saya menyalurkan output dc
tr -dc 0-9
untuk menghapus karakter non-numerik. Dan di sanalah kita.sumber
dc -e${#2}o$1p|tr 0-9 "$2"
untuk mengambil input secara harfiah alih-alih dalam bentuk \ escaped sehingga dapat menangani spasi, tetapitr
tidak memiliki opsi untuk tidak memperlakukan-
sebagai karakter rentang, misalnya. Jika input-
belum di salah satu ujung string, itu rusak. Mungkin Anda bisa menggunakannyased "y/0123456789/$2/"
. Tidak, saya kira tidak, GNUsed
membutuhkan kedua argumen untuky
memiliki panjang yang sama, dan sepertinya tersedak pada baris baru.APL (Dyalog Unicode) ,
14 1312 byteCobalah online!
Fungsi infix diam-diam; tidak dapat menangani test case terbesar karena representasi floating point.
Disimpan
12 byte berkat @ Adám!13 byte ditambahkan untuk header:(Saya lupa bahwa ini tidak berlaku. )⎕IO←0
: I ndex O rigin = 0 dan⎕FR←1287
: F loat R epresentation = 128 bit.Bagaimana?
sumber
Attache , 17 byte
Cobalah online!
Penjelasan
sumber
Kanvas , 7 byte
Coba di sini!
Implementasi lurus ke depan:
Set karakter input dapat berupa string juga asalkan tidak mengandung baris baru, karena Canvas tidak memiliki karakter baris baru & secara otomatis mengubahnya menjadi objek 2D.
sumber
Stax ,
65 byteJalankan dan debug itu
Penjelasan:
sumber
SOGL V0.12 , 10 byte
Coba Di Sini!
Cukup lama, mengingat idenya cukup banyak diimplementasikan dalam bahasa: di sini , masuk
memberikan string terkompresi menggunakan metode ini.
sumber
Ruby , 31 byte
Cobalah online!
sumber
Stax , 2 byte
Jalankan dan debug itu
:B
adalah instruksi dalam keadaan tenang yang melakukan ini. Ini biasanya beroperasi pada "string" * bukannya array "string". Pada akhirnya, ini berarti bahwa output adalah array array karakter tunggal. Tetapi output secara implisit rata pula.* Stax sebenarnya tidak memiliki tipe string. Teks diwakili oleh array integer dari codepoint.
sumber
J , 12 byte
Bagaimana?
Cobalah online!
sumber
Bahasa Wolfram (Mathematica) , 49 byte
Cobalah online!
sumber
C (gcc) , 110 byte
Cobalah online!
Deskripsi:
sumber
sprintf
. Versi C saya adalah 53 byte , dengan buffer output disediakan oleh pemanggil. Anda bisa melakukannyastrcpy
di akhir jika Anda ingin menyalin byte ke awal buffer.CJam , 11 byte
Cobalah online! Mengambil input sebagai nomor, lalu baris baru, lalu karakter dalam seni ASCII.
Penjelasan
sumber
liq
di awal, dan itu menghemat 3 byte!JavaScript, 39 byte
Solusi Port of Rod's Python .
Cobalah online
sumber
n
hingga 64-bit, bukan? (Python memiliki integer presisi arbitrer yang terpasang didouble
dalamnya , tetapi angka JS secara alami merupakan float -prisi yang dapat dikonversi ke integer). Tampaknya tidak berfungsi untuk kasus uji yang lebih besar dalam pertanyaan, seperti 1928149325670647244912100789213626616560861130859431492905908574660758972167966. Oh, tetapi pertanyaannya memungkinkan jawaban seperti itu. Meski begitu, harus diperhatikan.SimpleTemplate , 86 byte
Wow, ini adalah tantangan besar!
Ini menjadi sulit karena kurangnya akses langsung ke indeks tertentu ketika indeks adalah variabel.
Bug juga membuatnya lebih lama, membutuhkan untuk menyimpan nilai-nilai di dalam suatu variabel.
Nilai yang diharapkan:
Argumen pertama (
argv.0
) dapat berupa:Argumen kedua (
argv.1
) dapat berupa:Bagaimana ini bekerja?
Cara kerjanya seperti ini:
C
menjadi array yang berisi:C
"{@echoA."
"}"
join
fungsi PHP )Ini menghasilkan, misalnya,
C
berisi"{@echoA.0}{@echoA.1}..."
C
Tidak Disatukan:
Anda dapat mencoba kode ini di: https://ideone.com/NEKl2q
Hasil yang optimal
Jika tidak ada bug, ini akan menjadi hasil terbaik, dengan memperhitungkan batasan (77 byte):
sumber