TL; DR: Dizinin başlangıç konumunda bir dizi karakter ve bir robot verildiğinde, hareketleri olan bir dizeyi okuyabileceğinden (
F
"ileri git",R
"90 derece sağa döndür" veL
"90 derece döndür ") bir algoritma yazın sola ") gidin ve robotun bitiş konumunu hesaplayın. Metnin tamamında daha fazla ayrıntı.
Evde çocuklar için çok basit bir programlanabilir cihazımız var: aracın ilerlemesini, 90 derece sola dönmesini veya 90 derece sağa dönmesini sağlayan düğmeli küçük bir araç. Buna benzer bir şey:
Ayrıca böyle harflerle bir köpük paspasımız var:
Tüm bunların amacı, çocuklara aynı anda hem alfabeyi hem de programlama ilkelerini öğretmektir.
Meydan okuma
Köpük matımızı rastgele şu şekilde düzenlediğimizi varsayalım:
+---+---+---+---+---+---+---+
| E | R | L | B | I | X | N |
+---+---+---+---+---+---+---+
| O | A | Q | Y | C | T | G |
+---+---+---+---+---+---+---+
| F | W | H | P | D | Z | S |
+---+---+---+---+---+---+---+
| K | V | U | M | J |
+---+---+---+---+---+
| |
+---+
Ayrıca, bir "ileri git" komutunu programladığımızda, araç paspastaki bir karenin boyutunun tam olarak ilerleyeceği şekilde aracı değiştirdiğimizi varsayalım. Yani, araç U
meydanda ise ve kuzeye giderse, tam olarak P
meydanda durur .
Talimatlar, hareket etmeye başlamadan önce araca verilir ve bunlar:
F
: Araç bir sonraki meydana geçer.R
: Araç yerine 90 derece sağa döner (başka hareket olmaz).L
: Araç yerinde 90 derece sola döner (başka hareket olmaz).
Talimatlar verildiğinde, "DEVAM" düğmesine basabilir ve aracı verilen sıradaki tüm talimatları izleyeceği için belirli bir konuma gönderebilirsiniz. Böylece, çocuğa aracın belirli bir harfe gitmesi için gerekli talimatları eklemesini söyleyebilirsiniz.
Bir string
(giriş parametresi) bir dizi talimatla işleyen ve aracın durduğu harfi (çıkış string
) hesaplayan en kısa programı / işlevi yazmalısınız .
Detaylar:
- Araç her zaman alttaki boş karede başlar ve kuzeye bakar (
U
kareye doğru ). - Girdi dizesi sadece harf içerecektir
F
,R
,L
veG
( "git" düğmesi için). İsterseniz paspas için küçük harfler ve talimatlar kullanabilirsiniz. - Algoritma ilk önce dizgideki her talimata uymalıdır
G
(bundan sonra her hareket, araç hareket etmeye başladığında yok sayılır). - Araç herhangi bir anda paspastan çıkarsa (giriş dizesi tamamen işlenmemiş olsa bile), algoritma dizeyi döndürmelidir
Out of mat
. - Değilse, algoritma aracın durduğu harfi döndürmelidir. Başlangıç noktası
karakter (veya boş bir dize) olarak sayılır .
Örnekler:
Input: FFG
Output: P
Input: FRFRFG
Output: Out of mat
Input: RRFFG
Output: Out of mat
Input: FFFRFFLFG
Output: X
Input: FFFRFFLF
Output: <-- Nothing or a whitespace (the robot has not started moving)
Input: FFFRRFFFG
Output: <-- Nothing or a whitespace (the robot has returned to the starting point)
Input: RRRRRLFFFLFFRFRFGFFRRGRFF
Output: L (Everything after the first G is ignored)
Bu kod golf , bu yüzden her dil için en kısa program kazanabilir!
@
, başlangıç pozisyonu ve boşlukların mattan çıkmasıyla, bu konfigürasyonERLBIXN\nOAQYCTG\nFWHPDZS\n KVUMJ \n @
(farklı aralıklarla, SE berbat etti)