Ini cukup sederhana untuk, mengingat angka n
, membuat rentang dari 0
hingga n-1
. Bahkan, banyak bahasa menyediakan operasi ini sebagai builtin.
Program CJam berikut membaca bilangan bulat, dan kemudian mencetak kisaran seperti itu ( Coba online! ):
ri,
Perhatikan bahwa ia mencetak angka tanpa pemisah.
Tantangan
Tugas Anda adalah membalik proses ini. Anda harus menulis sebuah program yang, dengan string yang mewakili suatu rentang, mengembalikan angka yang digunakan untuk menghasilkan rentang itu.
Spesifikasi
- Angka-angka diberikan tanpa pemisah apa pun.
- Anda dapat menganggap string membentuk rentang yang valid.
- Anda dapat menggunakan pengindeksan berbasis 0 atau 1 untuk rentang Anda.
- Anda dapat berasumsi bahwa output yang benar tidak akan pernah melebihi 32.767 (jadi input yang valid tidak akan pernah memiliki panjang lebih besar dari 152.725).
- Anda dapat berasumsi bahwa output yang benar akan selalu positif (sehingga Anda tidak harus menangani 0 atau negatif).
Ini adalah kode-golf , sehingga jawaban bersaing terpendek (diukur dalam byte) menang.
Uji Kasus
Diindeks 0:
0123 -> 4
0 -> 1
0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 -> 101
1-diindeks:
1234 -> 4
1 -> 1
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 -> 100
Jawaban:
Prolog (SWI) ,
9180 byteDiindeks 0.
Baris baru ditambahkan untuk dibaca.
Cobalah online!
sumber
Sekam , 5 byte
Cobalah online!
Hanya surat!
Mengambil input sebagai string, hasilnya 1-diindeks.
Penjelasan
sumber
05AB1E ,
76 byte1-diindeks.
Cobalah online! atau sebagai Test Suite
Penjelasan
sumber
0
tidak peduli input: tio.run/##MzBNTDJM/f8/3efcdi/PbLv//5UMjYxNTM3MLSwNDZQA[NÝJQ#]N
adalah ide saya, tetapi ini lebih baik karena berfungsi untuk""
.Java 8,
6659 byteDiindeks 0
-7 byte terima kasih kepada @ PunPun1000 .
Saya merasa ini dapat dipersingkat dengan hanya memeriksa panjang input, karena kita dapat menganggap input selalu valid. Masih mencari tahu ini.Tidak dapat mengetahuinya, dan mungkin akan memakan biaya terlalu banyak byte di Jawa untuk berguna (hal yang sama berlaku untuk mengembalikan substring pada akhir input yang diindeks 1).Penjelasan:
Coba di sini.
sumber
Brachylog ,
97 byteCobalah online!
Diindeks 0.
Penjelasan
Di sini kita melewatkan input melalui variabel Output, dan mengakses hasilnya melalui variabel Input.
sumber
Ly , 29 byte
Cobalah online!
Tidak percaya ini bekerja sebaik itu ...
sumber
Japt , 8 byte
Mulai untuk memahami metode fungsi di Japt.
Diindeks 0. Dapat mengambil input sebagai string, integer atau array yang mengandung 0 atau 1 elemen.
Menguji
Penjelasan
Input string yang tersirat
U
.Dapatkan bilangan bulat pertama
>=0
yang mengembalikan true ketika melewati fungsi yang ...Menghasilkan array bilangan bulat dari
0
ke 1 kurang dari bilangan bulat saat ini ...Bergabung ke string ...
Memeriksa string untuk kesetaraan dengan
U
.Output implisit bilangan bulat yang dihasilkan.
Alternatif, 8 byte
Menguji
sumber
Arang , 13 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber
Haskell,
4037 byteFungsi yang membalikkan rentang berbasis nol.
Terima kasih kepada Laikoni karena telah menghemat 3 byte!
Cobalah online.
sumber
f s=[n|n<-[0..],(show=<<[0..n])>s]!!0
.|m<-n+1=s!m
.Retina , 30 byte
Secara rekursif menambahkan titik koma setelah setiap angka lalu menghitung jumlah titik koma
Cobalah online!
sumber
JavaScript (ES6),
3231 byteDisimpan 1 byte berkat Challenger5
Uji kasus
Tampilkan cuplikan kode
sumber
f(payload_param)()
atau bahkanf(payload_param)(some_constant)
. (Kebetulan, saya tidak yakin itu akan berhasil dalam kasus khusus ini karena saya perlu keduanyar
dann
diinisialisasi.)Mathematica, 46 byte
1-diindeks
memasukkan
sumber
Ruby ,
515046 byte(Ini adalah program Ruby saya yang pertama sehingga mudah untuk golf lebih jauh)
-4 byte terima kasih kepada @Nnnes
sumber
.index(gets)
=>.index gets
. Anda dapat menggunakannya4e4
sebagai gantinya8**5
, meskipun ini akan membuatnya berjalan lebih lambat. Secara umum OK, dan sering menghemat beberapa byte, untuk menggunakan lambda anonim untuk jawaban Ruby: Coba online! (Saya mengubah batas ke 100 sehingga tidak ada batas waktu.)Python 2 , 43 byte
Cobalah online!
Python 2 , 43 byte
Cobalah online!
Python , 46 byte
Cobalah online!
Strategi yang berbeda. Membawa sejumlah karakter dari akhir sama dengan panjang run terbesar
0
di.Python , 46 byte
Cobalah online!
Versi rekursif di atas.
sumber
... i*'0'in s[1:] for ...
atau sesuatu seperti itu?R , 47 byte
Cobalah online!
1-diindeks
sumber
"if"
sebagai gantiifelse
nchar
berfungsi seperti yang Anda harapkan pada angka. Namun, Anda perlu menangani pencetakan output Anda, karena ini tidak akan ketika dijalankan sebagai program lengkap.n=nchar(scan());cat(which(cumsum(nchar(1:n))==n))
APL (Dyalog) ,
1711 byte-6 byte terima kasih kepada ngn .
Cobalah online!
⍳⊂
temukan ɩ ndex dari seluruh argumen dalam{
...}
hasil dari fungsi anonim ini:≢
panjang argumen⍳
eg ntegers sampai itu⍕¨
format (stringify) masing-masing,\
gabungan kumulatif dari merekasumber
{,\⍕¨⍳≢⍵}⍳⊂
(11 karakter)Perl 5 , 19 byte
Kode 18 byte +1 untuk
-p
.Menggunakan pengindeksan berbasis 1. -7 byte berkat @ nwellnhof 's banyak lebih baik pendekatan!
Cobalah online!
Penjelasan
$\
adalah variabel khusus yangprint
diedit secara otomatis setelah setiap pernyataan, jadi dengan menggunakannya untuk menyimpan nomor kita, kita tidak perlu memperbarui$_
(yang secara otomatis dicetak sebagai bagian dari fungsi-p
flag) untuk mengandung output yang diinginkan. Kemudian, sementara input dimulai dengan$\
, hapus danredo
program, yang lagi menambah$\
dan menggantinya. Ketika tidak lagi menemukan nomor di awal string, kita selesai! Akhirnya, pengurangan$\
jadi kami memiliki angka terakhir dalam kisaran.sumber
$i++while s/$i\B//
(18 + 1 byte)?Python 2 , 46 byte
Diindeks 0
Cobalah online!
sumber
CJam , 16 byte
Cobalah online!
Alternatif 16 byte
Cobalah online!
sumber
CJam , 13 byte
Begitu banyak koma ...
Cobalah online!
Penjelasan
sumber
Perl 6 ,
30 2827 byteMenguji
Menguji
Menguji
Diperluas:
'',0...*
menghasilkan urutan yang tak terbatas dari nilai-nilai''
,0
,1
,2
,3
...[\~] '',0...*
menghasilkan urutan tak terbatas dari semua input yang mungkinPerhatikan bahwa kode ini tidak akan pernah berhenti jika Anda memberikan input yang tidak valid.
sumber
Pyth ,
1110 byte1-diindeks.
Coba di sini
Jika string kosong dapat diabaikan, ini dapat disingkat menjadi 6 byte :
-1 byte berkat @Mnemonic
sumber
?QfqQjkUT)1
dapat melakukannya di 11 juga, tapi saya merasa seperti pemesanan ulang bisa golf dari byte. Ada ide?jk
alih-alih s`m.CJam,
141211 byteCobalah secara Online
sumber
Dyvil ,
4238 byteAlgoritma yang sama dengan jawaban Java ini , kecuali itu (ab) menggunakan beberapa spesialisasi sintaksis Dyvil.
Penjelasan:
4
Bytes yang disimpan dengan menggunakan ekspresi akses penjepit, bukan variabel untuk akumulatorsumber
MATL , 14 byte
1-diindeks.
Cobalah online!
Penjelasan
sumber
C # , 72 byte
Data
String
i
Array int yang akan diuraikanInt32
Jumlah yang digunakan untuk membuat arrayGolf
Tidak disatukan
Tidak terbaca dibaca
Kode lengkap
Rilis
72 bytes
- Solusi awal.Catatan
sumber
i=>{int c,p=c=0;for(;p<i.Length;)p+=(c+++"").Length;return c;}
62 bytesSOGL V0.12 ,
11109 byte1-diindeks.
Coba Di Sini!
Penjelasan:
..atau 7 byte tanpa kasing kosong
Coba Di Sini!
sumber
Aceto ,
2725 byteIndeks berbasis 1.
Kami
r
menghasilkan input danM
mengemorasinya (dan langsung mem -input- kannyaL
), lalu kami meniadakannya (!
; mengarah ke nilai yang sebenarnya hanya untuk string kosong). Jika nilai ini benar (`
), kami melompat ke akhir (;
), di mana kitap
mematahkan nol implisit.Jika tidak, kami menambah nilai tumpukan saat ini (awalnya nol), menduplikatnya, dan meletakkan satu salinan di tumpukan di sebelah kanan, sementara juga memindahkannya ke sana (
Id]
). Kami kemudian membangun rentang menurun (z
), bergabung dengan tumpukan sebagai string (¥
), dan memindahkan nilai (dan kami) pada tumpukan asli lagi ([
). KamiL
memiliki nilai yang kami hafal sebelumnya (input) dan membandingkannya dengan string ini. Jika sama, kita melompat ke ujung lagi, tempat kita mencetak nilai "penghitung" saat ini (=`;
).Jika tidak, banyak ruang kosong dilalui hingga kurva Hilbert akhirnya menyentuh
<
yang menempatkan IP di atasI
lagi, menambah penghitung dan menguji lagi.sumber
Ditumpuk , 23 byte
Cobalah online!
Pada dasarnya, peningkatan
0
hingga rentang dari0
ke angka terlihat seperti input, memeriksa persamaan terlebih dahulu.sumber
Jelly , 8 byte
Cobalah online!
sumber