> <> (Ezoterik bir programlama dili) kodu ile yüzen sevgili balık , doğal ortamından çıkarıldı. Bu değişiklik onu alıştığı şekilde hareket ettiremedi: toroidal hareket eskisi soldan sağa hareketle sınırlıydı. Ancak, programlar hala balıklar kendi aralarında hareket edebiliyormuş gibi yazılıyor. Göreviniz, sevgili programcı, bir programı <<> doğrusallaştırmak için bir program yazmak. Ve mümkün olduğunca az bayt ile yapın; balıkların çok büyük anıları yoktur.
Hareket <>
> Hareket, toroidal ve her seferinde bir karakterdir. Bu, balığın (işaretçi) bir çizginin sonundan başlangıcına "sarılabileceği" anlamına gelir. Balıklar, çoğu işaretçinin hareket etme biçiminin aksine, yukarıdan aşağıya, aşağıdan yukarıya ve sağdan sola hareket edebilir. Dolayısıyla bu hareket paterni geçerli olacaktır:
>>>^ >>>v
>>>^ v
ve sonsuz bir döngü ile sona erer (en alttan sonsuza kadar geçtiğinde üst çizgiye geri dönerek).
Balık, maksimum (sıra uzunluğu) eşit uzunlukta bir ızgarada ve sıra sayısına eşit yükseklikte bir ızgarada hareket eder.
Balıkların hangi yönde hareket ettiğini nasıl anlarsınız? Bu komutlar hareketin yön vektörünü değiştirir (örneğin (-1,0)
sağdan sola anlamına gelir):
Command | Direction Change
---------------------------
> | (1,0) (default)
< | (-1,0)
^ | (0,1)
v | (0,-1)
/ | (x,y) -> (y,x)
\ | (x,y) -> (-y,-x)
| | (x,y) -> (-x,y)
_ | (x,y) -> (x,-y)
# | (x,y) -> (-x,-y)
; | (0,0)
Belirtildiği gibi, balık soldan sağa, yani yön vektörü ile hareket etmeye başlar (1,0)
. Balık, gördüğü ilk komuttan başlayarak komutları ayrıştırmaya başlar ve bir komut yukarıda belirtilen yön değiştiricilerden biriyle eşleşirse yönünü değiştirir.
Balık ;
, programı gördüğünde ve programı sonlandırdığında durur .
Giriş
Girdi, STDIN aracılığıyla verilen geçerli bir program (örn. Sonsuz döngüsüz) olacaktır. İsterseniz bir dosyayı da okuyabilirsiniz. Her programın çizgileri olacaktır olup zorunlu olarak aynı uzunlukta olması.
Girdi, programdaki her satırı ayıran yeni satırlar içeren bir dize olarak verilir.
Programlar döngü yapmaz, bu da her zaman a ile sonlanacakları anlamına gelir ;
.
Çıktı
Çıktı doğrusallaştırılmış program olacaktır. Yani, balığın programı "normal" olarak çalıştırıp çalıştırmadığını göreceği tüm karakterleri (yön değiştiriciler dahil) döndürmelisiniz. Bu yoldaki tüm karakterler;
.
Giriş eşit olmayan uzunluktaki çizgilere sahipse ve balıklar en uzun çizginin uzunluğundan daha kısa bir çizgi boyunca hareket ederse, balıklar bir alanın üzerinde hareket ediyormuş gibi davranmalısınız (test durumlarına bakın).
> <> Konusuna aşina olanlar, yön değiştiricilerin içinde hareket yapmanın tek yolu olmadığını bileceklerdir, ancak basitlik uğruna girdiye hareketi etkilemenin tek yolu gibi davranırlar .
kurallar
- Standart boşluklar geçerlidir
- Tam bir program veya işlev yazabilirsiniz
- Girdi, STDIN veya dosya ile satırsonu (
\n
) ile ayrılmış program satırlarını içeren bir dize olarak sağlanır- Girdiyi farklı nedenlerle aklınızda tutabilirsiniz (aklınızda belirli bir girdi olup olmadığını sormaktan çekinmeyin). Girişi satır boşluklarıyla eşleşecek şekilde boşluklarla dolduramazsınız.
- Esnek girdi ile ilgili bu meta gönderiye bakın . Gönderi anlamına geldiği için, genel fikir birliği akıl içinde olabildiğince esnek olmalıdır.
- Çıktı STDOUT aracılığıyla tek bir dizedir veya işlev tarafından döndürülür (ne yapmayı seçtiğinize bağlı olarak, Kural 2'ye bakın)
Test Durumları
v >v
>abcv//;
gfed<^ih
v>abcv<defghi^//>v;
v >v
>abcv//;
gfed<^
v>abcv<defg ^//>v;
abcdef;
abcdef;
abcd|;
abcd|dcba;
abcd#;
abcd#dcba;
abcd\;
_
abcd\_\dcba;
^;
>abcde/
^jihg<
^ >abcde/ <ghij^a;
;
;