
Фԉùཎыч⚠️
23.12.2015
20:25:45

Henaro
23.12.2015
20:26:04
начинал-то с 3
потом упёрся пару раз в юникод и попробовал 2
понравилось, пока остался

Google

Artem
23.12.2015
20:30:21
и впрямь лол
@Kolyann про молекулы сложная задачка?

Kolyann
23.12.2015
20:44:48
вторая часть сложная
ну точнее как сложная, обход надо делать в ширину с отсечением, а я в глубину заебенил
но тоже с отсечением
но это тоже весьма дубовый алгоритм, как мне кажется

Henaro
23.12.2015
20:52:24
день 3, задача 1
мне порой кажется, что дубовые алгоритмы - моё призвание
# стартовые координаты
x = y = 0
steps = {'^': {'y': 1},
'v': {'y': -1},
'<': {'x': -1},
'>': {'x': 1}}
houses = {'x0y0': 1}
for k in open('data').readline():
locals()[steps[k].keys()[0]] += steps[k].values()[0]
key = 'x%dy%d' % (x, y)
houses[key] = houses.get(key, 0) + 1
print len(houses.values())

Artem
23.12.2015
20:55:37
с локалс очень сложный прекол

Henaro
23.12.2015
20:55:42
люди добрые, я совсем наркоман или есть таки более элегантное решение?

Kolyann
23.12.2015
20:57:09
я своё не скопирую, на работе осталось

Google

Artem
23.12.2015
20:57:16
у меня вот так получилось:
def deliver_presents(instructions):
commands = {'^': (0, -1), 'v': (0, 1), '>': (1, 0), '<': (-1, 0)}
visited = {(0, 0): True}
x, y = 0, 0
for i in instructions:
dx, dy = commands[i]
x += dx
y += dy
visited[(x, y)] = True
return len(visited)

Kolyann
23.12.2015
20:57:18
но я решал через дикт
вот да, именно так

Henaro
23.12.2015
20:57:31
а хотя бы в 45 словах кратко алкогоритм не помнишь?

Artem
23.12.2015
20:58:10
что-то с молекулой тяжко уже

Kolyann
23.12.2015
20:58:13
я ещё сегодня узнал о существовании defaultdict
с ним бы санта поддался еще быстрее :D

Artem
23.12.2015
20:58:47
да, можно сделать defaultdict(int) и сразу туда плюсовать подарки

Kolyann
23.12.2015
20:58:51
если вкратце алгоритм гуляющего санты
считаешь новую координату исходя из команды
commands = {'^': (0, -1), 'v': (0, 1), '>': (1, 0), '<': (-1, 0)}
увеличиваешь словарь этой координаты на 1
ответ - размер словаря

Henaro
23.12.2015
21:00:03
ну т.е. по сути алгоритм верно составил, реализовал только слегка упорото

Artem
23.12.2015
21:00:10
а вот совсем питоник решение:
def visited_houses(instructions):
x = y = 0
visited = {(x, y)}
for c in instructions:
if c == '^':
y += 1
elif c == 'v':
y -= 1
elif c == '>':
x += 1
elif c == '<':
x -= 1
visited.add((x, y))
return visited

Kolyann
23.12.2015
21:00:51
а на тему молекул
мне очень помог re.finditer
`qwe
zxc
`
как ты так аккуратно вставляешь код?
...

Google

Henaro
23.12.2015
21:02:41
три апострофа сверху
код
три апострофа снизу

Kolyann
23.12.2015
21:02:49
ОГОГО

Henaro
23.12.2015
21:03:02
как в пистоне многострочка

Kolyann
23.12.2015
21:03:06
я
съел
собаку
вау :D
спасибо

Henaro
23.12.2015
21:03:35
странно, что нигде не нашёл упоминаний про такие ньюансы
про скайповые теги много написано, а про телеграф глухо

Artem
23.12.2015
21:04:04
в чейнджлоге упоминалось

Henaro
23.12.2015
21:04:21
вона чё

