Найти - Пользователи
Полная версия: Задача. Текстовый редактор
Начало » Центр помощи » Задача. Текстовый редактор
1 2
py.user.next
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)
sharkk
В две секунды все равно не укладывается.
Надо делать линкед лист наверно)
py.user.next
Сделай её хотя бы раз правильно. Ни одного решения не выдал, все с ошибками. Это гораздо важнее скорости.
Я нашёл один сайт с этой задачей, будет время - посмотрю, как решить.
Твой короткий вариант (неправильный который) даёт 3.5 секунды.

sharkk
Надо делать линкед лист наверно)
Ну, да, либо два стека. Хотя сам список можно сделать на базе двух стеков.
sharkk
Этот вариант заваливается по пределу времени на 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()))))
py.user.next
sharkk
Я просто вывожу в ответ немного по другому
Ну, ты подаешь строку, а возращаешь список, а потом типа каждый раз будешь строку получать. И всё это ты сделал, чтобы ускорить функцию - это халтура и говнокодерство.
Если ты подал строку, то и получить должен строку. Потому что эта строка должна быть готова к использованию в других алгоритмах.

Вот тебе пример
print(k(0, 'abcd', 'defg'))
и вот
print(k(1, k(3, 'abcd', 'X').upper(), 'defg'))
Куда ты собрался свои join'ы вставлять здесь?

Хоть этот тест и подаёт отрицательный индекс, но алгоритм не должен его пропускать.
[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
Посмотрел вариант с двусвязным списком - то же самое всё. Так что, я думаю, там какой-то прикол с самими командами. Допустим, если там p = 1 и LRLRLR, то там вообще ничего двигать не надо, так как они друг друга поглощают.
Так что хранить строку с текстом надо простым способом, а сами команды перед разбором преобразовать. Потому что там длина - 100000 команд может превратиться в 10 команд.
sharkk
py.user.next
Ну, ты подаешь строку, а возращаешь список, а потом типа каждый раз будешь строку получать. И всё это ты сделал, чтобы ускорить функцию - это халтура и говнокодерство.
Если ты подал строку, то и получить должен строку. Потому что эта строка должна быть готова к использованию в других алгоритмах.
Спасибо, учту на будущее.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB