LINUX.ORG.RU

Task 1


0

1

На тот случай, если заданий никто не даст, пишу, что придумал с утра( по большей части, чтоб не забыть, а также, чтоб учесть все недостатки ).

Пусть будет текстовый файл такого формата:

object A
{
	color = "red";
	value = 100!;
	circle;
}

object B : A, C
{
	color = "green";
	circle;
}

object C
{
	value = time();
	square;
}

object D
{
	color = "blue";
	value = 100 + A.value;
	value2 = C.value * value;
}

show circle;
show A.value;
show value > 100!;

думаю задача очевидна, но конечно же поподробней:

object A
{
	color = "red";
	value = 100!;
	circle;
}

это описание объекта( не типа, а именно объекта ), у него есть поля, которые бывают трех типов:

circle - признак, не имеет значения, просто означает, что A это круг

color = «red» - текстовое поле со значением «red»

value = 100!; - числовое поле( о нем будет дальше )

Смотрим дальше:

object B : A, C
{
	color = "green";
	circle;
}

это наследование, тут все просто - все поля из A, C теперь есть и в B, если есть одинаковые поля, то приоритетность - B, С, А( по убыванию ), т.е. у B color = «green», а value = time()

Про чиcловые поля - они задаются в виде выражений, допустимые операции +-*/ и !( факториал ), естественно присутствуют скобки (), в качестве операндов любые целые числа( в десятичной системе ), также time() ( то же, что и в С ) - чтоб разнообразить результаты на итерациях, а также любое числовое значение из этого/другого объекта( A.value etc. ), в случае рекурсии в выражениях - возвращать 0

Последняя часть:

show circle;
show A.value;
show value > 100!;

тут все просто - выводит на экран объекты удовлетворяющие условию или их свойства show circle - у которых есть поле circle show A.value - выводит значение любого выражения, например A.value + B.value * 2 show value > 100!; - состоит из «имя поля» + «операция сравнения» + «аргумент»( любое выражение ), ищет все объекты по условию

имена объектов и свойств состоят только из a..A, z..Z, 0..9, имена регистрозависимые

текстовые значения могут быть длинной до 65535 символов

П.С. наверняка что-то упустил так как пишу все с головы, жду критики, вопросов, уточнений условия и т.п.

П.П.С. хотелось бы, чтоб mv тоже попробовал после утверждения задания( если таки будет оно, а не другое ) решить его на Lisp( задание вроде под Lisp подходит ) - заодно и скорость работы программ можно будет сравнить

П.П.П.С. думаю полезно в текстовый файл добавить два параметра:

iterations = 100000

log = off

★★★★

show circle - у которых есть поле circle
show A.value - выводит значение любого выражения, например A.value + B.value * 2
show value > 100!; - состоит из "имя поля" + "операция сравнения" + "аргумент"( любое выражение ), ищет все объекты по условию

сбились каретки

lester ★★★★
() автор топика

1) наверное, неплохо бы было дать ссылку на исходную тему, ибо не все её читали.

2) А Вы теперь всегда комментарии будете в отдельную тему выносить?

3) А что сделать-то надо?

rual_ilmarranen
()
Ответ на: комментарий от rual_ilmarranen

> 1) наверное, неплохо бы было дать ссылку на исходную тему, ибо не все её читали.

http://www.linux.org.ru/view-message.jsp?msgid=3855459

> 2) А Вы теперь всегда комментарии будете в отдельную тему выносить?


см. следующую тему ( шутка )

> А что сделать-то надо?


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

lester ★★★★
() автор топика
Ответ на: комментарий от rual_ilmarranen

> по форматированию создалось впечатление, что это часть текстового файла.

это там и будет - чтоб проверять быстродействие при большом кол-ве итераций, потому вводить руками не получится

lester ★★★★
() автор топика

факториал пожалуй лишний - конечно-же программа должна работать на голом С++, т.е. пришлось бы включать реализацию работы с большими числами - а это уже другая задача, вобщем вместо факториалов пусть будет sqrt(), все числа должны оставаться целыми

lester ★★★★
() автор топика
Ответ на: комментарий от jtootf

> ты всё-таки исключительно фееричен

это если писать на С++( ну STL конечно тоже можно ), а то потом твой код прийдется два дня собирать со всякими бустами и т.п.

П.С. где справки?

lester ★★★★
() автор топика
Ответ на: комментарий от lester

>это если писать на С++( ну STL конечно тоже можно ), а то потом твой код прийдется два дня собирать со всякими бустами и т.п.

это ты сейчас кому вообще написал? или тебе напомнить изначальную постановку задачи как language independent? да, давайте её ещё подкрыжим немного, потому как в C++ нет этого и этого (а ещё вот этого), а то нехорошие лисперы (или кто там ещё) откусят 10см ЧСВ. шапито!

>П.С. где справки?

у тебя снова испортилась память? на сегодня ничего не обещалось, свободен

jtootf ★★★★★
()
Ответ на: комментарий от lester

>насчет задачи - согласен или есть возражения?

задача хорошая, но скажи на милость - сколько мне ждать утверждения ТЗ? а то вдруг ты его в комментариях ещё неделю уточнять будешь

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

> это ты сейчас кому вообще написал? или тебе напомнить изначальную постановку задачи как language independent? да, давайте её ещё подкрыжим немного, потому как в C++ нет этого и этого (а ещё вот этого), а то нехорошие лисперы (или кто там ещё) откусят 10см ЧСВ. шапито!

что ж ты нервный такой, ну пиши на лиспе - я тебе ни слова не скажу

> у тебя снова испортилась память? на сегодня ничего не обещалось, свободен


к твоему званию тугодума добавилось еще одно - трепло, иначе ты хотя бы обозначил, когда исполнишь данное обещание

lester ★★★★
() автор топика
Ответ на: комментарий от lester

>что ж ты нервный такой, ну пиши на лиспе - я тебе ни слова не скажу

может ещё раз перечитаешь что я написал? а может ещё и подумаешь? это не больно, честное слово

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

> может ещё раз перечитаешь что я написал? а может ещё и подумаешь? это не больно, честное слово

кроме попытки оскорбить смысла в твоем сообщении нет, вобщем если ты будешь писать на С/С++ - напишешь потом, что тебе надо было из сторонних библиотек, раз ты без них никак

lester ★★★★
() автор топика
Ответ на: комментарий от lester

>если ты будешь писать на С/С++ - напишешь потом, что тебе надо было из сторонних библиотек, раз ты без них никак

epic facepalm. ладно, проехали, не напрягай мозг

лучше скажи, что с заданием? это окончательный вариант, внезапных изменений "фича N, пожалуй, лишняя" уже не будет?

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

> задача хорошая, но скажи на милость - сколько мне ждать утверждения ТЗ?

ты же и утверждай, описание явно не полное - потому в случае, если ситуация не описана - первый идешь сюда и пишешь: "в ТЗ не указано - буду делать так-то", тогда я прочитаю и сделаю также( так как не успел первый выбрать )

lester ★★★★
() автор топика
Ответ на: комментарий от jtootf

> лучше скажи, что с заданием? это окончательный вариант, внезапных изменений "фича N, пожалуй, лишняя" уже не будет?

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

П.С. ес-но в случае ошибки синтаксиса в тексте файла - выводить сообщение об ошибке и строке, после чего завершить выполнение

lester ★★★★
() автор топика
Ответ на: комментарий от jtootf

> да ехай, ехай, тебе-то кто мешает? :)

давай пока придерживаться нормального стиля общения, а то у тебя вместо одного слова по два предложения

lester ★★★★
() автор топика
Ответ на: комментарий от jtootf

насчет тестов - никто нам их не напишет, потому по десятку от каждого, потом прогоняем на всех

lester ★★★★
() автор топика

не написал в ТЗ: если есть ссылка на еще не описанный объект( например object B : A, C ) - это не ошибка, все должно отрабатываться

lester ★★★★
() автор топика

> в случае рекурсии в выражениях - возвращать 0

А не логичнее ли выдавать ошибку?

Deleted
()
Ответ на: комментарий от jtootf

как оцениваешь по времени задачу( сколько времени тебе понадобится)?

lester ★★★★
() автор топика

"имя поля" + "операция сравнения" + "аргумент"( любое выражение ) - список операций сравнений: <,>,=,<>,>=,<=

lester ★★★★
() автор топика
Ответ на: комментарий от lester

>кроме попытки оскорбить смысла в твоем сообщении нет, вобщем если ты будешь писать на С/С++ - напишешь потом, что тебе надо было из сторонних библиотек, раз ты без них никак

Если автосгенерить разбор всего этого дела C++ - плагином к ANTLR это типа будет "использование сторонних библиотек" ?

Absurd ★★★
()
Ответ на: комментарий от Absurd

в принципе нет - распарсить тут и руками не сложно

lester ★★★★
() автор топика

А если так:

object A
{
color = "red";
value = 100!;
circle;
}

object A
{
color = "green";
}

Ошибка? Или объект меняется соответственно?

smh ★★★
()
Ответ на: комментарий от smh

Если не ошибка, то есть объекты "открытые", то что будет в такой ситуации:

object A
{
color = "red";
value = 100!;
circle;
}

object B : A
{
color = "blue";
}

object A
{
color = "green";
}

B.color == "blue"? Или B.color == "green"?

smh ★★★
()

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

lester ★★★★
() автор топика

пока работает такое:

object A
{
   color = "red"; circle;
}

object B : A, C
{
   color = "green";
   value1 = sqrt( 20 ) + time();
}

object D : B, F
{
   color = "blue";
   value2 = C.value * value;
   value3 = 111;
}

object C { square; }
object E : D {}
object F { door; }

show door;

получаем результат( для дебужного варианта ):

Object A
        color = "red"
        circle
Object B : A, C
        color = "green"
        value1 = sqrt(20)+time()
        circle from A
        square from C
Object D : B, F
        color = "blue"
        value2 = C.value*value
        value3 = 111
        value1 = sqrt(20)+time() from B
        circle from B
        square from B
        door from F
Object C
        square
Object E : D
        color = "blue" from D
        value2 = C.value*value from D
        value3 = 111 from D
        value1 = sqrt(20)+time() from D
        circle from D
        square from D
        door from D
Object F
        door

Have property door:
D
E
F

завтра уже сделаю вычисление выражений

lester ★★★★
() автор топика
Ответ на: комментарий от lester

> я надеюсь вы решили принять участие? :)

Ага. Вечером гляну и может даже чего напишу. :-)

smh ★★★
()

jtootf, ты как там? чтоб знать - дописывать сегодня или можно отложить

lester ★★★★
() автор топика
Ответ на: комментарий от lester

>чтоб знать - дописывать сегодня или можно отложить

ты у меня теперь на каждый шаг разрешения спрашивать будешь? это твоё время и твоя программа. выбирай сам

>jtootf, ты как там?

вроде ничего, не кашляю, спасибо за любопытство

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

> ты у меня теперь на каждый шаг разрешения спрашивать будешь? это твоё время и твоя программа. выбирай сам

спрошу конкретней - сколько времени отведем для решени задачи? еще день/два/три?

lester ★★★★
() автор топика

Если считаешь, что задача "долгая", можно урезать до:

object A
{
   fruit;
   green;
}

object B : A, C
{
   citrus;
}

object C
{
   edible;
}

show fruit;

lester ★★★★
() автор топика
Ответ на: комментарий от lester

>сколько времени отведем для решени задачи? еще день/два/три?

я за задачу ещё не брался, не до неё было; в любом случае, лично меня больше интересует качество результата, так что твои сроки не ограничены ничем

anyway, одного дня от текущего момента уж точно достаточно

jtootf ★★★★★
()
Ответ на: комментарий от lester

>Если считаешь, что задача "долгая"

нет, не считаю

jtootf ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.