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

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





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

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

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


sein
"Штірліц"


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

20 Ноя 2009 19:39 Aurora_Borealis писав(ла):
У меня она не устанавливается!) я не могу посмотреть твою прогу и хотя бы высказаться по поводу лично своего впечатления.
А ты можешь рассказать, почему ты выбрал именно такой язык программирования, именно такое представление результатов и т.д. Какие это дает преимущества? интересно именно твоё мнение - ТИМно это или нет.



Насколько я понял, для того чтобы опробовать программу alexxst, не нужно ничего устанавливать. В папке "EtalonCalc-Release" есть запускаемый файл "EtalonCalc.exe", который должен работать в системе Windows без дополнительных установок. Я его опробовал -- программа работает хорошо, даже есть возможность оценить время, затраченное на вычисления. Вот с самим исходником я ещё не разбирался. Исходник -- это файл "EtalonCalc-Program.cs". Дефисы в кавычках надо заменить на обратные косые черты.

20 Ноя 2009 19:39 Aurora_Borealis писав(ла):
Преимущества (пользовательские) у калькулятора sein очевидны -не требуется дополнительных девайсов и плагинов, чтоб посмотреть, как что работает.



Спасибо на добром слове. Я старался.

P.S. Боюсь что я рано похвалил -- мне кажется программа делает что-то не то (или я не понимаю, как надо с ней общаться). Не видите ли вы странности в первом из следующих примеров: [imagesein1258770964]

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

1 відвідувач подякували sein за цей допис
 
21 Лис 2009 03:46
 Відповісти   Редагувати   Подякувати   Заперечити   Ігнорувати автора   Поскаржитися   Посилання 

alexxst
"Бальзак"

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

да, там описка есть в методе:
private static int calcMultExpression(FormulaParser parser)

в 114 строке надо заменить
var val2 = calcExpression(parser);
на
var val2 = calcPrimitive(parser);
P.S. На коленке писалось за 20 минут, так что не ругайте сильно)))


Почему выбрал C#, а не JavaScript.. хмм. да потому что я JavaScript не знаю, и учить его не охота. Выбрал собственно то, что под рукой оказалось, в тот момент когда писал у меня был ноут, а на нём только C# Express стоял. Ещё стоял Chez Scheme и PHP но я решил, что настолько экзотичным быть не стоит)

P.P.S. У меня сегодня самолёт, как прилечу, Аврора, специально для тебя, на Delphi вариант его напишу, и устанавливать.NET не надо будет

1 відвідувач подякували alexxst за цей допис
 
21 Лис 2009 13:45
 Відповісти   Редагувати   Подякувати   Заперечити   Ігнорувати автора   Поскаржитися   Посилання 

Aurora_Borealis
"Джек"

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

21 Ноя 2009 14:45 alexxst писав(ла):
P.P.S. У меня сегодня самолёт, как прилечу, Аврора, специально для тебя, на Delphi вариант его напишу, и устанавливать.NET не надо будет


Спасибо, Саш)) Но разобраться -почему у меня.NET не устанавливается -тоже надо бы -видимо у меня тут всё вообще криво встало. Баль же винду и линукс ставил
Удачного тебе полета и мы тебя ждем)))

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

sein
"Штірліц"


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

Программа на языке Java, полученная от моего друга:

[imagesein1258846332]
[imagesein1258846352]
[imagesein1258846370]
[imagesein1258846410]
[imagesein1258846430]
[imagesein1258846499]
[imagesein1258846546]
[imagesein1258846991]
[imagesein1258847039]
[imagesein1258847102]
[imagesein1258847115]
[imagesein1258847407]
[imagesein1258847427]
21 Ноя 2009 06:45 alexxst писав(ла):
Выбрал собственно то, что под рукой оказалось, в тот момент когда писал у меня был ноут, а на нём только C# Express стоял. Ещё стоял Chez Scheme и PHP но я решил, что настолько экзотичным быть не стоит)


Мне было бы очень интересно посмотреть на программу калькулятора, написанную на Scheme.

P.S. Если мы согласимся считать "top level" языка Scheme за консоль, то, конечно, программа префиксного калькулятора на Scheme будет пустой (так как "top level" сам по себе включает в себя все функции такого калькулятора). Поэтому мой вопрос относится в основном к инфиксному и постфиксному вариантам.



1 відвідувач подякували sein за цей допис
 
22 Лис 2009 01:36
 Відповісти   Редагувати   Подякувати   Заперечити   Ігнорувати автора   Поскаржитися   Посилання 

Basil22
"Бальзак"

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

21 Ноя 2009 14:45 alexxst писав(ла):
Ещё стоял Chez Scheme и PHP но я решил, что настолько экзотичным быть не стоит)

P.P.S. У меня сегодня самолёт, как прилечу, Аврора, специально для тебя, на Delphi вариант его напишу, и устанавливать.NET не надо будет

Delphi не стоит, суть исходников от этого нисколько не измениться. А вот Scheme посмотреть было бы интересно.

Что до меня, я бы использовал язык Forth, и тогда программа состояла бы только из одного символа - "."
(распечатать результат со стека).
Василий
 
24 Лис 2009 19:15
 Відповісти   Редагувати   Подякувати   Заперечити   Ігнорувати автора   Поскаржитися   Посилання 

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
 Відповісти   Сторити тему   Створити статтю   Створити опитування   Підписатися   Друкувати 

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

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


  Повна форма для відповіді »
Час на форумі: 22 Лис 2024 11:18




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