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

AlexIljin

  • Newbie
  • *
  • Сообщений: 25
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #75 : Март 28, 2011, 08:11:29 pm »
Интересная попытка, но увы! Слишком мало расчётов, пролетает мгновенно, надо что-то покруче...
Да, и 26*9 = 234 всё-таки...
Это я не для расчётов, а для глубины рекурсии. Можно сделать поиск с заменой, исправив "+1" на "*2/2*2/2*2/2*2/2*2/2..." Тогда и рекурсия будет, и расчётов сколько угодно. Впрочем, при моём максимальном числе 255 символов в ячейке всё равно влёт считает.

Почему-то в голове сидело, что в английском алфавите 27 букв. В результате составления таблицы исправил на 26, а результат умножения забыл обновить.
« Последнее редактирование: Март 28, 2011, 08:19:36 pm от AlexIljin »

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #76 : Март 28, 2011, 08:17:57 pm »
Удалил пустые строки, удалил namespace Test, в объявлении функций тип результата поставил на одну строку с именем функции, и осталось 383 строки. Практически совпадает с моим вариантом на XDS Oberon-2 (380 строк).

И в обероне и в C++ можно вообще все в одну строчку налепить :) Тогда уж надо сичтать байты, а не строки :) Тода все упрется еще и в длину иднтификаторов. Дурная характеристика, короче :)

Не совсем понятно, правда, почему exe-файл 388Кб. Это с отладочной информацией, наверное?

Да. 165к без отладочной инфы и без динамических библиотек. Спасибо дурным плюсовым стримам...

AlexIljin

  • Newbie
  • *
  • Сообщений: 25
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #77 : Март 28, 2011, 08:23:58 pm »
Влад, в личные сообщения гляньте.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #78 : Март 28, 2011, 08:30:26 pm »
Влад, в личные сообщения гляньте.

Деление на ноль поправил.

Илья Ермаков

  • Full Member
  • ***
  • Сообщений: 177
    • Просмотр профиля
    • OberonCore
Re:Задачка архитекторная.
« Ответ #79 : Март 28, 2011, 08:44:44 pm »
По поводу размера EXE.
У ББ такое бывает для больших статического размера массивов из указателей.
Тогда к дескриптору типов компилятор шьёт огромный список позиций указателей для сборщика.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #80 : Март 28, 2011, 08:53:27 pm »
По поводу размера EXE.
У ББ такое бывает для больших статического размера массивов из указателей.
Тогда к дескриптору типов компилятор шьёт огромный список позиций указателей для сборщика.

В данном случае - это просто неудачная (по моему мнению) стандартная библиотека стримов. Которая может делать все и поэтому большая, но при этом все крайне неудобно и непонятно :)

Илья Ермаков

  • Full Member
  • ***
  • Сообщений: 177
    • Просмотр профиля
    • OberonCore
Re:Задачка архитекторная.
« Ответ #81 : Март 28, 2011, 09:01:15 pm »
Пардон, не понял, что это про размер С++-экземшника, потому что писал Ильин.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #82 : Март 28, 2011, 11:15:14 pm »
Произвёл разбиение на модули, получилось аж 6 модулей (против эталонных 4 у Гапертона).
Фактически, 4 из моих модулей содержат всего по нескольку строк кода и расчитаны на возможное развитие проекта в будущем. Два модуля составляют основной объём кода.

Метрика: 214 locs, zip: 2500 байт, распакованный вид:  8815 байт (коэф. сжатия 3.526)

Экзешник пухлый, так уж генерирует код компилятор GHC, сжатием упаковщиком типа NsPack можно уменьшить в несколько раз.

Модуляризация решения увеличила размер исходника (в строках) почти на 20%, за счёт оформления заголовков модулей, импорта и экспорта.
to iterate is human, to recurse, divine

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

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #83 : Март 29, 2011, 06:39:15 am »
Долгожданный С++ вариант :) 530 строк - самый жрный вариант, как я понимаю.

