Форум умных людей

Задачи и головоломки => Логические задачи и головоломки => Тема начата: fortpost от Март 15, 2012, 13:16:53



Название: Автопортрет (для программистов)
Отправлено: fortpost от Март 15, 2012, 13:16:53
Напишите  программу , печатающую копию собственного исходного текста.


Название: Re: Автопортрет (для программистов)
Отправлено: Anatol. от Март 15, 2012, 13:42:32
 :o  Это логическая задача и головоломка?  :o :o :o Ой, у меня веко дергается...  :)


Название: Re: Автопортрет (для программистов)
Отправлено: Sirion от Март 15, 2012, 13:45:35
это называется куайн

я могу написать куайн на языке hq9+:

Код:
q


Название: Re: Автопортрет (для программистов)
Отправлено: Seamew от Март 15, 2012, 13:46:26
я нифига не программист.. поэтому для меня эта прогамма выглядит как-то так:

Показать скрытый текст

только не смейтесь, я старалась  :yesgirl:


Название: Re: Автопортрет (для программистов)
Отправлено: fortpost от Март 15, 2012, 14:21:54
это называется куайн

я могу написать куайн на языке hq9+:

Код:
q
Qруто!  :good:
Даже короче, чем в BASICe!


Название: Re: Автопортрет (для программистов)
Отправлено: iPhonograph от Март 15, 2012, 16:14:54
пустая программа подходит?


Название: Re: Автопортрет (для программистов)
Отправлено: Вилли ☂ от Март 15, 2012, 16:29:36
я нифига не программист.. поэтому для меня эта прогамма выглядит как-то так:

Показать скрытый текст

только не смейтесь, я старалась  :yesgirl:
Никто не съмеётся, наоборот Молодец!
Но, к сожалению, не правильно.  :show_heart:


Название: Re: Автопортрет (для программистов)
Отправлено: пестерь от Март 15, 2012, 19:05:51
я как проженный програмист отвечу - низя такую программу написать


Название: Re: Автопортрет (для программистов)
Отправлено: iPhonograph от Март 15, 2012, 19:17:12
"проженный", у тебя, похоже, ещё программилка не выросла


Название: Re: Автопортрет (для программистов)
Отправлено: Sirion от Март 15, 2012, 19:43:44
А вот мой куайн на Java. Длинный, потому что не хотел мучиться с символами перевода строки.

Код:
public class Quine {
    public static void main(String[] args) {
        String[] s = new String[14];
        String[] q = new String[5];
        q[0] = "q[";
        q[1] = "] = ";
        q[2] = ";";
        q[3] = "        ";
        q[4] = "s[";
        s[0] = "    public class Quine {";
        s[1] = "        public static void main(String[] args) {";
        s[2] = "        String[] s = new String[14];";
        s[3] = "        String[] q = new String[5];";
        s[4] = "        for(int i = 0; i < 4; i++)";
        s[5] = "            System.out.println(s[i]);";
        s[6] = "        for(int i = 0; i < 5; i++)";
        s[7] = "            System.out.println(q[3] + q[0] + i + q[1] + (char)34 + q[i] + (char)34 + q[2]);";
        s[8] = "        for(int i = 0; i < 14; i++)";
        s[9] = "            System.out.println(q[3] + q[4] + i + q[1] + (char)34 + s[i] + (char)34 + q[2]);";
        s[10] = "       for(int i = 5; i < 14; i++)";
        s[11] = "           System.out.println(s[i]);";
        s[12] = "     }";
        s[13] = "}";
        for(int i = 0; i < 4; i++)
            System.out.println(s[i]);
        for(int i = 0; i < 5; i++)
            System.out.println(q[3] + q[0] + i + q[1] + (char)34 + q[i] + (char)34 + q[2]);
        for(int i = 0; i < 14; i++)
            System.out.println(q[3] + q[4] + i + q[1] + (char)34 + s[i] + (char)34 + q[2]);
        for(int i = 5; i < 14; i++)
            System.out.println(s[i]);
    }
}


Название: Re: Автопортрет (для программистов)
Отправлено: fortpost от Март 15, 2012, 21:35:02
А вот такой тоже длинный, зато в одну строку.
Код:
class S{public static void main(String[]a){String s="class S{public static void main(String[]a){String s=;char c=34;System.out.println(s.substring(0,52)+c+s+c+s.substring(52));}}";char c=34;System.out.println(s.substring(0,52)+c+s+c+s.substring(52));}}



Название: Re: Автопортрет (для программистов)
Отправлено: iPhonograph от Март 15, 2012, 22:18:14
а вот для такого языка придумайте квин:

