Колись мене зацікавило питання які слова можна написати на клавіатурі так, щоб кожна наступна кнопка була сусідньою до попередньої. Такі слова буду називати «Клавіатурні слова». Я спробував знайти декілька слів, знайшов слова Павук, Цівка і Мавка :) Сьогодні в мого друга Zwirr'а виникло подібне питання (правда він шукав слова по-оригінальніші, типу «йцука»). І знову мене заінтриґувало дане питання, і настільки, що я вирішив зробити прогу, яка знаходить всі клавіатурні слова по заданому словнику. Прогу нашвидкуруч набив на C#:

using System; using System.Collections.Generic; using System.IO; using System.Text; namespace WordsOnKeybFinder { class Program { static void Main() { StreamReader sr = new StreamReader("dictionary.txt", Encoding.UTF8); string[] allWords = sr.ReadToEnd().Split(' '); sr.Close(); StreamWriter sw = new StreamWriter("output.txt", false, Encoding.UTF8); Dictionary<Char, string> ukrKeysDep = new Dictionary<char, string>(); ukrKeysDep['й'] = "цф"; ukrKeysDep['ц'] = "йФіву"; ukrKeysDep['у'] = "цівак"; ukrKeysDep['к'] = "увапе"; ukrKeysDep['е'] = "капро"; ukrKeysDep['н'] = "епрог"; ukrKeysDep['г'] = "нролш"; ukrKeysDep['ш'] = "голдщ"; ukrKeysDep['щ'] = "шлджз"; ukrKeysDep['з'] = "щджєх"; ukrKeysDep['х'] = "зжєї"; ukrKeysDep['ї'] = "хє"; ukrKeysDep['ф'] = "йція"; ukrKeysDep['і'] = "фцувчя"; ukrKeysDep['в'] = "іукасч"; ukrKeysDep['а'] = "вкепмс"; ukrKeysDep['п'] = "аенрим"; ukrKeysDep['р'] = "пнготи"; ukrKeysDep['о'] = "ргшльт"; ukrKeysDep['л'] = "ошщдбь"; ukrKeysDep['д'] = "лщзжюб"; ukrKeysDep['ж'] = "дзхєю"; ukrKeysDep['є'] = "жхї"; ukrKeysDep['я'] = "фіч"; ukrKeysDep['ч'] = "яівс"; ukrKeysDep['с'] = "чвам"; ukrKeysDep['м'] = "сапи"; ukrKeysDep['и'] = "мпрт"; ukrKeysDep['т'] = "ироь"; ukrKeysDep['ь'] = "толб"; ukrKeysDep['б'] = "ьлдю"; ukrKeysDep['ю'] = "бдж"; ukrKeysDep['ґ'] = ""; ukrKeysDep['\\''] = "жхї"; ukrKeysDep['-'] = "зх"; for (int i = 0; i < allWords.Length; ++i) allWords[i] = allWords[i].ToLower(); foreach (string s in allWords) { bool ok = true; for (int i = 0; i < s.Length - 1; ++i) if (!ukrKeysDep[s[i]].Contains(s[i + 1].ToString())) { ok = false; break; } if (ok) sw.WriteLine(s); } sw.Close(); } } }

Слова взяв із сайту Сеник Миколи. Дяка ;)

В результаті я отримав такий список слів:

аеролог ампер ап ас вава вавка вапно вів вівса віч вія го гоголь гоголь гол гор горн горн горно гот грим гримаса грип грог грот дб екер ерг ів ія кава кака кама камса кап капер каса касас квак квакер квас керн кернер ку кук логотип лор лот лото лотр мавка мак макака мама мапа маса ми мир миро мирт мит мито мить не неп непер нерол нерпа норо орт отит ош па пава павія павук пак пака пампа папа паперть пас паса пек пер перо пне прима примас припас пролог проти прототип рим рима рип ритор ро рол роль рот ротор ртр сава савка сак сам сап сапа сапер сапрол смак ти тип тир тирит тит тито титр то того тол толь тор торг торит торт три трип трипер трог троль трот уа ув цівка шор шори шорти я

Як виявилось, найдовшим клавіатурним словом є слово із 7 букв - Прототип, за ним ідуть слова на 6 букв - аеролог, гримаса, логотип, паперть, і на 5 букв - гоголь, квакер :D, кернер, макака, примас, припас, пролог, сапрол, трипер

Ось такі цікаві результати вийшли. Можливо знайдено і не всі клавіатурні слова, щоб знайти більше, треба розширити словник.

P.S. Є ще одна прога із словником, яку я хочу вже давно зробити, але руки не доходять - це програма підбору слів для рими. Мета - допомогти віршотворцям підбирати слова які римуються до слів із певним закінченням. Очевидно, щоб зробити цю програму доведеться скористатись кращим словником, ніж в програмі по знаходженню клавіатурних слів, оскільки треба враховувати різні відміни іменників. Такий словник можна взяти з програми «Словники України» (до речі за інфою з Лінгвістичного порталу зараз готується до виходу версія 3.1!), інших просто не знаю... Це всього-лиш ідея, але якщо хтось зацікавиться і зробить таку програму раніше за мене, то пишіть :)