Гольф кода: Reverse quine

Думайте о нем этот путь.

, Учитывая
unorderedList = {5, 1,3}
orderedList = {1,3,5}

добавляют 2 к обоим спискам.
unorderedList = {5, 1,3,2}
orderedList = {1,2,3,5}

, Что список, Вы думаете, легче добавить к?

Btw, заказывая Ваш вход, прежде чем загрузка будет стимулировать Вас.

13
задан 2 revs 1 September 2009 в 23:51
поделиться

17 ответов

python (34 символа):

print(open(__file__).read()[::-1])
0
ответ дан 1 December 2019 в 17:10
поделиться

PHP

Snip - удален неправильный ответ

А теперь выкупить я;

<?php echo strrev(file_get_contents(__FILE__)); ?>
0
ответ дан 1 December 2019 в 17:10
поделиться

F # (659 символов)

open System;let R(s:String)=new System.String(s|>List.of_seq|>List.rev|>Array.of_list) in let q=char 34 in let Q(s:String)=s.Replace(new String([|q|]),new String([|char 92;q|])) in let Quine s=String.Format("let s={0}{1}{2} in printf {3}%s%s{4} (R(Quine s)) (R s)",[|box q;box(Q s);box q;box q;box q|]) in let s="open System;let R(s:String)=new System.String(s|>List.of_seq|>List.rev|>Array.of_list) in let q=char 34 in let Q(s:String)=s.Replace(new String([|q|]),new String([|char 92;q|])) in let Quine s=String.Format(\"let s={0}{1}{2} in printf {3}%s%s{4} (R(Quine s)) (R s)\",[|box q;box(Q s);box q;box q;box q|]) in " in printf "%s%s" (R(Quine s)) (R s)

Вставка разрывов строк (которые нарушают работу программы, но делают ее более читаемой здесь):

open System;
let R(s:String)=new System.String(s|>List.of_seq|>List.rev|>Array.of_list) in 
let q=char 34 in 
let Q(s:String)=s.Replace(new String([|q|]),new String([|char 92;q|])) in 
let Quine s=String.Format("let s={0}{1}{2} in printf {3}%s%s{4} (R(Quine s)) (R s)",
    [|box q;box(Q s);box q;box q;box q|]) in 
let s="open System;
       let R(s:String)=new System.String(s|>List.of_seq|>List.rev|>Array.of_list) in 
       let q=char 34 in 
       let Q(s:String)=s.Replace(new String([|q|]),new String([|char 92;q|])) in 
       let Quine s=String.Format(\"let s={0}{1}{2} in printf {3}%s%s{4} (R(Quine s)) (R s)\",
           [|box q;box(Q s);box q;box q;box q|]) in " in
printf "%s%s" (R(Quine s)) (R s)
3
ответ дан 1 December 2019 в 17:10
поделиться

Я собираюсь проиграть в гольф, но он преподал мне важный урок о тонкостях reverse () . Perl в слишком много (142) символов:

#!/usr/bin/perl
$_='#!/usr/bin/perlc%$_=c%s%c%;print sprintf~~reverse,10,39,~~reverse,39,10;c%';print sprintf~~reverse,10,39,~~reverse,39,10;

Это доказывает, что комбинация sprintf () / reverse () является не способ подойти к этой проблеме. Лучшее решение Perl, несомненно, будет использовать eval () .


Значительное улучшение: 45 символов:

print~~reverse <<''x2
print~~reverse <<''x2

Обратите внимание, что исходный файл должен заканчиваться пустой строкой . Пустая строка учитывается при подсчете символов - как еще, по вашему мнению, мы получили нечетное количество символов из двух одинаковых строк кода?

4
ответ дан 1 December 2019 в 17:10
поделиться

Perl

73 символа.

