Alih-alih menjadi prajurit yang terampil yang mampu membunuh Hydra (lihat di sini dan di sini ), kali ini Anda adalah seorang prajurit yang tidak memiliki pengetahuan sebelumnya tentang cara membunuh satu atau senjata apa yang digunakan untuk melawan makhluk itu.
Dalam masalah ini, setiap kali Anda memotong satu kepala, dua akan tumbuh di tempat yang sama. Karena Anda tidak memiliki mekanisme untuk memotong banyak kepala secara bersamaan, jumlah kepala hanya akan bertambah. Dalam hal ini, Hydra kami dapat mulai dengan N
(N ⩾ 1) kepala. Mari kita sebut pertemuan pertama satu generasi dan kami akan mewakili kepala dari generasi pertama sebagai 0 , kepala dibuat setelah pukulan pertama sebagai 1 , dan seterusnya.
Memasukkan
Anda akan diberikan bilangan bulat yang N
mewakili berapa banyak kepala Hydra awalnya dan daftar ukuranN
berisi indeks mana (dalam contoh saya akan menggunakan format 0-diindeks) Anda akan memotong kepala. Anda selalu dapat menganggap indeks yang diberikan valid - ingat bahwa daftar (yaitu: kepala) akan tumbuh ketika Anda memotong kepala.
Contoh
Input : N = 4
dan[0,4,2,5]
Generasi 0 - Indeks serangan 0
0 0 0 0 => 1 1 0 0 0
^ ^ ^
Generasi 1 - Indeks serangan 4
1 1 0 0 0 => 1 1 0 0 2 2
^ ^ ^
Generasi 2 - Indeks serangan 2
1 1 0 0 2 2 => 1 1 3 3 0 2 2
^ ^ ^
Generasi 3 - Indeks serangan 5
1 1 3 3 0 2 2 => 1 1 3 3 0 4 4 2
^ ^ ^
Generasi terakhir
1 1 3 3 0 4 4 2
Seperti yang Anda lihat, indeks yang diberikan terkait dengan daftar generasi sebelumnya.
Keluaran
Anda harus menampilkan generasi terakhir.
Uji kasus
N = 1 and [0] => [1,1]
N = 2 and [0,0] => [2,2,1,0]
N = 2 and [0,1] => [1,2,2,0]
N = 2 and [1,0] => [2,2,1,1]
N = 2 and [1,1] => [0,2,2,1]
N = 4 and [0,4,2,5] => [1,1,3,3,0,4,4,2]
N = 6 and [0,0,0,0,0,0] => [6, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0]
N = 6 and [5,6,7,8,9,10] => [0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 6]
N = 10 and [1,7,3,12,9,0,15,2,2,10] => [6, 6, 9, 9, 8, 1, 3, 3, 0, 0, 10, 10, 2, 5, 5, 0, 0, 4, 7, 7]
Ini adalah kode-golf sehingga jawaban terpendek dalam byte menang!
N
(...) dan daftar ukuranN
(Tapi saya melewatkan bagian itu juga ketika saya pertama kali membaca tantangan.) Oleh karena itu,N
sama sekali tidak berguna.N
dari input karena "secara implisit" diberikan sebagai ukuran array. Namun, saya pikir solusi akan menghemat byte dengan memberiN
alih-alih mengandalkanarray.size()
atau serupa.Jawaban:
Python 2 , 59 byte
Cobalah online!
-1 sangat pintar berkat xnor .
sumber
Python 2 , 60 byte
Cobalah online!
sumber
Stax ,
1211 byteJalankan dan debug di staxlang.xyz!
Berkat rekursif untuk penghematan satu byte!
Dibongkar (13 byte) dan penjelasan:
Tantangannya secara eksplisit mengatakan "Anda diminta untuk menghasilkan generasi terakhir," jadi dugaan saya adalah konsensus ini tidak berlaku di sini. Namun, jika berhasil, sepuluh byte dapat dikelola dengan membiarkan hasilnya pada tumpukan yang kosong:
sumber
0]*
dapat diganti denganz)
. Sunting: Tampaknya ini adalah perilaku tidak berdokumen, tetapi pad-left mengambil operandnya dalam urutan apa pun. (npm lol)Haskell ,
6357 byteCobalah online!
sumber
take
dandrop
lebih pendek darisplitAt
. Beralihg
ke lambda menghemat byte lain:foldl(\y(x,n)->take n y++x:x:drop(n+1)y).(0<$)<*>zip[1..]
.g
pointfree, dan itu semakin buruk.Oracle SQL, 325 byte
Tes dalam SQL * Plus.
PS. Berfungsi untuk angka hingga 255.
sumber
Zsh , 41 byte
Kami mengabaikan N, sebagai dinyatakan oleh aturan .
Cobalah online!
Cukup standar: Buat array 0s untuk memulai, cetak sampai selesai. The
a[i]=(a b)
Metode kedua berubah dan memasukkan adalah baru bagi saya, senang saya menemukan gunakan untuk itu.ATAU, juga 41 byte :
Yang ini kurang standar. Kami mengambil keuntungan dari beberapa trik rapi:
${a/#%/0}
: Ini pengganti, tapi#
dan%
beri tahu zsh untuk memasang jangkar di awal dan akhir. Karena kosong, kami mengganti semua elemen kosong dengan 0.a[#]=
: Ini secara efektif mendeklarasikan ukuran array kosong$#
di Zsh. Sepertichar *a[argc]
di C. Jika kita tidak melakukan ini, kita tidak akan mendapatkan nol yang kita butuhkan.Cobalah online!
sumber
Scala , 104 byte
Cobalah online!
Tampaknya menjadi jawaban terpanjang sejauh ini. :)
List.fill(2)(l.max+1)
dapat diganti denganList(l.max+1,l.max+1)
tetapi panjangnya tetap sama.sumber
JavaScript (ES6),
61 5951 byteTerima kasih kepada @Shaggy untuk menunjukkannya
n
selalu panjang array, menghemat 8 byte di kedua versiMengharapkan array dalam format 0-diindeks. Abaikan
n
.Cobalah online!
JavaScript (Node.js) ,
6456 byteMenggunakan
reduce()
danflat()
:Cobalah online!
sumber
a=>a.map(i=>b.splice(i,1,++g,g),b=a.map(_=>g=0))&&b
berhasil, tanpa minumn
?N
. Jadi, ya, sepertinyan
tidak berguna.Japt , 14 byte
Cobalah
sumber
PHP , 101 byte
Cobalah online!
sumber
Perl 5
-pal
, 48 byteCobalah online!
Mengambil array sebagai daftar yang dipisahkan oleh ruang dari STDIN. Tidak diinput
n
.sumber
Retina 0.8.2 , 69 byte
Cobalah online! Tautan termasuk kasus uji. 1-diindeks. Mengambil input sebagai
...list,N
. Tidak membutuhkan daftar yang panjangN
. Penjelasan:Konversikan semua input menjadi unary, tetapi gunakan
_
, sehingga tidak menjadi bingung dengan penggunaan digit selanjutnya1
. (Retina 1 akan melakukan ini secara otomatis untuk penghematan 2-byte.)Ganti
N
dengan arrayN
nol, tetapi jangan ubah daftar.Proses semua elemen dalam daftar.
Temukan elemen berikutnya dari daftar dan posisi yang setara dalam array.
$1
= generasi saat ini (panjangnya),$2
= koma dari generasi sebelumnya,$3
= indeks saat ini - 1,$4
=$3
kepala pertama .Ganti kepala di indeks saat ini dengan dua salinan dari generasi saat ini dalam desimal.
sumber
Pyth , 16 byte
Cobalah online!
Menariknya, ternyata saya tidak bisa menggunakan
s
untuk meratakan daftar karena sebenarnya singkatan+F
, yang bekerja+
pada dua elemen paling kiri dari daftar sampai semua elemen telah diproses. Ini berarti bahwa beberapa elemen pertama mungkin dijumlahkan, tergantung di mana penggantian terakhir terjadi.sumber
Jelly , 13 byte
Cobalah online!
Tautan monadik yang mengambil daftar kepala yang diindeks 1 untuk dipotong sebagai argumennya dan mengembalikan generasi akhir.
sumber
C # (Visual C # Interactive Compiler) ,
948985 byteDisimpan 2 byte berkat Andrew Bauhmer
Cobalah online!
sumber
a=>b=>b.Aggregate(new int[a-(a-=a)].ToList(),(c,d)=>{c[d]=++a;c.Insert(d,a);return c;})
<05AB1E , 10 byte
Cobalah online!
sumber