Мастерство программирования

-

Программирование на Python



dimy44


репутация: 528
на сайте с 2006 года
сообщений: 2471

HTC One S

Евпатория

Возраст - 49

#61

Я три раза садился написать перебор всех вариантов, и не получалось. Аж злой стал, я это так не оставлю).

Virtuos86


репутация: 101
на сайте с 2008 года
сообщений: 802

где-то в России

#62

я решил, что эту задачу надо решать через деревья, но не могу придумать подходящее расположение данных в дереве sad

dimy44


репутация: 528
на сайте с 2006 года
сообщений: 2471

HTC One S

Евпатория

Возраст - 49

#63

Я через while пробовал, но видимо с этими праздниками мозги вообще отупели, но это не оправдание, хз, пока пришлось смириться с тем, что ниасилил.

Virtuos86


репутация: 101
на сайте с 2008 года
сообщений: 802

где-то в России

#64

 # coding: utf8

word = "211221-21221"
word1, word2 = word.split('-')
# чтобы не усложнять код, вместо кириллицы
# использованы латинские аналоги букв
mnemonics = {'1': 'A', '2': 'B', '11': 'J', '12': 'K', '21': 'U', '22': 'F'}

def words(word, slice_size, slices_array=[]):
all_words = []
slice, word = mnemonics[word[:slice_size]], word[slice_size:]
if word:
for array in words(word, 1, slices_array + [slice]):
all_words.append(array)
if len(word) > 1:
for array in words(word, 2, slices_array + [slice]) :
all_words.append(array)
else:
all_words.append(slices_array + [slice])
return map(''.join, all_words)

print words(word1, 1) + words(word1, 2)
print words(word2, 1) + words(word2, 2)

-------------
добавлено в 12.39: Хотелось бы сказать спасибо эссе Гвидо о графах. Напрямую не пригодилось (хотя я и пытался его код использовать), но какие-то идеи я уловил.
-------------
добавлено в 12.51: И я сейчас подумал, all_words и slices_array надо на кортежи заменить, тогда еще и эффективно будет в плане памяти. Изначально использование списков было необходимо.

dimy44


репутация: 528
на сайте с 2006 года
сообщений: 2471

HTC One S

Евпатория

Возраст - 49

#65

Виталя, че ты исчез с форума?? И джон эм'е тоже. Как привидения тут фигурируете. Женились штоли?

Ладно, немножко пьем вино самопальное). С красного винограда. Ну если уж таких два монстра решения не продемонстрировали, то мне тут и делать нх.
Ну, в смысле, не через рандом, комбинаторикой.

Virtuos86


репутация: 101
на сайте с 2008 года
сообщений: 802

где-то в России

#66

Цитата: dimy44
 Виталя, че ты исчез с форума?? И джон эм'е тоже. Как привидения тут фигурируете. Женились штоли? Ладно, немножко пьем вино самопальное). С красного винограда. Ну если уж таких два монстра решения не продемонстрировали, то мне тут и делать нх.Ну, в смысле, не через рандом, комбинаторикой.


Я далек от того, чтобы связать себя узами Гименея, не знаю, как у Джойн_ми с этим.
А какие решения? Про поезда у нас решения нормальные, а за телефонные номера мне лично не хочется браться пока winked.
Если вкратце, я стал ленив. Хочу кодить в ламповом редакторе на компе, а на такие вольготные условия мало времени остается, учитывая особенности моей работы и жизни. В блог на ДВ просто писать не собираюсь больше, извините, я его перерос; как человек, не как программист, тут даже наоборот деградировал.

JOIN_ME


репутация:
на сайте с 1970 года
сообщений:

#67

А я женился, дочке 7 месяцев уже. =) Кстати мое решение поездов на предыдущей странице.

Virtuos86


репутация: 101
на сайте с 2008 года
сообщений: 802

где-то в России

#68

По идее, у тебя вообще нет свободного времени winked

JOIN_ME


репутация:
на сайте с 1970 года
сообщений:

#69

Со временем норм =)
Вот решил про телефоны. Для начала взял у Grakovne файл со словами и почистил его от \r и одиночных букв и закодировал в win1251. Облегчилось в 2 раза.
Алгоритм:
есть список слов и словарь соответствий цифр буквам. Начинаю перебирать слова и проверяю каждую букву на соответствие цифре. Если какая либо буква не подходит, то следующее слово. Если все сошлось, то при условии что длина слова равна длине номера - добавляю в результат. Если меньше, то запускаю рекурсию с частью телефона, на которую букв в слове не хватило. Потом само слово с возвращенными значениями добавляю в результат.
Еще сделал накопитель. Слова допустим "кол" и "лол" одной длины, то нет смысла рассчитывать повторно рекурсию.

Прикрепленный файл #1:

Внимание! У вас нет прав для просмотра скрытого текста.
(315,85 Kb)

Virtuos86


репутация: 101
на сайте с 2008 года
сообщений: 802

где-то в России

#70

JOIN_ME, то есть ты схитрил ;), не стал высчитывать все варианты слов из телефонного номера, чтобы потом искать совпадения с ними в словаре, а с конца зашел. Надо посмотреть.
-------------
добавлено в 08.44: Не смогу скачать вложение, у кого-нибудь такая проблема еще есть?


Напомнить пароль