Kolyann
23.12.2015
21:04:38
по поводу молекул
for rep in replacements
for start_index in map(start,iterfind(string,repl))
подставить, записать в дикт
как-то так
а вот вторая часть там ВНЕЗАПНО гораздо хардкорнее
у тебя есть изначальная строка
ABCDEFAB
и всё те же замены, нужно узнать, за сколько минимум ходов можно из базисного элемента e получить эту строку
и замены вида e -> A; ABC -> F; AB -> D; e -> AB
как-то так, в результате я нашёл 2 варианта, либо из базисной молекулы генерить пути, но я его по-моему даже писать не начал, т.к. это экспонента
второй - сворачивать куски длинной молекулы, причём если у меня при свёртке получилась базисная молекула e в цепи, то эту ветвь отбрасывать, т.к. базисная молекула является отправной точкой и не может быть получена

Artem
23.12.2015
21:11:26
можно ассайнить сразу до пятого колена

Kolyann
23.12.2015
21:12:58
мне бы вместо скрещивания дефолт-дикта мапы лямбды листа лямбд редьюса дикта лучше научиться не городить костыли и читать документацию

Google

Artem
23.12.2015
21:13:29
t = tree()
t['a']['b']['c'] = 1
типа такого применение

Kolyann
23.12.2015
21:14:49
ЛОЛ
и это запилит {'a':{'b':{'c':1}}}?

Artem
23.12.2015
21:15:36
ага

Kolyann
23.12.2015
21:16:24
божественно

Henaro
23.12.2015
21:29:24
3_2 про робосанту там какой-то ад

Artem
23.12.2015
21:30:34
да легко, там всего-то нужен слайс
либо % 2

Henaro
23.12.2015
21:31:32
санта и сантабот по очереди ходят что-ли?

Artem
23.12.2015
21:31:36
да

Henaro
23.12.2015
21:31:43
отоночо
понял, спасибо
координаты те же можно использовать в принципе
сначала считаем чётные, потом нечётные ходы

Artem
23.12.2015
21:49:21
ох, что-то проиграл я с брутфорсом на 20 дне
даже прогрессбар прикрутил, и он меня не порадовал

Elena
23.12.2015
22:13:08
У меня в университете белочка умерла?

Nikita
23.12.2015
22:14:23
?
это кличка?

Google

Nikita
23.12.2015
22:14:37
или животное настоящее

Elena
23.12.2015
22:15:27
У нас парк на территории кампуса. Там белки живут. Сегодня возле первого корпуса одну мёртвую нашли?
А утром мужик какой-то умер в парке.
Блин, жалко белку(

Kolyann
23.12.2015
22:23:06
хуй с ним, с мужиком
на тему 20

Elena
23.12.2015
22:23:36
Та 100% бомж какой-то

Kolyann
23.12.2015
22:23:39
возможно, там есть какое-то нормальное математическое решение

Elena
23.12.2015
22:23:46
А вот бедная девочка(
Белочка

Artem
23.12.2015
22:23:58
там numpy похоже надо юзать

Elena
23.12.2015
22:24:13
Аж плакать хочется(

Kolyann
23.12.2015
22:24:18
ну и плюс можно брутить не каждый шаг, а логарифмически
сначала удваивать, потом, когда сумма будет больше задания, уменьшать
при этом можно запоминать просчитанные дома и считать уже не с первого, а с энного
т.е. 1 дом - 10 подарков
2 - 30
4 - 70
8 - 150
16 - 320
32 - 800
или что-то в таком духе
если правая часть растёт по экспоненте двойки, то получится что-то в районе 2^25
т.е. всего 25 шагов для достижения максимума

Artem
23.12.2015
22:27:35
да, не запоминая будет слишком долго считать

Kolyann
23.12.2015
22:28:01
потом ещё шагов максимум 12 для точного подсчёта

Artem
23.12.2015
22:28:20
в нампи можно сделать так и зафигачить подарки сразу во все дома, которые посетит эльф
presents[elf::elf] += elf * 10