
Subbotin
22.11.2016
09:41:34
окей. счас сформулирую заново. задача с собеседования в яндекс. я кстати в шоке что столько неудачных попыток тут.

Aragaer
22.11.2016
09:45:01
ну я нашел вроде. То есть есть строка - чередуются буквы и числа. Надо цифры убрать, а поставить столько букв. Верно?
может ли быть строка типа ab10cd10? Должно ли оно раскрыться в ababababababababababcdcdcdcdcdcdcdcdcdcd?

Subbotin
22.11.2016
09:46:20
есть входная последовательность состоящая из символов часть из которых цифровых. несколько подряд идущих цифр образуют число (по жадному принципу, тоесть все рядом стоящие циры попадают в одно число). в самом простом случае это строка вида 'a1b2c3' которую надо преобразовать в последовательность состояющую из символов до числа повтереных столько раз сколько написано в числе. если в конеце нет числа то считаем его равным 1

Google

Aragaer
22.11.2016
09:46:47
ага

Subbotin
22.11.2016
09:47:01
желательно линейную сложность работы и возможность легко адаптировать под чтение из сокета и запись в сокет

Johnnie
22.11.2016
09:47:15
https://repl.it/E5BT/0
этот рекстестер почему-то ругается на 13 строку
хотя все работает

Subbotin
22.11.2016
09:48:24
там ещё была зада написать тесты

Aragaer
22.11.2016
09:48:40
ну вобщем вместо len конечно надо использовать что-то типа pop(0)

Subbotin
22.11.2016
09:49:01
вокер правильно начал писать тесты но не написал несколько очевидных вариантов

Aragaer
22.11.2016
09:49:44
a2b0c2 должно раскрыться в aacc наверно.

Johnnie
22.11.2016
09:49:46
типа len(s) > 0?

Aragaer
22.11.2016
09:50:04
Но я думаю, что not '0' это ложь

Andrew
22.11.2016
09:50:09

Subbotin
22.11.2016
09:50:12
просто никакого лен. ты не знаешь длины потока заранее

Google

Subbotin
22.11.2016
09:50:20

Johnnie
22.11.2016
09:50:33

Subbotin
22.11.2016
09:50:47

Aragaer
22.11.2016
09:50:53
я говорю - вместо i < len(s) и доступа к s[i] надо letter = s.pop(0)

Johnnie
22.11.2016
09:50:58

Andrew
22.11.2016
09:51:31

Johnnie
22.11.2016
09:51:42
я даже на своем 12.5 и то вижу))

Aragaer
22.11.2016
09:51:50
мм... a017 что должно вывести? 17 букв или 15?
8)

Subbotin
22.11.2016
09:52:15
а очевидный тест ещё пустая строка, хуевые не юникодыные символы, число 0, число 010

Johnnie
22.11.2016
09:52:53

Aragaer
22.11.2016
09:53:01
похоже, что int считает, что 17 все-таки

Johnnie
22.11.2016
09:53:03
первый тоже

Subbotin
22.11.2016
09:53:05
но в тестах их нет
инт имеет опциональный параметр - основание

keystr0ke
22.11.2016
09:53:43
s = "a22"
tmp = ""
result = ""
number = "0"
for i in s:
if i.isdigit():
number += i
continue
elif int(number):
result += tmp * int(number)
tmp = ""
else:
tmp += i
number = int(number)
if not number:
number = 1
result += tmp * number
print(result)
говнокод, сэр! Вроде бы работает по всем условиям

Aragaer
22.11.2016
09:54:02
не
может быть больше одного нумбера за все время же
а он не сбрасывается

Google

Aragaer
22.11.2016
09:54:38
и tmp только нарастает

keystr0ke
22.11.2016
09:54:40
фак

Aragaer
22.11.2016
09:55:00
я б ваще регекспом сделал 8)

Johnnie
22.11.2016
09:55:03
а еще, нет проверки на sys.maxint ))

Aragaer
22.11.2016
09:55:37
кстати, оно не может быть линейным по скорости!

Subbotin
22.11.2016
09:55:46
чё-то толи я такой охуенный программист и мне надо срочно идти за повышением зарплаты толи просто у нас тут чат питон_бегинерс

Aragaer
22.11.2016
09:55:50
a10000000 будет расти как экспонента от числа нулей

Johnnie
22.11.2016
09:55:56
я с бегинерсов, сиди ровно

Artem
22.11.2016
09:56:09

Subbotin
22.11.2016
09:56:11

Artem
22.11.2016
09:56:42
но никто не отменял то, что большая часть программистов неспособна с ходу написать физзбазз

Subbotin
22.11.2016
09:56:42
линейно от числа нулей

Aragaer
22.11.2016
09:56:44
ну как, a10 это напечатать 10 букв а. Удваиваем число нулей, количество букв возводится в квадрат

Artem
22.11.2016
09:57:03
как бы размер числа растет экспоненциально от числа цифр в нем

Subbotin
22.11.2016
09:57:04
кстати физзбазз в яндексе тоже спрашивали

Artem
22.11.2016
09:57:08
это определение экспоненты
так-то

keystr0ke
22.11.2016
09:57:43
s = "a2b4"
tmp = ""
result = ""
number = "0"
for i in s:
if i.isdigit():
number += i
elif int(number):
result += tmp * int(number)
tmp = i
number = "0"
else:
tmp += i
number = int(number)
if not number:
number = 1
result += tmp * number
print(result)

Artem
22.11.2016
09:57:51
количество цифр в записи числа немношк связано с его степенью в заданной системе исчисления

Aragaer
22.11.2016
09:57:56
то есть число символов в выходной строке/потоке может расти вплоть до экспоненты от длины входного потока

Google

Subbotin
22.11.2016
09:58:18

Aragaer
22.11.2016
09:58:25
система исчисления это просто константный множитель, экспонента остается эксонентой.
а, ну написать это не-линейно это надо быть очень альтернативно одаренным

Artem
22.11.2016
09:59:07

Aragaer
22.11.2016
09:59:21
чорд, унарную забыл 8)

Subbotin
22.11.2016
09:59:36

Aragaer
22.11.2016
09:59:38
у всех остальных логарифм от основания исчисления, а у унарной это хрень
регулярку надо правильную 8)

Subbotin
22.11.2016
10:00:02
;)

Admin
ERROR: S client not available

Aragaer
22.11.2016
10:00:16
не знаю, умеет ли питон в такое, что "применил регулярку, а потом еще раз к тому, что осталось"

Subbotin
22.11.2016
10:00:36
питоновские регулярки возарщают генератор емнип
ну для данного случая
но их не адоптируешь под поток

Artem
22.11.2016
10:01:14
а какова по-твоему сложность заматчить регуляркой ближайшее вхождение
да, с потоком не выйдет

Aragaer
22.11.2016
10:02:13
регулярка вида
s/([a-z]*)([0-9]*)/$1 x (len($2) ? $2 : 1/ge

Artem
22.11.2016
10:03:03
>> [a-z]*
почему *

Johnnie
22.11.2016
10:03:12
блин, ща работать надо, попозже попробую переделать на pop() :)

Aragaer
22.11.2016
10:03:37
потому что в начале строки может не быть букв вааще

Google

Subbotin
22.11.2016
10:03:38
я вот кстати не уверен как будет работать перловская регулярка на примере aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa100000000000000000000000000000000000000000000
помню у них была экспонециальная сложность от длины самой регулярки

Aragaer
22.11.2016
10:04:12
не, там если регулярка составлена не очень хорошо, то будет долго
такая регулярка будет долго работать на .... ни на чем на самом деле
долго будет работать регулярка типа a*a*a*a*b

Artem
22.11.2016
10:04:41

Aragaer
22.11.2016
10:05:06
мм... разумно, перл это просто проскипает
тогда +
а, не
тогда эти цифры останутся, а их надо удалить

Artem
22.11.2016
10:06:19
а, это саб
тогда да

Aragaer
22.11.2016
10:06:46
про перловские регулярки - экспоненциальное бывает в случае регулярки того вида, как я указал, и отсутствия матча в конце

Kolyann
22.11.2016
10:07:50
Для регулярок что рискуют выбиться по экспоненте есть хороший квантификатор *+
Который при фэйле последующего матча не откатывается назад

Aragaer
22.11.2016
10:11:04
по-моему в перле это по-другому делается

Jim
22.11.2016
10:12:00
посоны, а вот подскажите чего дать человеку почитать, который пишет сугубо костылями? дал задание джуниору у себя. он мне такого там нагородил, что пиздец. просто существующие методы в классе написал по своему, причём не лучшим образом
тупо доки ему мало, наддо что-то где разжёвано попроще

Aragaer
22.11.2016
10:12:45
(?>pattern)
вот такое - без откатывания

Kolyann
22.11.2016
10:12:59