X pencere sistemi ile birlikte gelen (ve bildiğim kadarıyla hala birlikte gelen) bir demo programı olan Xeyes'i hatırlayabilir veya hatırlamayabilirsiniz. Amacı, fare imlecini takip eden bir çift göz çizmekti:
Buradaki zorluk Xeyes'i ASCII sanatı ile yeniden yaratmak. Kullanıcının tıkladığı yerde her iki ASCII sanat gözünü (aşağıda belirtildiği gibi) çizen bir program veya işlev yazın ve ardından öğrencilerini imlecin yönünü gösterecek şekilde hareket ettirin.
Yukarıdaki GIF, Ruby'nin herhangi bir yeni sürümüyle çalıştırılabilecek olan bu golfe binmeyen Ruby uygulamasının bir kaydıdır . Ayrıca, Xterm kontrol sekansları için referans olarak yararlı bulabilirsiniz.
Özellikler
Bu kod golf , bu yüzden en az bayt ile çözüm kazanır.
This is an ascii-art program-spesifik karakterleri ASCII kullanarak çizmek gerekir, böylece meydan, karakterler -
, .
, |
, '
, 0
, uzay ve yeni satır. 1 2
Bu etkileşimli bir zorluktur, bu nedenle programınız girişi kabul etmeli ve çıktısını gerçek zamanlı olarak çizmelidir. 3
Programınız girişi kabul etmeye başlamadan önce, en az 20 satır ve 20 sütundan oluşan boş bir tuval başlatmalıdır. Kullanıcı tuval üzerine tıklayana kadar hiçbir şey çizmemelidir.
Kullanıcı tuvale 4 tıklattığında , program önceki çıktıları silmeli ve daha sonra bu ASCII gözlerini tuvale çizmeli ve fare imlecinin konumuna en yakın karaktere ortalanmalıdır. 5 6 (Aşağıda, ✧
fare imlecini gösterir ve çizilmemelidir.)
.---. .---.
| | | |
| 0|✧|0 |
| | | |
'---' '---'
Öğrencilerin imleci gösterme şeklini "not edin".
Her zaman tuval üzerine fare imleci hareket ederse, onlar imlecin doğru işaret etmeyi sürdürür, böylece öğrencileri yeniden çizmek gerekir programı, 7 örn:
✧
.---. .---.
| 0| | 0|
| | | |
| | | |
'---' '---'
İşaret eden öğrenci
Her bir gözün iç dokuz karakterinin pozisyonlarını şu şekilde sıraladığımızı varsayalım:
.---.
|678|
|591|
|432|
'---'
Öğrenci konumlardan birinde çizilecektir 1
- 9
. Hangisini kararlaştırmak için, karakterlerin kare olduğunu ve kanvasın bir Kartezyen ızgara olduğuna karar verin, karakterin merkezi 9
(0, 0), ortasındaki 1
(1, 0) vb. Program giriş aldığında (bir tıklama veya hareket) giriş konumunu en yakın ızgara koordinatına 𝑀 eşlemelidir. Eğer ((0, 0) ise, öğrenci (0, 0), yani 9
yukarıdakilerin bulunduğu yere çekilmelidir . Aksi takdirde, aşağıda açıklandığı gibi çizilmelidir.
Izgaraya bindirilmiş ve 1 - 8 numaralı oktanlara bölünmüş bir Kartezyen düzlemi düşünün :
Eğer oc oktan 1 içerisine uzanıyorsa , öğrenci 1
yukarıdaki yerine, yani (1, 0) çizilmelidir . Eğer oc 2 nolu okta ise , 2
— ve benzeri noktalara çekilmelidir . Göstermek için, aşağıdaki resim, fare imleci belirli bir yerde iken öğrencinin çizilmesi gereken yere göre renk kodlu olan bir ızgara kısmını göstermektedir. Örneğin, imleç yeşil koordinatların herhangi birinde olduğunda (ızgara koordinatlarının köşelerinde değil, karelerin merkezlerinde bulunduğunu aklınızda bulundurarak) öğrencinin çizilmesi gerekir 4
.
İki gözün öğrencisi bağımsız hareket eder, bu nedenle her bir göz için, o gözün merkezine göre 𝑀 ile işlemi tekrarlayın.
notlar
Bu grafiksel bir çıktı değildir . Çıktı bir karakter ızgarası olmalıdır. Elbette, bir karakter ızgarası çizmek için grafik yordamları kullanabilirsiniz.
Boşluklar çizilebilir (veya daha doğrusu çizilmez) ancak uygundur. Izgaradaki boş bir nokta, boşluk karakteriyle aynı görünür ve eşdeğer olarak kabul edilir.
Burada “gerçek zamanlı”, girdi ve çizilen çıktı arasında en az 200 msn olarak tanımlanır.
Girdi için hangi fare tuşlarının / tuşlarının gözlemlendiği ve bir basının ya da bırakmanın bir "tık" oluşturup oluşturmadığı tamamen sizin kararınıza bağlıdır.
Tuval temizlenmiş olmalı veya görsel eşdeğeri sağlanmalıdır. Terminal tabanlı bir çözümde, örneğin, önceki tuvalin altına yeni bir tuval yazdırmak eşdeğer sayılmaz.
Kullanıcı, bazı göz karakterlerinin kenarlarının ötesine çizileceği şekilde kanvasın kenarına yakın tıklarsa, davranış belirsizdir. Ancak, program sonraki tıklamalarda normal şekilde çalışmaya devam etmelidir.
Fare imleci "tuvali" bıraktığında davranış tanımlanmaz, ancak imleç tuvale tekrar girdiğinde program normal şekilde çalışmaya devam etmelidir.
Çıktıyı gizlemediği sürece tuval üzerinde bir metin imleci görünebilir.
Standart boşluklar yasaktır.
<pre>
veya font-family:monospace
).