2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2, 3, 4  След.
 
 Получила ли программа свой же код на вход?
Сообщение09.07.2014, 10:27 


07/07/14
17
Можно ли написать программу, которая говорит передали ей или нет её собственный код? Т.е. такая программа $X$, что $X(X)=1$ и $X(P)=0$ для любых $P\neq X$.

 Профиль  
                  
 
 Re: Получила ли программа свой же код на вход?
Сообщение09.07.2014, 10:47 


23/05/12

1245
Можно. И это не сложно реализовать.

-- 09.07.2014, 11:54 --

Есть похожая задача в книге Уэзерелл "Этюды для программистов": написать программу, печатающую свой собственный текст. Можно попробовать для начала решить данную задачу.

 Профиль  
                  
 
 Re: Получила ли программа свой же код на вход?
Сообщение09.07.2014, 10:56 
Заслуженный участник


02/08/11
6892
Это тот же quin. Только printf заменить на scanf и strcmp.

 Профиль  
                  
 
 Re: Получила ли программа свой же код на вход?
Сообщение09.07.2014, 11:04 


07/07/14
17
Используется синтаксис Javascript
function f(p){return f.toString()===p?1:0;}

Да, я уже сам придумал.

 Профиль  
                  
 
 Re: Получила ли программа свой же код на вход?
Сообщение09.07.2014, 11:08 
Заслуженный участник


02/08/11
6892
tenmin, это читерство. Если хотите честно, надо без рефлекшена.

 Профиль  
                  
 
 Re: Получила ли программа свой же код на вход?
Сообщение09.07.2014, 14:28 


30/12/10
155
Это в общем случае невозможно (по крайней мере для обычной машины Тьюринга). Нужна вторая программа, которая будет осуществлять сравнение кода первой программы и входных данных.

Классическая система или переменная не может "знать" собственное значение.

 Профиль  
                  
 
 Re: Получила ли программа свой же код на вход?
Сообщение09.07.2014, 14:30 


01/12/11

1047
Что такое "код программы" - это текст на исходном языке или машинный код после трансляции?

 Профиль  
                  
 
 Re: Получила ли программа свой же код на вход?
Сообщение09.07.2014, 20:55 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Если понимать в смысле квайна — текст на исходном языке.

 Профиль  
                  
 
 Re: Получила ли программа свой же код на вход?
Сообщение09.07.2014, 21:04 
Заслуженный участник


02/08/11
6892
zt09 в сообщении #885741 писал(а):
Это в общем случае невозможно (по крайней мере для обычной машины Тьюринга).
Это в общем случае элементарно делается. Вот например программа, выводящая свой текст (C#):

(quin)

Код:
using System;
using System.IO;
class Program {
static void PatchProgramText(ref string programText) {
programText += "\"" +
programText
.Replace("\\", "\\\\")
.Replace("\"", "\\\"")
.Replace(Environment.NewLine, "\" + Environment.NewLine +" + Environment.NewLine + "\"") +
"\";" + Environment.NewLine +
"PatchProgramText(ref programText);" + Environment.NewLine +
"Console.Write(programText);" + Environment.NewLine +
"Console.ReadLine();" + Environment.NewLine +
"}" + Environment.NewLine +
"}" + Environment.NewLine;
}
static void Main(string[] args) {
string programText =
"using System;" + Environment.NewLine +
"using System.IO;" + Environment.NewLine +
"class Program {" + Environment.NewLine +
"static void PatchProgramText(ref string programText) {" + Environment.NewLine +
"programText += \"\\\"\" +" + Environment.NewLine +
"programText" + Environment.NewLine +
".Replace(\"\\\\\", \"\\\\\\\\\")" + Environment.NewLine +
".Replace(\"\\\"\", \"\\\\\\\"\")" + Environment.NewLine +
".Replace(Environment.NewLine, \"\\\" + Environment.NewLine +\" + Environment.NewLine + \"\\\"\") +" + Environment.NewLine +
"\"\\\";\" + Environment.NewLine +" + Environment.NewLine +
"\"PatchProgramText(ref programText);\" + Environment.NewLine +" + Environment.NewLine +
"\"Console.Write(programText);\" + Environment.NewLine +" + Environment.NewLine +
"\"}\" + Environment.NewLine +" + Environment.NewLine +
"\"}\" + Environment.NewLine;" + Environment.NewLine +
"}" + Environment.NewLine +
"static void Main(string[] args) {" + Environment.NewLine +
"string programText =" + Environment.NewLine +
"";
PatchProgramText(ref programText);
Console.Write(programText);
Console.ReadLine();
}
}
Переделать её в программу, сравнивающую свой текст с введённым, очень просто.

-- 09.07.2014, 22:23 --

Skeptic в сообщении #885742 писал(а):
Что такое "код программы" - это текст на исходном языке или машинный код после трансляции?
Между этими вариантами нет принципиальной разницы.

 Профиль  
                  
 
 Re: Получила ли программа свой же код на вход?
Сообщение09.07.2014, 23:11 
Заслуженный участник


11/05/08
32166
warlock66613 в сообщении #885911 писал(а):
Между этими вариантами нет принципиальной разницы.

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

 Профиль  
                  
 
 Re: Получила ли программа свой же код на вход?
Сообщение09.07.2014, 23:42 
Заслуженный участник


27/04/09
28128
Но ведь для каждой заблагорассуженности есть конкретный код программы. Для любого конкретного тьюринг-полного языка задача корректна и отвечается словом «да». :-) Хоть машинный, хоть высокого уровня — и не важно, что какой-нибудь транслятор не переведёт программу на втором в программу на первом или другом втором, или ещё как-нибудь.

 Профиль  
                  
 
 Re: Получила ли программа свой же код на вход?
Сообщение09.07.2014, 23:57 
Заслуженный участник


11/05/08
32166
arseniiv в сообщении #886015 писал(а):
Но ведь для каждой заблагорассуженности есть конкретный код программы.

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

 Профиль  
                  
 
 Re: Получила ли программа свой же код на вход?
Сообщение10.07.2014, 12:23 
Заслуженный участник


02/08/11
6892
ewert в сообщении #886020 писал(а):
А в законах, по которым сей код строится.
Код не строится по законам. Код пишется программистом (иногда опосредовано, через компилятор) так как ему хочется.

 Профиль  
                  
 
 Re: Получила ли программа свой же код на вход?
Сообщение10.07.2014, 17:39 


26/06/14
83
ewert в сообщении #886001 писал(а):
Поэтому исходная постановка задачки, без уточнений -- бессмысленна.


Знаете, что такое мат. индукция? Это доказательство бесконечной серии утверждений с помощью форумлирования алгоритма создания доказательства утверждения под любым номером.

У всех Тьюринг-полных языков есть особенности, которые делают их равнозначными МТ. Значит, совершенно точно, есть алгоритм решения поставленной в первом посте задачи для любого полного языка так же, как он есть для МТ.

 Профиль  
                  
 
 Re: Получила ли программа свой же код на вход?
Сообщение10.07.2014, 22:30 


30/12/10
155
warlock66613
Согласен, я по сути неверно ответил на поставленный вопрос. Из того, что это нельзя сделать в общем случае, вовсе не следует, что этого нельзя сделать для конкретной программы, т.е. для случая X - константа, что в общем-то и подразумевается в условии задачи.

Хотя, при очень сильном желании здесь можно и придраться к условию.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 53 ]  На страницу 1, 2, 3, 4  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group