Một căn phòng của gương


18

(Thử thách này rất giống nhau, nhưng thử thách hiện tại này có thêm các biến chứng.)


Hãy tưởng tượng một căn phòng 2 chiều, nơi các bức tường được mạ bằng gương phẳng.

Đột nhiên, một chùm ánh sáng chiếu vào phòng, nơi thiếu một mảnh tường! Ánh sáng nhảy múa quanh phòng, bị phản chiếu bởi những tấm gương treo tường, và cuối cùng lại rời khỏi phòng.

Hợp lý

Bạn đang đưa ra 5 biến: W, H, X, YZ .
Bây giờ, họ có ý nghĩa gì?

W, H là kích thước của căn phòng (bao gồm các bức tường), với W là chiều rộng và H là chiều cao.
X, Y là tọa độ mà tường có lỗ tại. Bạn có thể cho rằng điều này luôn nằm trên một bức tường gạch. Các tọa độ dựa trên 0, với trục X hướng phải và trục Y chỉ xuống.
Z là một nhân vật duy nhất, đại diện cho hướng đó ánh sáng rơi vào phòng, một trong hai \hoặc /.

Phòng phải được xây dựng với các nhân vật sau:

  • | cho các bức tường ngang
  • - cho các bức tường thẳng đứng
  • + cho các góc

Ví dụ: (W = 7, H = 4)

+-----+
|     |
|     |
+-----+

Bây giờ chúng ta có một căn phòng, hãy phá hủy một trong những viên gạch ốp tường, vì vậy một chùm ánh sáng rơi vào phòng. Chùm ánh sáng là các đường chéo, đại diện \/ký tự.

Hãy thay thế gạch ốp tường ở X = 2, Y = 0 bằng một \chùm ánh sáng.

+-\---+
|     |
|     |
+-----+

Ánh sáng đi qua theo đường chéo trong phòng cho đến khi nó chiếu vào tường gương. Nếu một bức tường bị bắn trúng, hướng sẽ đảo dọc theo trục của bức tường và chùm tia truyền đi.

+-\---+
|\ \/\|
| \/\/|
+-----+

Trong ví dụ này, chùm sáng chiếu tới một điểm mà một góc của bức tường bị chiếu vào, điều này gây ra rằng chùm tia bị đảo ngược hoàn toàn và đi hết đường về, cuối cùng rời khỏi phòng.

Nhiệm vụ của bạn

Viết chương trình in căn phòng và toàn bộ đường đi của chùm sáng, cho đến khi nó rời khỏi phòng một lần nữa hoặc lặp lại thành một vòng lặp vô hạn.

Đầu vào

Đầu vào có thể được nhận ở bất kỳ định dạng hợp lý nào, nhưng nó phải bao gồm 4 số nguyên W, H, X, Y và ký tự Z chẳng hạn [10, 8, 0, 3, \].

Bạn có thể cho rằng:

  • W, H> = 3
  • X, Y luôn được đặt tại một bức tường
  • Z sẽ chỉ có thể chứa các giá trị \/.

Đầu ra

Bạn có thể quyết định nếu bạn trả về một chuỗi hoặc trực tiếp xuất ra stdout.
Nó phải bao gồm tường của căn phòng và chùm sáng (được xác định bởi các ký tự ASCII ở trên).

Quy tắc

  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là , vì vậy mã ngắn nhất tính bằng byte, trong bất kỳ ngôn ngữ nào, sẽ thắng.
  • Tất cả các ngôn ngữ mã hóa được tạo ra trước khi xuất bản thử thách này đều được cho phép.

Ví dụ

Đầu vào: [5, 4, 2, 0, /]

+-/-+
|/ /|
|\/ |
+---+

Đầu vào: [20, 3, 0, 1, \]

+------------------+
\/\/\/\/\/\/\/\/\/\|
+------------------+

Đầu vào: [10, 8, 0, 3, \] (Ví dụ về một vòng lặp vô hạn sẽ không rời khỏi phòng một lần nữa.)

+--------+
|/\/\/\/\|
|\/\/\/\/|
\/\/\/\/\|
|\/\/\/\/|
|/\/\/\/\|
|\/\/\/\/|
+--------+

Chúc may mắn!

Câu trả lời:


5

Than , 55 byte

BNNJNNPψ↷⎇⁼δ/⎇∧⁻⁻θ¹ζIε⁷I3⎇∧IζIε⁵I1W¬℅KK«¹F³¿∧κ℅KK«↷κ¶↷κ

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Chỉnh sửa: Tôi không biết tại sao nhưng mã đó không hoạt động ngay bây giờ. Đây là một phiên bản điều chỉnh thay thế. Giải thích về mã gốc:

BNN

Vẽ hộp bên ngoài.

JNNPψ

Di chuyển con trỏ đến điểm vào và tạo một lỗ trong hộp tại điểm này, để điều này trở thành nền.

↷⎇⁼δ/⎇∧⁻⁻θ¹ζIε⁷I3⎇∧IζIε⁵I1P

Xoay theo hướng thích hợp để in đoạn đường ban đầu.

W¬℅KK«¹

Trong khi con trỏ nằm trên một lỗ, hãy vẽ đoạn tiếp theo.

F³¿∧κ℅KK«↷κ¶↷κ

Tìm kiếm một lỗ hổng để vẽ đoạn tiếp theo. Điều này hoạt động bằng cách lặp lại cùng một mã ba lần. Lần đầu tiên, không có gì xảy ra. Lần thứ hai, nếu con trỏ không quá lỗ, nó sẽ quay đúng 45 °, sau đó thực hiện một bước sang phải, sau đó xoay phải 45 °. Điều này có tác dụng phản ánh nó theo một trục. Lần thứ ba, nếu con trỏ vẫn không quá lỗ, nó sẽ quay đúng 90 °, sau đó thực hiện một bước sang phải, sau đó xoay phải 90 °. Điều này có tác dụng thay đổi sự phản chiếu sang trục khác. Nếu vẫn không có lỗ, thì một góc hoặc vòng lặp vô hạn đã đạt được, do đó vòng lặp bên ngoài dừng lại.


1
Để mọi người kiểm tra mã của bạn hoạt động, sẽ có một liên kết đến mã golf trực tuyến, với phiên bản dài dòng riêng biệt.
trichoplax


@trichoplax thật dễ dàng
MD XF

@trichoplax Liên kết TIO thực sự hiển thị mã được đánh gôn ở đầu ra, đó là nơi tôi sao chép và dán nó từ ...
Neil

1
@trichoplax Khi bạn sử dụng -v -slthì đó thực sự là mã rút gọn được dịch như được in được thực thi. Tất nhiên, điều này phụ thuộc vào deverbosifier tạo mã chính xác, bởi vì nếu không, thì mã được tạo không thành công, mặc dù mã verbose ban đầu là đúng về mặt kỹ thuật.
Neil
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.