
Sharkus
18.04.2016
19:34:31
Декартовы координаты, вся фигня.

Rick
18.04.2016
19:35:11
ну я
ну

Sharkus
18.04.2016
19:35:15
x - горизонталь, y - вертикаль. Или наоборот, если угодно. Но они принадлежат только _одному_ из направлений. И пофиг, которое из них длиннее.

Google

Rick
18.04.2016
19:35:19
ок

Cykooz
18.04.2016
19:35:29
Вот более полное решение (надо сначала отсортировать габариты басейна что бы в n была длина короткой стороны):
n, m = min(n, m), max(n, m)
print min(x, y, n - x, m - y)

Sharkus
18.04.2016
19:35:45
Хватит подсовывать min человеку.
Потом докатится до itertools.permutations, вообще не понимая, что там внутри.

Sergey
18.04.2016
19:36:08
list(map(lambda i, val: val**2, enumerate(range(10000))))
Не работает. Передает только 1 аргумент в lambda

Cykooz
18.04.2016
19:36:16
Ну считайте это алгоритмом - пускай дальше min и max заменит на if...else

Pavel
18.04.2016
19:36:17
надо собрать четыре расстояния в массив и отортировать пузырьком.

Rick
18.04.2016
19:38:30
n, m = min(n, m), max(n, m)
print min(x, y, n - x, m - y)
я сделал так же (но 49 строками )

Pavel
18.04.2016
19:38:31

Kolyann
18.04.2016
19:38:45

Sharkus
18.04.2016
19:38:51

Rick
18.04.2016
19:38:53
но моя программа прямая
линейная

Google

Rick
18.04.2016
19:39:07
в этом вся беда

Kolyann
18.04.2016
19:39:40
Так а что тебе нужно?
Решить это последовательным алгоритмом?

Rick
18.04.2016
19:40:25
ну или указать , что в моем не так
если там вообще хоть что-то так

Kolyann
18.04.2016
19:40:51
if abs(M-X) > abs(N-Y):
return abs(M-X):
else:
return abs(N-Y)
если нужно без мин, но можно юзать абс

Rick
18.04.2016
19:41:11
абс это модуль?

Artem
18.04.2016
19:41:26
да

Rick
18.04.2016
19:41:30
математический модуль

Kolyann
18.04.2016
19:41:34
да

Rick
18.04.2016
19:41:35
зачем он?
там никогда не будет отрицательного числа

Kolyann
18.04.2016
19:42:04
а не, с модулем так не прокатит

Sharkus
18.04.2016
19:42:17
Разверни
n, m = min(n, m), max(n, m)
в
if n > m:
n, m = m, n
да и всё. И далее по тексту.

Kolyann
18.04.2016
19:42:17
в общем смотри, тебе нужно выбрать самое маленькое из всех вариантов

Artem
18.04.2016
19:42:24
Вот более полное решение (надо сначала отсортировать габариты басейна что бы в n была длина короткой стороны):
n, m = min(n, m), max(n, m)
print min(x, y, n - x, m - y)
раз отсортировать, можно и так:
n, m = sorted((n, m))

Kolyann
18.04.2016
19:42:27
M - X
N - Y
X
Y

Sharkus
18.04.2016
19:42:35
Задрали вы с сортировками :)

Rick
18.04.2016
19:42:45

Google

Kolyann
18.04.2016
19:42:49
можно сравнивать их попарно по очереди

Sharkus
18.04.2016
19:42:53
Обычный, блин, поиск максимума-минимума.

Rick
18.04.2016
19:42:54
49 строк ерунды
а хотя не

Cykooz
18.04.2016
19:43:31

Rick
18.04.2016
19:43:39
нужно же еще учитывать что больше n или m

Sharkus
18.04.2016
19:43:48
Разверни
n, m = min(n, m), max(n, m)
в
if n > m:
n, m = m, n
да и всё. И далее по тексту.

Pavel
18.04.2016
19:43:54

Sharkus
18.04.2016
19:43:55
Вот тебе и весь учёт.

Rick
18.04.2016
19:44:35
n, m = m, n
что дает эта строка?

Sharkus
18.04.2016
19:44:38
Можно даже делать по-паскалевски, с третьей переменной для обмена.

Sharkus
18.04.2016
19:45:02
Операция обмена значений в одну строку. Даже не пробуй так в паскале :)

Rick
18.04.2016
19:45:38
а, понял, псиб

Sharkus
18.04.2016
19:46:16
Потом, когда у тебя в N будет гарантированно наибольшее, или наименьшее - что там тебе нужно в задании - уже спокойно можно сравнить x, y, n-x, m-y

Rick
18.04.2016
19:46:42
да, я уже дошел до этого

