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

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Задачка архитекторная.
« : Март 24, 2011, 03:11:57 pm »
Нашел на просторах интернетов. Собственно очень было бы интересно посмотеть как эта задачка решается на:
1) Oberon-07 (можно даже M)
2) Oberon-2
3) КП в динамической среде исполнения (в ББ например).

Цитировать
Маленький Эксель
----------------

Необходимо реализовать простую электронную таблицу в виде программы, выполняющейся
из командной строки. Она должна уметь обрабатывать ячейки таблицы как и более
продвинутые аналоги, только с упрощенным синтаксисом выражений. Каждая ячейка
может содержать:
 - Ничего
 - Неотрицательное целое число
 - Текстовые строки, которые начинаются с символа '
 - Строки-выражения, которые начинаются с символа '=' и могут содержать
   неотрицательные целые числа, ссылки на ячейки и простые арифметические
   выражения. Скобки запрещены, у всех операций одинаковый приоритет.
   Ссылки на ячейки состоят из одной латинской буквы и следующей за ней
   цифры.

   Эти ограничения введены для упрощения разбора выражений, поскольку разбор
   выражений не является основной частью проблемы. Вы можете спокойно
   положиться на эти ограничения. Вот грамматика содержимого ячейки:
     expression ::= '=' term {operation term}*
      term ::= cell_reference | nonnegative_number
      cell_reference ::= [A-Za-z][0-9] --
      operation ::= '+' | '-' | '*' | '/'
      text ::= '\\'' {printable_character}

Процесс обработки:
 - Все выражения должны быть заменены на вычисленный результат.
 - Все вычисления выполняются с помощью целочисленной арифметики со знаком.
 - Ячейки с текстом должны быть вычислены как соответствующий текст без
   префикса '.
 - Операции над строками текста запрещены.
 - В случае любой ошибки вычисления формулы, вычисляемая ячейка должна содержать
   слово-сообщение об ошибке, начинающееся с символа '#'. Используйте короткие,
   ясные сообщения. Не надо предоставлять подробности об ошибках в выводе.

Программа должна использовать только стандартные библиотеки и классы и не должна
вызывать сторонние программы, библиотеки или системные компоненты.


Ввод и вывод
------------

Программа получает описание таблицы с формулами из стандартного ввода,
вычисляет ее и печатает полученный результат в стандартный вывод. Входные
данные представлены таблицей, элементы строк которой разделены табуляциями.
Первая строка содержит пару чисел, разделенных табуляцией - высоту и
ширину таблицы, соответственно. Затем идут строки с ячейками таблицы,
в грамматике, приведенной выше.


Выход должен содержать только ожидаемую информацию, включая сообщения об
ошибках, и никакой другой информации в выводе не должно быть, включая и
welcome text. Выход должен быть отформатирован в соответствии с приведенным
ниже примером.

Пример данных:
3            4
12          =C2       3       'Sample
=A1+B1*C1/5 =A2*B1    =B3-C3  'Spread
'Test       =4-3      5       'Sheet

Ожидаемый вывод:
12      -4      3       Sample
4       -16     -4      Spread
Test    1       5       Sheet


Указания по решению
-------------------
Необходимо промышленное качество кода. Более короткое и читаемое решение
предпочтительней. Решение должно содержать тестовые примеры и код, использованные
в процессе создания решения. Не забудьте откомментировать код в ключевых
местах. Код должен быть устойчив к ошибкам.

Представьте, что это требования к первой фазе проекта. Необходимо реализовать
только то, что нужно на этой фазе. Однако, известно, что планируется вторая
фаза, в которой требования будут расширены следующими:
 - Расширить формулы операциями над строками,
 - Оптимизировать производительность для громадных таблиц.

Вам необходимо будет указать, какие изменения необходимо сделать для
реализации второй фазы проекта.

