Mari kita tentukan urutan penunjuk menjadi urutan apa pun sehingga a (n) = a ((n-1) - (a (n-1))) forall n lebih besar dari beberapa angka hingga. Misalnya jika urutan kita mulai dengan
3 2 1
Istilah kita berikutnya adalah 2
, karena a (n-1) = 1 , (n-1) -1 = 1 , a (1) = 2 (contoh ini adalah indeks nol namun tidak masalah apa indeks yang Anda gunakan akan dihitung selalu sama.). Jika kita mengulangi prosesnya, kita mendapatkan urutan yang tidak terbatas
3 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2
Tugas
Mengingat beberapa array awal dari bilangan bulat positif menghasilkan urutan pointer dimulai dengan array itu.
Jenis output
Output dimaksudkan untuk menjadi fleksibel, jika Anda memilih untuk menulis fungsi sebagai program Anda dapat kembali, baik daftar bilangan bulat tak terbatas atau fungsi yang mengindeks urutan. Jika Anda memilih untuk menulis program lengkap, Anda dapat menampilkan ketentuan urutan tanpa batas.
Anda juga dapat memilih untuk mengambil dua input, array awal dan indeks. Jika Anda memilih untuk melakukan ini, Anda hanya perlu menampilkan jangka waktu urutan pada indeks itu.
Anda tidak akan pernah diberi urutan yang membutuhkan pengindeksan sebelum awal urutan. Misalnya 3
bukan input yang valid karena Anda akan memerlukan persyaratan sebelum 3
untuk menyelesaikan istilah berikutnya.
Ini adalah kode-golf sehingga skor Anda akan menjadi jumlah byte dalam program Anda dengan skor yang lebih rendah lebih baik.
Uji Kasus
test case dipotong untuk kesederhanaan
2 1 -> 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 ...
2 3 1 -> 2 3 1 3 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 ...
3 3 1 -> 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 ...
4 3 1 -> 4 3 1 3 4 4 3 3 4 4 4 3 4 4 4 4 3 4 4 4 4 3 4 4 4 4 3 4 ...
Jawaban:
JavaScript (ES6), 25 byte
Fungsi anonim yang, ketika dipanggil, membuat fungsi
f
yang memberikan item pada indeks yang diberikan dalam urutan.Tolong beri tahu saya jika saya salah mengerti sesuatu ...
sumber
f(n)
darif(n)
. Saya tidak berpikir itu akan pernah berakhir, tetapi saya tidak tahu JS.n
mendapat cukup rendaha[n]
akan mengembalikan nilai yang sebenarnya, sehingga||
akan korsleting dan mencegah berulang berulang.n
tidak mendapatkan yang lebih rendah dengan setiap panggilan. Saya cukup yakin jikan
lebih besar dari panjanga
Anda tidak akan pernah berhenti.--n
menetapkann
untukn-1
jadi referensi sebelahnya akan merujuk pada dikurangin
.--n
decrementsn
, yang artinyaf(--n-f(n))
sama denganf((n-1)-f(n-1))
Sekam ,
76 byteMengembalikan daftar yang tak terbatas. Cobalah online! Perhatikan bahwa perlu beberapa saat bagi TIO untuk memotong dan mencetak hasilnya.
Penjelasan
Operator
¡
memiliki beberapa arti. Di sini saya menggunakan "membangun daftar tak terbatas dengan mengulangi fungsi yang menghitung elemen baru dari daftar yang sudah ada". Diberikan daftar panjang N , elemen baru akan memiliki indeks berbasis 1 N + 1 . Yang perlu kita lakukan adalah meniadakan elemen terakhir dari daftar (yang merupakan nilai sebelumnya) dan mengindeks ke dalam daftar menggunakan hasilnya.sumber
Haskell , 36 byte
Mengambil daftar dan mengembalikan fungsi yang mengindeks urutan
Cobalah online!
Penjelasan
Di sini kita mendefinisikan fungsi
!
yang mengambil daftarl
dan indeksn
. Jikan
kurang dari panjangl
kita indexl
olehn
, kalau tidak kita kembalil!((n-1)-l!(n-1))
. Ini mengikuti definisi rekursif dari fungsi yang saya berikan dalam pertanyaan.Berikut adalah program yang sama tanpa ungolfed.
Saya menggunakan
e<-n-1
bukannya sebaliknya untuk menyimpan byte sementara menugaskann-1
untuke
sehingga dapat digunakan kemudian.sumber
MATL ,
139 byteKeluaran istilah awal diikuti oleh n ketentuan tambahan (diizinkan oleh tantangan), di mana n adalah bilangan bulat positif yang diambil sebagai input.
Cobalah online!
Penjelasan
sumber
Mathematica, 63 byte
membutuhkan dua input
Cobalah online!
-3 byte dari Martin Ender
sumber
R , 55 byte
Cobalah online!
Mengambil dua input.
sumber
ML Standar (MLton) , 58 byte
Cobalah online! Fungsi
a
mengambil daftar awal dan indeks dan mengembalikan elemen urutan pada indeks itu. Contoh penggunaan:a [4,3,1] 5
hasil4
.sumber
Jelly , 6 byte
Mengambil urutan S dan integer k , dan menambahkan k istilah untuk S .
Cobalah online!
Bagaimana itu bekerja
sumber
Python 2 , 48 byte
Cobalah online!
sumber
CJam, 10 byte
Untuk CJam, ini sangat baik (Bahkan mengalahkan 05ab1e!).
Ini adalah blok anonim yang mengharapkan input dalam bentuk
i n
di stack, di manai
indeks dalam urutan dann
merupakan array angka awal.Alasan ini bekerja sangat baik adalah karena
j
operator, yang menyediakan rekursi memo dari serangkaian nilai awal.Penjelasan:
sumber
Java (8), 60 byte
Mengambil dua input (integer-array
a
dan integern
), dan menampilkan nilain
'urutan.Penjelasan:
Coba di sini. (Mungkin butuh beberapa detik.)
sumber
Perl, 38 +3 (-anl) byte
Cobalah secara Online
sumber
05AB1E , 20 byte
Mengharapkan input sebagai string yang dipisahkan oleh spasi, terus menghasilkan keluaran tanpa batas; implementasi yang cukup mudah
Contoh dijalankan:
sumber
Java (OpenJDK 8) ,
95939190 byteCobalah online!
sumber
b[(j-1)-...]
setara denganb[~-j-...]
?j>=a.length
kej<a.length
untuk menyimpan byte:j<a.length?a[j]:b[~-j-b[j-1]]
. Saya juga penasaran: mengapa Anda menggunakan pendekatan loop, ketika pendekatan rekursif yang juga dijelaskan dalam deskripsi tantangan itu sendiri hanya 60 byte?Perl 5 ,
-a
30 byteCobalah online!
sumber