Dvorak veya Neo gibi yeni klavye düzenlerini sıkıca öğrenen insanlar için bu sürekli çılgınlık var gibi görünüyor çünkü sözde onları daha üretken kılıyor. Klavye düzenini değiştirmenin kötü bir fikir olduğunu savunuyorum, çünkü hızlanmanız aylarca sürebilir ve diğerlerinden% 5 daha hızlı olursanız, başka bir bilgisayara yazmaya ihtiyacınız olursa mahvolursunuz. kendi değil.
Ayrıca, tüm bu insanlar modern iletişimdeki gerçek darboğazın nerede olduğunu unutuyor - telefon tuş takımı.
Ortalama telefon tuş takımınız şöyle görünür:
'R' harfi, 7 düğmesindeki üçüncü harftir; cep telefonunda 'r' harfini yazarsanız, 7 düğmesine üç defa basarsınız, 's' için 4 kez basarsınız ve 'a' için bir kez 2 düğmesine basarsınız.
Bunu göz önünde bulundurursak, 'd'yi sonra' e'yi koymak muhtemelen kötü bir karardı - 'e' ingilizce alfabesinde en çok kullanılan harfdi, bu nedenle, "DEF" yerine 3 "EDF" düğmesini etiketlemişseniz, çok fazla tuşa basış kaydeder.
Dahası, muhtemelen aynı düğmeyi paylaşan 2 harf yazmanın bir sıkıntı olduğunu kendiniz de deneyimlediniz - "TU" yazmak istiyorsanız, sadece 8 kez üçe basamazsınız, çünkü bu 'V' ile sonuçlanır. Genelde 'T' yazarsınız, sonra boşluk basarsınız, sonra geri çekilirsiniz ve sonra 3 yerine 5 tuşa basarsanız 'U' yazarsınız.
TL; DR
Bu iki kural göz önüne alındığında:
- Bir düğmeye n kere basılarak bir harf girilir, burada n, düğmenin etiketinde harfin bulunduğu konumdur.
- Aynı düğmeyi kullanarak yazdığınız iki harfin eklenmesi için 2 düğmeye daha basılması gerekir
Belirli bir metin verildiğinde, en az miktarda düğmeye basılmasını gerektiren telefon klavyesi düzeni nedir? Sadece 2-9, 1 ve 0 düğmelerini kullanmanız özel semboller için ayrılmıştır.
Giriş
İdeal yerleşimi bulmanız gereken metin stdin ile sağlanır. Küçük harfli alfabe dışındaki herhangi bir işlem yapmanıza gerek yoktur ve girişin yalnızca bundan ibaret olduğunu varsayabilirsiniz. Ayrıca, giriş metninin oldukça büyük olduğunu ve eğer yardımcı olursa her harfin en az bir kez içinde olduğunu varsayabilirsiniz.
Çıktı
Çıktıya çok fazla kısıtlama getirmek istemiyorum, çünkü bu bazen bazı dillere diğerlerine göre avantajlar sağlıyor; bu nedenle diliniz dizilerin iyi olduğunu gösteriyor, alternatif olarak her etiketi bir yeni satırla ayırabilirsiniz.
Birden çok olası en uygun düzen olabilir, bunlardan herhangi birini yazdırabilirsiniz. İşte basit bir örnek:
>> echo "jackdawslovemybigsphinxofquartz" | foo.sh
ojpt
avhz
cen
skm
dyf
wbq
ixu
lgr
Bonus puanlar
-35 Algoritmanız olası tüm düzenleri kaba bir şekilde zorlamıyorsa (burada Haskell'in 'permütasyonlarına bakıyorum)
-3 kısa mesaj (140 karakter) ve içinizde kod uyan bir arkadaşınıza kodunuzu göndererek bir pic sonrası eğer.
Bu benim StackExchange'teki ilk zorluğum. Beğendiğinizi veya başka bir geri bildirim aldığınızı duymaktan mutlu olurum!
26! / (2! * 6!) = 280,063,514,671,253,913,600,000 > 2^77
basit yeniden düzenlemelerini sayarak yalnızca bir kez sayılan benzersiz permütasyonlar vardır .