в языке есть единственный тип данных - строка
нельзя конвертировать ASCII-коды в строку, т.к. в языке нет чисел
нельзя брать подстроку
нельзя брать конкатенацию двух строк
можно только присваивать строки и печатать их

в языке всего 3 оператора:

1) присваивание строки:
X="строка"
присваивать можно только строки, не содержащие кавычек
Вместо X можно подставить любое однобуквенное имя переменной

2) печать строки из переменной X:
PX
можно заменить переменную X любой другой буквой

3) печать одной кавычки:
Q

программа - это одна строка (нет переносов строк, пробелов, точек с запятой и т.д.)

пример программы, печатающей слово Привет
X="Привет"PX

пример программы, печатающей фразу Привет, "Назва"
Y="Привет, "Z="Назва"PYQPZQ
кавычку нельзя включить в строку, поэтому приходится печатать одну строку, потом печатать кавычку, потом печатать другую строку и завершающую кавычку

Напишите для этого языка квин


Название: Re: Автопортрет (для программистов)
Отправлено: Sirion от Март 16, 2012, 10:14:31
А для малболга не написать?)


Название: Re: Автопортрет (для программистов)
Отправлено: Seamew от Март 16, 2012, 10:48:24
я нифига не программист.. поэтому для меня эта прогамма выглядит как-то так:

Показать скрытый текст

только не смейтесь, я старалась  :yesgirl:
Никто не съмеётся, наоборот Молодец!
Но, к сожалению, не правильно.  :show_heart:

а поподробнее? что не так?


Название: Re: Автопортрет (для программистов)
Отправлено: mayer от Март 16, 2012, 10:54:05
я нифига не программист.. поэтому для меня эта прогамма выглядит как-то так:

Показать скрытый текст

только не смейтесь, я старалась  :yesgirl:
Никто не съмеётся, наоборот Молодец!
Но, к сожалению, не правильно.  :show_heart:

а поподробнее? что не так?

Я в этом ни хрена не понимаю, но думаю что Показать скрытый текст :)


Название: Re: Автопортрет (для программистов)
Отправлено: Seamew от Март 16, 2012, 10:57:39
а зачем он?


Название: Re: Автопортрет (для программистов)
Отправлено: mayer от Март 16, 2012, 11:03:48
а зачем он?

Показать скрытый текст.  Я ж в этом нифига не шарю,если честно. :)


Название: Re: Автопортрет (для программистов)
Отправлено: Вилли ☂ от Март 16, 2012, 11:12:33
а поподробнее? что не так?

Код:
Код:
begin
i="print i"
print "begin i="print i""
print i "end"
end

Результат выполнения (даже, если закрыть глаза на все кавычки):
Цитировать
begin
i="print i"
print i
end
отсутствуют третья и пятая строчки


Название: Re: Автопортрет (для программистов)
Отправлено: ☭-Изделие 20Д от Март 16, 2012, 11:41:17
это называется куайн

я могу написать куайн на языке hq9+:

Код:
q
Было уже
(http://ks.laguna.ua/production/Bytovaja%20Tehnika/Elektrobritvy/Elektrobritvy/Philips/000018584300000.jpg)
http://nazva.net/forum/index.php/topic,5734.msg154155.html#msg154155


Название: Re: Автопортрет (для программистов)
Отправлено: ☭-Изделие 20Д от Март 16, 2012, 11:52:23
я как проженный програмист отвечу - низя такую программу написать
http://nazva.net/forum/index.php/topic,5734.msg154155.html#msg154155
(http://mtdata.ru/u13/photo25D7/20284243569-0/big.jpeg)


Название: Re: Автопортрет (для программистов)
Отправлено: Seamew от Март 16, 2012, 14:12:30
а поподробнее? что не так?

Код:
Код:
begin
i="print i"
print "begin i="print i""
print i "end"
end

Результат выполнения (даже, если закрыть глаза на все кавычки):
Цитировать
begin
i="print i"
print i
end
отсутствуют третья и пятая строчки

ну тогда как-то так?

begin
i="print a"
a="print "begin i="print a"""
print "begin i="print a" a="" a """ - вот эти последние три кавычки.. ну это я кавычку в кавычках написала)))
print a "a=""a""  end"
end


Название: Re: Автопортрет (для программистов)
Отправлено: Вилли ☂ от Март 16, 2012, 17:46:46
Ну не получиться так.

Вот посмотри свои последние строчки:
Цитировать
...
print a "a=""a""  end"
end
END тут 2 раза
а на выходе только один:

Цитировать
[тут я не разобрал, что получится, но второго END там точно нет]
end

Да и с кавычками тут не так всё просто.
И сцеплять параметры PRINT так неверно.
Но ты молодец!  :show_heart:


Название: Re: Автопортрет (для программистов)
Отправлено: moonlight от Март 16, 2012, 21:38:49
Когда-то давно писал я эту программу на Delphi. Это на C#, идея та же.
Код:
using System;
namespace Avtoportret
{
    class Program
    {
        static void Main()
        {
            char[] ch = { ' ', (char)34, 's', '[', ']', '=', ';' };
            string[] s = new string[ch.Length];
            for (int i = 0; i < s.Length; i++) s[i] = ch[i].ToString();
            string s0 = s[0];
            for (int i = 0; i < 11; i++) s0 += s[0];
            string[] ss = new string[21];
            ss[0] = "using System;";
            ss[1] = "namespace Avtoportret";
            ss[2] = "{";
            ss[3] = "    class Program";
            ss[4] = "    {";
            ss[5] = "        static void Main()";
            ss[6] = "        {";
            ss[7] = "            char[] ch = { ' ', (char)34, 's', '[', ']', '=', ';' };";
            ss[8] = "            string[] s = new string[ch.Length];";
            ss[9] = "            for (int i = 0; i < s.Length; i++) s[i] = ch[i].ToString();";
            ss[10] = "            string s0 = s[0];";
            ss[11] = "            for (int i = 0; i < 11; i++) s0 += s[0];";
            ss[12] = "            string[] ss = new string[21];";
            ss[13] = "            for (int i = 0; i < 13; i++) Console.WriteLine(ss[i]);";
            ss[14] = "            for (int i = 0; i < ss.Length; i++)";
            ss[15] = "            { Console.WriteLine(s0 + s[2] + s[2] + s[3] + i + s[4] + s[0] + s[5] + s[0] + s[1] + ss[i] + s[1] + s[6]); }";
            ss[16] = "            for (int i = 13; i < ss.Length; i++) Console.WriteLine(ss[i]);";
            ss[17] = "            Console.ReadLine();";
            ss[18] = "        }";
            ss[19] = "    }";
            ss[20] = "}";
            for (int i = 0; i < 13; i++) Console.WriteLine(ss[i]);
            for (int i = 0; i < ss.Length; i++)
            { Console.WriteLine(s0 + s[2] + s[2] + s[3] + i + s[4] + s[0] + s[5] + s[0] + s[1] + ss[i] + s[1] + s[6]); }
            for (int i = 13; i < ss.Length; i++) Console.WriteLine(ss[i]);
            Console.ReadLine();
        }
    }
}



Название: Re: Автопортрет (для программистов)
Отправлено: moonlight от Март 17, 2012, 16:36:13
а вот для такого языка придумайте квин:

в языке есть единственный тип данных - строка
нельзя конвертировать ASCII-коды в строку, т.к. в языке нет чисел
нельзя брать подстроку
нельзя брать конкатенацию двух строк
можно только присваивать строки и печатать их

в языке всего 3 оператора:

1) присваивание строки:
X="строка"
присваивать можно только строки, не содержащие кавычек
Вместо X можно подставить любое однобуквенное имя переменной

2) печать строки из переменной X:
PX
можно заменить переменную X любой другой буквой

3) печать одной кавычки:
Q

программа - это одна строка (нет переносов строк, пробелов, точек с запятой и т.д.)

пример программы, печатающей слово Привет
X="Привет"PX

пример программы, печатающей фразу Привет, "Назва"
Y="Привет, "Z="Назва"PYQPZQ
кавычку нельзя включить в строку, поэтому приходится печатать одну строку, потом печатать кавычку, потом печатать другую строку и завершающую кавычку

Напишите для этого языка квин

Могут ли P и Q быть именами переменных?
Можно ли одной строке присваивать значение другой строки?
Если да то результатом программы QP="P=Q"Q=PPPPQQ будет "P=QP=Q" ?


Название: Re: Автопортрет (для программистов)
Отправлено: iPhonograph от Март 17, 2012, 16:53:00
Могут ли P и Q быть именами переменных?
да
строка программы разбивается на последовательность операторов единственным способом, даже если переменные называются P и Q

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

Цитировать
результатом программы QP="P=Q"Q=PPPPQQ будет "P=QP=Q" ?
да



Название: Re: Автопортрет (для программистов)
Отправлено: Вилли ☂ от Март 18, 2012, 14:58:42
Когда-то давно писал я эту программу на Delphi. Это на C#, идея та же.
похоже.  :peace: