pengantar
Dalam tantangan ini, tugas Anda adalah mensimulasikan jenis permainan eliminasi tertentu. Dalam permainan, para peserta berdiri dalam lingkaran, dan semua orang memegang bilangan bulat. Pada setiap putaran permainan, setiap peserta menunjuk pada orang tersebut n
menjauh, jika n
nomor yang mereka pegang. Jika n
positif, mereka menghitung ke kanan, jika n
negatif, mereka menghitung ke kiri, dan jika n
nol, mereka menunjuk pada diri mereka sendiri. Setiap peserta yang memiliki seseorang yang menunjuk pada mereka dihilangkan, dan meninggalkan lingkaran; ini mengakhiri babak. Putaran berlanjut sampai tidak ada peserta yang tersisa.
Memasukkan
Input Anda adalah daftar bilangan bulat yang tidak kosong, dalam format apa pun yang masuk akal. Ini mewakili angka yang dipegang oleh para peserta game.
Keluaran
Output Anda adalah jumlah putaran yang dibutuhkan hingga permainan berakhir.
Contoh
Pertimbangkan daftar input [3,1,-2,0,8]
. Di babak pertama, berikut ini terjadi:
- Orang yang memegang
3
menunjuk tepat ke orang yang memegang0
. - Orang yang memegang
1
menunjuk tepat ke orang yang memegang-2
. - Orang yang memegang
-2
poin tertinggal di orang yang memegang3
. - Orang yang memegang
0
poin pada dirinya sendiri. - Orang yang memegang
8
titik tepat di orang yang memegang-2
(daftar mewakili lingkaran, sehingga membungkus di ujungnya).
Ini berarti 0
, -2
dan 3
dihilangkan, sehingga putaran kedua dilakukan dengan daftar [1,8]
. Di sini, 1
menunjuk pada 8
, dan 8
menunjuk pada diri mereka sendiri, jadi 8
dihilangkan. Babak ketiga dilakukan dengan daftar [1]
, di mana 1
hanya menunjuk pada diri mereka sendiri dan dihilangkan. Butuh tiga putaran untuk menghilangkan semua peserta, sehingga hasil yang benar adalah 3
.
Aturan dan penilaian
Anda dapat menulis program atau fungsi lengkap. Hitungan byte terendah menang, dan celah standar tidak diizinkan.
Uji kasus
[3] -> 1
[0,0,0] -> 1
[-2,-1,0,1,2,3,4,5,6,7] -> 2
[5,5,5,6,6,6] -> 2
[3,-7,-13,18,-10,8] -> 2
[-7,5,1,-5,-13,-10,9] -> 2
[4,20,19,16,8,-9,-14,-2,17,7,2,-2,10,0,18,-5,-5,20] -> 3
[11,2,7,-6,-15,-8,15,-12,-2,-8,-17,6,-6,-5,0,-20,-2,11,1] -> 4
[2,-12,-11,7,-16,9,15,-10,7,3,-17,18,6,6,13,0,18,10,-7,-1] -> 3
[18,-18,-16,-2,-19,1,-9,-18,2,1,6,-15,12,3,-10,8,-3,7,-4,-11,5,-15,17,17,-20,11,-13,9,15] -> 6
n
apakah nomor yang dipegang orang itu?Jawaban:
Pyth, 15 byte
Test suite berkat kirby
Menggunakan mekanisme iterasi yang sama dengan @orlp, tetapi mendeteksi jumlah iterasi menggunakan
f
, fungsi "Ulangi hingga falsy", untuk mendeteksi[]
begitu kita selesai.sumber
Matlab,
9177 byteVersi lama:
Ini adalah tantangan di mana matlab bersinar, inti dari kode ini adalah penghapusan entri array:
a(mod((1:l)+a-1,l)+1)=[]
menurut saya cukup elegan.sumber
CJam, 21 byte
Suite uji.
Mengambil input sebagai daftar gaya CJam, tetapi test suite menangani konversi dari format dalam tantangan.
Penjelasan
sumber
ee
hampir persis apa yang saya cari kemarin untuk pertanyaan yang berbeda.C #,
251219211197193 byteBahasa non-esoterik yang paling tidak dapat diserang menyerang lagi.
Program ini mengharapkan urutan input sebagai argumen baris perintah. Misalnya, untuk memasukkan daftar
[5,5,5,6,6,6]
, panggil saja dengan argumen baris perintah5 5 5 6 6 6
.Terima kasih kepada Martin Büttner untuk beberapa tips.
Diubah menjadi 197 dengan menyadari bahwa saya dapat menggunakan kembali
args
array meskipun itu adalah array string. Saya hanya perlu menguraikannya menjadi bilangan bulat di satu tempat.Bermain golf ke 193 dengan menyadari bahwa
.Where(...==x).Any()
itu lebih pendek dari.Select(...).Contains(x)
.Tidak disatukan
sumber
Pyth, 21 byte
Demo langsung dengan uji kasus.
sumber
R, 105 byte
kode
ungolfed
sumber
Pyth, 17 byte
Kebetulan sangat mirip dengan jawaban Kirbyfan.
sumber
Mathematica, 71 byte
sumber
(i=0;#//.l:{__}:>l~Delete~Mod[++i;Plus~MapIndexed~l,Length@l,1];i)&
Plus~MapIndexed~#
benar-benar pintar, tapi saya bertanya-tanya apakah tidak ada cara yang lebih pendek menggunakanl+Range@Length@l
.STATA, 146 byte
Menggunakan versi berbayar dari STATA. Mengasumsikan input dalam file baris baru yang disebut
a.
. Terbatas pada situasi di mana tidak lebih dari 1.023 putaran diperlukan karena jumlah variabel maksimum yang diizinkan (dapat diperbaiki dengan biaya 10 byte). Itu membaca data dan menjalankan loop sampai tidak ada lagi pengamatan. Di setiap iterasi, buat variabel dengan nilai indeks yang ditunjuknya. Untuk setiap pengamatan, jika pengamatan lain menunjukkannya, tetapkan indikator untuk menjatuhkan variabel. Kemudian letakkan semua pengamatan dengan indikator itu dan tambahkan penghitung. Setelah loop, cetak penghitung.sumber
Ruby,
7874 bytesumber
awk, 66 byte
Cukup gunakan
mod length array
untuk menyimpannya di dalam array. Dalam input angka harus dipisahkan dengan spasi.Contoh penggunaan
Inilah semua contoh input dalam format yang sesuai
sumber
Python 2, 122 byte
sumber