«Словохват»
Вчера подсел на игру «Словохват», вроде игра незамысловатая, но очень интересная.

Смысл — занять одну из клеток противника, помеченного «звёздочкой», в терминах игры это называется «столица». Чтобы занять клетку, нужно придумать слово с буквой, которая написана на этой клетке, причём нужно уложиться в отведённое время — сверху тикает таймер.
Клетку можно использовать, только если она примыкает к клетке вашего цвета. Клетки чужого цвета захватываются по тому же правилу, но в первый раз они становятся серыми и только в следующий — вашего цвета.
На медиане поля действуют ещё
У автора получилась неплохая такая тактическая игра. Мне играть было скучновато — очень лень выдумывать слова, поэтому я написал небольшую программу на Пайтоне, которая работает со словарём под редакцией профессора Лопатина, ей нужно задать файл словаря и буквы, которые у вас есть, она придумает слово:

Работает неспешно, я оптимизировать не стал, времени, даваемого игрой, на поиск вполне хватает (по крайней мере на моём ноуте). Если
У меня на каждом запуске словарь преобразуется заново. Естественно, в словаре, помимо разрешённых частей речи, есть прилагательные, глаголы и так далее — их я не отфильтровываю, в словаре нет для этого информации.
# coding: utf-8
import itertools
import sys
import codecs
# дружим с консолью
sys.stdin = codecs.getreader('utf-8')(sys.stdin)
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
# строки с пропусками любых букв в любом количестве
def combinations(str):
for l in xrange(2, len(str)+1):
yield itertools.combinations(str, l)
# собираем каждую в строку
def iterstr(str):
for s in itertools.chain(*combinations(str)):
yield u''.join(s)
# все наши комбинации
def uniqcombinations(str):
return set(iterstr(sorted(str)))
# проходим по словарю
def iterdict(name, min, max):
with open(name, 'r') as f:
for line in f:
line = line.strip().decode('cp1251')
# текущее слово должно содержать только буквы и быть не больше искомого слова
if max >= len(line) >= min and line.isalpha():
yield u''.join(sorted(line)), line
# ищем наше слово
def find(word, dictname):
words = uniqcombinations(word)
for line, original in iterdict(dictname, 3, len(word)):
if line in words: print(original)
# запуск программы и небольшая помощь
try:
find(sys.argv[2].decode('utf-8'), sys.argv[1].decode('utf-8'))
except IndexError:
print(u'Запуск: {0} <словарь> <буквы в наличии>'.format(sys.argv[0]))Писал именно на Пайтоне
Если вы думаете, что выиграть можно бездумно подставляя слова из моей программы, то сильно ошибаетесь — на сайте попадаются противники, которые вас с таким подходом разнесут в пух и прах.
Комментарии 23
Есть и русские варианты, это просто первая.
Если проще, значит это совсем другая игра. У меня сегодня утром за завтраком, произошла эпичнейшая битва — я проморгал твёрдый знак, противник его занял и пока я отвлёкся на проход к «столице», противник на этом плацдарме обосновался и выиграл меня. С другими правилами это нереально :)
Развивай.
А зачем? Где это может пригодиться?
В игре «Словохват».
Да я
Но ты же «подсел» по собственным словам, значит играть будешь достаточно часто. А я описал свои ощущения от подобных соперников. Вероятно, подобное отношение не только у меня.
Я вообще ни во что не играю. Так что для меня «подсел» ≈ «провёл один вечер с этой игрой».
Комментарий для dionys.moikrug.ru:
Если я не буду пользоваться своей программой, слова будут те же, просто я их буду медленнее подбирать и в таймер буду чаще не укладываться. Так что у тебя будет ощущение, чтокто-то листает словарь медленно.
Комментарий для Евгения Степанищева:
Нет, не правда, слова нужно не только знать, но и «увидеть» среди этих букв. Так что без словаря ты не сможешь выдавать серии10-буквенных слов, как на приведённом тобой скриншоте. (Такие серии, кстати, показатель, что играет не человек.) Разве что время будет не ограничено, да.
Ну, это лучший мой скриншот в
Вот моя утренняя игра без софта:
http://img-fotki.yandex.ru/get/9761/354194 … D3#500x316
Комментарий для Евгения Степанищева:
Неужели с программой стало интереснее? :)