Hedef
Bu yarışmada, içinde bir mum bulunan rastgele bir oda verilir. Amaç, karanlık noktaları @
's ile değiştirerek odanın hangi bölümlerinin mum tarafından aydınlatılacağını belirleyen en kısa programı (bu golf) yazmaktır . Program, çıktı STDOUT'a yazdırılmış olarak STDIN'den bir oda almalıdır.
Örnek Giriş / Oda
+------+
| C |
| +--+
| \ |
+---------+
Mum ile temsil edilir C
, ve duvarlar / ayna ile temsil edilir |
, -
, /
ya da \
. Duvarların kendisi aynalardır. Odanın köşeleri a ile temsil edilir +
.
Odalarda asla çapraz duvarlar olmayacak ve ışık odadan asla kaçamayacaktır.
Ayrıca, bir satırdaki ilk karakter her zaman odadaki duvarın bir parçası olacaktır. Her satırdaki mutlak son karakter odanın karşı duvarı olacaktır. Bu ikisi arasında hiçbir karakter odanın dışında kalmayacak.
Işık ve Yansıma
Mum sekiz temel yönde sekiz (lazer benzeri) ışık yayar: N, S, E, W, NE, SE, SW ve NW. Bu ışık ışınları aşağıda açıklandığı gibi aynalardan sıçrar:
Old Direction of Travel | Mirror | New Direction
N S E W NE SE SW NW / E W N S -- -- -- --
N S E W NE SE SW NW \ W E S N -- -- -- --
N S E W NE SE SW NW | - - - - NW SW NE SW
N S E W NE SE SW NW - - - - - SE NE SW NE
A -
emilen ışığı temsil eder. Işık her zaman C veya + 'lar tarafından emilir. Işıkların bir aynadan sadece ayna ile aynı alanı işgal ettiğinde yansıdığını belirtmek önemlidir. Yansımayı kağıda çizdiğinizde bu kuralların anlaşılması çok daha kolaydır.
Örnek Çıktı
Çıktı olarak, program aydınlatılmış odanın bir görüntüsünü basmalı, koyu lekeler bir olarak yazılmalı @
, açık noktalar boş bırakılmalı ve aynalar etkilenmemelidir. Yukarıdaki örnek için çıktı:
+------+
| C |
|@ @ +--+
| @\ |
+---------+
Bu, ışık ışınlarını çıkardıysanız, asla işaretli alanlara ulaşmayacakları anlamına gelir @
.
Daha fazla örnek
Input:
+-----+
| |
| |
| C |
| |
| |
+-----+
Output:
+-----+
| @ @ |
|@ @|
| C |
|@ @|
| @ @ |
+-----+
Input:
+-----+
| \ |
|/ C \+-+
| |
| \ - ++
+------+
Output:
+-----+
| \ @|
|/ C \+-+
| @|
| @\ -@++
+------+
@
olmamalı mı?