Tantangan
Diberi dua bilangan bulat sebagai input ( x
dan y
), output x
sebagai string dengan sebanyak mungkin angka nol di depannya untuk menjadi y
karakter yang panjang tanpa tanda.
Aturan
Jika
x
memiliki lebih dariy
digit, outputx
sebagai string tanpa modifikasi.Output sebagai integer tidak diterima, bahkan jika tidak ada nol di depan.
Ketika
x
negatif, pertahankan apa adanya-
dan beroperasi pada nilai absolut.Negatif
y
harus diperlakukan sebagai 0, artinya Anda menghasilkanx
apa adanya (tetapi sebagai string)
Contoh:
IN: (1,1) OUT: "1"
IN: (1,2) OUT: "01"
IN: (10,1) OUT: "10"
IN: (-7,3) OUT: "-007"
IN: (-1,1) OUT: "-1"
IN: (10,-1) OUT: "10"
IN: (0,0) OUT: "0"
IN: (0,1) OUT: "0"
IN: (0,4) OUT: "0000"
Kode terpendek dalam byte menang, celah standar berlaku.
(-1,1)
memberi?+
tanda terkemuka dapat diterima untuk angka positif?Jawaban:
Japt ,
138 byteMengambil input pertama (
x
) sebagai string.Cobalah
Menyimpan 5 byte besar berkat produk ETH.
Penjelasan
Input string
U=x
dan integer tersiratV=y
.® }'-
membelahU
menjadi array pada simbol minus, memetakan di atasnya dan bergabung kembali ke string dengan simbol minus.©
logis DAN (&&
) jadi jika elemen saat ini benar (string yang tidak kosong) maka pad kiri (ù
) dengan 0 (T
) memanjangV
.sumber
-
: ethproductions.github.io/japt/…q
, yang kemudian akanq-_©ùTV
menghemat 1 byte :-)S.q()
(memberi kamiS.q(s,f)
) makaS
akan dibagis
, dijalankanf
dan bergabung kembali dengans
? Saya suka itu! :)N.s
,S/A.y
,N.ì
melakukan hal ini sudah) dengan sekelompok metode? Saya memiliki percakapan dengan seseorang, saya tidak bisa mengingat siapa sekarang: sPyth , 12 byte
Coba di sini!
sumber
Python 2 , 29 byte
Cobalah online!
Hanya
str.zfill
datang begitu dekat.sumber
05AB1E ,
1110 byteMasukan diberikan sebagai
amount_of_digits, number
Cobalah online!
Penjelasan
sumber
Python, 29 byte
Ambil input sebagai
f(x,y)
. Menggunakan%
operator Python .Cobalah online!
sumber
C #, 56 byte
Cobalah secara Online!
sumber
Java (OpenJDK 8) , 47 byte
Cobalah online!
Pada awalnya saya pikir, mudah, 30 karakter maks (yang cukup pendek ketika memanipulasi string di Jawa). Kemudian pengecualian terjadi.
sumber
JavaScript (ES6), 42
Rekursif, parameter dalam urutan terbalik, pertama y kemudian x. Dan kari
Uji
sumber
f(y)(x)
alih-alihf(x,y)
.y=>r=x=>x<0?'-'+r(-x):(x+='')[y-1]?x:r(0+x)
datang sangat dekat ...Python 3.6 ,
2837 byteCobalah online! (Uji kasus dari jawaban Colera Su)
Mengambil keuntungan dari cara baru untuk memformat string dalam python 3.6
+9 byte untuk ditangani
y<0
sumber
y
negatif: tio.run/##K6gsycjPM/…bash,
27, 25 bytes-2 byte terima kasih kepada Bruce Forte
coba online
sumber
printf %\ 0$[1+$1]d $2|xargs
.printf %\ 0$[1+$2]d $1|xargs
, saya tidak ingat format ini untuk nomor yang ditandatangani dan trik xargs untuk menghapus ruang terdepanSekam , 12 byte
Cobalah online!
Penjelasan
sumber
R,
5648 byteCobalah online!
-8 byte berkat djhurio
Penjelasan
sprintf("%0zd",x)
kembalix
sebagai string yang diisi dengan nol menjadi panjangz
paste0("%0",y+(x<0),"d")
membangun string"%0zd"
, di manaz
adalahy
, ditambah 1 jikax
kurang dari nolz
kurang dari jumlah digitx
,x
dicetak sebagai string seperti apa adanyasumber
function(x,y)sprintf(paste0("%0",y+(x<0),"d"),x)
Alice , 23 byte
Cobalah online!
Input harus dipisahkan dengan linefeed dengan nomor pada baris pertama dan lebar pada baris kedua.
Penjelasan
Ini adalah kerangka kerja biasa untuk program linier dalam mode Ordinal. Satu-satunya tangkapan dalam kasus ini adalah bit ini:
Hal ini menyebabkan IP untuk memasuki mode Kardinal secara vertikal dan menjalankan hanya
&
dalam mode Kardinal sebelum melanjutkan dalam mode Ordinal.Membuka aliran kontrol zigzag kemudian memberikan:
Berikut adalah dua alternatif, juga pada 23 byte, yang menggunakan Cardinal
H
( abs ) untuk menyingkirkan-
:Pada prinsipnya, ini adalah perintah yang lebih pendek, tetapi
&
tidak cocok dengan posisi di mana ada string 1-karakter pada stack, jadi kita perlu melewati itu dengan a#
.sumber
C, 33 byte
Cobalah online!
sumber
Arang ,
1613 byteCobalah online!
Ini adalah yang terpendek yang saya dapat menggunakan Charcoal tanpa mencetak spasi putih terdepan atau tambahan. Setidaknya saya sekarang mulai mengerti bagaimana menggunakan
Modulo
fungsi untuk memformat string.Kode deverbosed adalah sebagai berikut:
sumber
-
atau tidak sama sekali sangat mudah di Charcoal: Mencetak 1 cetakan-
sambil mencetak 0 tidak menghasilkan apa-apa. Jadi, ternary itu berlebihan, menghemat 3 byte.InputNumber()
denganCast(q)
, saya pikir Anda kemudian dapat beralih ke perbandingan string untuk menyimpan byte lain.Ternary
!Retina , 39 byte
Cobalah online!
Input harus dipisahkan dengan koma dengan angka pertama dan lebar kedua.
sumber
PHP, 45 byte
atau
Jalankan dengan
-nr
atau coba online .sumber
Mathematica, 118 byte
Cobalah online!
sumber
Mathematica,
6362 byteCobalah online!
sumber
IntegerLength
bukannyaIntegerDigits
. Anda dapat menyimpan byte dengan menggunakanIntegerLength@#
alih-alihIntegerLength[#]
.Excel, 29 byte
Menggunakan
TEXT
fungsionalitas Excel ("Mengubah nilai menjadi teks dalam format angka tertentu").x
di A1,y
di B1sumber
)))
for -3 Bytes dengan mengonversi ke Google SheetsOktaf , 44 byte
Cobalah online!
sumber
Haskell , 54 byte
Cobalah online!
sumber
Ruby ,
3128 byteTerima kasih Carl untuk menghemat 3 byte menggunakan interpolasi.
Cobalah online!
sumber
Japt ,
1412 byteDisimpan 2 byte berkat produk @ETH
Cobalah online
sumber
x
sebagai string selama 10 byte .U
sebagai string yang memungkinkan kita untuk bermain golf dari 2 karakter pertama.PowerShell ,
2540 byteCobalah online!
Penjelasan
Ini memanggil
.ToString()
nomor dengan string format yang dihasilkan, tetapi mengalikannya dengan -1, 0, atau 1 berdasarkan apakah$b
(y
) negatif, 0, atau positif masing-masing; ini untuk menanganiy
nilai - nilai negatif yang format string tidak lakukan sendiri.Ini tampaknya membutuhkan pembungkus angka negatif dalam substatemen
()
agar berfungsi yang hanya merupakan kekhasan doa ketika menggunakan literal; jika melewati variabel tipe integer, tidak perlu itu.sumber
y
negatif.C # 6.0, 35 byte
Solusi alternatif (51 byte)
sumber
Bersih ,
908683 byteCobalah online!
sumber
C (gcc) , 45 byte
Cobalah online!
Penjelasan
printf
memformat tiga argumen:%s
memformat string"-"+(x>=0)
."-"
benar-benar hanya sebuah alamat, sesuatu seperti41961441
. Di memori, ini terlihat seperti ini:Ketika diformat menjadi string, C mengambil alamat (katakanlah 41961441) dan terus mendapatkan karakter sampai byte nol (0x00) terpenuhi. Ketika x kurang dari nol, nilainya
"-"+(x>=0)
memiliki alamat asli (41961441). Jika tidak,x>=0
adalah 1, jadi ekspresi menjadi"-"+1
, yang menunjuk byte nol setelahnya"-"
, yang tidak mencetak apa pun.%0*i
mencetak bilangan bulat yang diisi dengan jumlah0
s yang ditentukan .y
menunjukkan angka ini. Kamiabs(x)
mendukung untuk menghindari yang negatif dalam beberapa argumen.sumber
Perl, 25+
-n
bendera = 26 byteCobalah online!
sumber
Perl 5, 22 + 1 (-
n
) = 23 byteCobalah online
sumber
10,-1
+5 bytes
-5 bytes