Архив автора: admin

Задача о путешествии шахматного коня

Задача о ходе коня — задача о нахождении маршрута шахматного коня, проходящего через все поля доски по одному разу.
Эта задача известна по крайней мере с XVIII века. Леонард Эйлер посвятил ей большую работу «Решение одного любопытного вопроса, который, кажется, не подчиняется никакому исследованию» (датируется 26 апреля 1757 года).


Когда то давно, мы уже рассматривали пример решения задачи рекурсивным образом, на примере задачи по размену денег. Пришло время вспомнить некоторые классические подходы и начать хотелось бы с задачи о путешествии шахматного коня.

Решение приведенное ниже относится к так называемым алгоритмам с возвратом.
Разделяй и властвуй -основная идея рекурсии. Т.е. мы сложную задачу делим на маленькие простые  решаем их по отдельности в цепочке. В случае данной задачи, можно рассмотреть подзадачу, которая состоит в том, чтобы либо выполнить какой-либо очередной ход, либо обнаружить, что дальнейшие ходы невозможны.

Итак, каждый ход мы будем характеризовать 3-мя числами: его порядковым номером i и парой координат x, y. История ходов будет храниться в матрице списков, в соответствующей ячейке записываем порядковый номер хода. Соответственно, если в ячейке 0, значит туда мы еще не ходили.

Важно определиться с вычислением новой координаты. Можно заметить, что у коня есть 8 позиций-кандидатов (u, v) куда может прыгнуть конь.
Будем получать новые координаты прибавляя соответствующие смещения, хранящиеся в 2х списках dx, dy и отслеживать допустимость хода (находимся в пределах доски).

Характерной чертой данного алгоритма является то, что каждый шаг, выполняемый в попытке приблизиться к полному решению, запоминается таким образом, чтобы от него можно было позднее отказаться, если выяснится, что он не может привести к полному решению. Такое действие называется возвратом. А класс алгоритмов, как не трудно догадаться, алгоритмы с возвратом.

Очень советую читать именно алгоритм, тем более Питон в этом сильно помогает. Это даст куда больше толку. чем множество лишних слов!)

#Задача о коняшке
def knightsTour(x0, y0, done, size=5):
#создаем шахматную доску в виде 2го списка
h = [[0 for j in xrange(size)] for i in xrange(size)]
#начальная координата(1го хода)
h[x0][y0] = 1

#Возможные ходы
dx = [2, 1, -1, -2, -2, -1, 1, 2]
dy = [1, 2, 2, 1, -1, -2, -2, -1]

def CanBeDone(u, v, i):
h[u][v] = i
done = tryNextMove(u, v, i)
if not done:
h[u][v] = 0
return done

def tryNextMove(x,y, i):

#eos - показывает все ли варианты возможных 8ми ходов мы рассмотрели
#done - показывает удачна ли данная ветка решения
#k - порядковый номер рассмотренной попытки из 8 допустимых
env = {'done': False, 'eos': False, 'u': x, 'v': y, 'k': -1}

