Соціонічний форум

Вітаємо! Для доступу до всіх сервісів, будь ласка, увійдіть або зареєструйтеся.





Поділитися:
Соціонічний форум » Різне Флуд дозволено » Экзотический конкурс программистов

Сторінки: 1 2
 Відповісти   Сторити тему   Створити статтю   Створити опитування   Підписатися   Друкувати 
Автор

Тема: Экзотический конкурс программистов


sein
"Штірліц"


Дописів: 23
Анкета
Лист

24 Ноя 2009 12:15 Basil22 писав(ла):
Delphi не стоит, суть исходников от этого нисколько не измениться. А вот Scheme посмотреть было бы интересно.

Что до меня, я бы использовал язык Forth, и тогда программа состояла бы только из одного символа - "."
(распечатать результат со стека).


Какой интересный язык! Basil22, спасибо за наводку! Значит, постфиксный калькулятор на Forth выглядит по сути дела так же как префиксный на Lisp или Scheme -- как пустая программа.

Кстати не знаете ли Вы, есть ли какие-то глубокие причины, по которым Lisp не использует постфиксную запись? Тогда он, наверное, сильно напоминал бы Forth, избежав своего перегруза скобками. Конечно, одна из возможностей Lisp'а, недоступная при обычной постфиксной записи -- это операции с разным количеством операндов, как например ( + 3 4 5 ) = 12 и ( + 3 4 ) = 7. А есть ли ещё какие-нибудь и насколько они важны?


 
24 Лис 2009 20:49
 Відповісти   Редагувати   Подякувати   Заперечити   Ігнорувати автора   Поскаржитися   Посилання 

barvinsky
"Джек"

Дописів: 11
Анкета
Лист

Понятно. Инструкции обычно не читаю :-D А почему не съедаете пробелы? По сути ничего бы не изменилось.


Не хотели бы Вы выложить свою версию? Или предложить задачу?

Свою версию не хочу - лень :-) Да и решение довольно очевидно - рекурсивно разбираем выражение по частям в порядке приоритета, т.е.

выражение = слаг +- слаг +- слаг...
слаг = множ */ множ */ множ...
множ = +-множ | число | (выражение)

И в общем все :-)

Предложить могу - для начала несложное :-)
Есть прямоугольник размерами L x W клеток (L от 1 до 100 включительно, W от 1 до 10 включительно).

Есть плитки в виде буквы L.


Надо замостить ими прямоугольник так, чтобы не осталось пустых мест


На входе 2 числа - W и L, на выходе 1 - число вариантов замощения. Если нельзя замостить, то вывести 0.

Время 1 секунда


 
27 Лис 2009 11:49
 Відповісти   Редагувати   Подякувати   Заперечити   Ігнорувати автора   Поскаржитися   Посилання 

sein
"Штірліц"


Дописів: 28
Анкета
Лист

27 Ноя 2009 04:49 barvinsky писав(ла):
Понятно. Инструкции обычно не читаю :-D А почему не съедаете пробелы? По сути ничего бы не изменилось.



Пробелы используются как разделители ради 1) простоты разбиения введённой строки на токены и 2) унификации правил ввода. У моего калькулятора три варианта: префиксный, инфиксный и постфиксный. Для префиксного и постфиксного калькулятора нужны символы-разделители (иначе не различить границу между двумя числами, следующими друг за другом).

27 Ноя 2009 04:49 barvinsky писав(ла):
Свою версию не хочу - лень :-) Да и решение довольно очевидно - рекурсивно разбираем выражение по частям в порядке приоритета, т.е.



У меня другое решение: однопроходный индуктивный (а не рекурсивный) алгоритм, основанный на переводе инфиксной строки в постфиксную.

27 Ноя 2009 04:49 barvinsky писав(ла):
Предложить могу - для начала несложное :-)


Спасибо! Если остальным будет интересна эта задача, подумаем над её решением.


 
28 Лис 2009 05:42
 Відповісти   Редагувати   Подякувати   Заперечити   Ігнорувати автора   Поскаржитися   Посилання 

