Suatu hari Anda bangun hanya untuk menemukan diri Anda terjebak dalam array. Anda mencoba keluar begitu saja, mengambil satu indeks pada saat itu, tetapi tampaknya ada aturan lain:
Array diisi dengan bilangan asli.
- Jika Anda menemukan diri Anda pada indeks
n
, Anda pergi ke indeksarray[n]
, kecuali: - Jika Anda menemukan diri Anda pada indeks
n
yang merupakan bilangan prima, Anda mengambilarray[n]
langkah mundur
Contoh: Anda memulai pada indeks 4
, dalam array ini (indeks awal adalah 0):
array = [1,4,5,6,8,10,14,15,2,2,4,5,7];
-----------------^ you are here
Karena nilai bidang tempat Anda berada 8
, Anda masuk ke indeks 8
sebagai langkah pertama. Bidang yang Anda gunakan berisi nilai 2
. Anda kemudian pergi untuk mengindeks 2
sebagai langkah kedua Anda. Seperti halnya 2
bilangan prima, Anda mengambil 5 langkah mundur, yang merupakan langkah ketiga Anda. Karena tidak ada indeks -3
, Anda berhasil keluar dari array dalam total 3 langkah.
Tugas Anda adalah:
Untuk menulis program atau fungsi, yang menerima array dan indeks awal sebagai parameter, dan menampilkan jumlah langkah untuk keluar dari array. Jika Anda tidak dapat keluar dari array (mis. [2,0,2]
Dengan start-index 2
=> Anda terus berpindah dari indeks 2
ke 0
), output nilai yang salah. Anda dapat menggunakan pengindeksan satu berbasis atau pengindeksan berbasis nol, tetapi harap tentukan yang Anda gunakan.
Uji kasus
Memasukkan: [2,5,6,8,1,2,3], 3
Keluaran: 1
Memasukkan: [2, 0, 2], 2
Keluaran: false
Input: [14,1,2,5,1,3,51,5,12,3,4,41,15,4,12,243,51,2,14,51,12,11], 5
;
Keluaran: 6
Jawaban terpendek menang.
sumber
Jawaban:
Pyth, 31 Bytes
Kasus uji
Ini menggunakan nol untuk menunjukkan nilai palsu, jumlah hop sebaliknya.
sumber
Python,
161138 byteKredit untuk faktorial.
Ide itu!
Bagaimana itu bekerja
Teorema Wilson digunakan untuk pemeriksaan prima.
Deteksi loop dengan menyimpan indeks yang terlihat ke array (
l
) dan memeriksa apakah indeks saat ini dil
.sumber
Python, 107 byte
Penggunaan:
f(list, start)
mis:f([2,5,6,8,1,2,3], 3)
Pengembalian
0
loop (terdeteksi saatn > len(a)
)sumber
Matlab, 138 byte
Ini pendekatan lurus ke depan, menggunakan indeks berbasis 1 karena Matlab menggunakan indeks berbasis 1 secara default. Untuk menghitung jumlah langkah, kami menggunakan
for
penghitungan loop dari 1 hingga tak terbatas (!). Jika kita tidak bisa keluar dari array, kita menggunakan vektorv
untuk melacak entri mana yang sudah kita kunjungi. Jika kami mengunjungi entri dua kali, kami tahu kami terjebak dalam siklus yang tidak bisa dilewati. Untuk melihat apakah kita berada di luar array, kita menggunakantry/catch
struktur, yang juga menangkap pengecualian batas.sumber
05AB1E, 32 byte
Penjelasan
Cobalah online
sumber
JavaScript (ES6), 100
Basis indeks 0. Catatan: fungsi ini mengubah array input
Kurang golf
Uji
sumber
JAVA,
229218 BytesBerkat Kevin, 11 byte menggigit debu.
sumber
Stack<Integer>i=new Stack<>();
dapat diubah keStack i=new Stack();
danreturn 1==2;
dapat diubah kereturn 0>1;
. Juga, Anda mungkin ingin menyebutkan itu Java 7 bukan Java secara umum.a,b->{...}
alih-alihObject e(int[]a,int b){...}
, itulah sebabnya saya pribadi menyebutkan Java 7 untuk memberi tahu orang bahwa saya sengaja tidak menggunakan lambda Java 8, tetapi terserah Anda.CJam, 44 byte
Harapkan
index array
di tumpukan.Cobalah online!
Jawaban CJam pertama saya, maka mengapa itu begitu mengerikan dan sangat penting ...
(dianggap oke untuk macet setelah hasil yang benar seperti yang dicetak, yang dilakukan oleh program di sini)
sumber
C, 121 byte
Fungsi
f
menerima array, indeks awal (berbasis-0) dan jumlah elemen dalam array, karena tidak ada cara bagaimana menguji akhir array di C (setidaknya saya tidak tahu).Cobalah di ideone!
Catatan:
function p(n)
tes apakahn
prima atau tidak. Penghargaan untuk ini diberikan ke @Lynn dan jawabannya untuk Apakah nomor ini utama?sumber
c
pengaturan ulang untuk memanggil fungsi lagi.JavaScript,
121132 byteedit 1: oops, melewatkan sedikit tentang pengembalian jumlah langkah. memperbaiki datang segera.
sunting 2: diperbaiki
sumber
Racket,
183156 byteMungkin lebih banyak byte yang bisa dinikmati dengan bermain golf lebih lanjut, tapi hanya itu untuk saya. :)
Modul lengkap dengan test suite dengan fungsi pembersih:
Jalankan seperti
raco test e.rkt
Pujian besar untuk @cat menemukan
prime?
fungsi tidak berdokumen .sumber
Java,
163160 bytep(n)
adalah untuk pengujian utama,f(a,n)
adalah untuk fungsi pelarian. Pemakaian:Versi tidak disatukan:
sumber
Perl 6 , 85 byte
Penjelasan:
Ini adalah urutan malas dari indeks yang dilalui menurut aturan. Jika indeks akhirnya melebihi batas array input (
!(0 <= * < a)
kondisi), urutannya terbatas; jika tidak, siklus indeks tidak terbatas.Urutan itu diumpankan ke fungsi anonim internal:
Jika urutan didefinisikan pada indeks yang diberikan oleh ukuran array input, itu harus telah memasuki siklus tak terbatas, sehingga
0
dikembalikan. Jika tidak, ukuran urutan+$_
dikembalikan.sumber
Perl 5 , 107 + 1 (
-a
) = 108 byteCobalah online!
Daftar berbasis 0. Mengembalikan false (kosong) jika daftar tidak dapat dihilangkan.
sumber