Sharkus
18.04.2016
19:48:01
И в конечном итоге на одних ифах получишь что-то типа:
min_val = x
if y < min_val:
min_val = y
if (n - x) < min_val:
min_val = n - x
if (m -y ) < min_val:
min_val = m - y
print(min_val)

Sergey
18.04.2016
19:48:31
import timeit тебе в помощь. Померь и расскажи.
Проверил вот такой код:
with_map = 'list(map(lambda i: i**2, range(10000)))'
with_forin = '[i**2 for i in range(10000)]'
Результаты:
4.850182843001676
3.9560614579968387
Вывод: надо меньше вы*бываться:)

Kolyann
18.04.2016
19:50:09

Google

Cykooz
18.04.2016
19:50:22
Если там ещё внутри lambda заюзать setattr, то результат будет ещё плачевнее

Sharkus
18.04.2016
19:50:36

Sergey
18.04.2016
19:50:40
Я ВЕРИЛ В ЛЯМБДУ!
Я если честно тоже до последнего думал что вариант с map быстрее будет:)

Sharkus
18.04.2016
19:51:16
Ехал вызов через вызов
А тут хренакс - и фор быстрее.

trump ? trump ? hillary
18.04.2016
19:52:44

Cykooz
18.04.2016
19:53:12

Sergey
18.04.2016
19:54:57

Admin
ERROR: S client not available

trump ? trump ? hillary
18.04.2016
19:55:11
partial application??????

Cykooz
18.04.2016
19:56:34
Уже была в интернетах заметка что list comprehension с if внутри стабильно бысрее map + filter, но просто map иногда обгоняет простой list comprehension.

Sergey
18.04.2016
19:57:42
with_map = 'list(map(lambda i: i**2, range(10000)))'
with_forin = 'for i in range(10000): i **= 2'
--
0.46259754900529515
0.3656476830074098
Вывод: list comprehension практически не влияет на результат

Cykooz
18.04.2016
19:58:57
Хм, смущает то что в первом варианте формируется в памяти результат в виде списка, а во втором - нет.

Sergey
18.04.2016
19:59:24
Т.е. вариант с list comprehension более честный.

Cykooz
18.04.2016
20:00:28
Надо наверное решать исходную задачу - есть список объектов, надо в цикле присвоить полю value каждого объекта какое то значение.

Sergey
18.04.2016
20:01:36
class Obj: value = 0; objinst = Obj(); list(map(lambda i: setattr(objinst, \'value\', i**2), range(10000)))
--
free variable 'Obj' referenced before assignment in enclosing scope
Что я сделал не так?

Cykooz
18.04.2016
20:12:24
Хм, сложно сказать, я не мастер писать однострочники на питоне :)

Google

Cykooz
18.04.2016
20:13:09
Наверное оно решило, что objinst = Obj() находится внутри определения класса

Roman
18.04.2016
20:15:24
У map перед list comprehension есть пара плюсов
Есть ленивый imap

Pavel
18.04.2016
20:15:37

Sergey
18.04.2016
20:15:59

Roman
18.04.2016
20:16:06
И map - удобный интерфейс ко всякой параллельной шняге

Sergey
18.04.2016
20:18:40
map:
class Obj:
value = 0
objinst = Obj()
list(map(lambda i: setattr(objinst, \'value\', i ** 2), range(10000)))
forin:
class Obj:
value = 0
objinst = Obj()
for i in range(10000):
objinst.value = i ** 2
result:
67.91241029300727
46.80860149599903

Cykooz
18.04.2016
20:18:40
Есть ленивый imap
Это в какой версии питона? map сам по себе возвращает "ленивый" итератор, и пока по нему не проитерироваться ничего делаться не будет. Для list comprehensions тоже есть ленивый вариант - надо просто [] заменить на ()
В общем map в данной задаче сразу был неуместен, т.к. он в паре с list() генерирует ненужный список и тратит на это время.

Sergey
18.04.2016
20:21:25

Cykooz
18.04.2016
20:23:32
Можно скопировать текст из чата и запилить статейку в блоге :)

Artem
18.04.2016
20:24:22
Good news, everyone!
Your bot can win a grant of $25K or more this year. Pavel Durov will be giving away 1 million dollars to bot developers in 2016.
Check this post for details:
https://telegram.org/blog/botprize
чат, давайте вместе сообразим что-нибудь, грант поделим пропорционально вкладу

Pavel
18.04.2016
20:25:49

Sharkus
18.04.2016
20:26:27
Public Domain?

Sergey
18.04.2016
20:26:59

Rick
18.04.2016
20:40:16
А кто выбирает полезность бота? И в чем она заключается?

Artem
18.04.2016
20:44:10
Длится весь год или пока не кончится бюджет. Полезность выбирает команда телеграма на свой субъективный взгляд.

ultranoise ?
18.04.2016
20:45:41
хорошие там топики