def next():
x = env['u']
y = env['v']
while env['k'] < 8:
env['k'] +=1;
if env['k'] < 8:
env['u'] = x + dx[env['k']]
env['v'] = y + dy[env['k']]
if (env['u'] >= 0 and env['u']=0 and env['v'] break
env['eos'] = (env['k']==8)

if i < size**2:#если доска не заполнена
next()
while not env['eos'] and not CanBeDone(env['u'], env['v'], i+1):
next()
done = not env['eos']
else:
done = True
return done

tryNextMove(x0, y0, 1)
print h

Привожу пример заполнения шахматной доски.

Автор: Pavel Petropavlov

Колечко, колечко, выйди на крылечко.

 

Многие любят носить колечко на пальцах руки. Но не многие знают, что эта традиция уходит в античное прошлое.

Она связана с древними ритуалами.
До наших дней сохранился ритуал дарения колец в свадебной церемонии.
Обручальные колечки, обязательно золотые, несут с собой защиту семейной жизни и верности. Оно считается   оберегом и талисманом.
Обычное кольцо на руке человека может поведать многое. Вкусы , характер, темперамент, социальное положение.
Большую роль играет и то, на какой палец надето кольцо.
Астрологи советуют людям, часто впадающим в агрессию, носить кольцо на большом пальце. Это поможет смирить излишний темперамент и привести себя в состояние гармонии и равновесия.
Указательный палец носит силу Юпитера и помогает не уверенным и застенчивым людям поднять планку своей значимости.
В учебе и к делах будет полезно кольцо, одетое на указательный палец.
Чтобы легко справиться с грядущими трудностями , переоденьте украшение на средний палец..
Чаще всего кольцо носят на безымянном пальце.
Здесь кольцо показывает страсть к богатству и достатку.
На мизинец одевайте колечко , когда есть трудности в общении, когда присутствует замкнутость и не умение говорить на публике.TEXT.RU - 82.28%


slyubovyu

Pythons Innards

Перечитываю снова Pythons Innards (Yaniv Aknin).

Это — серия из нескольких статей о том, как устроен CPython изнутри.

  • Интерпретатор байткода
  • Что из себя представляет этот самый байткод
  • Что такое стек в понятии CPython, и как оно работает
  • Как устроены дескрипторы, слоты и классы на нижнем уровне
  • Пространства имен (namespaces)

Для «простых программистов, работающих работу» — наверное, ничего интересного.
Тем, кто желает разобраться в Питоне «до последнего байта» — очень рекомендую.

Вдобавок очень хочу посоветовать Ely Bendersky с его Python Internals. Эта серия статей тоже посвящена «внутреннему устройству» и прекрасно сочетается с тестами Yaniv Aknin.

  • Как создаётся объект (в деталях)
  • Что такое class и чем отличается от type
  • Как именно происходит вызов callable
  • И т.д. (symbol tables, например)

На самом деле подобного рода информации очень немного. Документация хорошо описывает CPython C API но не рассказывает о деталях, о том как это всё работает.

У меня до C кода дело доходило разве до обсуждения реализации GIL насколько я помню.

Если есть еще интересные статьи по внутреннему устройству — пишите в комментариях, я добавлю сюда. Наверняка что-то запамятовал, но в целом тема раскрыта очень скудно.

Так что если хотите узнать «как оно работает на самом деле» — читайте  статьи по ссылкам.

UPD.
По устройству типов данных:
Строки
Целые числа
Списки
Словари (для версий Python <3.3)Лекция Larry Hastings (release manager для Python 3.4, между прочим) с US PyCon 2012 на рассматриваемую тему.

Автор: Andrew Svetlov

Против рака… кукуруза

Кукуруза — очень ценная продовольственная, техническая, кормовая и лечебная культура. Ее зрелое зерно перерабатывают в разные крупы, муку, кукурузные хлопья, крахмал, масло и даже спиртные напитки. Кстати, в кукурузных зернах содержится свыше десяти видов разнообразных витаминов.

Кукурузное масло имеет 80 процентов ненасыщенных жирных кислот, регулирующих уровень холестерина в организме человека и способствующих накоплению белков. Рекомендуют его в сыром нерафинированном виде как вспомогательное диетическое средство для профилактики и лечения общего и регионарного атеросклероза, ожирения, болезней печени, заболеваний артерий, а также при сахарном диабете. Суточная норма употребления масла 75 г. С лечебной целью в мировой медицине широко используют кукурузные рыльца, которые собирают в период молочно-восковой спелости кочана.

Читать

Что такое белое SEO. Как продвигать сайт без покупки ссылок

Большинство из Вас догадывается о том, что нереально или практически нереально, продвигать веб ресурс без покупки ссылок. Попытаемся рассмотреть эту проблему, для того чтобы созданный Вами интернет ресурс был привлекателен для поисковой системы, его нужно сотворить привлекательным для людей, и это в первую очередь, ведь такие гиганты как Гугл и Яндекс продвигаются тоже в этом направлении. Поисковые системы заявляют, что интернет ресурсы интересные для большинства пользователей, ранжируются все выше. Хотя еще не так много лет назад, для того что б прорваться в топовые листы (а по максимуму и в десятку лучших), достаточно было купить огромное количество самых отстойных ссылок, а до этого хватало просто оптимизированных текстов, и эта оптимизация оставляла желать лучшего, порой тексты было невозможно читать. Читать

Сумка своими руками

Сумка из джинсов за 20 минут

Современным женщинам всегда не хватает времени, как жаль что 24-часовые сутки никак нельзя растянуть. Ведь мы столько всего умеем, и еще большему готовы и очень хотим научиться. При этом современная женщина должна всегда выглядеть на все сто и находить время для реализации своих творческих амбиций. Вот поэтому, когда я натыкаюсь на подобные мастер классы, спешу поделиться обнаруженными идеями и с вами. Ведь потратив всего лишь несколько минут, вы получите новый модный аксессуар, обзавестись которым любая современная рукодельница просто обязана. Сумка из старых джинсов – объект нашей сегодняшней переделки.

Сумка из джинсов

Сумка из джинсов

Читать