Пользователь
0,0
рейтинг
10 ноября 2009 в 15:39

Разработка → Цепной квайн

Один японец написал забавный цепной квай.
Что такое квайн?.


# ruby
l=92.chr;eval s="s=s.dump[r=1..-2].gsub(/("+l*4+"){4,}(?!\")/){|t|'\"+l*%d+\"'%(t.size/2)};5.times{s=s.dump[r]};puts\"# python\\nprint(\\\"# perl\\\\nprint(\\\\\\\"# lua"+l*4+"nprint("+l*7+"\"(* ocaml *)"+l*8+"nprint_endline"+l*15+"\"-- haskell"+l*16+"nimport Data.List;import Data.Bits;import Data.Char;main=putStrLn("+l*31+"\"/* C */"+l*32+"n#include<stdio.h>"+l*32+"nint main(void){char*s[501]={"+l*31+"\"++intercalate"+l*31+"\","+l*31+"\"(c(tail(init(show("+l*31+"\"/* Java */"+l*32+"npublic class QuineRelay{public static void main(String[]a){String[]s={"+l*31+"\"++intercalate"+l*31+"\","+l*31+"\"(c("+l*31+"\"brainfuck"+l*64+"n++++++++[>++++<-]+++++++++>>++++++++++"+l*31+"\"++(concat(snd(mapAccumL h 2("+l*31+"\"110"+l*31+"\"++g(length s)++"+l*31+"\"22111211100111112021111102011112120012"+l*31+"\"++concatMap("+l*32+"c->let d=ord c in if d<11then"+l*31+"\"21002"+l*31+"\"else"+l*31+"\"111"+l*31+"\"++g d++"+l*31+"\"22102"+l*31+"\")s++"+l*31+"\"21002111010120211222211211101000120211021120221102111000110120211202"+l*31+"\"))))))++"+l*31+"\","+l*63+"\""+l*64+"n"+l*63+"\"};int i=0;for(;i<94;i++)System.out.print(s[i]);}}"+l*31+"\")))))++"+l*31+"\",0};int i=0;for(;s[i];i++)printf("+l*63+"\"%s"+l*63+"\",s[i]);puts("+l*63+"\""+l*63+"\");return 0;}"+l*31+"\");c s=map("+l*32+"s->"+l*31+"\""+l*63+"\""+l*31+"\"++s++"+l*31+"\""+l*63+"\""+l*31+"\")(unfoldr t s);t[]=Nothing;t s=Just(splitAt(if length s>w&&s!!w=='"+l*31+"\"'then 501else w)s);w=500;f 0=Nothing;f x=Just((if x`mod`2>0then '0'else '1'),x`div`2);g x= reverse (unfoldr f x);h p c=let d=ord c-48in(d,replicate(abs(p-d))(if d< p then '<'else '>')++"+l*31+"\"."+l*31+"\");s="+l*31+"\"# ruby"+l*32+"n"+l*31+"\"++"+l*31+"\"l=92.chr;eval s=\"+(z=l*31)+\"\\\"\"+s+z+\"\\\""+l*31+"\"++"+l*31+"\""+l*32+"n"+l*31+"\""+l*15+"\""+l*7+"\")"+l*4+"n\\\\\\\")\\\")\"########### (c) Yusuke Endoh, 2009 ###########\n"



Запускать надо так:

ruby QuineRelay.rb > QuineRelay.py
python QuineRelay.py > QuineRelay.pl
perl QuineRelay.pl > QuineRelay.lua
lua QuineRelay.lua > QuineRelay.ml
ocaml QuineRelay.ml > QuineRelay.hs
runghc QuineRelay.hs > QuineRelay.c
gcc -Wall -o QuineRelay QuineRelay.c && ./QuineRelay > QuineRelay.java
javac QuineRelay.java && java QuineRelay > QuineRelay.bf
beef QuineRelay.bf > QuineRelay.ws
wspace QuineRelay.ws > QuineRelay.unl
unlambda QuineRelay.unl > QuineRelay2.rb

Исходная программа на руби генерит прогу на питоне, которая генерит прогу на перле, которая генерит прогу на Lua, которая генерит прогу на окамле, которая генерит прогу на хаскелле, которая генерит прогу на Ц, которая генерит прогу на яве, которая генерит прогу на брейнфаке, которая генерит прогу на Whitespace, которая генерит прогу на Unlambda, которая генерит исходную прогу снова на руби.


Взято тут

UP0: еще немножко
UP1: Взять подправленный скрипт catup
UP2: Подправил html, теперь скрипт должен запускаться.
UP3: Промежуточные варианты
С pastebin убрали, слишком много заходов ^_^
Vladimir Vesna @icCE
карма
52,2
рейтинг 0,0
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (91)

  • +80
    Дайте мне этой травы ))
    • +6
      похоже на ЛСД)
      • +3
        Грибы… Это точно грибы.
        • +8
          нет товарищи, это ruby :)
          • –1
            не, это синтетика
            • +5
              тут должна быть цепь
              Дайте мне этой травы))
  • +10
    От себя добавлю, что для меня как не для программиста, это снесло голову :)
    За copy-paste приношу извенения, но не удержался!
    • +28
      программистам от этого зрелища ещё хуже
  • +3
    тут должен быть смайлик «бьётся головой ап стену»…
  • +49
    автор этой программы круче даже эльфа 80 уровня.
    • –1
      «Эльф 80 уровня» какае-то знаменитость или чем он крут?
  • +2
    Автор крут неимоверно. Японцы — они такие.
    • +4
      японцы они такие японцы
  • +4
    Интересно у него мозг в вечную рекурсию не ушёл когда он это придумал…
  • 0
    программирую на флеше, встречал исходник флеш сайта ( средней руки, неплохой такой сайт) написанный в 1 строку ( не помню, экранов 50 листал), автор шедевра попал в психбольницу, надо было внести небольшие изменения, в итоге чуть сам туда не загремел =)
    • НЛО прилетело и опубликовало эту надпись здесь
      • +3
        Ага, а автор загремел в псих.лечебницу когда понял что не сохранил не сжатые исходники :)
        З.Ы. Флеш он-же компилируемый, зачем там пробелы вырезать?
      • 0
        fla файлы не подвергаются обфускации… =)
        обфускации подвергаются готовые swf-ки дабы осложнить жизнь декомпляторам swfок.
  • –8
    могу поспорить, ч то у автора нет девушки:)
    • –7
      или это у него как раз после общения с его девушкой %)
    • +8
      потому что он по-японски просто так писать и говорить не умеет: он говорит по китайски, описывая словами графическое начертание арабской вязи, которая в свою очередь описывает начертание армянского текста и т.д.
  • +1
    Да он просто псих!
  • +1
    в шоке
  • +2
    Блин, да Вы круче меня, Сэнсэй!
    • +1
      *пошел учить ruby*
      • +5
        а также Python, Perl, Lua, OCaml, Haskell, C, Java, BrainF**k, Whitespace, Unlambda…
        • +1
          BrainF**k я уже знаю :))))
  • +13
    Один русский продолжил.
    • +2
      я его знаю зовут Кирилл )
      поддержать его что ли )))
  • 0
    Красота!
  • +4
    добавьте продолжение
    zw0rk.blogspot.com/2009/11/blog-post_09.htm

    ps теги использовать не могу, извините
    • 0
      К сожалению, страница, которую вы искали в этом блоге, не существует.
    • +2
      zw0rk.blogspot.com/2009/11/blog-post_09.html

      букву l в конце забыли :)
      • +2
        спасибо, май бэд :)
  • 0
    И кто рискнул это запустить?
    • +1
      я запускал руби и питон, остальное ставить было проблематично.
      • 0
        Стало выдавать ошибку, попробую найти источник откуда запускалось.
        • 0
          Исправил, все работает теперь.
  • +4
    Это пять. Я думаю резюме у него зачетное.
  • +1
    В Японии кризис?
  • 0
    Это что-то! :) Было бы интересно для наглядности все промежуточные генерирующиеся тексты посмотреть. Может сейчас кто-нибудь скомпилировать и выложить?
  • –1
    И не «один», а Юске Эндо, судя по предпоследней строчке.
  • –9
    тоже хочу, чтобы мне нечего было делать.
    • +3
      Вот уже не скажи. Подобные головоломки очень развивают, поднимают навыки на более высокий уровень.
      А вот сидеть и жаловаться «если бы у меня было время и бла-бла-бла...» — действительно от нечего делать.
      Неужели если бы у тебя был год свободного времени, ты бы смог сделать это?
      • –8
        если бы у меня было время, я бы точно дурью не маялся.
        • +3
          А почему ты считаешь что это дурь?
          • –11
            Сколько тебе лет, мальчик?
            • +3
              Мне 5 лет, это что-то поменяло?
              Я не спрашиваю сколько лет тебе — я спрашиваю: «Почему ты считаешь что это дурь?».
              Или ты свое мнение никак не можешь обосновать?
              • –6
                Ты лучше задайся вопросом: зачем это сделал автор, сколько ему понадобилось на это времени. Может и спрашивать желание отпадёт.
                • +1
                  1)Для самообразования, развития навыков, самоутверждения, для интереса, в конце концов. Если с меркантильной точки зрения — то это очень неплохой пункт для резюме.
                  2)Его время — как хочет так и тратит. Понятие хобби тебе, надеюсь, знакомо?
                  Так что называть это дурью могут только весьма ограниченные люди, а по-простому — УГ.
            • +3
              Браво, очень по-взрослому завершили дискуссию!
  • 0
    Просто жесть! До такого додуматься и так реализовать… Красиво, ничего не скажешь :)
  • 0
    А кто-нибудь проверял данный текст? У всех удачно цепочка проходит?
    • 0
      Щас попробовал выдает ошибку, щас буду разбиратся.
      • +2
        там пришлось слегка поправить исходник, чтобы его блогспот смог съесть и опубликовать (у него валидатор хитрый). и я и catap запустили, кстати.
        • +2
          поэтому для запусков лучше всего пользовать исходный текст японца, либо catap-овский.
          • 0
            ахха щас поправлю + ссылку на файлек.
    • +1
      Все подправил, должно работать.
  • 0
    Без бутылки и не разберешь
  • 0
    Вспоминается «Угадай, что в руке? — Телевизор! — Правильно, а сколько?»

    Как-то не верится, что это придумал человек. Хотя, может, услышал, что теорему Ферма уже доказали, и от злости…

    Но крышеснос качественный!
    • +2
      В доказательство теоремы Ферма огромный вклад внесли японцы, опять же. :)
      • 0
        Ютака Танияма, если быть точным.
  • –2
    Копипаста из ПедиВикии

    Этот код на Ruby генерирует код на Python, который генерирует код на Perl, который генерирует код на Lua, который генерирует код на Ocaml, который генерирует код на Haskell, который генерирует код на C, который генерирует код на Java, который генерирует код на Brainfuck, который генерирует код на Whitespace, который генерирует код на Unlambda, который опять генерирует этот код на Ruby.

    • +2
      и? сегодня добавили в википедию, и сегодня удалили, что вы хотели этим сказать непонятно.
      • +2
        не посмотрел на дату — каюсь 8)
  • 0
    Да, это уникально). Также как и эзотерические языки программирования…
    Узнал об этом буквально вчера, листая энциклопедию, долго удивлялся…
  • +1
    Я думал, так программирует только Чак Норрис ;)
  • 0
    Сижу и думаю, а как бы мне научиться такие штучки делать? )))
    • +1
      Самое сложно здесь — научиться ставить себе такие задачи. Я бы вот именно до постановки задачи не допетрил бы в жизни сам :) Завидую именно этому умению.
  • 0
    ого джедаи…
  • 0
    В доме который построил Джек…
  • НЛО прилетело и опубликовало эту надпись здесь
    • +8
      (Если кто не в курсе — это математический куайн. Функция, график которой выглядит как растеризованное изображение самой функции.)

      Искренне ваш, К. О.
    • 0
      Здорово. Это еще сложнее для понимания :)
    • +1
      Эта формула сама по себе не квайн. Чтобы получить квайн нужно использовать специальные коэффициенты, ограничивающие x и y. Там в Википедии приведен коэффициент K. Вот в нем то и кроется вся загадка. В нем картинка закодирована, а формула только ее отобразить помогает. Так можно любое изображение получить, поменяв коэффициенты.
      ___________________
      С уважением, зам. К.О.
      • НЛО прилетело и опубликовало эту надпись здесь
  • +2
    Запустил все. Действительно очень крутая штука.
    Вот ссылка на папку, в которой все запускал, можно посмотреть на промежуточный код.
    • 0
      Добавил в тему.
  • +6
    Я один сначала прочитал заголовок как «Цепной кавай»? :)
    • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      В общем то, это одно и то же ^_^"
  • 0
    я когда первый раз прочитал про квайн в книге «Алгоритмические трюки для программистов» так решил себе татуировку в виде квайна на Си набить. Суть, что 2 ласточки несут в клювах ленточку, на которой код квайна)) но еще что-то никак не созрею для этого. Пока только в идеях.
    • 0
      Сделай временную.
      • 0
        временных татту не бывает, юзернейм
        • 0
          Я забыл точное название, делали на 1 год. Если надо можно поискать.
          • 0
            перманентный макияж или татуаж
  • 0
    вы бы хоть написали, что мой скрипт расширенный, и так, как указали, не запуститься ниразу. Читать подробности тут: catap.ru/blog/2009/11/09/one-japan-man/

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.