Автор Тема: Задачка архитекторная.  (Прочитано 65535 раз)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #60 : Март 27, 2011, 09:03:34 pm »
Действительно чувствуется. Серьезно.

Через пару дней сяду, проанализирую. Ну или сразу статью зачту как появится :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #61 : Март 28, 2011, 02:59:36 am »
Действительно чувствуется. Серьезно.

Через пару дней сяду, проанализирую. Ну или сразу статью зачту как появится :-)

Будет решение на С++. Минимальное. Попробую выкроить время до вторника.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #62 : Март 28, 2011, 07:36:31 am »
Будет решение на С++. Минимальное. Попробую выкроить время до вторника.
OK. Подождем.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #63 : Март 28, 2011, 09:59:48 am »
Было бы любопытно сделать такую таблицу, расчёт которой занял бы ощутимое время -- интересно было бы сравнить разные варианты решений на скорость вычислений.
Но таблица размером 26*9 не очень способствует таким замерам. Вот если расширить язык этой таблицы, введя возможность вычисления формул -- было бы прикольно...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

AlexIljin

  • Newbie
  • *
  • Сообщений: 25
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #64 : Март 28, 2011, 11:55:21 am »
Было бы любопытно сделать такую таблицу, расчёт которой занял бы ощутимое время -- интересно было бы сравнить разные варианты решений на скорость вычислений.
Но таблица размером 26*9 не очень способствует таким замерам. Вот если расширить язык этой таблицы, введя возможность вычисления формул -- было бы прикольно...

Длину формулы, вроде, не ограничивали... : ))

AlexIljin

  • Newbie
  • *
  • Сообщений: 25
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #65 : Март 28, 2011, 03:56:20 pm »
Вот если расширить язык этой таблицы, введя возможность вычисления формул -- было бы прикольно...

Хотите сказать, что в вашем решении формулы не вычисляются?
Это заставляет посмотреть на приведённые метрики с новой стороны ; )))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #66 : Март 28, 2011, 04:01:33 pm »
Вот если расширить язык этой таблицы, введя возможность вычисления формул -- было бы прикольно...

Хотите сказать, что в вашем решении формулы не вычисляются?
Это заставляет посмотреть на приведённые метрики с новой стороны ; )))
Да описАлся я там -- имел в виду введение пользовательских функций ))
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #67 : Март 28, 2011, 04:40:26 pm »
Это заставляет посмотреть на приведённые метрики с новой стороны ; )))
Александр, а слабо переделать программу на разумно-модульный вид? Собственно, этого автор задачи и ожидал в качестве хорошего решения -- декомпозиция программы, удобная для развития в будущем.
И вапще прикольная тоже задачка ))
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

AlexIljin

  • Newbie
  • *
  • Сообщений: 25
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #68 : Март 28, 2011, 05:48:48 pm »
Александр, а слабо переделать программу на разумно-модульный вид? Собственно, этого автор задачи и ожидал в качестве хорошего решения -- декомпозиция программы, удобная для развития в будущем.
Слабо, конечно. Я считаю, что процедурная декомпозиция вполне адекватна задаче. Все точки расширения вполне обозримы. Добавить строковые операции? Ищем errStringOp, добавляем нужную константу для operation. Огромные таблицы? Правим загрузку и дереференс ячейки. Избавиться от рекурсии в интерпретации выражений? Поле marked из BOOLEAN превращаем в INTEGER.
Чего тут в модулях прятать-то? Ввод и вывод и так нормально спрятаны в In и Out.
Нет, ну можно, конечно, разбить, чтобы подчеркнуть независимость ввода от расчёта и расчёта от вывода, но надо ли?
Ещё можно уменьшить требования к памяти, вычисляя простые формулы сразу при загрузке, как это сделано для целых чисел и строк. Поможет ли в этом разбиение на модули? Вряд ли.

В общем, на мой взгляд, дополнительные модули не нужны, по крайней мере пока не перевалили за 1000 строк. Посмотрим, что за учебный пример будет у Ильи. Надеюсь, он в моё решение не подглядывал : ))

Илья Ермаков

  • Full Member
  • ***
  • Сообщений: 177
    • Просмотр профиля
    • OberonCore
Re:Задачка архитекторная.
« Ответ #69 : Март 28, 2011, 06:12:21 pm »
По поводу большой таблицы и вычислений - представьте себе какую-нибудь инкрементальную колоночку в табличке с миллионами строк. Т.е. каждая ячейка ссылается на предыдущую + 1... Хм, только в текущем языке формул нет относительного синтаксиса.

AlexIljin

  • Newbie
  • *
  • Сообщений: 25
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #70 : Март 28, 2011, 07:14:52 pm »
По поводу большой таблицы и вычислений - представьте себе какую-нибудь инкрементальную колоночку в табличке с миллионами строк. Т.е. каждая ячейка ссылается на предыдущую + 1... Хм, только в текущем языке формул нет относительного синтаксиса.

Представил и без относительного синтаксиса. Что дальше? В смысле, я не понял, на что намёк?
Если это вы про рекурсивное вычисление, так ведь я решал задачу первого этапа. А про второй этап - подумал и прикинул необходимые изменения: исправить тип поля ExpressionCell.marked и добавить цикл.
Как и было в задании. : )
При таблице 26*9 максимальная глубина рекурсии = 243, а это чуть более 16Кб стэка для моего кода.

