Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Случайно наткнулся в журнале на задачи от одной компании, (название которой я писать не буду ибо не хочу что-то пиарить, пусть и на фоне), и решил размяться Да, решения этих задач можно отправить в компанию, не знаю зачем, какие-то призы вероятно, но срок уже истек, это сентябрьский номер, так что вы не подумайте что я преследую личную выгоду от того, что спрашиваю у вас что-либо по этому поводу. Вообще дано 6 задач. Сейчас решил первую. задача 1Дана строка "Hello, Embarcadero". Не обращая внимание на производительность, написать как можно больше вариантов , как поменять символы местами в обратном порядке. Варианты могут отличаться лишь синтаксисом. Можно использовать библиотечные функции работы со строками, но должны быть варианты и без них.\ Вот как я её решил 1 вариант Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 2 вариант, аналогично, но реализовал функцию strlen Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 3 вариант Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 4 вариант, тут добавил указатели Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. можно еще написать функцию принимающую адреса начала и конца строки, и делать её реверс, можно сделать реверс каждого слова, можно своп делать по-другому. Других вариантов в голову не приходит. Но ведь должен быть в задаче подвох ? Она кажется слишком простой. Как бы вы её решали ? Кстати, в условии задачи меня смутила фраза про производительность. Что авторы хотели этим сказать ? PS остальные 5 задач выложу позже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 04:14 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
На производительность вляют столько факторов что топика не хватит. Я-бы предложил подумать над оптимизациями идущими далеко в будущее. 1) Всегда-ли нужно свапировать? Может быть строка уже зеркально-симметрична Я исхожу из предположения что запись в память - дорого стоит с точки зрения кешей и синхронизаций. И лучше ее (запись) вообще не делать до самого последнего времени. Максимальная иммутабельность. 2) Предлагаю вообще не свапировать длинные строки (более 255 символов к примеру). Но хранить для них булево свойство. Код: plaintext 1. Если кто-то если захочет получить распечатать строку на экране или получить перевёрнутый порядок - то мы ему отдадим геттер или итератор который вернёт символы в том порядке который соответствует isSwapped. Это отчасти соответствует принципам lazy-evaluation. Методы конкатенаций и поиска подстрок также должны учитывать свойство isSwapped. Предлагаю также считать верным тезисы Код: plaintext 1. Если строка - является палиндромом или из 1 символа то Код: plaintext 1. Признак палиндромности isPalindrom=true можно также хранить в объекте строки. 3) Возможно существуют и низкоуровневые (ассемблерные) оптимизации этой задачи основанные на знаниях команд современных CPU и возможностей железа в плане управления кешами. Вобщем у меня - всё. Задача в чистом виде - тоесть именно свапирование букв в memory мне кажется ненужной. Тем более что в форуме эта задача уже звучала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 09:24 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
Ну вы вообще... Не каждый сможет обратить строку, в смысле, делать это могут не только лишь все... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 11:05 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
maytonНа производительность вляют столько факторов что топика не хватит. Я-бы предложил подумать над оптимизациями идущими далеко в будущее. Вообще-то в условии задачи прямо сказано что производительность не важна :) Это задача на умение генерировать идеи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 12:07 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
А еще есть вариант рандомно перемешивать массив символов до тех пор, пока там не появится "строка наоборот". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 12:28 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
Будь здесь Базист - он предложил-бы загнать все строки известные науке в его магическую флористическую базу и вместо реверса просто находить ответную строку через ультра-быстрый поиск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 12:35 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНо ведь должен быть в задаче подвох ? Подвох номер 1: про системную функцию ReverseString() они не зря упомянули. Подвох номер 2: про "in-place" нигде не сказано, следовательно простейшим методом будет копирование в новый буфер. Ну и странно, что тебе не пришёл в голову простейший вариант: Код: sql 1. 2. 3. 4. 5. 6. 7. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 12:39 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovследовательно простейшим методом будет что есть "простейший" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 12:58 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
Дима. Дык твой код вроде как сделает двойной реверс. Не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 13:04 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
maytonДима. Дык твой код вроде как сделает двойной реверс. Не? Обижаешь... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 13:31 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
Напомнило. Красивая формула. Код: plaintext 1. Я где-то читал что есть особая ассемблерная директива машин серии PDP которая 1:1 соответствует этой строке кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 13:45 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
maytonБудь здесь Базист - он предложил-бы загнать все строки известные науке в его магическую флористическую базу и вместо реверса просто находить ответную строку через ультра-быстрый поиск. Лучше сделать мемоизацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 13:56 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
maytonЯ где-то читал что есть особая ассемблерная директива машин серии PDP которая 1:1 соответствует этой строке кода. Есть. ЕМНИП: Код: sql 1. В машинном коде - 113130. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 13:59 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
maytonНапомнило. Красивая формула. Код: plaintext 1. Я где-то читал что есть особая ассемблерная директива машин серии PDP которая 1:1 соответствует этой строке кода. Так и в интеле есть MOVS -- копирование строки заранее определённой длины. Она делает это вместе с охватывающим циклом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 13:59 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
maytonНапомнило. Красивая формула. Код: plaintext 1. Я где-то читал что есть особая ассемблерная директива машин серии PDP которая 1:1 соответствует этой строке кода. Зачем так далеко ходить? Интеловский MOVS умеет и ++ и -- :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 13:59 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyИнтеловский MOVS умеет и ++ и -- :) А умеет он их одновременно? Тогда задачу ТСа можно было бы решить в пять ассемблерных строчек. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 14:06 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovAnatoly MoskovskyИнтеловский MOVS умеет и ++ и -- :) А умеет он их одновременно? Тогда задачу ТСа можно было бы решить в пять ассемблерных строчек. Неа, не умеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 14:07 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
Да, тема действительно звучала. И я не вижу проблем в том, чтобы решить эту задачу. Меня и раньше, и сейчас, постоянно, смущает ограниченность. Мы в любом случае перебираем каждый байт. Увидел код копирования Марка строки r to l, и ваши комментарии о том, что существует ассемблерная команда позволяющая это сделать проще. Проще ли ? А эта команда всё-равно будет идти побайтово ? Вероятно так. В любом случае, у нас ограничения, и мы упираемся в эти O(n). А я хочу O(1). Было бы хорошо, если бы могли читать память в обратном порядке, но это позволило бы нам решить лишь часть задач. Например, у нас есть функция f(x)=x+3, и оператор Pz(x)=z(x)^2, т.о. Pf(x)=(x+3)^2, мы в одно действие получаем новое отображение, и нам не нужно менять значение каждой точки, было 3, теперь будет 9, было 4, теперь 16. Что-то аналогичное мне и хотелось увидеть в качестве алгоритма решения данной задачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 14:30 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
SashaMercuryА я хочу O(1) В любом случае для переворота должна быть прочитана вся строка и вся записана, а сколько и какие команды процессора понадобятся - неважно, т.к. сложность алгоритма это не изменит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 15:05 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
Хм... интересненько. CNU Clisp 2.49 Код: python 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 15:34 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
Интересно где он декларирован? Искал через текстовый поиск по %LISP_HOME% но нашёл только использование реверса в других *.lisp файлах. Но нету в define/defun/def Может Илья подскажет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 15:46 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
Dima TВ любом случае для переворота должна быть прочитана вся строка и вся записана Mayton выше привел алгоритм без копирования, с флагом. Так что не в любом случае. Надо просто шире думать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 15:48 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyНадо просто шире думать :) Надо шире искать под какой ещё коврик замести потерю времени на реальный реверс. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 15:57 |
|
||
|
Решение ряда задач.
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyMayton выше привел алгоритм без копирования, с флагом.Чтобы выставить флаг, придётся "попарно сверить две половинки строки". И даже тогда может не повезти и копировать всё равно придётся.Надо просто шире думать :)Особенно надо думать о преждевременной оптимизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 16:00 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38816223&tid=2019210]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
66ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 186ms |

| 0 / 0 |
