Думайте о нем этот путь.
, Учитывая
unorderedList = {5, 1,3}
orderedList = {1,3,5}добавляют 2 к обоим спискам.
unorderedList = {5, 1,3,2}
orderedList = {1,2,3,5}
, Что список, Вы думаете, легче добавить к?
Btw, заказывая Ваш вход, прежде чем загрузка будет стимулировать Вас.
python (34 символа):
print(open(__file__).read()[::-1])
Snip - удален неправильный ответ
А теперь выкупить я;
<?php echo strrev(file_get_contents(__FILE__)); ?>
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)
Я собираюсь проиграть в гольф, но он преподал мне важный урок о тонкостях 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
Обратите внимание, что исходный файл должен заканчиваться пустой строкой . Пустая строка учитывается при подсчете символов - как еще, по вашему мнению, мы получили нечетное количество символов из двух одинаковых строк кода?
73 символа.
#! /opt/perl/bin/perl
seek DATA,0,0;$/=\1;print reverse <DATA>;
__DATA__
__ DATA __
в конец для дескриптора файла DATA
для начала открыт. $ /
на ссылку числа, заставляет readline ()
читать столько байтов за раз. seek (DATA, 0,0)
требуется для установки указателя на начало файла, а не на начало раздела __ DATA __
. #!
...) __ DATA __
требует новой строки после нее, или это недопустимый Perl. Вот двухстрочный файл, адаптированный из NeatQuine.py :
me = 'me = %(me)r\nprint (me %% locals())[::-1]'
print (me % locals())[::-1]
(10 символов)
cat $0|rev
Он должен быть сохранен как файл сценария, чтобы он работал и выполнялся в том же каталоге.
Другое решение - на Python (или любые другие языки сценариев) файл исходного кода с нулевым байтом! он ничего не напечатает взамен. В правилах ничего не сказано, что это не может быть 0-байтовый файл :).
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--);}
Powershell FTW (1 символ):
1
Поместите его непосредственно в командную строку или внутри сценария.
На эзотерическом языке HQ9 + этот код может be:
Q
Здесь Вы можете найти интерпретатор для этого языка .
Перевернутый quine из здесь .
eval s=%q(puts "eval s=%q(#{s})".reverse)
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 за поиск пробелов на отпечатках
a=";main=putStr.reverse$\"a=\"++show a++a";main=putStr.reverse$"a="++show a++a
Стандартный прием.
Ну, конечно, пустой сценарий оболочки ничего не выведет, но следующее лучшее, что я могу придумать:
a=\;printf\ \"a=%q%s\"\ \"\$a\"\ \"\$a\"\|rev;printf "a=%q%s" "$a" "$a"|rev
Тот же старый трюк.
К сожалению, это требует использования крайне нестандартной функции 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);}
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));}}
|.(,~,2#{:)'|.(,~,2#{:)'''
Производит вывод:
'''):{#2,~,(.|'):{#2,~,(.|