Deskripsi
Tugas dari tantangan ini adalah untuk menyusun program atau fungsi yang melacak objek tertentu dalam ruang .
I / O
Program Anda akan diberikan 3 input, yang dapat diambil dengan cara apa pun yang masuk akal :
n
akan menjadi ukuran sisi pesawat. (jadi, untuk , bidang Anda akan ). Anda mungkin menganggap akan selalu bilangan bulat ganjil.n
s
akan menjadi posisi awal objek, diberikan sebagai pasangan koordinat.
D
akan menjadi vektor pasangan yang dipesan. D
akan mengikuti format , di mana akan selalu menjadi salah satu , untuk arah kardinal dan arah interardinal primer, dan akan menjadi bilangan bulat untuk jumlah 'kutu'.'N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'
Dengan input ini, program Anda harus menampilkan pelacakan objek di pesawat.
Aturan
Output harus berisi batas-batas pesawat. Misalnya:
- 21012 + + ┌─────┐ 2│ │ 1│ │ 0│ │ 1│ │ 2│ │ -└─────┘
akan menjadi contoh pesawat 5 × kosong . Angka-angka di atas dan di samping hanya untuk referensi dan tidak perlu dicetak.
Anda dapat menggunakan karakter apa pun untuk batas, asalkan bukan spasi putih (atau diterjemahkan sebagai spasi putih). Karakter yang Anda pilih harus menggambarkan bidang penuh, yang berarti bahwa tidak ada celah di antara mereka.
Beberapa pesawat yang dapat diterima meliputi: ┌──┐ .... ---- + - + │ │. . | | | | │ │. . | | | | └──┘; ....; ----; + - + Pesawat yang tidak dapat diterima meliputi: .... .... ++++. . . . + +. . . + +. . ; ....; ....; + +; . .
Objek yang akan dilacak dapat berupa karakter apa pun yang Anda pilih, asalkan hanya menempati 1 ruang di pesawat dan berbeda dari karakter batas.
Jejak objek yang dilacak juga dapat berupa karakter apa pun yang Anda pilih, asalkan mereka hanya menempati 1 ruang di pesawat dan berbeda dari objek.
Untuk setiap elemen di , objek harus bergerak spasi menuju , dan meninggalkan jejak di belakang.
Jika objek akan mengenai batas, itu akan tercermin. Jika objek masih memiliki gerakan ke kiri, ia akan terus bergerak ke arah yang dipantulkannya.
Untuk referensi, petunjuk ini mencerminkan satu sama lain:
→ ketika batas atas atau bawah dipenuhi;
→ ketika batas lateral terpenuhi;
Hasil akhir akan berisi jejak terbaru yang mungkin, yaitu, jika objek akan meninggalkan jejak di ruang di mana sudah ada jejak, karakter jejak yang lebih baru akan menimpa yang lebih tua.
Seperti biasa, celah standar dilarang secara default .
Mencetak:
Ini adalah tantangan kode-golf .
Contoh:
Input: , ,
Mengatasinya:
0 ┌─────┐ │ │ │ │ 0│ ○ │ │ │ │ │ └─────┘
0 ┌─────┐ │ ○ │ │ \ │ 0│ \ │ │ │ │ │ └─────┘
0 ┌─────┐ │∧ │ │ | \ │ 0│ ○ \ │ │ │ │ │ └─────┘
, yang akan menjadi output.
0 ┌─────┐ │∧ │ │ | \ │ 0│└ ○ \ │ │ │ │ │ └─────┘
(0s hanya untuk referensi, dan mereka tidak perlu berada di hasil akhir.)
Input: , ,
Perhatikan bahwa ketika :
0 ┌─────────┐ │ │ │ │ │ │ │ ∧ │ 0│ / | │ │ ○ / | │ │⟨ / │ │ \ / │ │ ∨ │ └─────────┘
Objek telah tercermin dua kali : sekali ketika mencapai bagian bawah dari pesawat saat akan menuju , di mana itu mencerminkan ke ; kemudian sekali lagi ketika mencapai sisi kiri dari pesawat, di mana mencerminkan ke .
Hasil akhir datang pada :
0 ┌─────────┐ │ ○ │ │ \ │ │ \ │ │ \ │ 0│ / | ⟩│ │ ∧ / / │ │⟨ \ / / │ │ \ \ / │ │ ∨ ∨ │ └─────────┘
Kasus uji:
Input: n = 5 , s = ( 0 , 0 ) , D = [ ( ′ N W ′ , 2 ) , ( ′ S ′ , 2 ) , ( ′ E ′ , 1 )
Keluaran:
0 ┌─────┐ │∧ │ │ | \ │ 0│└ ○ \ │ │ │ │ │ └─────┘
Input: , ,
Keluaran:
0 ┌─────────┐ │ ○ │ │ \ │ │ \ │ │ \ │ 0│ / | ⟩│ │ ∧ / / │ │⟨ \ / / │ │ \ \ / │ │ ∨ ∨ │ └─────────┘
Input: , ,
Keluaran:
0 ┌───┐ │ | │ 0│- ○ ┐│ │ | │ └───┘
Input: , ,
Keluaran:
0 ┌───────────┐ │ ∧ │ │ / \ │ │┌ - / - \ \ │ │ \ | / \ \ │ │ \ | \ \ │ 0│ | / ⟩│ │ | \ / / │ │ | / ○ │ │ | / \ │ │ ∨ \ │ │ \ │ └───────────┘
'N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'
integer 0-indexed (atau 1-indexed)? Jadi[('NW',2),('S',2),('E',1)]
jadi[[7,2],[4,2],[2,1]]
misalnya.Jawaban:
JavaScript (ES6), 228 byte
(n,x,y,[[dir,len],[dir,len],...])
Menghasilkan string dengan
0
untuk batas,1
untuk jejak dan3
untuk posisi akhir.Cobalah online!
Bagaimana?
Menginisialisasi dan menggambar ke dalam 'kanvas' (yaitu matriks karakter) agak membosankan dan panjang dalam JavaScript.
Kode ini menggunakan strategi yang berbeda: alih-alih menyimpan output dalam array 2D, ia membangun karakter string dengan karakter, dari kiri ke kanan dan dari atas ke bawah. Pada setiap iterasi:
0
jika kami melewati batas.1
atau3
jika ya, atau spasi sebaliknya.Secara keseluruhan, ini mungkin bukan pendekatan terpendek, tapi saya pikir itu layak untuk dicoba.
sumber
Java 10,
350343340336 byteD
adalah 2D bilangan bulat-array di mana arah adalah 0-diindeks bilangan bulat:N=0, NE=1, E=2, SE=3, S=4, SW=5, W=6, NW=7
. Awal-x,y
koordinat akan menjadi dua parameter terpisahs
danS
. Outputnya adalah karakter-matriks.Ini digunakan
#
sebagai perbatasan,*
sebagai jejak, danO
untuk posisi akhir (tetapi bisa ketiganya menjadi karakter ASCII dalam kisaran unicode[33,99]
untuk byte-count yang sama jika Anda mau).Cobalah online.
-4 byte terima kasih kepada @ceilingcat .
Pasti bisa bermain golf lagi dengan menyederhanakan gerakan dan ke arah mana kita bepergian lagi.
Penjelasan:
y<2&i<2|y>=n&i>2&i<5?4-i:x<2&i>4|x>=n&i>0&i<4?8-i:y<2&i>6?5:y<n|i!=5?i:7
adalah versi golf dari ini di bawah ini dengan menggunakan4-i
dan8-i
untuk sebagian besar perubahan arah:sumber
Arang , 74 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Mengambil input dalam format n, x, y, d di mana d adalah array array [jarak, arah] pasangan di mana arahnya adalah pengkodean numerik 0 = selatan searah jarum jam ke 7 = selatan timur. Penjelasan:
Input
n
dan gambar sebuah kotak yang interiornya seukuran itu berpusat pada asal.Input dan melompat ke
x
dany
(tetapi meniadakany
karena sumbu y Charcoal meningkat ke bawah).Ulangi entri di
d
.Ekstrak arah awal.
Ulangi untuk jarak yang diinginkan.
Simpan arahnya.
Buat langkah eksperimental ke arah itu.
Jika ini tidak aktif maka balikkan arah secara horizontal.
Jika ini terjadi dari atas atau bawah maka balikkan arah secara vertikal.
Kurangi modulo 8 arah (perintah Pivot hanya menerima nilai dari 0 hingga 7).
Batalkan langkah eksperimental.
Hadapi arah yang benar, lalu cetak jejak dan gerakkan.
Menghadap ke belakang ke arah default, dan cetak objek pada posisi saat ini.
sumber
JavaScript, 206 byte
Mengambil input sebagai (n, x, y, [[dir, len], [dir, len], ...]) di mana arah dikodekan menggunakan bitmask:
Menghasilkan string dengan
Nilai-nilai yang berbeda untuk batas digunakan untuk mengevaluasi arah selanjutnya
Kurang golf
UJI
sumber
C (gcc) ,
352323 byteGolf turun 29 byte berkat ceilingcat.
Cobalah online!
Program ini mengambil input sebagai argumen baris perintah (seperti
a.out 10 1 1 3 5 0 4 7 2
):E
dan berputar searah jarum jam) danPenjelasan
sumber