Форум сайта python.su
sharkk
Все тесты твои проходит, а на сайте универа - нет.
[guest@localhost oneedit]$ python3 -m doctest oneedit3.doct
**********************************************************************
File "oneedit3.doct", line 27, in oneedit3.doct
Failed example:
f(-1, '', 'a')
Expected:
''
Got:
'a'
**********************************************************************
File "oneedit3.doct", line 39, in oneedit3.doct
Failed example:
f(0, 'a', 'Rb')
Expected:
'ab'
Got:
'ba'
**********************************************************************
File "oneedit3.doct", line 41, in oneedit3.doct
Failed example:
f(0, 'a', 'RRb')
Expected:
'ab'
Got:
'ba'
**********************************************************************
File "oneedit3.doct", line 48, in oneedit3.doct
Failed example:
f(0, 'a', 'RbLLc')
Expected:
'cab'
Got:
'cba'
**********************************************************************
File "oneedit3.doct", line 50, in oneedit3.doct
Failed example:
f(1, 'a', 'LbRRc')
Expected:
'bac'
Got:
'bca'
**********************************************************************
File "oneedit3.doct", line 53, in oneedit3.doct
Failed example:
f(0, 'a', 'LRb')
Expected:
'ab'
Got:
'ba'
**********************************************************************
File "oneedit3.doct", line 55, in oneedit3.doct
Failed example:
f(0, 'a', 'LLRb')
Expected:
'ab'
Got:
'ba'
**********************************************************************
File "oneedit3.doct", line 57, in oneedit3.doct
Failed example:
f(0, 'a', 'LLLRb')
Expected:
'ab'
Got:
'ba'
**********************************************************************
1 items had failures:
8 of 37 in oneedit3.doct
***Test Failed*** 8 failures.
[guest@localhost oneedit]$
[guest@localhost oneedit]$ ./oneeditcmp.py
[4.688379621999957, 4.692161592000048, 4.687527015999876]
[2.4444403080001393, 2.4103668410002683, 2.424508097999933]
[2.4301258609998513, 2.449462324999786, 2.420072983999944]
[guest@localhost oneedit]$
def k(p, text, command): text = list(text) for i in command: if i.islower(): text.insert(p, i) p += 1 if i == 'L': p -= 1 if i == 'R': p += 1 if i == 'X': text.pop(p) return ''.join(text)
Отредактировано py.user.next (Апрель 4, 2016 00:57:48)
Офлайн
В две секунды все равно не укладывается.
Надо делать линкед лист наверно)
Офлайн
Сделай её хотя бы раз правильно. Ни одного решения не выдал, все с ошибками. Это гораздо важнее скорости.
Я нашёл один сайт с этой задачей, будет время - посмотрю, как решить.
Твой короткий вариант (неправильный который) даёт 3.5 секунды.
sharkkНу, да, либо два стека. Хотя сам список можно сделать на базе двух стеков.
Надо делать линкед лист наверно)
Отредактировано py.user.next (Апрель 6, 2016 17:34:27)
Офлайн
Этот вариант заваливается по пределу времени на 7 тесте из 10.
def k(p, text, command):
text_before = list(text[:p])
text_after = list(text[p:])
cur = len(text_after)
if p < 0:
p = 0
if p > len(text):
p = len(text)
else:
for i in command:
if i.islower():
text_before.append(i)
p += 1
if i == 'L' and text_before != []:
if p == -1:
p = 0
else:
text_after.insert(0, text_before.pop())
p -= 1
cur += 1
if i == 'R' and text_after != []:
if cur == -1:
cur = 0
else:
text_before.append(text_after.pop(0))
p += 1
cur -= 1
if i == 'X' and text_after != []:
if cur == -1:
cur = 0
else:
text_after.pop(0)
cur -= 1
return text_before + text_after
print(''.join(k(int(input()), str(input()), str(input()))))
def k(p, text, command):
text = list(text)
for i in command:
if i.islower():
text.insert(p, i)
p += 1
if i == 'L':
p -= 1
if i == 'R':
p += 1
if i == 'X':
text.pop(p)
return text
print(''.join(k(int(input()), str(input()), str(input()))))
Отредактировано sharkk (Апрель 6, 2016 20:09:49)
Офлайн
sharkkНу, ты подаешь строку, а возращаешь список, а потом типа каждый раз будешь строку получать. И всё это ты сделал, чтобы ускорить функцию - это халтура и говнокодерство.
Я просто вывожу в ответ немного по другому
print(k(0, 'abcd', 'defg'))
print(k(1, k(3, 'abcd', 'X').upper(), 'defg'))
[guest@localhost oneedit]$ python3 -m doctest oneedit4.doct
**********************************************************************
File "oneedit4.doct", line 27, in oneedit4.doct
Failed example:
f(-1, '', 'a')
Expected:
''
Got:
'a'
**********************************************************************
1 items had failures:
1 of 37 in oneedit4.doct
***Test Failed*** 1 failures.
[guest@localhost oneedit]$
[guest@localhost oneedit]$ ./oneeditcmp.py
[4.911109806999775, 4.887167595000392, 4.959216190999996]
[2.5055572030000803, 2.5339830960001564, 2.497651128000143]
[2.470925120999709, 2.5043154899999536, 2.434840758000064]
[2.506145970000034, 2.4773937669997395, 2.492269657000179]
[guest@localhost oneedit]$
Отредактировано py.user.next (Апрель 7, 2016 01:50:23)
Офлайн
Посмотрел вариант с двусвязным списком - то же самое всё. Так что, я думаю, там какой-то прикол с самими командами. Допустим, если там p = 1 и LRLRLR, то там вообще ничего двигать не надо, так как они друг друга поглощают.
Так что хранить строку с текстом надо простым способом, а сами команды перед разбором преобразовать. Потому что там длина - 100000 команд может превратиться в 10 команд.
Отредактировано py.user.next (Апрель 7, 2016 06:15:16)
Офлайн
py.user.nextСпасибо, учту на будущее.
Ну, ты подаешь строку, а возращаешь список, а потом типа каждый раз будешь строку получать. И всё это ты сделал, чтобы ускорить функцию - это халтура и говнокодерство.
Если ты подал строку, то и получить должен строку. Потому что эта строка должна быть готова к использованию в других алгоритмах.
Офлайн