Кстати, если кому для тестов надо, вот таблица:9    26
=B1+1   =C1+1   =D1+1   =E1+1   =F1+1   =G1+1   =H1+1   =I1+1   =J1+1   =K1+1   =L1+1   =M1+1   =N1+1   =O1+1   =P1+1   =Q1+1   =R1+1   =S1+1   =T1+1   =U1+1   =V1+1   =W1+1   =X1+1   =Y1+1   =Z1+1   =A2+1
=B2+1    =C2+1   =D2+1   =E2+1   =F2+1   =G2+1   =H2+1   =I2+1   =J2+1   =K2+1   =L2+1   =M2+1   =N2+1   =O2+1   =P2+1   =Q2+1   =R2+1   =S2+1   =T2+1   =U2+1   =V2+1   =W2+1   =X2+1   =Y2+1   =Z2+1   =A3+1
=B3+1    =C3+1   =D3+1   =E3+1   =F3+1   =G3+1   =H3+1   =I3+1   =J3+1   =K3+1   =L3+1   =M3+1   =N3+1   =O3+1   =P3+1   =Q3+1   =R3+1   =S3+1   =T3+1   =U3+1   =V3+1   =W3+1   =X3+1   =Y3+1   =Z3+1   =A4+1
=B4+1    =C4+1   =D4+1   =E4+1   =F4+1   =G4+1   =H4+1   =I4+1   =J4+1   =K4+1   =L4+1   =M4+1   =N4+1   =O4+1   =P4+1   =Q4+1   =R4+1   =S4+1   =T4+1   =U4+1   =V4+1   =W4+1   =X4+1   =Y4+1   =Z4+1   =A5+1
=B5+1    =C5+1   =D5+1   =E5+1   =F5+1   =G5+1   =H5+1   =I5+1   =J5+1   =K5+1   =L5+1   =M5+1   =N5+1   =O5+1   =P5+1   =Q5+1   =R5+1   =S5+1   =T5+1   =U5+1   =V5+1   =W5+1   =X5+1   =Y5+1   =Z5+1   =A6+1
=B6+1    =C6+1   =D6+1   =E6+1   =F6+1   =G6+1   =H6+1   =I6+1   =J6+1   =K6+1   =L6+1   =M6+1   =N6+1   =O6+1   =P6+1   =Q6+1   =R6+1   =S6+1   =T6+1   =U6+1   =V6+1   =W6+1   =X6+1   =Y6+1   =Z6+1   =A7+1
=B7+1    =C7+1   =D7+1   =E7+1   =F7+1   =G7+1   =H7+1   =I7+1   =J7+1   =K7+1   =L7+1   =M7+1   =N7+1   =O7+1   =P7+1   =Q7+1   =R7+1   =S7+1   =T7+1   =U7+1   =V7+1   =W7+1   =X7+1   =Y7+1   =Z7+1   =A8+1
=B8+1    =C8+1   =D8+1   =E8+1   =F8+1   =G8+1   =H8+1   =I8+1   =J8+1   =K8+1   =L8+1   =M8+1   =N8+1   =O8+1   =P8+1   =Q8+1   =R8+1   =S8+1   =T8+1   =U8+1   =V8+1   =W8+1   =X8+1   =Y8+1   =Z8+1   =A9+1
=B9+1    =C9+1   =D9+1   =E9+1   =F9+1   =G9+1   =H9+1   =I9+1   =J9+1   =K9+1   =L9+1   =M9+1   =N9+1   =O9+1   =P9+1   =Q9+1   =R9+1   =S9+1   =T9+1   =U9+1   =V9+1   =W9+1   =X9+1   =Y9+1   =Z9+1   =1
« Последнее редактирование: Март 28, 2011, 07:19:14 pm от AlexIljin »

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #71 : Март 28, 2011, 07:29:43 pm »
Долгожданный С++ вариант :) 530 строк - самый жрный вариант, как я понимаю. Код включает все тесты, которые использовались по ходу.

Комментарии, которые возникли по ходу решения:
1. Стандартной библиотеки явно недостаточно даже для таких простых задач. C boost'ом было бы намного приятнее. Еще приятнее со своими повседневными наработками (ненулевыее указатели, например).
2. Следствие пункта 1 - непривычная головная боль и пляски с динамическими объектами (std::auto_ptr категорически недостаточно).
3. Следствие пукта 1 - пришлось писать циклы и обходится без любимых функциональный штучек (замыканий). Тоже непривычно, неудобно, многословно.
4. Код минималистичный и с минимумом диагностики, но с требуемой возможностью минимального расширения.
5. Никакой оптимизации, дубовое решение, но которое можно точить.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #72 : Март 28, 2011, 07:31:16 pm »
Кстати, если кому для тестов надо, вот таблица:

Спасибо, passed :)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #73 : Март 28, 2011, 07:55:39 pm »
При таблице 26*9 максимальная глубина рекурсии = 243, а это чуть более 16Кб стэка для моего кода.

Кстати, если кому для тестов надо, вот таблица:

Интересная попытка, но увы! Слишком мало расчётов, пролетает мгновенно, надо что-то покруче...
Да, и 26*9 = 234 всё-таки...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

AlexIljin

  • Newbie
  • *
  • Сообщений: 25
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #74 : Март 28, 2011, 08:03:58 pm »
Долгожданный С++ вариант :) 530 строк - самый жрный вариант, как я понимаю.

Удалил пустые строки, удалил namespace Test, в объявлении функций тип результата поставил на одну строку с именем функции, и осталось 383 строки. Практически совпадает с моим вариантом на XDS Oberon-2 (380 строк).

Не совсем понятно, правда, почему exe-файл 388Кб. Это с отладочной информацией, наверное?
« Последнее редактирование: Март 28, 2011, 08:05:53 pm от AlexIljin »