download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Задача за познавачи

<1 2 3 4 >

Автор
Съобщение
boy4o
Сря, 08.12.10, 11:09
Как ли не си блъсках главата, но всичко до което успях да стигна е извод, подобен на този, който представя и electric_cc. Задачата не може да се реши без да се използват някакви външни данни или модули. Външни поне спрямо изпълнимата част на програмата (вече имах случай да спомена, че в езици поддържащи декларативни секции и пред-дефинирани константи решението е тривиално). Това, че Каката милостиво ни позволява използването на такива средства автоматично прави цялото упражнение безинтересно.
 
Втора възможност, значително по-любопитна, виждам в използването на някой от езиците, в които няма строго разграничение между данни и програмен код. Вероятно Lisp, Пленер или да се използва Lisp-подобния механизъм за работа със списъци на Python. Уви, никога не съм се занимавал с Lisp, а за питона ще ми трябва известно време за припомняне на забравеното.
 
Впрочем, докато мъдрувах ми дойде на ум да усложня задачата с допълнителна забрана върху декларативни раздели и предефинирани данни. Все още ми е малко мътно като предположение, но имам чувството, че тогава само втората възможност би дала някакъв вариант.
electric_cc
Сря, 08.12.10, 15:36
Бойчо, на прима виста се сещам, че може да се добави една проста процедура, която да сканира съдържанието на променливата P$, откъдето ще вземе името на файла за вмъкване, маркиран в $Include независимо в коя папка се намира и да го отпечата, както е показано в примера. По този начин всичко, свързано с програмата ще бъде отпечатано. Тук както отбеляза Древен, става дума за класическите езици за програмиране, а не за съвременните обектно ориентирани зверове.
редактиран от electric_cc на 08.12.10 15:39
anonymous
Чет, 09.12.10, 04:31
кака.лара Стига се базика с хората... Тази задача, която искаш, отдавна(наистина отдавна, но ти знаеш) си има решение... Уважавай малко форумците...
редактиран от anonymous на 09.12.10 04:43
insecteater
Чет, 09.12.10, 08:57
Како, бъзикай се. Дето има една приказка - за всеки влак си има пътници. Това си е готина гимнастика за мозъка
boy4o
Чет, 09.12.10, 10:54
И, освен това, както казва Кристобал Хозевич Хунта: "Няма нищо особено да решиш задача, за която се знае, че има решение. Интересното е да намериш решението, когато се знае, че решение няма."
 
Е, в случая решение има, но си е друго човек да го намери сам. На мен пък ми стана интересно да изследвам граничните условия на задачата, за да видя кога се превръща от тривиална в нерешима.
 
Тъкмо се бях убедил, че неизползването на статични данни е такова гранично условие и - хоп - открих в едно старо списание решение от такъв тип. За съжаление, използваният език е "Рапира" и не мога да разбера твърде добре текста на програмата. На пръв поглед изглежда като списък с команди, който, обаче, сам себе си "привижда" като програма - и обратното. Дано намеря нещо за този език, за да се ориентирам по-добре в смисъла на текста.
boy4o
Пет, 10.12.10, 21:40
Естествено, в Мрежата се намира почти всичко. В частност изрових РАПИРА: Руководство программиста. Любопитен език. На практика е някакъв ранен вариант на Python, но с руска лексика и без възможности за ООП.
 
Все пак, успях да проумея, че реално текстът на програмата, която намерих преди това, отново използва статични данни. Източникът на заблудата ми е бил в особения синтаксис на езика.
 
И така, стигнал предела на личните си способности, изкарах от старите запаси класиката на Ърл Хънт "Теория на изкуствения интелект" - да видим какво са казали по въпроса умните хора...
boy4o
Нед, 12.12.10, 11:38
Оказва се, че умните хора са решили въпроса просто и елегантно.
 
Цялата задача се свежда до това да се намери такова изображение на едно множество върху друго множество, при което изображение първото множество да бъде строго подмножество на второто и обратно. Чисто абстрактно това е елементарно - да се конструира функция, която трансформира първоначалното множество в самото него. Пост доказва, че съществуват цял клас такива функции.
 
Частното решение на Тюринг е от този вид. Тюринг конструира въображаема машина, при която програмата е иманентна на конструкцията. Приблизително така, както "програмата", по която работи капанът за мишки е вградена в конструкцията му, а конструкцията на свой ред произтича от "програмата".
 
Но изчислителните системи не са абстракция нито миши капани, а реални сандъци и щайги с универсална конструкция. Няма ефективна процедура, която да установи еднозначно обратимо съответствие между RAM и монитор или между RAM и принтер и т. н. Както и да го погледнеш мониторът не е чип с памет.
 
Изводът е, че без допълнителни, независими от изчислителния процес данни, самопечатаща се програма не е възможна. Външните данни (или статични данни на самата програма) са необходими най-малкото за да "прокарат мост" между изпълнителното устройство към изобразяващото устройство.
 
Впрочем, независимо от всичко, съществуват две пълни решения на задачата, без употреба на никакви други данни, освен текста на самата програма. Едното ни води през парадокса на Ръсел и Голямата теорема на Гьодел на непълнотата към дебрите на висшата алгебра, а второто е очевидно-очевадно...
angelicstar
Нед, 12.12.10, 14:40
Ами много ясно!

Та задачата е такава:
Да се напише програма, която да отпечатва собствения си текст.
Търси се пълна идентичност на входния и изходния текст.

Никъде не се казва къде да се отпечати програмата. Не се казва за екран, принтер и въобще. Нищо не пречи да се изпечати в рамта. Програмата си е в рамта и само я преписваме сама върху себе си.
Много лесно става направо на езика на процесора. Хващаме колкото трябва байта и ги копиме върху тях си.

Тука не става да пусна Debug та да дам сорс ама който разбира загрява.

boy4o
Нед, 12.12.10, 20:51
Звучи добре, но не това имах предвид.
 
Може само да съжаляваме, че Кака вече не е сред нас (олеле! звучи като некролог), за да каже приема ли такова решение. Аз, все пак, бих отбелязал съвсем определения смисъл, който имат в българския език думите "печат", "отпечатване" и сродните на тях. Без съмнение, не се подразбира употреба на "рамта".
angelicstar
Вто, 14.12.10, 14:18
Ами сетих се идиалното решение. Абсолютно отговаря на всичките условия и е най-малкото възможно.
Това му е сорса.

Става за всички езици и върви на всякакво компи.

stoqncho
Вто, 14.12.10, 15:52

RE: Задача за познавачи

Дам, готин сорс и като го гледам мисля, че нямаш грешки.

P.S. Сега и boy4o си отиде...

electric_cc
Вто, 14.12.10, 17:27
В условието на Каката изрично е написано да отпечатва. Това и Бойчо го е разтълкувал и щом е текст, означава на хартия да се отпечатва. Ако ще се копира върху самия себе си в RAM означава нищо да не се прави, защото практически няма да има промяна нито в паметта нито където и да било другаде и по принцип по нищо няма да се разбере въобще правено ли е нещо.
редактиран от electric_cc на 14.12.10 17:29
angelicstar
Вто, 21.12.10, 14:22
Ами понеже стана в началото дума за "Prolog" и намерих на 1 място, че интерпретаторът му и си се пачати самичък и сам си се интерпретира. Та ми стана интересно и си качих SWI-Prolog да го разгледам.
Само дето не мога сега да намеря никакво разбрано ръководство за него. Имам и Visual Prolog ама много ми гърми и не става.
Та някой да даде някакъв хубав туториял за езика. Най-хубаво на български, френски или руски. Английски си намерих много ама съм зле по инглиш.

<1 2 3 4 >

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.