Anda ingin membuat string di mana karakter ( 1-diindeks ) pada indeks n
berada n
. Ketika n
kurang dari 10, ini mudah: "123456789"
. Ketika n
12, misalnya, menjadi tidak mungkin, karena angka lebih besar dari 9 (dalam basis 10) mengambil lebih dari satu karakter. Kita bisa kompromi dengan membagi string menjadi substring dua karakter: "020406081012"
. Sekarang indeks akhir setiap substring n
adalah n
.
Ini dapat digeneralisasi untuk semua d
angka -digit. Berikut ini penjelasan untuk bagian "0991021" dari string untuk angka tiga digit:
Index: ... * 97 98 99*100 101 102*103 ...
* * *
*---+---+---*---+---+---*---+
Character: ... * 0 | 9 | 9 * 1 | 0 | 2 * 1 | ...
*---+---+---*---+---+---*---+
Jika Anda belum mengetahuinya, Anda harus menulis program / fungsi yang mengambil string atau integer dan mengeluarkan string referensial sendiri seperti yang ditentukan di atas. Anda juga dapat menampilkan larik angka tunggal, karakter, atau string karakter tunggal.
Bilangan bulat yang diberikan akan selalu positif dan habis dibagi oleh panjangnya (mis. 126 habis dibagi 3; 4928 habis dibagi 4). Program Anda secara teoritis harus bekerja untuk input besar sembarang, tetapi Anda dapat menganggap itu lebih kecil dari bilangan bulat maksimum dan / atau panjang string bahasa Anda.
Beberapa pengamatan jika Anda masih belum mendapatkannya: Panjang output akan selalu menjadi input itu sendiri, dan angka-angka yang muncul dalam output akan habis dibagi dengan jumlah digit pada input.
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Uji kasus
1 => 1
9 => 123456789
10 => 0204060810
105 => 003006009012015018021024027030033036039042045048051054057060063066069072075078081084087090093096099102105
1004 => 00040008001200160020002400280032003600400044004800520056006000640068007200760080008400880092009601000104010801120116012001240128013201360140014401480152015601600164016801720176018001840188019201960200020402080212021602200224022802320236024002440248025202560260026402680272027602800284028802920296030003040308031203160320032403280332033603400344034803520356036003640368037203760380038403880392039604000404040804120416042004240428043204360440044404480452045604600464046804720476048004840488049204960500050405080512051605200524052805320536054005440548055205560560056405680572057605800584058805920596060006040608061206160620062406280632063606400644064806520656066006640668067206760680068406880692069607000704070807120716072007240728073207360740074407480752075607600764076807720776078007840788079207960800080408080812081608200824082808320836084008440848085208560860086408680872087608800884088808920896090009040908091209160920092409280932093609400944094809520956096009640968097209760980098409880992099610001004
C, 64 byte
Mengambil integer tunggal sebagai input pada stdin.
sumber
JavaScript (ES6), 83 byte
Ya, itu string templat bersarang. 79 byte dalam ES7:
sumber
MATL ,
1514 byteCobalah online!
sumber
05AB1E , 15 byte
Kode:
Penjelasan:
Penggabungan dilakukan seperti ini:
Dari ini:
Hasilnya adalah ini:
Menggunakan pengkodean CP-1252 . Cobalah online! .
sumber
ñ
berhasil seperti itu.Python 2,
7870686463 byteSebenarnya mendasarkan pada ide Semangka Destructible membuatnya lebih kecil (menggunakan
input
lebih baik) (mengisi string mundur menghemat 4 byte) (tidak()
samawhile
):Berikut ini adalah pendekatan 70 byte yang lama (Menyimpan 8 byte dengan menggunakan backquotes alih-alih
str
dan menjatuhkan tanda kurung di sekitar generator berkat Dennis):sumber
`x`
bukanstr(x)
. Juga, Anda tidak perlu di[]
sekitar generator.while(n)
.Python 2, 63 byte
Uji di Ideone .
sumber
JavaScript (ES6), 66
Rekursif, input
n
sebagai string (bukan angka) dan membatasi ukuran string output hingga 2GB (yang berada di atas batas string kebanyakan mesin javascript)Uji
sumber
R,
666462 byteedit:
x=nchar(n<-scan());paste0(str_pad(1:(n/x)*x,x,,0),collapse="")
usaha golf pertama ...
sumber
2sable , 13 byte
Kode:
Menggunakan pengkodean CP-1252 .
sumber
15AB1E
Brachylog ,
5345423728 byteCobalah online!
sumber
Bash,
3122 byteUji di Ideone .
Terima kasih kepada @izabera karena bermain golf 6 byte!
sumber
Ruby,
5248 +n
bendera = 49 bytesumber
chop
jika Anda menganggap input dilewatkan tanpa mengekor baris baru? Saya tidak yakin apakah itu akan berhasil. Atau bagaimana dengan anggapan selalu ada, dan menulisl=~-size
?size
seperti itu tidak berhasil untuk saya. Oh well, saya ingat trik yang saya gunakan dalam jawaban sebelumnya yang lebih pendekPython
32,797469656867 byteDennis terima kasih!
peningkatan jumlah byte dari metode output buruk
sumber
len(x)
bukanf
dan kemudian menyimpan byte dengan menugaskannya ke variabel?/
melakukan argumen integer divisi foe.integer.zsh, 28 byte
zsh + seq,
2120 byteIni adalah jawaban yang hampir sama dengan Dennis tetapi dalam 20 byte karena zsh
sumber
Haskell, 51 byte
sumber
Perl, 40 byte
39 byte kode +1 untuk
-n
.Pemakaian
sumber
k4, 27
Tidak benar-benar bermain golf sama sekali, hanya implementasi langsung dari spec.
sumber
Javascript - 76
atau 71 jika memungkinkan untuk argumen string:
Terima kasih kepada @ user81655!
Tidak Disatukan:
banyak tempat untuk perbaikan, tapi saya lelah sekarang
sumber
n=>eval('c="";for(a=b=(""+n).length;a<=n;a+=b)c+=`${+`1e${b}`+a}`.slice(1)')
. Bit utama menggunakanfor
loop dan1e${b}
trik Neil .Uncaught SyntaxError: Invalid or unexpected token
. Belum debugged karena saya baru bangun: DR,
149142138 byteMembiarkan
nchar
kode memberikan program dengan jumlah byte yang sama daripada menggantinyab
, tetapi memiliki huruf acak yang berkeliaran dalam kode membuatnya lebih ... misteriusTidak Digabungkan:
Masing-masing
nchar(strtoi(something))
memungkinkan untuk menghitung jumlah angka dalam angka tertentu.The
strsplit
fungsi output daftar vektor yang mengandung unsur-unsur splitten. Itu sebabnya Anda harus mencapai1
elemen st daftar, dan kemudiani
elemen th dari vektor, menulisstrsplit[[1]][i]
sumber
SQF - 164
Menggunakan format fungsi-sebagai-file:
Sebut sebagai
INTEGER call NAME_OF_COMPILED_FUNCTION
sumber
PowerShell, 77 byte
Menggunakan interpolasi string untuk mempersingkat gips string. Bagian-bagian sebelum titik koma kedua mempersingkat nama-nama hal yang digunakan kembali. Kemudian, setiap bilangan bulat hingga input - dan hanya mereka yang merupakan kelipatan dari panjang input - yang diisi sepanjang string input dan akhirnya bergabung menjadi satu.
sumber
Sebenarnya, 30 byte
Cobalah online!
Saya tidak senang dengan panjang kode ini, tapi saya tidak yakin itu bisa dibuat lebih pendek (jika ada).
Penjelasan:
sumber
CJam, 19 byte
Cobalah online . Belum ada yang diposting di CJam, jadi ini skrip yang saya gunakan untuk test case.
Penjelasan
sumber
PHP,
8378 byteTips lebih dari diterima. Kelola untuk golf sendiri dengan satu byte dengan mengubahnya dari loop for menjadi loop sementara.
Kode ini mengasumsikan bahwa ini sedang dieksekusi dari baris perintah dan $ argv [1] adalah int.
Terimakasih untuk:
@AlexGittemeier Sarannya (lihat komentar) memutari ini dengan 5 byte hingga 78 byte.
sumber
echo sprintf(...)
->printf(...)
Perl 6,
695946 bytesumber
fmt
daftar alih-alihmap
,sprintf
dan[~]
. 42 byte