Найти переплетенные исходные коды (грабители)


13

Это нить грабителей. Для нити полицейских, иди сюда .

Вступление

Для этой задачи «Копы / Грабители» полицейские напишут программы, производящие результаты, и переплетут их вместе. Работа грабителя состоит в том, чтобы разбирать программы полицейских для получения желаемых результатов.

Правила грабителя

Грабители попытаются найти различные программы, которые люди публикуют в сообщениях в ветке полицейских (ссылка выше). Если грабитель решает код полицейского, он должен опубликовать отдельные программы и сопоставить их со своими результатами в ответе здесь и сообщить, что они взломали код в ответе полицейского.

счет

Есть два компонента, которые добавляются вместе при оценке взломанной отправки.

  • 2 к степени количества различных программ, использованных в ответе полицейского
  • Вокруг числа байт в переплетении вниз до ближайшей степени 2.

Например, если грабитель раскололся TIliGoEnRкак существо TIGERи lion, то грабитель получает 2 ^ 2 + 8 = 12 очков.

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


(Кто хочет помочь с фрагментом?)

Ответы:


6

Витси , 12 очков

'o'2\I/NO

Попробуйте онлайн!

a5F\aZ

Попробуйте онлайн!

NaNВ NaNoмертвых поддавки.

Очевидным способом нажатия NaNбыло бы разделить 0 на себя, 2\Iтолкать входную длину ( 0 ) дважды, /выполнять деление и Nпечатать число с плавающей точкой.

Мы остались с печатью o, и 'o'это строковый литерал, который Oпечатает.

Все оставшиеся символы должны были принадлежать другой программе. Фактически, aвыталкивает перевод строки, 5Fфакториал 5 ( 120 ), \aпревращает его в 120 перевод строки и Zпечатает весь стек.


Так красиво, так красиво. Отлично сработано. +1
Эддисон Крамп

4

BitShift , 2 ^ 2 + 64 = 68 баллов

нить ментов

0101100110110101001001010110111011101110111011101101010

печать ! ?

1011101110111011101110110101000000000110010101101101010

печать ? !

Код

0101100110110101001001010110111011101110111011101101010 # '! ?'
01011001101101010 # '! '
0101              # XOR 0 with 128 
                  # Making current value 128 (1000 0000)
    10            # Bitshift 1 to left making 10000000 -> 01000000
      01          # Bitshift 1 to left making 01000000 -> 00100000  
        101       # XOR 00100000 with 1 making it 00100001
           101010 # print 00100000 which is binary for !
010010101         #
010               # XOR 00100001 with 1 making it 00100000
   010101         # print 00100000 which is binary for <space>
10111011101110111011101101010  # '?'
101               # XOR 00100000 with 1
   1              # Bitshift 1 to left making 00100001 -> 01000010
                      # This gets repeated till 01000010 becomes 0111111
101010                # print 0111111 which is binary for ?

Я добавлю некоторое описание позже (разделить код на части, которые печатают отдельные части)


Может кто-нибудь объяснить, как рассчитать счет, я не совсем понимаю, расчет
Dennis_J

1
Отлично сработано. Счет рассчитывается по 2^programs + 256/bytes=points. В этом случае это 2^2 + 256/128=6 points. Я думаю, что это будет отредактировано, потому что, как сейчас, программы с меньшим количеством байтов получают больший бонус для грабителей. Который чувствует себя
плохо

1
@Bas Со вчерашнего дня, это было изменено.
Арктур

4

PHP , 68 баллов

$c=tR;$h=s;$c=$h.$c._.$h.plit;echo$c($h);

Выход: Array

echo quotemeta('^/]'.co.'[$');

Выход: \^/\]co\[\$


Мне нравится это представление, потому что оно опирается на несколько менее известных функций - можно сказать, недостатки - PHP. PHP позволяет присваивать ссылки на функции переменным, например:

$f = function($a, $b) { return pow($a, $b); };
echo $f(2, 4);

будет делать именно то, что вы ожидаете. Как бы:

$f = pow;
echo $f(2, 4);

... кроме того, что он не делает то, что ты думаешь. $f = powне присваивает ссылку на функцию $f(это было бы слишком много смысла, верно?), а скорее на строку 'pow' . Подразумевается, что любая строка может использоваться как вызов функции, если она представляет имя определенной функции. Плохой код, ожидающий случиться. Я даже не знаю, почему вы хотите это позволить.

Другая ошибка PHP заключается в том, что имена функций и ключевые слова нечувствительны к регистру. Я бы хотел пошутить Итак echo pow(2, 4), ECHO POW(2, 4)и EcHo PoW(2,4)все они функционально эквивалентны.

Последняя ошибка в витрине заключается в том, что всякий раз, когда массив вводится в виде строки, например, для печати, результатом всегда является удивительно полезная строка Array. Найдите минутку, чтобы подумать о том, что кто-то действительно сделал это сознательно.

Таким образом, в первой программе @insertusernamehere создает строку stR_split, эта строка используется в качестве ссылки на функцию (которая по указанным выше причинам действительно работает), а результат - массив - выводится.


1
Хорошая работа, которая идет с отличным объяснением. :)
insertusername здесь

3

Рубин , 68 баллов

Первый:

p %w(b n n s)*?a%?}

Во-вторых:

w,=?(.ord,40,?);"jivivi{2".bytes{|b|putc b-w}

Это вполне естественно вытекает из разработки конца, с putc.


1
Ой, у меня было немного другое предполагаемое решение с еще одним странным синтаксическим приемом, но я думаю, я оставлю это в своем заднем кармане для другой задачи. Отлично сработано!
гистократ

3

JavaScript, 68 баллов

Нить ментов

Первая программа

Выход: ffttff

(![]+[])[+[]]+(![]+[])[+[]]+(!![]+[])[+[]]+(!![]+[])[+[]]+(![]+[])[+[]]+(![]+[])[+[]]

Вторая программа

Выход: 1010

+!![]+[+[]]+(+!![])+(+[])

Переплетение

+     !!    []             +                [    +[]]          +      (+     !![])                 +     (+[])
 (![]+  [])[  +[]]+(![]+[]) [+[]]+(!![]+[])[ +[]]    +(!![]+[]) [+[]]+  (![]+     [])[+[]]+(![]+[]) [+[]]

2

Ява, 132 балла

Нить ментов

Первая программа:

interface c{static void main(String[]g){System.out.println("Hell"\u002bg.length);}}

Вторая программа:

class i{public static void main(String[]n){System.out.print("Bye!\n");}}

Выход первой программы и вывод Hell0второй программыBye!


Ах, я опоздал на час. Молодец.
Арктур

2

Javascript , 132 балла

Программа 1

var x;{;alert((f=>(f.reverse(f+~~f,Math.pow(2,Math.E))))(new Array(99).fill(0).map((x,i,f)=>i/3)).join("").replace(/../g,""))}

Программа 2

try{"function";Object.keys(f)}catch(e){f=s=>!s?f(1):"";alert(f(f(f(0/0) +f(7/5)))+f(f)+`${f}`.split``.map(e=>e.charCodeAt()*23))}

Уф. Это было ужасно

После долгих отладок я обнаружил, что после вызова (части) 2-й программы она больше не запускается. Это потому, что глобальная переменная fвсе еще была назначена. Из-за fназначения try / catch не удалось выполнитьObject.keys(f) . Я не знаю, подлый ли это трюк или неумышленный, но это вызвало у меня головную боль.

Кроме того, я считаю, что вывод первой программы зависит от платформы.
/../gудаляет все символы на моем компьютере из-за регулярного выражения, .означающего любой символ. Спасаясь его /\../gработ , однако, я надеюсь , что кто - то может пролить больше света на это. Кроме того, мой вывод склонен к ошибкам округления, возможно, какая-то глобальная переменная javascript может изменить это?

Выход

32666666666666643233333333333336323166666666666668313333333333333231306666666666666830333333333333323029666666666666682933333333333332292866666666666668283333333333333228276666666666666827333333333333322726666666666666682633333333333332262566666666666668253333333333333225246666666666666824333333333333322423666666666666682333333333333332232266666666666668223333333333333222216666666666666821333333333333322120666666666666682033333333333332201966666666666668193333333333333219186666666666666818333333333333321817666666666666681733333333333332171666666666666668163333333333333216156666666666666615333333333333341514666666666666661433333333333334141366666666666666133333333333333413126666666666666612333333333333341211666666666666661133333333333334111066666666666666103333333333333410966666666666666933333333333334986666666666666683333333333333487666666666666677333333333333337666666666666667633333333333333656666666666666753333333333333354666666666666674333333333333334366666666666666533333333333333353266666666666666523333333333333352166666666666666713333333333333331066666666666666603333333333333330

Это было проверено на Chrome 46 (мой единственный браузер), Windows 7.

Я надеюсь, что это все еще действительное представление, несмотря на различный вывод


Там была косая черта, я не знаю, как ее пропустили. Хорошая работа, хотя! Это верно. Я буду обновлять свое представление, когда я не на мобильном телефоне;)
Конор О'Брайен

2

JavaScript (ES6) , 68 баллов

Программа 1

alert((c=>c.replace(/[a-z]/gi,a=>String.fromCharCode(("Z">=a?90:122)>=(a=a.charCodeAt(0)+13)?a:a-26)))("fvzcyr"))

Программа 2

alert((b=>b.replace(/[a-zA-Z]/g,s=>String.fromCharCode(s.charCodeAt(0)+(s.toLowerCase()<'n'?13:-13))))("gbnfg"))

Переплетенные программы

 alaelretrt((((cb=>c=>b.replace(/.replace[a-(/[azA-Z]-z]/gi/g,a,s=>String=>String.fromCharCode(s.fromCharCode(("Z">=a.charCodeAt(0)?90:122)>=(a=a.charCodeAt(0+(s.toLowerCase())+13)?a<'n'?13:-13:a-26)))))))((""gfvbznfcyrg""))))
 al e r t  ( ( c =>c             .replace   (/[a     -z]/gi  ,a  =>String                       .fromCharCode(("Z">=a              ?90:122)>=(a=a.charCodeAt(0                 )+13)?a           :a-26)))    ( "  fv z  cyr " ))
   a l e rt ( ( b   =>b.replace(/        [a-    zA-Z]      /g  ,s        =>String.fromCharCode(s                     .charCodeAt(0)                           +(s.toLowerCase()       <'n'?13:-13        )))) ( "g  b nf   g "  ))

Это было бы намного сложнее, если бы полицейский разорвал на части ключевые слова. ;)


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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.