Diberikan array Integer:
- Mulai dari angka pertama
- Melompat maju n posisi di mana n adalah nilai dari posisi saat ini
- Hapus posisi saat ini, buat posisi apa yang selanjutnya menjadi posisi sekarang.
- Langkah 2 sampai ada satu nomor yang tersisa
- Cetak nomor itu
Aturan
Array membungkus (nomor berikutnya setelah nomor terakhir dalam array adalah nomor pertama).
Nol menghapus dirinya sendiri (Jelas).
Angka negatif tidak diperbolehkan sebagai input.
Uji Kasus
[1] => 1
[1,2] => 1
[1,2,3] => 3
[1,2,2] => 1
[1,2,3,4] => 1
[6,2,3,4] => 4
[1,2,3,4,5] => 5
[0,1] => 1
[0,0,2,0,0] => 0
Contoh langkah demi langkah
[1,4,2,3,5]
^ start from the first position
^ jump 1 position (value of the position)
[1, 2,3,5] remove number in that position
^ take next position of the removed number (the 'new' 'current' position)
^ jump 2 positions
[1, 2,3 ] remove number in that position
^ take next position (looping on the end of the array)
^ jump 1 position
[1, 3 ] remove number in that position
^ take next position (looping)
^ jump 3 positions (looping on the end of the array)
[ 3 ] remove number in that position
print 3
Contoh # 2
[4,3,2,1,6,3]
^ start from the first position
^ jump 4 positions
[4,3,2,1, 3] remove number in that position
^ take next position
^ jump 3 positions
[4,3, 1, 3] remove number in that position
^ take next position
^ jump 1 positions
[4,3, 1 ] remove number in that position
^ take next position
^ jump 4 positions
[4, 1 ] remove number in that position
^ take next position
^ jump 1 position
[ 1 ] remove number in that position
print 1
Ini adalah kode-golf , jawaban terpendek dalam byte menang!
code-golf
array-manipulation
alur kerja
sumber
sumber
Jawaban:
Sekam , 7 byte
Ini mengembalikan hasilnya sebagai daftar tunggal
Cobalah online!
Penjelasan
sumber
Haskell ,
545048 byteCobalah online!
Penjelasan:
f[x]=x
: Jika daftar yang diberikan adalah daftar tunggal, kembalikan elemennya.f(x:r)=f$ ...
: Jika tidak, secara rekursif berlakuf
ke daftar berikut:cycle$x:r
),x+1
elemen pertama dihapus (drop(x+1)$
),r
. (snd<$>zip r
adalah alternatif yang lebih pendek untuktake(length r)
).Versi 54 byte sebelumnya:
Cobalah online!
sumber
Ruby , 37 byte
Memodifikasi array di tempat, yang tampaknya dapat diterima sebagai keluaran. Cobalah online!
sumber
MATL , 21 byte
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
sumber
Python 3 ,
5451 byteOutput adalah daftar tunggal.
Cobalah online!
sumber
CJam , 15 byte
Cobalah online!
Penjelasan
Alih-alih melacak pointer, saya hanya menggeser array secara siklikal sehingga elemen saat ini selalu di depan.
Alternatif menyenangkan yang sayangnya tidak menyimpan byte apa pun:
sumber
Brain-Flak , 88 byte
Cobalah online!
Penjelasan
sumber
Python 2 , 55 byte
Cobalah online!
Keluaran sebagai daftar tunggal, sebagaimana diizinkan secara default . Menyimpan beberapa byte berkat Dennis , dengan mengingatkan saya bahwa memodifikasi argumen fungsi diperbolehkan.
Bagaimana itu bekerja
def f(a)
- Menentukan fungsi dengan parametera
.while a[1:]:
- Ketikaa
elemen pertama yang dihapus benar, jalankan blok kode untuk diikuti. Daftar dengan satu elemen atau lebih adalah benar, dan daftar kosong palsu di Python, maka ini akan berhenti setelaha
mencapai panjang 1.l=a[0]%len(a)
- Ambil elemen pertama, dan dapatkan sisa dari pembagiannya dengan panjanga
. Tetapkan hasilnya kel
.a[:]=a[-~l:]+a[:l]
- Putara
ke kiri olehl
elemen, dan hapus yang pertama, sambil menempatkan inia
di tempatnya.Python 2 , 63 byte
Cobalah online!
Meskipun lebih lama, ini tampak jauh lebih elegan. Juga terima kasih kepada ovs untuk membantu dalam obrolan.
sumber
a,*b=input()
(python3) dan menyimpan beberapa byte? Namun saya tidak yakin bagaimana itu akan mempengaruhil
dan irisanJelly , 7 byte
Cobalah online!
Program lengkap.
sumber
ḷ/
sangat pintar.Jelly , 9 byte
Cobalah online!
-2 byte terima kasih kepada pengguna202729
Penjelasan
sumber
Python 3 , 60 byte
Cobalah online!
-3 bytes terima kasih kepada ovs
sumber
APL (Dyalog) ,
2018 byteCobalah online!
sumber
Mathematica, 36 byte
menggunakan algoritma Martin
-5 byte dari Misha Lavrov && Martin Ender
Cobalah online!
sumber
#//.{x_,y__}:>Rest@RotateLeft[{x,y},x]&
. (Ini berhenti ketika hanya ada satu elemen karena{a}
tidak lagi cocok dengan polanya{x_,y__}
.)y
, memanggil seluruh daftarl
dan kemudian menggunakanl
alih-alih{x,y}
.#//.l:{x_,__}:>Rest@RotateLeft[l,x]&
?J ,
2117 byte-4 byte terima kasih kepada FrownyFrog
Cobalah online!
Asli:
([:}.{.|.])^:(1<#)^:_
Bagaimana itu bekerja:
^:_
ulangi sampai hasilnya berhenti berubah^:(1<#)
jika panjang daftar lebih besar dari 1{.|.]
putar daftar ke kiri kali item pertama[:}.
jatuhkan elemen pertama dan tutup garpuCobalah online!
sumber
JavaScript (ES6),
5460 byteDisimpan 1 byte berkat versi @Shaggy
Fixed (+6 bytes)
Memodifikasi array input , yang direduksi menjadi singleton.
Uji kasus
Tampilkan cuplikan kode
Bagaimana?
Kami menerapkan algoritma yang dijelaskan dalam tantangan secara rekursif. Hanya kondisi berhenti
1/a
mungkin tampak sedikit aneh. Saat menerapkan operator aritmatika:NaN
dan1/NaN
jugaNaN
(falsy).1/0 = +Infinity
atau1/N = positive float
untuk N> 0 (keduanya benar).sumber
splice
memodifikasi array asli, Anda bisa melakukannyaf=(a,p=0)=>1/a||f(a,p=p+a[p]%a.length,a.splice(p,1))
selama 52 bytef=(a,p=0)=>1/a?a:f(a,p=(p%a.length+a[p%a.length])%a.length,a.splice(p,1))
tidak apa-apa tetapi mungkin dioptimalkanp+a[p]
bisa dihilangkan. Yang - tentu saja - bukan itu masalahnya. Terima kasih telah melaporkan ini!Julia 0,6 ,
4642 byteCobalah online!
Versi Julia rekursif langsung.
x[]
mengakses elemen pertama x.sumber
Java 8, 79 byte
Lambda ini menerima
Stack<Integer>
dan mengembalikanint
atauInteger
.Cobalah secara Online
Tidak disatukan
Ucapan Terima Kasih
sumber
i%=s
dapat dihapus jikal.get(i)
diubah olehl.get(i%s)
Pyth , 9 byte
Coba di sini!
Ini menampilkan hasilnya sebagai daftar tunggal, sebagaimana diizinkan secara default .
Bagaimana itu bekerja
Catatan: Jika Anda tidak ingin melihat tanda kurung itu, cukup tambahkan
h
ataue
di depan seluruh kode.sumber
Swift , 87 byte
Kembali sebagai daftar tunggal dengan memodifikasi input . Cobalah online!
Penjelasan
sumber
Perl 6 ,
4645 byte(-1 byte terima kasih kepada Brad Gilbert)
Cobalah online!
($_, { ... } ... 1)
menghasilkan urutan daftar, dimulai dengan daftar input$_
, setiap elemen berturut-turut dihasilkan oleh ekspresi penjepit, dan berakhir ketika daftar smart-cocok1
--ie, memiliki panjang 1. Trailing[* - 1]
memperoleh elemen terakhir, dan final[0]
mengeluarkan satu-satunya elemen dari daftar singleton itu.(|$_ xx *)
menghasilkan salinan datar, yang direplikasi tak terbatas dari elemen saat ini. Daftar ini diindeks dengan rentang.[0] + (1 ..^ $_)
untuk mengekstrak daftar hingga berikutnya dalam seri.sumber
[*-1][0]
dapat digabungkan menjadi[*-1;0]
penghematan satu byte. Juga1..$_-1
lebih baik ditulis karena1..^$_
menyimpan byte lagi.[*-1;0]
, tetapi tampaknya tidak setara entah bagaimana. Fungsi kemudian mengembalikan daftar daripada angka.1..^$_
pengoptimalanPerl 5 ,
474341 + 2 (-ap
) = 43 byteCobalah online!
Mengambil input sebagai angka yang dipisahkan spasi.
sumber
$x%=@F,splice@F,$x=($x+$F[$x])%@F,1while$#F;$_="@F"
Haskell , 56 byte
Cobalah online!
sumber
Python 3 ,
5756 byteCobalah online!
sumber
Java 8 , 325 Bytes
Golf:
Tidak Disatukan:
sumber
static
kata kunci di sini. Biasanya solusi multi-metode diimplementasikan sebagai anggota kelas yang tidak statis, danmain
menciptakan contoh untuk pengujian. Juga, jika Anda melakukannya dengan cara itu Anda mendukung Java 7 dan dapat mengirimkan sebagai solusi "Java". Untuk referensi di masa mendatang, format input cenderung cukup fleksibel di sini, jadi misalnya Anda dapat memilih untuk mengambil input sebagaiList
(yang cukup membantu untuk masalah ini).APL + WIN, 36 byte
Penjelasan:
Meminta input layar.
sumber
Python 2, 61 byte
sumber
JavaScript,
585659 byteMengembalikan hasil sebagai satu-satunya elemen yang tersisa di larik input yang diperbarui di tempat.
Dua byte disimpan dengan menggunakan pernyataan yang dipisahkan koma, bukan pernyataan blok dalam for loop body! Tiga byte hilang untuk dilompati dari elemen yang dihapus di akhir array (:
Kurang bermain golf:
sumber
[3, 5, 7, 9]
.[3,5,7,9]
. Nilai yang diharapkan 5Brain-Flak , 104 byte
H.PWiz memiliki jawaban yang lebih pendek di sini yang saya bantu buat, Anda harus memeriksanya.
Cobalah online!
Penjelasan
sumber
Bersih , 78 byte
Menggunakan metode yang sama dengan jawaban Haskell dari Laikoni .
Cobalah online!
sumber
R , 111
117126byteBerkat @Giuseppe untuk bermain golf 11 byte dengan mengubah ke loop sementara, dapatkan 4 byte lainnya dengan menghapus fungsi dan membaca input pengguna secara langsung.
Saya tidak merasa senang dengan apa yang diperlukan untuk sampai ke sana - saya yakin ada solusi yang lebih elegan.
Cobalah online!
Kode tidak dikunci
sumber
f=
harus dimasukkanwhile
lingkaran, saya pikir.while
putaranf=
bagian dari fungsi rekursif. :(