Judul dibuat, dari 'Sequence Index Digit Not'.
Tantangan:
Mengingat integer n
yang >= 0
, output n
'th jumlah urutan berikut.
Inilah 50 item pertama, dengan indeks (0-indeks) di atasnya:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
1 0 3 2 5 4 7 6 9 8 22 20 30 24 23 26 25 28 27 32 11 33 10 14 13 16 15 18 17 31 12 29 19 21 50 40 41 42 44 45 35 36 37 51 38 39 52 53 55 56 34
Bagaimana cara kerja urutan ini?
Angka pada indeks n
harus menjadi yang pertama agar tidak memiliki angka yang sama n
, dan belum terjadi untuk indeks sebelumnya. Jadi ketika kita melihat urutan normal seperti ini dari 0-60
:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
Kami mendefinisikan nilai n
th seperti ini:
0
: Angka pertama (0
) berisi digit yang sama, jadi kami mencari yang berikutnya (1
), yang tidak mengandung digit yang sama. Jadin=0
keluaran1
.1
: Angka pertama (0
) tidak mengandung digit yang sama, jadin=1
hasilnya0
.2
: Kami telah menemukan0
dan1
, dan digit berikutnya (2
) berisi digit yang sama, jadi kami mencari berikutnya (3
), yang tidak mengandung digit yang sama. Jadin=2
keluaran3
.- ...
10
: Kami sudah menemukan0-9
, jadi baris berikutnya adalah10
.10-19
berisi digit yang cocok1
,20
berisi digit yang cocok0
,21
berisi digit yang cocok1
lagi,22
valid, jadin=10
hasilnya22
.- dll.
Aturan tantangan:
- Jika bahasa Anda diindeks 1 (atau Anda pilih), Anda diizinkan untuk memulai urutan di
3 2 5 4 7 ...
(melewatkan1
atn=0
dan0
atn=1
). - Indeks minimum minimum yang harus Anda dukung adalah
25,000
. CATATAN: Urutan berhenti pada indeks1,023,456,788
, karena indeks berikutnya dalam baris berisi semua 10 digit. - Anda juga diizinkan untuk menampilkan / mengembalikan array / daftar seluruh urutan hingga dan termasuk indeks
n
jika Anda mau.
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program lengkap. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika perlu.
Kasus uji:
Urutan ini sebenarnya membuat pasangan mengenai indeks dan output. Jika indeks n
menghasilkan o
, indeks o
menghasilkan n
. Jadi, Anda dapat memasukkan kiri atau kanan, dan hasilnya adalah sisi lain:
0 <-> 1 (this test case is optional)
2 <-> 3
10 <-> 22
12 <-> 30
34 <-> 50
89 <-> 100
111 <-> 200
112 <-> 300
199 <-> 322
2231 <-> 4456
9605 <-> 11118
19235 <-> 46000
23451 <-> 60668
25000 <-> 13674
Berikut adalah pastebin dari 25.001 kasus uji pertama jika Anda ingin mencoba yang lain.
Jawaban:
Pyth , 18 byte
Coba di sini! atau Periksa lebih banyak test case!
Perhatikan bahwa ini mengembalikan seluruh urutan hingga indeks N , tetapi tautan hanya mengembalikan nomor terakhir, dengan menambahkan
e
(akhir). Jika Anda ingin melihat nilai mentah yang dikembalikan oleh program ini, hapus saja .Bagaimana itu bekerja
sumber
Python 2 ,
92918988 byteCobalah online!
Mencetak daftar
n+1
angka pertamaPendekatan berbeda, yang jauh lebih cepat:
Python 2 , 96 byte
Cobalah online!
sumber
Haskell,
8069 byteCobalah online!
Sangat lambat untuk ukuran besar
n
.Sunting: @Laikoni menyimpan 10 byte. Terima kasih!
sumber
APL (Dyalog) , 39 byte
Penggunaan
⎕IO←0
.Cobalah online!
Bagaimana?
Rekursi.
0=⍵:1
- coba tebak.~⍺∊0∇¨⍳⍵
- arg kiri (akumulator) belum ada di hasil sebelumnya∧⊃∧/≠/⍕¨⍺⍵
- dan representasi string dari akumulator dann
berbeda:⍺
- lalu kembalikan akumulator.⍵∇⍨⍺+1
- jika tidak, akumulator tambahan dan berulang.sumber
n=10
TIO ..: S Itu pasti operasi yang sangat berat yang Anda lakukan di sana. Apakah rekursi yang menyebabkan ini, atau ada hal lain yang menjadi hambatan?Python 3 , 92 byte
Cobalah online!
Ini mencetak semua persyaratan hingga yang ke- N . Terima kasih kepada Dennis untuk
-4-5 byte!sumber
Java (OpenJDK 8) ,
218217213210202200172171170168167 byteSaya tidak percaya bahwa saya tidak hanya kembali
k
selama ini ...Cobalah online!
sumber
for(char f:(""+k).toCharArray())
untukfor(int f:(""+k).getBytes())
,r.substring(-~r.trim().lastIndexOf(32));
dan untukr.substring(r.lastIndexOf(32)-1)
.Pergi ,
217205 byteVersi alternatif (program alih-alih sebuah paket): Cobalah secara online!
Perbaikan:
for
dengan menggunakan beberapa penugasan untuki,k
"fmt";
+fmt.Print
lebih pendek darios.Stdout.WriteString
(peninggalan sejakpackage main
os.Args diperlukan)sumber
25000
test case. :) Jadi bukan hanya solusi yang valid, tetapi dengan kinerja yang relatif baik juga. +1 dari saya! (PS: Dalam TIO-link Anda, itulah argumen yang Anda gunakan, input dapat dihapus / tidak digunakan.)JavaScript (ES6),
103 8881Sunting Direvisi termasuk banyak ide pintar oleh @Neil
Titik pangkal
Ide dasar: loop dari 0 ke n, dan nilai-nilai pengecekan loop dalam masih belum digunakan
Versi saat ini lebih mudah dibaca
Uji
sumber
~s.search(d)
dengans.match(d)
pekerjaan?0
kej++
, menghapus++
darij
itu sebelum dan kemudian mulaij
dari0
bukan-1
.n=>eval("for(r=[j=i='0'];i<=n;)r[j]|[...''+j].some(d=>i.match(d))?j++:(i=++i+'',r[k=j]=1,j=0);k")
Oktaf , 114 byte
Cobalah online!
Terima kasih kepada Kevin Cruijssen dan Dlosc untuk golf perbandingan karakter.
Tidak disatukan
Penjelasan dasar:
i
, dan satu lagi untuk nilai yang ditambahkanj
Untuk masing-masing
i
, lanjutkan kenaikanj
jika salah satu dari yang berikut dipenuhi:j
sudah pernah digunakan sebelumnya10
menjadi[1 0]
) menggunakanint2str
. Kemudian, bandingkan dua angka menggunakanismember
(misalnya,[1 0]
dan[2 1]
akan kembali[1 0]
) dan kemudiannnz
untuk melihat apakah ada kolom yang cocok.Jika tidak ada yang di atas terpenuhi, Anda memiliki nomor berikutnya! Tambahkan ke
o
, matriks keluaransumber
-'0'
. Tetapi jika ada beberapa kasus tepi yang kami berdua belum pikirkan,-48
akan menjadi alternatif yang lebih pendek. Juga, keduanyasprintf('%d',...)
bisaint2str(...)
.Perl 5 , 60 byte
59 byte kode +1 untuk
-p
.Cobalah online! (Termasuk
-l
untuk tujuan visual dan$-=0;
untuk mengatur ulang setiap iterasi)sumber
Pip , 30 byte
29 byte kode, +1 untuk
-p
bendera.Cobalah online!
Keluarkan seluruh daftar. Peringatan: sangat tidak efisien; itu
2231
kasus masukan baru berjalan 35 + menit di laptop saya dan masih belum selesai.Penjelasan
sumber
Visual Basic .NET (.NET 4.5) ,
260259 byte-1 byte terima kasih kepada Kevin Cruijssen
Loop melalui, menghasilkan istilah sebelumnya dalam urutan untuk kemudian membandingkan nanti. Kemudian iterasi angka sebagai string yang mencari kecocokan.
Menyalahgunakan sistem pengetikan VB.NET. Misalnya,
j
adalah string, tetapi menambahkan satu yang dikonversi ke integer untuk saya. Integer dikonversi ke Boolean di mana0
adaFalse
dan sisanyaTrue
.Cobalah online!
sumber
If Not p.Contains(j)Then
sama seperti yang Anda lakukan diIf j.Contains(c)Then g=0
bawah. Juga,If Not p.Contains(j)Then \n g=1 \n For Each c In i.ToString \n If j.Contains(c)Then g=0 \n Next \n If g Then Exit While \n End If
dapat dipersingkat dengan menghapusg
dan menggunakanExit While
langsung di for-loop:,If Not p.Contains(j)Then \n For Each c In i.ToString \n If j.Contains(c)Then Exit While \n Next \n End If
yang akan menjadi 241 byte dengan tampilannya.Contains(c)Then
, saya baru saja melewatkannya. Saya suka apa yang Anda pikirkan, tetapi saya menggunakang
sebagai penjaga untuk melihat apakah string berisi nomor atau tidak. Tautan Anda memberikan jawaban yang salah, tetapi saya akan melihat apakah saya dapat mengerjakan ulang beberapa logika batin sepanjang apa yang Anda pikirkan.Jelly , 20 byte
Pyth mengalahkan Jelly. Tn. Tn. Xcoder!
Program lengkap yang mengambil input dari STDIN dan mengeluarkan dalam opsi format daftar menggunakan representasi daftar Jelly *. Menggunakan pengindeksan berbasis 0 standar.
* daftar elemen tunggal tidak memiliki sekitarnya
[]
, jadi0
output1
, sedangkan1
output[1, 0]
dllCobalah online!
Bagaimana?
sumber