The Doctor, dalam upaya melarikan diri dari pasukan Dalek telah memutuskan untuk mengirim mereka dalam putaran dengan melakukan perjalanan di berbagai kantong ruang dalam gerakan spiral.
Tergantung pada sifat ruang-waktu yang tersedia, Dokter perlu masuk ke dalam TARDIS mengontrol ketinggian dan lebar bagian ruang dan titik masuknya untuk memulai spiral.
Bagian ruang dapat dibayangkan sebagai h x w kotak diisi dengan bilangan bulat berurutan dari kiri ke kanan, atas ke bawah, dimulai dengan 1.
Posisi awal disediakan sebagai rc untuk baris dan kolom ... Dari sini, perangkat lunak TARDIS perlu memuntahkan daftar bilangan bulat yang diperoleh dengan memutar ke arah luar dalam arah berlawanan jarum jam dari baris r kolom c , mulai ke atas ...
Tugas Anda, sebagai pendamping Dokter adalah memprogram TARDIS untuk mengambil empat angka, dalam format height width row column
dan menentukannya untuk sektor ruang mana yang perlu dilalui TARDIS untuk menyesuaikan dengan gerakan spiral yang dijelaskan di bawah ...
Input 1
5 5 3 3
(5 x 5 kisi, mulai dari posisi 3,3)
Output 1
13 8 7 12 17 18 19 14 9 4 3 2 1 6 11 16 21 22 23 24 25 20 15 10 5
Menjelaskan output
Kotak asli
Spiral yang dihasilkan
Input 2
2 4 1 2
(2 x 4 grid mulai dari posisi 1,2)
Keluaran 2
2 1 5 6 7 3 8 4
Menjelaskan output
Sedikit berbeda karena spiral sekarang harus melingkari grid untuk menghasilkan output masing-masing ...
Kotak asli
Spiral yang dihasilkan
Aturan:
Ini adalah kode-golf, sehingga panjang kode terpendek mendapat tanda persetujuan.
Contoh di atas harus digunakan untuk menguji kode Anda. Jika tidak memberikan output masing-masing, ada yang salah ...
Versi kode golf dan golf harus diberikan dalam jawaban Anda ...
Semoga berhasil!
Jawaban:
JavaScript (ES6) 124
163 177Sunting Cara yang sama sekali berbeda, tidak perlu array untuk menyimpan sel yang dikunjungi. Menggunakan fakta bahwa sisi spiral bertambah 1 setelah setiap 2 putaran.
sumber
Python 3, 191
Mungkin bukan skor yang bagus, tapi ini dia:
Kami bergerak sepanjang spiral dengan menambah panjang sisi setelah setiap detik berputar. Jika posisi kami di dalam kisi yang diberikan, kami mencetak nomor yang sesuai.
Variabelnya adalah:
sumber