Квітка замовлень


10

Напишіть програму, яка при запуску різними мовами виводить різну байтову перестановку коду в кожній мові. Точний вихідний код вважається однією перестановкою.

Тут "різною мовою" можуть бути різні версії (Py 2 і Py 3) або різні стандартні прапори. Різний вихід вимушує різну версію.

Правильні правила квоти застосовуються для програми на кожній мові. Ваш рахунок обчислюється як (Language count)^6/(Code length in bytes), причому більший бал буде кращим.

Зразок:

Якщо ваш код працює AABі працює трьома різними мовами, повертається ABA, AABі AABтоді його оцінка дорівнює 2^6/3(лише одна з двох AABпідрахунків). Це добре, якщо ABAбезглуздо.


1
Що вважається різною мовою?
Лайконі

4
Яке визначення належної квітки застосовується? ( Мартін , або ais523 , чи, можливо, якесь інше визначення в цих метапотоках ?) Чи належні правильні правила квоти застосовуються лише до інтерпретацій програми, які насправді є лайками? (Для чого це варто, я не думаю, що цей виклик значно покращується, застосовуючи правильні правила кволі.)
Лінн,

Для уточнення, працюючи на вашому прикладі - якщо мій код AABдрукується AABна мові-1 та ABAна мові-2, я припускаю, що він повинен бути належним лайком, якщо його розглядати як програму мова-1, і немає ніяких подальших обмежень щодо його тлумачення як програма мова-2. Це так?
Лінн

1
Чи враховується довжина коду в символах чи байтах? Що нам робити з різними кодуваннями символів?
ділнан

1
Що щодо байтів проти символів?
ділнан

Відповіді:


10

Befunge-98 , > <> , Голі> <> , Поділ , Wumpus , Кардинал , бджолиний і Аліса Рахунок 8 6 /88 = 2978,909

"65*4+059*$!#.39*0jp2+'Wk,@ ''5&.'\d&o@o&88#+\@ol?!,'.'0.6'!+Ox,++tttt=++%-$#}.6~.F4*`*R

Спробуйте це у Befunge! Спробуйте в <<>! Спробуйте в Gol> <>! Спробуйте це у Fission! Спробуйте в Wumpus! Спробуйте це у кардинала! Спробуйте в бджолиному воску! Спробуйте в Алісі!

Перевірка!

Багато двомовних мов, усі зловживають загортанням рядкових літералів. Різниця в результатах:

> <>, Gol> <> і Befunge-98 всі друкують код назад (крім "), з останніми трьома символами в різних положеннях R*", O"*і "R*відповідно. У бджолиного воску також є код назад, але останні три символи перемежовуються в першому розділі виводу. Аліса в основному в зворотному напрямку, для всіх уцілілих символів , за винятком ( ', \і ") перейшов на фронт замість цього.

Wumpus - це єдиний фактичний квин, Fission ставить "кінець коду замість початку, а Cardinal ставить "між початком 0та 5найближчим часом.

Доказ різних перестановок

Пояснення:

Befunge-98:

"  Wrapping string literal pushes all other characters + a space to the stack
 65*4+  Push " to the stack
      059*$!#.39*0j   Push 1,27 to the stack
                   p  Pops the top three values of the stack (27,1,34)
                    2+  Adds 2 to the space to make "
                      'Wk,@  Prints the top 88 characters of the stack and terminates

> <> і Гол> <>:

Якщо чесно, я тут мало чого зробив. Єдина різниця між виконанням цих двох мов - це @команда, яка по-різному обертає три найкращі значення стека для кожної мови.

"  Wrapping string literal pushes all other characters to the stack
 65*4+  Push 34 (") to the stack
      059*$!#.  Jump to cell 45,0
                                   \@  Rotate the top three values of the stack 
                                     ol?!,'.'0.  Output the whole stack, ending in a divide by 0/stack underflow error

Ділення:

 "............R  Spawn a pointer going right

 "  Switch to printing mode and print every other character
 "  Switch off printing mode
  6  Teleport to other 6
 "........6'!+O   Print the "

Wumpus:

"  Bouncing string literal
 65*4+  Push a (")
      059*$!#.   Push 0 and jump to cell 0,45
                                        \  Reflect off mirror
                                       +   Add 0 to top of stack
                                 @o&88#    Print the top 88 characters of the stack

Кардинал:

                                 %   Spawn two pointer going left/right (up/down despawn immediately)
                                  -$  Right pointer jumps to cell -1,0
                      x,++tttt=++     Left pointer prints "
"  While right pointer switches to print mode and prints the code

Бджолиний віск:

 "................*`*   Spawn pointers going in every direction
                        Every other * also spawns pointers, but they do nothing
                   `    Turn on print mode for two of the pointers going in different directions
                        This prints everything but the `
          #}.6~.F4*     Print a `

Аліса:

"  Wrapping string literal pushes all other characters to the stack
   Except 's and mirrors
 65*4+  Push " to the stack
      059*$!#.  Does nothing
              39*0j  Jumps to cell 39,0
                         ''5&.    Push ' and duplicate it 5 times
                              '\  Push \
                                d&o@  Print the whole stack

6

Perl 5 , Рубі , JavaScript (хром), PHP , Python , 2 , Python 3 , 1206 байт, оцінка 6 6 /1206 = +38,6865671641791

q=1//2;s=+0;s|0;"/.__id__;#";_="""q=1//2;s=+0;s|0;"/.__id__;#";_={0}{1}{0};R=chr((39,34)[1/2>0])*12;Q=chr((39,34)[1/2==0])*3;q={0}{2}{0};print(_.format(Q,_,q[0:-12]+R,"%"))""";R=chr((39,34)[1/2>0])*12;Q=chr((39,34)[1/2==0])*3;q="""|;#<?ob_end_clean();
eval($_='"$t"?0?[$q=37 .chr+113 .chr+38 .chr,$p=(96 .chr+39 .chr)*4,$n=10 .chr,$s=39 .chr*12,$S=34 .chr*3]:eval("printf=console.log;c=String.fromCharCode;$q=c(96);$p=c(37,113,38,39).repeat(4);$n=c(10);$s=c(39).repeat(12);$S=c(34,34,34)"):[]?[$q=q(!g)^PA,$p=HARHARHARHAR^od2od2od2od2,$n=R^X,$s=bbbbbbbbbbbb^EEEEEEEEEEEE,$S=hhh^JJJ]:[$q=O^h,$p=str_repeat(RHa3^w9GS,4),$n=R^X,$s=str_repeat(b^E,12),$S=HHH^jjj];//#');printf($x='q=1//2;s=+0;s|0;"/.__id__;#";_=%7$sq=1//2;s=+0;s|0;"/.__id__;#";_={0}{1}{0};R=chr((39,34)[1/2>0])*12;Q=chr((39,34)[1/2==0])*3;q={0}{2}{0};print(_.format(Q,_,q[0:-12]+R,"%8$s"))%7$s;R=chr((39,34)[1/2>0])*12;Q=chr((39,34)[1/2==0])*3;q=%7$s|;#<?ob_end_clean();%5$seval($_=%3$s%1$s%3$s);printf($x=%3$s%2$s%3$s,$_,$x,$q,$p,$n,$s,$S,"%8$s",![]||([]+[])?$n:"");//#%4$s%6$s%7$s;print(_.format(Q,_,q[0:-12]+R,"%8$s"))%9$s',$_,$x,$q,$p,$n,$s,$S,"%",![]||([]+[])?$n:"");//#`q&%`q&%`q&%`q&%''''''''''''""";print(_.format(Q,_,q[0:-12]+R,"%"))

Перевірте Perl, Ruby, PHP, Python 2 та Python 3 онлайн!

Примітка : запуск вищевказаної програми на консолі Inspector в Chrome (яка, здається, підтримує позиційні аргументи console.log), повертає правильну програму.

Пояснення

Це виявилося набагато довше, ніж я сподівався, і я теж трохи ускладнив своє життя, тож я, ймовірно, продовжую займатися цим. Я також хотів би додати ще кілька мов, але мені потрібно знайти щось, що не проти $сигіл ...

Це в значній мірі стандартний формат Куайн , де розрахунок процитувати використання трохи відрізняється для кожної мови: в Ruby , %q&використовується, PHP використовує ', JavaScript (Node.js) використовує `і Perl 5 використовує q(... ). Оскільки змінюються лише котирування, решта програми все ще виконується та діє синтаксис кожної мови. Python 2 і 3 обертаються навколо попередньої програми, використовуючи """для Python 2 і '''для Python 3.

Отримані програми Perl і Ruby не є стандартними лайнерами, додаткові q/ %qс додаються до кожної ітерації, але перша програма повертається правильно.

Результати:

  • Perl 5:
    eval($_=q&... q&);printf($x=q&... q&,... );//#'%`'%`'%`'%`''''''''''''"""...
  • Рубі:
    eval($_=%q&... %q&);printf($x=%q&... %q&,... );//#`'`'`'`'''''''''''''"""...
  • JavaScript (Chrome):
    eval($_=`... `);printf($x=`... `,... );//#%q&'%q&'%q&'%q&'''''''''''''"""...
  • PHP:
    eval($_='... ');printf($x='... ',... );//#`q&%`q&%`q&%`q&%''''''''''''"""...
  • Пітон 2:
    ... _="""... """;... q="""...''''''''''''""";print(_.format(Q,_,q[0:-12]+R,"%"))
  • Пітон 3:
    ... _='''... ''';... q='''...""""""""""""''';print(_.format(Q,_,q[0:-12]+R,"%"))

Я багато цього переробляв, сподіваюся, тут не пропустив нічого ключового. У мене все ще є цілий шлях, щоб бути десь поруч із рахунком Джо Кінга ...


2

Желе , і М 2 6 /14 = 4,57

1Ɗṙ@“1Ɗṙ@ȮṾ”ȮṾ

Спробуйте в Jelly!

Спробуйте в М!

Ɗṙ@ȮṾ1“Ɗṙ@ȮṾ1” в желе

1Ɗṙ@ȮṾ“1Ɗṙ@ȮṾ” в М


Я не впевнений, що Деревне вугілля вважається належним
королевою

@ H.PWiz Я збирався додати коментар, який сказав, що. Я попрошу OP
dylnan

@ l4m2, чи вважаєте Ви програму Вугілля вугільною належною лайкою? Я видалю, якщо ні.
ділнан

Я думаю, це як Quineу PHP?
l4м2


2

Python 2 і Python 3 , 2 6 /61 = 1,05

s='s=%r;print(s%%s[::(1/2>0)*2-1])';print(s%s[::(1/2>0)*2-1])

Спробуйте в Python 2!

Спробуйте це в Python 3!

Збережено 12 байт завдяки Джо Кінгу.

Друкує Python 2

s=')]1-2*)0>2/1(::[s%%s(tnirp;r%=s';print(s%s[::(1/2>0)*2-1])

Друкує Python 3

s='s=%r;print(s%%s[::(1/2>0)*2-1])';print(s%s[::(1/2>0)*2-1])

При цьому використовується той факт , що 1/2це .5в Python 3 і 0в Python 2.


1

Bash / GolfScript, 72 байта, 2 бали 6 /72 = 8/9 (~ 0,888 ...)

.~0 () 
{ 
    declare "-f" @* ".~0" " ()
 "+@n.;
    echo '.~0;'
}
.~0;

Містить єдиний пробіл у перших двох рядках.

Спробуйте в Інтернеті на Bash.
Спробуйте його в Інтернеті в GolfScript.

Просто модифікація відповіді @ jimmy23013 на завдання " Написати поліхін " . Модифікація, яка була здійснена, була видаленням пробілу після третього рядка та зміною \n"+@n.;на \n "+@n;.

Bash надрукує рядки 1 і 2 так:

.~0 ()    <- Trailing space
{         <- Trailing space

І GolfScript надрукує рядки 1 і 2 так:

.~0 ()   <- No trailing space
 {       <- Both leading and trailing space

Тут основна програма, вихід Bash і GolfScript виводиться відповідно з новими рядками, заміненими на \n:

.~0 () \n{ \n    declare "-f" @* ".~0" " ()\n "+@n.;\n    echo '.~0;'\n}\n.~0;
.~0 () \n{ \n    declare "-f" @* ".~0" " ()\n "+@n.;\n    echo '.~0;'\n}\n.~0;
.~0 ()\n { \n    declare "-f" @* ".~0" " ()\n "+@n.;\n    echo '.~0;'\n}\n.~0;

      ^^^ Note the difference here
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.