Modern oyun konsollarında ve geleneksel klavyesiz diğer cihazlarda, metin girmeye çalışmak bir kabustur. Sanal klavyede birkaç tuş ve bir joystick ile yazmak zorunda kalmak can sıkıcıdır ve mümkün olduğunca az hareket / butona basmayı seviyorum.
Kullanacağınız klavye şöyle görünür:
+---+---+---+---+---+---+---+---+---+---+
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
+---+---+---+---+---+---+---+---+---+---+
| q | w | e | r | t | y | u | i | o | p |
+---+---+---+---+---+---+---+---+---+---+
| a | s | d | f | g | h | j | k | l | - |
+---+---+---+---+---+---+---+---+---+---+
| z | x | c | v | b | n | m | _ | @ | . |
+---+---+---+---+---+---+---+---+---+---+
Aşağıdaki işlemler kullanılabilir:
L
: bir kareyi klavyede sola hareket ettirin (sarar)R
: bir kareyi klavyede sağa hareket ettir (sarar)U
: klavyede bir kare yukarı kaydırD
: bir kare aşağı klavyede aşağı kaydırın (tamamladı)Y
: boşluk bırakB
: ekleme işaretçisini bir boşluk sola hareket ettirin (işaretçi başındaysa hiçbir şey yapmaz)F
: ekleme işaretçisini bir boşluk sağa hareket ettirin (işaretçi sonunda ise hiçbir şey yapmaz)C
: geçiş kapakları kilidiA
: seçilen karakteri ekleme işaretçisinin konumuna getir
Yukarıdaki klavye ve komutlar (eşleşmeler [a-zA-Z0-9 _@.-]*
) kullanılarak yazılabilen, yalnızca ASCII karakterleri içeren bir giriş dizgisine bakıldığında , çıkış dizgisine neden olacak bir komut dizisi çıkar. İmlecin başlangıç konumu 1
tuşun üstündedir (sol üstte) ve büyük harf kilidi başlangıçta kapalıdır.
puanlama
Herhangi bir dize için, naif bir yaklaşım, dizedeki her karakter için, en kısa yoldan klavyedeki karaktere gidin, gerekirse büyük harf geçiş kilidini kullanın ve karakteri seçin. Böyle saf bir yaklaşım, bir uzunluk komutu üretecektir (length of input string) + (sum of Manhattan distances on keyboard between consecutive non-space characters) + (number of times the string alternates between lowercase and uppercase characters) + (1 if string starts with an uppercase letter else 0)
. Örneğin, için saf yaklaşım 101
ile sonuçlanacaktır ALARA
bir uzunluğu 5 komutu, ve Noob 5
sonuçlanacaktır DDDRRRRRCAUURRRCAADDLLLLAYUUUA
, bir uzunluğu 30 komut.
Ancak gönderiminiz, saf yaklaşımdan daha iyisini yapmak istiyor. Her giriş dizgisi için gönderiminiz, naif yaklaşımın kullandığı komut sayısına eşit, gönderiminizin çıktı aldığı komut sayısına eşit puan alır. Genel puanınız bireysel puanların toplamı olacaktır.
kurallar
- Gönderimler Cloud9 ücretsiz sanal çalışma alanında yayınlanacaktır. Çalışma alanında 512 MB RAM, 2 GB disk alanı, 8 Intel (R) Xeon (R) CPU @ 2.50 GHz (çalışırken bulabilirsiniz
cat /proc/cpuinfo
, tam CPU bilgisi burada bulunur ) ve 64-bit Ubuntu 14.04 çalışıyor Güvenilir. Gönderinizi çalıştırmak ve puanlandırmak için test çalışma alanına erişim talep edebilirsiniz veya ben sizin için puanlayabilirim. - Başvurular her test vakasında bir kez çalıştırılacaktır. Koşular arasında durumu saklamak yasaktır. Gönderimler, kaynak dosyadan başka herhangi bir dosyaya (çalıştırmalar arasında değiştirilemeyecek) yazamaz veya okunamaz, gerekirse bir girdi dosyasını okuma dışında olabilir.
- Gönderiler, her test durumu için 1 dakikalık çalışma süresi ile sınırlıdır. Gönderimler birden fazla çözüm üretebilir, ancak puanlama için yalnızca ayrılan süre içinde geçerli olan son çözüm kullanılacaktır. Ayrılan süre içinde geçerli herhangi bir çözüm üretilmemesi, bu test durumu için 0 puanla sonuçlanacaktır.
- Lütfen gönderiminizi nasıl çağıracağınızla ilgili yönergelerin yanı sıra, standart bir Ubuntu 14.04 yüklemesinde bulunmayan yüklü olması gereken tüm araçları / kütüphaneleri de ekleyin.
- Kazanan, en yüksek puanı alan sunum olacak. Bir beraberlik durumunda, daha iyi algoritmik karmaşıklığa sahip olan gönderim kazanacaktır. Eğer bağ hala çözülmezse, skor ve algoritmik karmaşıklığa ulaşan ilk başvuru kazanacak.
- Gönderimler, test durumları için optimize olmayabilir. İhtiyacım olduğunu hissedersem, test durumlarını değiştirme hakkını saklı tutarım.
Test durumları
Biçim: input string => naive score
(bunlarda herhangi bir hata görürseniz, lütfen düzeltmeyle ilgili bir yorum bırakın)
101 => 5
quip => 12
PPCG => 15
Mego => 25
Noob 5 => 26
penguin => 27
867-5309 => 32
2_sPoOkY_4_mE => 60
The Nineteenth Byte => 76
penguins@SouthPole.org => 95
8xM3R__5ltZgrkJ.-W b => 98
correcthorsebatterystaple => 104
verylongRUNSOFCAPSandnocaps => 118
This is an English sentence. => 122
WNtza.akjzSP2GI0V9X .0epmUQ-mo => 131
Programming Puzzles and Code Golf => 140