Мастерство программирования » Страница 7
-Программирование на Python
# 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 надо на кортежи заменить, тогда еще и эффективно будет в плане памяти. Изначально использование списков было необходимо.
Виталя, че ты исчез с форума?? И джон эм'е тоже. Как привидения тут фигурируете. Женились штоли?
Ладно, немножко пьем вино самопальное). С красного винограда. Ну если уж таких два монстра решения не продемонстрировали, то мне тут и делать нх.
Ну, в смысле, не через рандом, комбинаторикой.
Я далек от того, чтобы связать себя узами Гименея, не знаю, как у Джойн_ми с этим.
А какие решения? Про поезда у нас решения нормальные, а за телефонные номера мне лично не хочется браться пока .
Если вкратце, я стал ленив. Хочу кодить в ламповом редакторе на компе, а на такие вольготные условия мало времени остается, учитывая особенности моей работы и жизни. В блог на ДВ просто писать не собираюсь больше, извините, я его перерос; как человек, не как программист, тут даже наоборот деградировал.
Со временем норм =)
Вот решил про телефоны. Для начала взял у Grakovne файл со словами и почистил его от \r и одиночных букв и закодировал в win1251. Облегчилось в 2 раза.
Алгоритм:
есть список слов и словарь соответствий цифр буквам. Начинаю перебирать слова и проверяю каждую букву на соответствие цифре. Если какая либо буква не подходит, то следующее слово. Если все сошлось, то при условии что длина слова равна длине номера - добавляю в результат. Если меньше, то запускаю рекурсию с частью телефона, на которую букв в слове не хватило. Потом само слово с возвращенными значениями добавляю в результат.
Еще сделал накопитель. Слова допустим "кол" и "лол" одной длины, то нет смысла рассчитывать повторно рекурсию.
Прикрепленный файл #1:
-------------
добавлено в 08.44: Не смогу скачать вложение, у кого-нибудь такая проблема еще есть?
- «
- 1
- 2
- --
- 6
- 7
- 8
- »