Basil22
"Бальзак"

Дописів: 4
Анкета
Лист

26 Ноя 2009 13:18 barvinsky писав(ла):
Во всех выложенных решениях сходу виден косяк типа 1--1 или 1*-1 (это корректные выражения, если что). :-)

1--1 - это IMHO некорректное выражение. Если необходимо вычесть минус единицу, то пишется 1-(-1). А то что С++ допускает конструкцию i+++++i, еще ни о чем не говорит

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

Лично я просмотрел (и заценил) предложенные программы до такому критерию - насколько легко программа воспринимается в целом. Критерий взят умышленно, я сейчас на основной работе вожусь со старым кодом. И там нередко встречается проблема, когда понять что делает код еще можно, но вот разобраться ДЛЯ ЧЕГО он это делает - очень и очень трудно. В этом свете мне больше всего понравилась программа от sein, у которой отличные комментарии, причем они поясняют как суть и необходимость того, что собственно делается. Возможно их многовато (я например не люблю делать комментарии к 2..3 строчным функциям, считая что такая функция говорит сама за себя), но именно этот исходник зацепил меня.

Теперь вы высказывайтесь и обсуждайтесь

P.S. На конкурс тоже есть идея, но давайте доведем до конца старый.
Василий
1 відвідувач подякували Basil22 за цей допис
 
3 Гру 2009 12:37
 Відповісти   Редагувати   Подякувати   Заперечити   Ігнорувати автора   Поскаржитися   Посилання 

Aurora_Borealis
"Джек"

Дописів: 142
Анкета
Лист

3 Дек 2009 13:36 Basil22 писав(ла):
1--1 - это IMHO некорректное выражение.


согласна

3 Дек 2009 13:36 Basil22 писав(ла):
Прежде чем зачинать новый конкурс, я бы предложил таки закончить старый , то есть подвести его итоги.


ну у нас был не совсем конкурс, мы собирались просто высказаться и обсудить -кто, что и почему использовал -и как -где различия и все такое. Это была такая стартовая разминка.)


3 Дек 2009 13:36 Basil22 писав(ла):
В этом свете мне больше всего понравилась программа от sein, у которой отличные комментарии, причем они поясняют как суть и необходимость того, что собственно делается. Возможно их многовато (я например не люблю делать комментарии к 2..3 строчным функциям, считая что такая функция говорит сама за себя), но именно этот исходник зацепил меня.


да, sein просто молодец!!! Что касается комментов и их количества -это я его попросила всё подробно, вы не забывайте, что это вы тут все монстры, а я блондинка -но вам как раз полезно моё присутствие.
Еще у sein мне нравится то, что он выбрал такой язык, что не требуется дополнительная установка девайсов и всего такого. Я хоть и не программист, но думаю, что в конечном итоге программа должна выдавать что-то типа ехе-шника или вот такой страницы, чтоб любая блондинка могла ей пользоваться, прочитав несколько строк инструкции.

Но я еще не смотрела труды barvinsky)) посмотрю, может, в выходные.
И Саша-alexxst не вернулся кажется еще.

Basil22, а Вы не хотите тоже принимать участие в конкурсах? А не только в обсуждениях?)))


 
4 Гру 2009 10:30
 Відповісти   Редагувати   Подякувати   Заперечити   Ігнорувати автора   Поскаржитися   Посилання 

barvinsky
"Джек"

Дописів: 16
Анкета
Лист


согласна

Хорошо, а 2*-2? Или ты на бумажке всегда пишешь 2*(-2)? :-)

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

 
4 Гру 2009 10:32
 Відповісти   Редагувати   Подякувати   Заперечити   Ігнорувати автора   Поскаржитися   Посилання 

Aurora_Borealis
"Джек"

Дописів: 146
Анкета
Лист