С этой задачей в одной конторе не справился ни один из тех, кому ее давали. Точнее, не справился в полном объеме. После более или менее успешного ее решения проводилось интервью. Задача использовалась для выявления потенциальных архитекторов.
« Последнее редактирование: Март 24, 2011, 03:14:11 pm от valexey »
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #1 : Март 24, 2011, 04:15:25 pm »
Да, ТЗ задачки такой какой он есть. Уточняющие вопросы задавать не разрешается. Разрешается только сразу выдать ответ.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #2 : Март 24, 2011, 04:27:14 pm »
Да, времени на задачку давалось 2-3 дня (это давалось на дом, до собеседования). Впереди как раз выходные, условия у всех участников сего форума в точности те же (или лучше) нежели у тех кто был пред собеседованием.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #3 : Март 24, 2011, 05:07:45 pm »
кстати, вот этот пункт:
Цитировать
Программа должна использовать только стандартные библиотеки и классы и не должна
вызывать сторонние программы, библиотеки или системные компоненты.
Применительно к оберонам можно и обсудить. Потому как если руководствоваться только language report'ами, то там и Hello World не написать.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #4 : Март 24, 2011, 06:55:09 pm »
Ну вот моё решение: [тут покопался злобный валексей и скрыл ссылку до понедельника, жалобы принимаются]
Я справился с задачей со сверхсветовой скоростью, за -3.5 года )))
« Последнее редактирование: Март 24, 2011, 07:43:09 pm от valexey »
to iterate is human, to recurse, divine

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

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #5 : Март 24, 2011, 07:44:39 pm »
Ссылку скрыл, дабы народ не отвлекался на изучение чужих решений (ибо это больно уж затягивающее занятие) а написал что-нибудь своё. Хочется таки хоть одно решение на каком-нибудь Обероне.

Если geniepro возразит супротив такой меры, то моментально все верну взад. Ну, или если народ массово против вдруг будет.
« Последнее редактирование: Март 24, 2011, 07:46:16 pm от valexey »
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #6 : Март 24, 2011, 08:26:09 pm »
В общем, относительно стандартных либ, я считаю так: стандартное все, что идет искаробки с выбранным компиятором/средой. Нестандартные сборки в рассчет не берутся.

То есть, если это BB, то пользоваться можно всем тем, что идет в наборе от Оминков.
Если это XDS, то пользоваться тем, что идет с ним искаропки.
Если это Oberon-07M.. Ну, похоже тут и выбора то не остается :-) Единственное но -- желательно таки в логике программы не использовать что-то WinAPI'шно-привязанное. (кроме всего прочего, решение данной задачки может и должно послужить толчком к созданию на Оберон-07М стандартной библиотеки).
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #7 : Март 24, 2011, 08:26:58 pm »
Хотя, конечно, Оберон-2 можно было бы ограничить библиотекой из Дубовых Требований.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #8 : Март 24, 2011, 10:30:20 pm »
Если geniepro возразит супротив такой меры, то моментально все верну взад. Ну, или если народ массово против вдруг будет.
Да я-то до понедельника потерплю, чо уж там ))

В общем, относительно стандартных либ, я считаю так: стандартное все, что идет искаробки с выбранным компиятором/средой. Нестандартные сборки в рассчет не берутся.

То есть, если это BB, то пользоваться можно всем тем, что идет в наборе от Оминков.
Если это XDS, то пользоваться тем, что идет с ним искаропки.
То есть учебную сборку от инфо21 юзать низзя? ))
А Haskell Platform годится? Ибо он рекомендуемой производителем сборкой является и стандарт де-факто...
to iterate is human, to recurse, divine

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

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #9 : Март 24, 2011, 10:45:14 pm »
То есть учебную сборку от инфо21 юзать низзя? ))
Ни в коем ни в случае! :-)
А Haskell Platform годится? Ибо он рекомендуемой производителем сборкой является и стандарт де-факто...
А это надо подумать. Потому как, в отличае от Оберонов, у хаскеля таки есть стандартная библиотека вполне достаточная для данной задачи. Наверно так -- если получилось обойтись тем и только тем, что есть в описании стандарта (haskell 2010, кстати), то отлично. если вылезли во вне и заюзали что-то нестандартное (в плане библиотек) из Haskell Platform, то это не серьезная ошибка дизайна, при условии, что оно реализовано не только в ghc, и серьезная (но не фатальная), если есть только в ghc.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #10 : Март 24, 2011, 10:49:24 pm »
А это надо подумать. Потому как, в отличае от Оберонов, у хаскеля таки есть стандартная библиотека вполне достаточная для данной задачи. Наверно так -- если получилось обойтись тем и только тем, что есть в описании стандарта (haskell 2010, кстати), то отлично. если вылезли во вне и заюзали что-то нестандартное (в плане библиотек) из Haskell Platform, то это не серьезная ошибка дизайна, при условии, что оно реализовано не только в ghc, и серьезная (но не фатальная), если есть только в ghc.
Так кроме GHC других промышленных трансляторов у Хаскелла нет, а Haskell Platform -- его рекомендуемая сборка.
to iterate is human, to recurse, divine

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

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #11 : Март 24, 2011, 10:59:29 pm »
А это надо подумать. Потому как, в отличае от Оберонов, у хаскеля таки есть стандартная библиотека вполне достаточная для данной задачи. Наверно так -- если получилось обойтись тем и только тем, что есть в описании стандарта (haskell 2010, кстати), то отлично. если вылезли во вне и заюзали что-то нестандартное (в плане библиотек) из Haskell Platform, то это не серьезная ошибка дизайна, при условии, что оно реализовано не только в ghc, и серьезная (но не фатальная), если есть только в ghc.
Так кроме GHC других промышленных трансляторов у Хаскелла нет, а Haskell Platform -- его рекомендуемая сборка.
Ну, про промышленность ghc я бы таки промолчал (ну недотягивает оно до промышенных стандартов в плане стабильности и обратной совместимости, чуточку, но не дотягивает пока). Но вот ведь есть же еще и (Win)Hugs! Вполне популярная реализация haskell'я. Да, в ынтырпрайз оно возможно не пойдет как база, но вот для экспериментов, для разработки, проверки и так далее -- вполне. Оно простое и там цикл разработки быстрее чем на ghci. Оно много более легковесное. Оно дружелюбное. И да, оно умеет часть из того, что умеет и ghc, например монаду ST.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #12 : Март 24, 2011, 11:16:01 pm »
Ну, про промышленность ghc я бы таки промолчал (ну недотягивает оно до промышенных стандартов в плане стабильности и обратной совместимости, чуточку, но не дотягивает пока).
Однако GHC используется во вполне серьёзных промышленных проектах. Альтернативы в общме-то ему нет.

Но вот ведь есть же еще и (Win)Hugs! Вполне популярная реализация haskell'я. Да, в ынтырпрайз оно возможно не пойдет как база, но вот для экспериментов, для разработки, проверки и так далее -- вполне. Оно простое и там цикл разработки быстрее чем на ghci. Оно много более легковесное. Оно дружелюбное. И да, оно умеет часть из того, что умеет и ghc, например монаду ST.
Ага, вот только этот самый ST реализован в HUGS по другому, чем в GHC, поэтому библиотека работы с графами не компилируется в HUGS...
Да и как Вы организуете ввод/вывод из консоли в WinHUGS, скажите на милость...  ;D
Из нескольких моих решений этой задачи лишь одно запустилось в хугсе, но оно не может правильно обработать циклы в формулах -- выпадает в осадок с переполнением стека...
« Последнее редактирование: Март 24, 2011, 11:20:38 pm от Geniepro »
to iterate is human, to recurse, divine

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

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #13 : Март 24, 2011, 11:24:19 pm »
Ну, это я с удовольствием разберу все позжее. Возможно твое решение будет наилучшим просто вследствие отсутствия конкурентов :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #14 : Март 24, 2011, 11:31:24 pm »
Но вот ведь есть же еще и (Win)Hugs! Вполне популярная реализация haskell'я. Да, в ынтырпрайз оно возможно не пойдет как база, но вот для экспериментов, для разработки, проверки и так далее -- вполне. Оно простое и там цикл разработки быстрее чем на ghci.
Кстати, вот я так до сих пор и не осилил разработку в стиле REPL. С редактором текста и компилятором мне как-то проще. В Хугсе если и запускаю программу, то чисто что бы проверить, есть ли ошибки, и если нет, и алгоритм достаточно быстрый, то что бы тут же протестировать. Но это мало отличается от цикла разработки с компилятором, потому что REPL хугса я очень редко использую.
Да и в GHC есть репл -- GHСi...
to iterate is human, to recurse, divine

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