PPCG під загрозою: Розбійники


18

Наскільки добре ви знаєте сайт? Давай дізнаємось.

Це виклик . Поліцейська нитка .

Як грабіжник, вам потрібно:

  1. Знайдіть не видалену незакриту виклик, що відповідає поданню поліцейського. У виклику не можуть бути такі теги: , , , , , , , . У виклику повинні бути обмеження щодо дійсного виводу.
  2. Опублікуйте виклик тут і посилання на поліцейського, якого ви зламали
  3. Додайте коментар "Зламаний" до публікації поліцейських із посиланням на цю відповідь

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

Примітки:

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


Відповіді:


5

Обчисліть ймовірність отримати вдвічі більше головок, ніж кидання монет.

Запис поліцейських (розміщено Conor O'Brien): /codegolf//a/100521/8927

Оригінальне запитання: Обчисліть ймовірність отримати вдвічі більше головок, ніж кидання монет.


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

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

Знадобився деякий час, щоб зрозуміти, на що я дивився (на деякий час я підозрював, що щось пов’язане з ентропією), але, як тільки він закрутився, мені вдалося легко знайти питання, шукаючи "ймовірність кидання монети".


Оскільки Конор О'Браєн кинув виклик глибокому поясненню свого коду, ось ось дещо цікавіші біти:

Він починається з обмацування деяких вбудованих викликів функцій. Це досягається за допомогою кодування base-32 імен функцій, а потім присвоєння їм нових імен глобального простору імен одного символу. Насправді використовується лише "атоб"; інші 2 - просто червоно-оселедець (eval бере ту саму стенографію, що і атоб, лише щоб її перекрити, а 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" (вбудовані) функції обчислюють необхідні підрахунки монети. Функція "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виведено, може бути гідним;)
Conor O'Brien

@ ConorO'Brien впевнений; Я додав свої замітки та пояснення корисності кожної функції, перш ніж згорнути їх усі.
Дейв

@ ConorO'Brien дякую за щедроту!
Дейв

Завжди приємно :)
Conor O'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, Габріель Бенамі , зручна перевірка паліндром

Код, очевидно, був якийсь паліндром. Як тільки я вибрав 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яка працює, поки nмод 7 не дорівнює 0. Введення, 0відповідно, припиняється відразу (після друку 0один раз). Введення 1подач 1, що веде до нескінченного циклу друку 1. Інший вхід закінчується через 1-3 кроки, якщо початковий nвідповідає 0, 2, 3, 5 або 6 mod 7, або зростає назавжди, якщо він відповідає 1 або 4 mod 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



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