4 Дек 2009 11:31 barvinsky писав(ла):
Хорошо, а 2*-2? Или ты на бумажке всегда пишешь 2*(-2)? :-)


так и пишу да -всегда))) и в бумажках и в статьях)

4 Дек 2009 11:31 barvinsky писав(ла):
Насколько я знаю, скобки используются для задания порядка вычисления выражения, и только. В данном случае этого не требуется - унарные операторы и так имеют больший приоритет.


ну есть некоторые правила, которые общеприняты, это как в любом языке, мы тут вот общаемся и не ставим всех знаков препинания и ломаем слова, но если пишем официальные письма или статьи -то без вопросов придерживаемся правил, которые общие для всех.
ну а не требуется и не надо))


 
4 Гру 2009 11:25
 Відповісти   Редагувати   Подякувати   Заперечити   Ігнорувати автора   Поскаржитися   Посилання 

sein
"Штірліц"


Дописів: 34
Анкета
Лист

7 Дек 2009 03:55 barvinsky писав(ла):
В случае стандартных типов
...(выражение i+++++i)...
ошибка. Будет работать вот так i+++i. Или i+(++++i). А вот так не будет (i++++)+i.


Да, и в самом деле не работает. А я, грешным делом, понял это как (i++) + (++i), т.е. как завуалированный набор предписаний:

  • (i++) = запомнить, что в конце работы надо увеличить i на единицу;
  • (++i) = увеличить немедленно переменную i на единицу
  • (i) + (i) = прибавить переменную к самой себе, т.е. удвоить

(Иначе говоря, если обозначить через x первоначальное значение переменной i, получим для самого выражения значение 2*( x + 1 ), а для переменной: i = x + 2.)

 
7 Гру 2009 11:39
 Відповісти   Редагувати   Подякувати   Заперечити   Ігнорувати автора   Поскаржитися   Посилання 

barvinsky
"Джек"

Дописів: 22
Анкета
Лист


(i++) = запомнить, что в конце работы надо увеличить i на единицу;

Не совсем так. Немедленно увеличить i на единицу, но вернуть в результате копию i в предыдущем состоянии


(++i) = увеличить немедленно переменную i на единицу

Немедленно увеличить i на единицу, вернуть ссылку на i.

А я, грешным делом, понял это как (i++) + (++i)

Тогда надо писать i++ + ++i :-) А сплошные плюсы он воспринимает как i++ ++ + i.

1 відвідувач подякували barvinsky за цей допис
 
7 Гру 2009 12:10
 Відповісти   Редагувати   Подякувати   Заперечити   Ігнорувати автора   Поскаржитися   Посилання 

sein
"Штірліц"


Дописів: 35
Анкета
Лист

7 Дек 2009 05:09 barvinsky писав(ла):
Не совсем так. Немедленно увеличить i на единицу, но вернуть в результате копию i в предыдущем состоянии


Это объяснение, вкупе с написанным выше классом, совершенно проясняет ситуацию. Спасибо.

7 Дек 2009 05:09 barvinsky писав(ла):
Немедленно увеличить i на единицу, вернуть ссылку на i.
Тогда надо писать i++ + ++i :-) А сплошные плюсы он воспринимает как i++ ++ + i.


Удивительно -- не думал что пробелы тут на что-то повлияют, но действительно i++ ++ + i работает, a i+++++i -- нет.

А почему i++ ++ + i выдаёт ошибку?




 
7 Гру 2009 18:59
 Відповісти   Редагувати   Подякувати   Заперечити   Ігнорувати автора   Поскаржитися   Посилання 
 
Зараз у темі:
Сторінки: 1 2
 Відповісти   Сторити тему   Створити статтю   Створити опитування   Підписатися   Друкувати 

Соціонічний форум » Різне Флуд дозволено » Экзотический конкурс программистов

Форма для швидкої відповіді


  Повна форма для відповіді »
Час на форумі: 11 Чер 2024 04:23




© 2004-2024 Віталій Воробйов Адміністратор