PPCG Jeopardy: грабители


18

Насколько хорошо вы знаете сайт? Давай выясним.

Это задача . Полицейская нить .

Как грабитель, вам необходимо:

  1. Найдите не удаленный, не закрытый вызов, который соответствует представлению полицейского. Задача не может иметь следующие теги: , , , , , , , . Задача должна иметь ограничения на допустимый вывод.
  2. Опубликуйте вызов здесь, и ссылку на полицейского, которого вы взламываете
  3. Добавьте «взломанный» комментарий к сообщению полицейских со ссылкой на этот ответ

Вы получите 1 очко плюс 1 очко за каждый 24-часовой период, в течение которого отправка оставалась без изменений (макс. 7). Tiebreaker - это общее количество взломанных подразделов.

Примечания:

  • Если для запроса требуется вывод X, а вы выводите XYили YXгде Yнаходится что-то, кроме пробелов, отправка не подходит для этого вызова.
  • Вызов, более новый, чем 2016-11-17, не допускается.
  • Я оставляю за собой право запретить определенные вызовы, если они широко применяются (могут применяться к большинству всех представлений).
  • Убедитесь, что вы добавили одно или два предложения в качестве объяснения (это также помогает преобразовать ваше сообщение в комментарий)
  • Спасибо Дэниелу за первоначальную идею!


Ответы:


5

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

Запись Cops (опубликовано Конором О'Брайеном): /codegolf//a/100521/8927

Исходный вопрос: Рассчитайте вероятность получения вдвое меньше голов, чем бросков монет.


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

nCr(a,b) = a! / ((a-b)! * b!)
result = nCr(x, x/2) / 2^x

Потребовалось некоторое время, чтобы осознать, на что я смотрю (какое-то время я подозревал, что что-то связано с энтропией), но, как только он обнаружился, мне удалось легко найти вопрос с помощью поиска «вероятность броска монеты».


Поскольку Конор О'Брайен бросил вызов подробному объяснению своего кода, вот краткое изложение более интересных моментов:

Он начинается с запутывания некоторых вызовов встроенных функций. Это достигается за счет кодирования имен функций с помощью base-32, а затем их присвоения новым глобальным именам пространства имен одного символа. На самом деле используется только «atob»; остальные 2 - просто красные сельди (eval использует ту же стенографию, что и atob, только для переопределения, а btoa просто не используется).

_=this;
[
    490837, // eval -> U="undefined"       -> u(x) = eval(x) (but overwritten below), y = eval
    358155, // atob -> U="function (M,..." -> u(x) = atob(x)
    390922  // btoa -> U="function (M,..." -> n(x) = btoa(x), U[10] = 'M'
].map(
    y=function(M,i){
        return _[(U=y+"")[i]] = _[M.toString(2<<2<<2)]
    }
);

Далее следует пара простых путаниц с строками, чтобы скрыть код. Это легко изменить:

u(["","GQ9ZygiYTwyPzE6YSpk","C0tYSki","SkoYSkvZChhLWIpL2QoYikg"].join("K"))
// becomes
'(d=g("a<2?1:a*d(--a)"))(a)/d(a-b)/d(b) '

u("KScpKWIsYShFLCliLGEoQyhEJyhnLGM9RSxiPUQsYT1D").split("").reverse().join("")
// becomes
"C=a,D=b,E=c,g('D(C(a,b),E(a,b))')"

Основная часть запутывания - использование gфункции, которая просто определяет новые функции. Это применяется рекурсивно, с функциями, возвращающими новые функции, или требующими функции в качестве параметров, но в конечном итоге упрощается. Наиболее интересная функция, которую можно получить из этого:

function e(a,b){ // a! / ((a-b)! * b!) = nCr
    d=function(a){return a<2?1:a*d(--a)} // Factorial
    return d(a)/d(a-b)/d(b)
}

Есть также последний трюк с этой строкой:

U[10]+[![]+[]][+[]][++[+[]][+[]]]+[!+[]+[]][+[]][+[]]+17..toString(2<<2<<2)
// U = "function (M,i"..., so U[10] = 'M'. The rest just evaluates to "ath", so this just reads "Math"

Хотя следующий бит - «.pow (T, a)», всегда была вероятность, что это будет «Math»!

Шаги, которые я предпринял по пути расширения функций:

// Minimal substitutions:
function g(s){return Function("a","b","c","return "+s)};
function e(a,b,c){return (d=g("a<2?1:a*d(--a)"))(a)/d(a-b)/d(b)}
function h(a,b,c){return A=a,B=b,g('A(a,B(a))')}
function j(a,b,c){return a/b}
function L(a,b,c){return Z=a,Y=b,g('Z(a,Y)')}
k=L(j,T=2);
function F(a,b,c){return C=a,D=b,E=c,g('D(C(a,b),E(a,b))')}
RESULT=F(
    h(e,k),
    j,
    function(a,b,c){return _['Math'].pow(T,a)}
);


// First pass
function e(a,b){
    d=function(a){return a<2?1:a*d(--a)}
    return d(a)/d(a-b)/d(b)
}
function h(a,b){
    A=a
    B=b
    return function(a){
        return A(a,B(a))
    }
}
function j(a,b){ // ratio function
    return a/b
}
function L(a,b){ // binding function (binds param b)
    Z=a
    Y=b
    return function(a){
        return Z(a,Y)
    }
}
T=2; // Number of states the coin can take
k=L(j,T); // function to calculate number of heads required for fairness
function F(a,b,c){
    C=a
    D=b
    E=c
    return function(a,b,c){return D(C(a,b),E(a,b))}
}
RESULT=F(
    h(e,k),
    j,
    function(a){return Math.pow(T,a)}
);


// Second pass
function e(a,b){...}
function k(a){
    return a/2
}
function F(a,b,c){
    C=a
    D=b
    E=c
    return function(a,b,c){return D(C(a,b),E(a,b))}
}
RESULT=F(
    function(a){
        return e(a,k(a))
    },
    function(a,b){
        return a/b
    },
    function(a){return Math.pow(2,a)}
);


// Third pass
function e(a,b) {...}
C=function(a){ // nCr(x,x/2) function
    return e(a,a/2)
}
D=function(a,b){ // ratio function
    return a/b
}
E=function(a){return Math.pow(2,a)} // 2^x function
RESULT=function(a,b,c){
    return D(C(a,b),E(a,b))
}

Структура вложения функций основана на полезности; самая внешняя функция «D» / «j» вычисляет соотношение, а затем внутренние функции «C» / «h» и «E» (inline) вычисляют необходимое количество подбрасываний монет. Функция «F», удаленная в третьем проходе, отвечает за их объединение в единое целое. Точно так же функция «k» отвечает за выбор количества голов, которые необходимо наблюдать; задача, которую она делегирует функции отношения «D» / «j» через функцию привязки параметров «L»; используется здесь для параметра починки bк T(здесь всегда 2, будучи числом состояний монеты может занять).

В итоге получаем:

function e(a,b){ // a! / ((a-b)! * b!)
    d=function(a){return a<2?1:a*d(--a)} // Factorial
    return d(a)/d(a-b)/d(b)
}
RESULT=function(a){
    return e(a, a/2) / Math.pow(2,a)
}

Молодец! Это немного неверно - eval установлен в f. Но остальное правильно! Кроме того, немного подробностей относительно того, как RESULTпроисходит, может быть достойным;)
Конор О'Брайен

@ ConorO'Brien уверен; Я добавил свои заметки и объяснение полезности каждой функции, прежде чем свернуть их все.
Дейв

@ ConorO'Brien спасибо за щедрость!
Дэйв

Всегда приятно :)
Конор О'Брайен

3

MATL, Луис Мендо , Подсчитайте количество здоровенных десятичных знаков между 2 числами

&:"@FYAYm7>vs

Я выяснил, что он делает, поиграв с входными данными, но я не мог выяснить, для какой задачи вам нужно вычислить количество целых чисел в диапазоне, сумма которого в 7 раз превышает количество цифр. После прочтения документации по MATL я составил краткое объяснение того, что это делает:

&    % Change default input format
:    % Implictly input two integers, create inclusive range
"    % For each item in this range:
  @    % Push the item
  F    % Push false
  YA   % Convert to base N digits; N is false, so this produces base-10 digits
  Ym   % Calculate arithmetic mean
  7>   % Push 1 if this is greater than 7, 0 otherwise
  v    % Concatenate result into array with previous result
  s    % Sum
     % Implicitly end loop and output

Затем я переключился с поиска «сумма цифр больше чем в 7 раз» на «средняя цифра больше 7», что дало мне искомую задачу.





2

Perl, Gabriel Benamy , Удобная палиндромная проверка

Код был явно неким палиндромом. Как только я выбрал y- - -структуру и заметил, что транслитерируется, я понял, какая это была проблема.


Ты побил мой на несколько секунд ... но это заняло так много времени, чтобы скачать Perl.
Лайкони

@Laikoni Честно говоря, после пары попыток использования Ideone, я перестал запускать код и вместо этого попытался его прочитать. ;)
DLosc



1

MATL, Луис Мендо , Рассчитать вес Хэмминга с низким весом Хэмминга

dP7EGn:q^1J2/h)ts_hX=Gs[BE]Wd=~>~GBz*

Я проверил внесение чисел и обнаружил вес Хэмминга в OEIS .

Затем я искал на PPCG, пытался положить в строки, и это работало.


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


1

Рубин, histocrat , Реализовать Истина-машина

Код определяет итеративную систему функций, f(n) = n*(3*n-1)/2которая работает до тех пор, пока nmod 7 не станет 0. Ввод 0поэтому завершается сразу (после 0однократной печати ). Ввод 1дает 1, что приводит к бесконечному циклу печати 1. Другие входные данные заканчиваются через 1-3 шага, если начальное значение nконгруэнтно 0, 2, 3, 5 или 6 мод 7, или увеличивается навсегда, если оно конгруэнтно 1 или 4 мод 7. Но это не имеет значения.


1

Гексагония, 548 байт, Мартин Эндер

Это задача « Распечатать каждого персонажа, которого нет в вашей программе »!

Печать:

Elizabeth obnoxiously quoted (just too rowdy for my peace): "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG," giving me a look

Что очень похоже на вывод в этом . Ключ был в том, что последний. не был напечатан. Кроме того, в самом коде не было букв, и мы все знаем, что фразы в выводе содержат все буквы в алфавите.


1

Питон, 935 байт, Мега Человек , Какое наименьшее положительное целое число из 10 оснований может быть напечатано программой короче (в символах), чем она сама?

Я на самом деле не пробовал это. Но я предполагаю, что он печатает номер дольше, чем программа.


Он печатает 99 ** 9999, что чуть больше.
Питер Тейлор

0

Python 3, /codegolf//a/100381/31343

Используйте формулу xkcd, чтобы приблизить население мира

Я просто искал проблемы, которые включали високосные годы (из-за декодируемой делимости на четыре чекера), и это не требовало ввода.


Ага! Я знал, что это будет очевидно из-за %4и strftime, но хорошая работа для выявления важных частей кода (большая часть была
бредовой

Ах, черт возьми, я тоже приближался. Я понял, что это было связано с датами, получая 2005 и 2016/2017 гг. Хорошая работа.
Йодль

Я удивлен, что ни один из вас просто не запустил код, который генерирует вывод 7.3 328, и искал его. Задача возникает сразу.
FlipTack



0

Руби, Ват , 400-й вопрос / вызов

Это было первое, что я нашел при поиске «400». Тем не менее, задача, кажется, ошибочна и должна быть popcon и, вероятно, также должна быть закрыта из-за отсутствия объективных требований.

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