Удалил пустые строки, удалил namespace Test, в объявлении функций тип результата поставил на одну строку с именем функции, и осталось 383 строки. Практически совпадает с моим вариантом на XDS Oberon-2 (380 строк).
Если в программе vlad'а удалить функцию test (и её вызов), то вот ещё -38 строк...
to iterate is human, to recurse, divine

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #84 : Март 29, 2011, 07:33:32 am »
Я насчитал целых 4 решения - оберон-2, КП, хаскель, С++. Классно! :) Давайте с ними чего-нибудь сделаем :) Например:
- потестим скорость
- определим недостатки и пределы каждого решения (не кушает формулу больше такой-то длины и т.п.)
- углубим и расширим (как и предполагалось изначально), при этом оценим количество изменений (хотя бы тупой diff).
- еще чего-нибудь - тов. Веселовский должен взять инициативу ;)

P.S. Кстати, неплохо бы иметь exe для всех решений.

Илья Ермаков

  • Full Member
  • ***
  • Сообщений: 177
    • Просмотр профиля
    • OberonCore
Re:Задачка архитекторная.
« Ответ #85 : Март 29, 2011, 07:34:17 am »
Какая-то метрия неинтересная началась, коллеги :) Как это бывает с производительностью. Признак нехорошего зуда в одном месте. Какая разница - + 100 строк, - 100 строк?

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #86 : Март 29, 2011, 07:43:37 am »
Хорошо, Илья, предложите более годную объективную метрику.
Алексей предлагал считать лексемы, но это из той же оперы.
Как ещё можно "измерить алгеброй гармонию"?
to iterate is human, to recurse, divine

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

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #87 : Март 29, 2011, 07:50:20 am »
Я насчитал целых 4 решения - оберон-2, КП, хаскель, С++. Классно! :)

В джаббере я скидывал Алексею ссылки на кучу ещё решений, там были на яве, вроде, ещё на лиспе, на сях и с++ несколько, несколько вариантов на том же хаскелле, вариант на эрланге...

Давайте с ними чего-нибудь сделаем :) Например:
- потестим скорость

Вот с замером этой самой скорости на текущем размере таблицы 26*9 проблемы -- любая таблица будет расчитана за доли секунды.
Я хотел было попробовать какой-нить фибонначи разложить в таблицу, но понял, что там эти экспоненциальные вычисления будут мемоизированы (или по-русски -- табулированы, в таблице же), и опять же мгновенно рассчитаются...
to iterate is human, to recurse, divine

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

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #88 : Март 29, 2011, 08:07:27 am »
Я насчитал целых 4 решения - оберон-2, КП, хаскель, С++. Классно! :) Давайте с ними чего-нибудь сделаем :) Например:
- потестим скорость
- определим недостатки и пределы каждого решения (не кушает формулу больше такой-то длины и т.п.)
- углубим и расширим (как и предполагалось изначально), при этом оценим количество изменений (хотя бы тупой diff).
- еще чего-нибудь - тов. Веселовский должен взять инициативу ;)

Предлагаю проверить все решения на таком тестовом наборе входных данных:
1           4
=A2+A3           =A1*A3           =A1/A2          'Surprise!
Последнюю ячейку можно исключить  :)

PS: Ещё не плохо было бы все решения продублировать в одном сообщении с указанием автора решения и языка реализации.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #89 : Март 29, 2011, 08:17:36 am »
Предлагаю проверить все решения на таком тестовом наборе входных данных:
1           4
=A2+A3           =A1*A3           =A1/A2          'Surprise!
Последнюю ячейку можно исключить  :)

Моё решение:
#Expr              

Решение Ильина:
#OutOfRange   #Reading    #Reading    #Reading

Решение vlad'а:
<parse error>          

Так выглядит таблица:
   A   B   C   D   ...
1  A1  B1  C1  D1
2   A2  B2  C2  D2
3   A3  B3  C3  D3
4   A4  B4  C4  D4
...
« Последнее редактирование: Март 29, 2011, 08:21:03 am от Geniepro »
to iterate is human, to recurse, divine

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