pengantar
Dalam basis 10, konstanta Champernowne didefinisikan dengan menggabungkan representasi bilangan bulat berturut-turut. Di base 10: 0.1234567891011121314151617...
dan seterusnya.
Anda dapat melihat bahwa penampilan pertama 15
dimulai pada 20th
desimal:
Position
0000000001111111111222222222233333333334444444444555555555566666666
1234567890123456789012345678901234567890123456789012345678901234567
^
0.1234567891011121314151617181920212223242526272829303132333435363738...
^^
15 = position 20
Tampilan pertama 45
dimulai pada 4th
desimal:
Position
0000000001111111111222222222233333333334444444444555555555566666666
1234567890123456789012345678901234567890123456789012345678901234567
^
0.1234567891011121314151617181920212223242526272829303132333435363738...
^^
45 = position 4
Jadi, tugasnya mudah. Dengan bilangan bulat non-negatif, output posisi bilangan bulat dalam konstanta Champernowne.
Aturan
- Anda dapat menyediakan fungsi atau program
- Ini adalah kode-golf , jadi pengiriman dengan jumlah byte paling sedikit menang!
Uji kasus
Input: 20
Output: 30
Input: 333
Output: 56
Input: 0
Output: 11 (note that the 0 before the decimal point is ignored)
Input: 2930
Output: 48
0 <= x <= 99
, tetapi secara teoritis harus bekerja untuk bilangan bulat lebih tinggi dari99
.Jawaban:
Pyth, 10
Menggabungkan
input + 10
angka pertama kemudian menemukan indeks berbasis 0 ditambah satu .. Sepuluh tambahan hanya diperlukan untuk 0.Test Suite
sumber
2015-12-17 15:01:23Z
atau sesuatu?LabVIEW, 29 Primview LabVIEW
Ini menggunakan string untuk saat ini. Ini cocok dengan input sebagai pola dan output offset - (panjang input -1).
sumber
Javascript, 57 byte
Disimpan 1 byte berkat Conor O'Brien.
sumber
y=
bagian key=b=" "
; menambah ruang seperti menambah nol. (a=prompt(y=b=" ");...
)Haskell, 62 byte
Contoh penggunaan:
(#(show=<<[1..])).show $ 2930
->48
.Cara kerjanya:
a # b
menemukan posisi dia
dalamb
: jikaa
awalanb
pengembalian1
, tambahkan1
ke panggilan rekursif dengana # tail b
. Fungsi pointfree(#(show=<<[1..])).show
mengharapkan argumenn
dan panggilan (tanpa nama)show n # show=<<[1..]
.Fungsi
subIndex
juga akan melakukan pekerjaan#
, tetapi yang diperlukanimport Data.List.Utils
tidak membuahkan hasil.sumber
.show
Ruby, 28
Termasuk 0 di awal sehingga pencocokan 1-diindeks, tetapi digunakan
\B
untuk mengharuskan kecocokan tidak di awal string.sumber
Japt, 11 byte
Ini awalnya mengalahkan Pyth, tetapi tampaknya itu tidak berhasil untuk input
0
.Cobalah online!
Bagaimana itu bekerja
sumber
q
dalam kode dan bukan simbol negasi logis¬
?¬
adalah jalan pintas untukq
(ituq
dengan ruang berikut). Ini sepertinya sering menjadi titik kebingungan, jadi saya sudah berbaris versi yang lebih pendek dengan yang penuh.Lua, 54 Bytes
Catatan:
Saat ini program ini mencetak kemunculan pertama dari karakter pertama dari string, dan titik di mana ia berakhir. Jika ini tidak diizinkan, akan dikenakan biaya beberapa byte lagi.Saya ingin mengajukan permohonan bonus karena program saya mencetak posisi pertama dan posisi terakhir dari nomor input.sumber
MATL , 22 byte
Ambil input (
i
), buat vektor 1 menjadi input + 10 (10+:
), ubah vektor menjadi string (Ys
), dan hapus spasi yang menyakitkan, (t' '=~)
). Kemudian, konversikan input ke string (Ys
), temukan di mana string input berada di string angka (Xf
) dan ambil lokasi pertama (1)
). Thet
's danw
' s memanipulasi stack (duplikat dan swap, masing-masing).sumber
PowerShell,
3944 byte[Sunting: asumsi saya tidak berlaku, membangun array dari 1-0 tidak menemukan 0 di tempat 11. Sebaliknya, membangun dari 1-x + 10 untuk menangani 0 juga, sekarang 44 byte]
Anda akan selalu menemukan x saat membuat string konstanta Champernowne pada titik terakhir saat Anda menambahkan x di akhir, sehingga array dari 1-x akan selalu memiliki jawabannya. Pertanyaannya menjadi "apakah itu terjadi lebih cepat dari itu?" . Kode ini
menghasilkan rentang angka, melemparkannya ke string, dan mencari parameter di dalamnya. Karena PowerShell adalah shell berorientasi objek, parameter sebenarnya adalah
[int]
tipe, jadi mencoba menyimpan dua karakter.IndexOf($i)
akan mencari string untuk integer dan tidak menemukan apa pun. Itu sebabnya saya menggunakan interpolasi string"$i"
.sumber
.IndexOf()
ternyata memiliki preferensi operasi lebih tinggi daripada unary-join
memaksa parens dan penawaran. : - /MATL (rilis 1.0.1), 22 byte
Contoh
Penjelasan
MATL (rilis 20.8.0), 16 byte (tantangan tanggal bahasa)
Kredit ke @Giuseppe untuk versi program ini (sedikit dimodifikasi)
Cobalah online!
Penjelasan
sumber
G
berisi input (dan input tersirat), saya kira jawaban ini dapat dipersingkat dengan cukup banyak, dan semuaYs
kebutuhan harus diubah menjadiV
; Saya datang dengan10+:"@Vv]!GVXf1)
16 byte.Ys
perlu diubahV
untuk digunakan dalam versi penerjemah yang paling mutakhir. Saya selalu terkesan dengan betapa bahasanya telah meningkat!PowerShell,
5450 BytesTerima kasih kepada TessellatingHeckler untuk gagasan bertukar
while
loop untukfor
loop.Jalankan melalui
for
loop. Seperti bahasa lain, pernyataan pertama dalam loop dapat membangun variabel dan tugas, jadi ini dimulai dengan$c
sama dengan hanya string kosong''
sehingga kita memiliki pengindeksan nol string yang berbaris dengan pengindeksan desimal dari tantangan. Kami kemudian berada dalam satu loop yang memeriksa apakah$c
memiliki integer input ($args
) di suatu tempat di dalamnya (yaitu, karena.IndexOf()
mengembalikan-1
jika string tidak ditemukan, kami menambahkan satu ke itu (0
) dan bukan itu ($TRUE
) untuk melanjutkan loop). Jika tidak ditemukan, kami menambahkan$i
variabel penghitung yang ditambahkan sebelumnya, kemudian periksa kembali string. Setelah string ditemukan,,.IndexOf()
akan mengembalikan nilai positif, yang bukan darinya$FALSE
, keluar dari loop. Akhirnya, kami menampilkan indeks dengan$x
.sumber
for
loop klasik ...for($c='.';($x=$c.IndexOf("$args"))-lt0;$c+=++$i){}$x
dan simpan 1 karakter. Karena sebagian besar panggilan IndexOf akan mengembalikan -1, tambahkan satu untuk itu dan boolean! cor, untuk tes yang lebih pendek. Tetapi Anda perlu orangtua untuk melakukan itu. Kosong $ c dan +1 di dalam parens yang ada, bonus lebih pendek.for($c='';!($x=$c.IndexOf("$args")+1);$c+=++$i){}$x
51 byte. (tapi saya memposting 39 byte saya sebagai jawaban sendiri karena itu pendekatan yang sama sekali berbeda: P).$c
rangkaian ke loop untuk golf titik koma. Sekarang jam 50.JavaScript (ES6), 40 byte
Menggunakan fungsi rekursif
f
untuk menghindari loop. The pencarian metode bekerja sama denganindexOf
kecuali bahwa dibutuhkan regexp sebagai parameter, yang tidak relevan untuk tantangan ini.Menambahkan
" "
untukn=0
kasing (nol adalah falsy di JS) memaksa+
untuk melakukan penggabungan string bukan penambahan, dan mengoreksi pengindeksan berbasis nol.sumber
Python 3, 54.
sumber
CJam, 11 byte
Uji di sini.
Saya menemukan posisi
N
dalam string01234...N
untuk menghitung pengindeksan berbasis 1. Akhirnya saya perbaiki0
dengan menerapkan logika OR dengan 11.sumber
Serius, 13 byte
Mengambil input sebagai integer. Berisi unsintables, jadi hexdump:
Cobalah online
Penjelasan:
sumber
𝔼𝕊𝕄𝕚𝕟, 13 karakter / 22 byte
Try it here (Firefox only).
sumber
k4, 21 byte
Sama seperti orang lain — digabungkan
[1..10+x]
sebagai string, cari x sebagai string, konversikan ke pengindeksan berbasis satu, kembalikan hit pertama.Memeriksa kasus uji:
sumber
Mathematica, 101 byte
sumber
Haskell ,
827355 byteBermigrasi dari duplikat
Cobalah online!
Penjelasan
Pertama kita mendefinisikan
!
.x!b
terpotongb
ke penampilan pertamax
. Itu melakukan ini dengan memeriksa apakahb
dimulai denganx
(or$zipWith(==)x b
) mengembalikanx
jika itu terjadi dan memindahkan satu ke bawah string sebaliknya. Kemudian kita mendefinisikan fungsi utama kita. Fungsi utama kami adalah fungsi titik-bebas yang mengambil konstanta (show=<<[1..]
) dan memotongnya ke tampilan pertamax
. Ini diambilx
sebagai string.sumber
05AB1E , 6 byte (tidak bersaing)
Cobalah online!
sumber
JavaScript (ES6),
503938 byteCobalah
sumber
Jelly , 5 byte
Cobalah online!
sumber
Stax , 6 byte
Jalankan dan debug itu
sumber
Perl 6 , 26 byte
Cobalah online!
Menemukan indeks elemen dalam rentang gabungan dari 0 ke elemen itu, atau
11
jika angka tersebut nolsumber
Perl 5 , 42 + 1 (-p) = 43 byte
Cobalah online!
Penjelasan
sumber
Perl 6 / Rakudo 29 byte
Menentukan fungsi dengan satu input ($ ^ a). Sebut demikian:
Menambahkan
$
, variabel anonim, bertambah$++
hingga input$^a
ditemukan, dan kemudian menghitung jumlah karakter sebelum itu. Diperlukan setidaknya 1 char sebelum.+
di regex tidak termasuk case 0-> 0sumber
J, 30 Bytes
Mungkin bisa diturunkan sedikit lebih banyak, khususnya dalam menggabungkan bilangan bulat pertama n + 10.
Penjelasan:
Perhatikan bahwa ini diindeks 0. Contoh:
sumber
Sekam , 6 byte
Cobalah online!
sumber