#! /opt/perl/bin/perl
seek DATA,0,0;$/=\1;print reverse <DATA>;
__DATA__
​
  • Вы должны иметь __ DATA __ в конец для дескриптора файла DATA для начала открыт.
  • Установка $ / на ссылку числа, заставляет readline () читать столько байтов за раз.
  • seek (DATA, 0,0) требуется для установки указателя на начало файла, а не на начало раздела __ DATA __ .
  • Можно удалить или сократите строку shebang ( #! ...)
  • __ DATA __ требует новой строки после нее, или это недопустимый Perl.
1
ответ дан 1 December 2019 в 17:10
поделиться

Вот двухстрочный файл, адаптированный из NeatQuine.py :

me = 'me = %(me)r\nprint (me %% locals())[::-1]'
print (me % locals())[::-1]
8
ответ дан 1 December 2019 в 17:10
поделиться

Сценарий Bash

(10 символов)

cat $0|rev

Он должен быть сохранен как файл сценария, чтобы он работал и выполнялся в том же каталоге.

Другое решение - на Python (или любые другие языки сценариев) файл исходного кода с нулевым байтом! он ничего не напечатает взамен. В правилах ничего не сказано, что это не может быть 0-байтовый файл :).

5
ответ дан 1 December 2019 в 17:10
поделиться

C89

int sprintf(char*,char*,...);char*d=
"int sprintf(char*,char*,...);char*d=%c%c%s%c%c,b[999],*p=b+251;main(){for(sprintf(b+1,d,10,34,d,34,10,10,10);*p;)putchar(*p--);}%c"
,b[999],*p=b+251;main(){for(sprintf(b+1,d,10,34,d,34,10,10,10);*p;)putchar(*p--);}
7
ответ дан 1 December 2019 в 17:10
поделиться

Powershell FTW (1 символ):

1

Поместите его непосредственно в командную строку или внутри сценария.

18
ответ дан 1 December 2019 в 17:10
поделиться

HQ9 +:

На эзотерическом языке HQ9 + этот код может be:

Q

Здесь Вы можете найти интерпретатор для этого языка .

Ruby:

Перевернутый quine из здесь .

eval s=%q(puts "eval s=%q(#{s})".reverse)
24
ответ дан 1 December 2019 в 17:10
поделиться

Python 2 (55 символов):

x='x=%s;print(x%%repr(x))[::-1]';print(x%repr(x))[::-1]

Более опытный игрок в гольф мог бы немного сократить это, поэтому любые улучшения приветствуются.

Изменить (43 символа):

x='x=%r;print(x%%x)[::-1]';print(x%x)[::-1]

также благодарим @ stephan202 за поиск пробелов на отпечатках

4
ответ дан 1 December 2019 в 17:10
поделиться

Haskell , 79 символов

a=";main=putStr.reverse$\"a=\"++show a++a";main=putStr.reverse$"a="++show a++a

Стандартный прием.

1
ответ дан 1 December 2019 в 17:10
поделиться

Bash , 75 символов

Ну, конечно, пустой сценарий оболочки ничего не выведет, но следующее лучшее, что я могу придумать:

a=\;printf\ \"a=%q%s\"\ \"\$a\"\ \"\$a\"\|rev;printf "a=%q%s" "$a" "$a"|rev

Тот же старый трюк.

2
ответ дан 1 December 2019 в 17:10
поделиться

C89, 119 символов

К сожалению, это требует использования крайне нестандартной функции strrev () :

main(){char*a="};)43,)b(verrts,43,a(ftnirp;)a(pudrts=b*,%c%s%c=a*rahc{)(niam",*b=strdup(a);printf(a,34,strrev(b),34);}
2
ответ дан 1 December 2019 в 17:10
поделиться

C: 0 символов

Ссылка: http://www0.us.ioccc.org/years.html#1994_smr

33
ответ дан 1 December 2019 в 17:10
поделиться

Java:

Определенно не самый короткий из возможных, но какого черта (одна строка):

public class R {public static void main ( String [] a) {StringBuffer s = new StringBuffer ("открытый класс R {public static void main (String [] a) {StringBuffer s = new StringBuffer (); s.reverse (); System.out.print (s. substring (0,152)); System.out.write (34); System.out.print (s); System.out.write (34); System.out.println (s.substring (152));}} " ); s.reverse (); System.out.print (s.substring (0,152)); System.out.write (34); System.out.print (s); System.out.write (34); System .out.println (s.substring (152));}}

1
ответ дан 1 December 2019 в 17:10
поделиться

J, 26 символов.

|.(,~,2#{:)'|.(,~,2#{:)'''

Производит вывод:

'''):{#2,~,(.|'):{#2,~,(.|
5
ответ дан 1 December 2019 в 17:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: