PPCG-Gefahr: Räuber

18

Wie gut kennst du die Seite? Lass es uns herausfinden.

Dies ist eine Herausforderung für . Cop's Faden .

Als Räuber müssen Sie:

  1. Suchen Sie eine nicht gelöschte, nicht geschlossene Herausforderung, die der Übermittlung eines Polizisten entspricht. Die Herausforderung kann nicht die folgenden Tags enthalten: , , , , , , , . Die Challenge muss Einschränkungen bezüglich der gültigen Ausgabe haben.
  2. Stellen Sie die Herausforderung hier und verlinken Sie zu dem Polizisten, den Sie gerade knacken
  3. Fügen Sie einen "Cracked" -Kommentar zum Beitrag der Polizei hinzu, mit einem Link zurück zu dieser Antwort

Sie erhalten 1 Punkt plus 1 Punkt für jeden 24-Stunden-Zeitraum, in dem die Einreichung ungerissen geblieben ist (maximal 7). Tiebreaker ist die Gesamtzahl der gerissenen Untertitel.

Anmerkungen:

  • Wenn für eine Herausforderung eine Ausgabe von erforderlich Xist und Sie eine Ausgabe erstellen XYoder YXwenn Ysich etwas anderes als Leerzeichen befindet, ist die Übermittlung für diese Herausforderung nicht gültig.
  • Eine Herausforderung, die neuer als der 17.11.2016 ist, ist nicht zulässig.
  • Ich behalte mir das Recht vor, bestimmte Einwände zu verbieten, wenn sie allgemein anwendbar sind (könnte auf die Mehrheit aller Einwände angewendet werden).
  • Stellen Sie sicher, dass Sie einen oder zwei Sätze als Erklärung hinzufügen (dies hilft auch dabei, dass Ihr Beitrag nicht in einen Kommentar umgewandelt wird).
  • Vielen Dank an Daniel für die erste Idee!
Nathan Merrill
quelle

Antworten:

5

Berechnen Sie die Wahrscheinlichkeit, halb so viele Köpfe wie Münzwürfe zu erhalten.

Cops-Eintrag (gepostet von Conor O'Brien): /codegolf//a/100521/8927

Ursprüngliche Frage: Berechnen Sie die Wahrscheinlichkeit, halb so viele Köpfe wie Münzwürfe zu erhalten.


Bei der veröffentlichten Lösung wurden mehrere Verschleierungstechniken angewendet, gefolgt von mehreren Schichten derselben Verschleierungstechnik. Nach den ersten Tricks war es eine einfache (wenn auch mühsame!) Aufgabe, die eigentliche Funktion zu extrahieren:

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

Es dauerte eine Weile, bis mir klar wurde, wonach ich suchte (ich vermutete für eine Weile, dass etwas mit Entropie zu tun hatte), aber als es sich verzog, gelang es mir, die Frage leicht zu finden, indem ich nach "Wahrscheinlichkeit des Münzwurfs" suchte.


Da Conor O'Brien eine ausführliche Erklärung seines Codes in Frage stellte, folgt hier eine Übersicht über die interessanteren Aspekte:

Zunächst werden einige integrierte Funktionsaufrufe verschleiert. Dies wird erreicht, indem die Funktionsnamen mit der Basis 32 codiert und dann neuen globalen Namespace-Namen eines einzelnen Zeichens zugewiesen werden. Es wird nur "atob" verwendet. die anderen 2 sind nur rote Heringe (eval verwendet die gleiche Abkürzung wie atob, nur um überschrieben zu werden, und btoa wird einfach nicht verwendet).

_=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)]
    }
);

Als nächstes gibt es ein paar triviale Verwechslungen, um den Code zu verbergen. Diese sind leicht umzukehren:

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))')"

Der Hauptteil der Verschleierung ist die Verwendung der gFunktion, die einfach neue Funktionen definiert. Dies wird rekursiv angewendet, wobei Funktionen neue Funktionen zurückgeben oder Funktionen als Parameter benötigen. Die interessanteste Funktion, die dabei herauskommt, ist:

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)
}

Es gibt auch einen letzten Trick mit dieser Zeile:

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"

Obwohl das nächste Bit ".pow (T, a)" ist, war es immer ziemlich wahrscheinlich, dass es "Math" sein musste!

Die Schritte, die ich unternahm, um Funktionen zu erweitern, waren:

// 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))
}

Die Struktur der Funktionsverschachtelung basiert auf dem Nutzen. Die äußerste "D" / "j" -Funktion berechnet ein Verhältnis, dann berechnen die inneren "C" / "h" - und "E" -Funktionen (Inline) die erforderlichen Münzwurfzahlen. Die im dritten Durchgang entfernte "F" -Funktion ist dafür verantwortlich, diese zu einem brauchbaren Ganzen zusammenzufügen. In ähnlicher Weise ist die "k" -Funktion für die Auswahl der Anzahl von Köpfen verantwortlich, die beobachtet werden müssen; eine Aufgabe, die sie über die Parameterbindungsfunktion "L" an die Verhältnisfunktion "D" / "j" delegiert; Hier wird der Parameter bauf festgelegt T(hier immer 2, dh die Anzahl der Zustände, die die Münze annehmen kann).

Am Ende bekommen wir:

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)
}
Dave
quelle
Gut gemacht! Dies ist leicht falsch - eval ist auf gesetzt f. Aber der Rest ist richtig! Auch ein wenig Ausarbeitung, wie RESULTabgeleitet wird, könnte sich lohnen;)
Conor O'Brien
@ ConorO'Brien sicher; Ich habe meine Notizen und eine Erklärung des Nutzens jeder Funktion hinzugefügt, bevor ich sie alle zusammengeklappt habe.
Dave
@ ConorO'Brien danke für das Kopfgeld!
Dave
Immer ein Vergnügen :)
Conor O'Brien
3

MATL, Luis Mendo , Zähle die Anzahl der starken Dezimalstellen zwischen 2 Zahlen

&:"@FYAYm7>vs

Ich habe herausgefunden, was es macht, indem ich mit den Eingaben gespielt habe, aber ich konnte nicht herausfinden, für welche Herausforderung Sie die Anzahl der Ganzzahlen in einem Bereich berechnen müssten, dessen Summe das Siebenfache der Anzahl der Stellen übersteigt. Nachdem ich die MATL-Dokumente gelesen habe, habe ich eine grobe Erklärung zusammengestellt, was dies bewirkt:

&    % 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

Ich wechselte dann von "Ziffernsumme größer als 7-fache Länge" zu "Durchschnittsziffer größer als 7", was die gesuchte Herausforderung ergab.

ETHproductions
quelle
2

Perl, Gabriel Benamy , Praktischer Palindrom-Checker

Der Code war offensichtlich eine Art Palindrom. Als ich die y- - -Struktur heraussuchte und bemerkte, was transkribiert wurde, wusste ich, welche Herausforderung es war.

DLosc
quelle
Du hast mich um ein paar Sekunden geschlagen ... aber das Herunterladen von Perl hat so lange gedauert.
Laikoni
@Laikoni Ehrlich gesagt, nachdem ein paar Ideone ausprobiert hatten, gab ich es auf, den Code auszuführen, und versuchte, ihn stattdessen zu lesen. ;)
DLosc
1

MATL, Luis Mendo , Hamminggewicht mit geringem Hamminggewicht berechnen

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

Ich habe getestet, wie man Zahlen eingibt, und habe das Hammergewicht auf OEIS gefunden .

Dann habe ich nach PPCG gesucht, versucht, Zeichenfolgen einzufügen, und es hat funktioniert.

Boboquack
quelle
Wie ich in der Cops Challenge kommentiert habe, ist dies kein wirklicher Knackpunkt für mein Ergebnis. Leider denke ich, dass diese Antwort gelöscht werden muss
Luis Mendo
1

Rubin, Histokrat , implementiere eine Wahrheitsmaschine

Der Code definiert ein iteriertes Funktionssystem, das ausgeführt wird f(n) = n*(3*n-1)/2, bis nMod 7 den Wert 0 hat. Die Eingabe von wird 0daher sofort abgebrochen (nach 0einmaligem Drucken ). Die Eingabe von 1give 1führt zu einer Endlosschleife beim Drucken 1. Andere Eingaben werden nach 1-3 Schritten beendet, wenn die Initiale nzu 0, 2, 3, 5 oder 6 mod 7 kongruent ist, oder werden für immer größer, wenn sie zu 1 oder 4 mod 7 kongruent sind. Aber das ist irrelevant.

DLosc
quelle
1

Hexagony, 548 Bytes, Martin Ender

Dies ist die Herausforderung " Drucke jeden Buchstaben, den dein Programm nicht hat "!

Drucke:

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

Welches der Ausgabe in diesem sehr ähnlich ist . Der Hinweis hier war, dass der letzte .nicht gedruckt wurde. Auch der Code selbst hatte keine Buchstaben, und wir alle wissen, dass die Phrasen in der Ausgabe alle Buchstaben des Alphabets enthalten.

Stewie Griffin
quelle
0

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

Verwenden Sie die Formel von xkcd, um die Weltbevölkerung zu approximieren

Ich habe gerade nach Herausforderungen gesucht, die Schaltjahre betrafen (wegen der decodierten Teilbarkeit durch vier Checker) und die keine Eingabe erforderten.

Maltysen
quelle
Ja! Ich wusste, dass es wegen des %4und des offensichtlich sein würde strftime, aber gute Arbeit für das Erkennen der wichtigen Teile des Codes (das meiste davon war Kauderwelsch)
FlipTack
Ah verdammt, ich kam auch näher. Ich hatte herausgefunden, dass es etwas mit Daten zu tun hatte und 2005 und 2016/2017 war. Gute Arbeit.
Jodler
Ich bin überrascht, dass keiner von Ihnen einfach den Code ausgeführt hat, der die Ausgabe generiert 7.3 328, und danach gesucht hat. Die Herausforderung kommt sofort.
FlipTack 18.11.16
0

Mathematica, JHM , Naturbau

Der unäre Operator ±berechnet eine satztheoretische Darstellung der natürlichen Zahlen.

Martin Ender
quelle
0

Ruby, wat , 400. Frage Feier / Herausforderung

Das war das erste, was ich bei der Suche nach "400" gefunden habe. Das heißt, die Herausforderung scheint falsch zu sein und sollte ein Popcon sein und sollte wahrscheinlich auch geschlossen werden, weil sie keine objektiven Anforderungen hat.

Martin Ender
quelle