Dies ist eine Herausforderung für Bullen und Räuber . Der Thread der Cops zu dieser Herausforderung ist hier
Eine interessante Frage zum Nachdenken ist die folgende:
Wenn ich eine Folge von Zahlen habe, wie viele muss ich angeben, bevor klar ist, über welche Folge ich spreche?
Wenn ich zum Beispiel über die positiven ganzen Zahlen in der Reihenfolge ab sprechen möchte , könnte ich sagen , aber ist das wirklich genug?
Ich habe eine Möglichkeit, diese Frage zu beantworten und ein Code-Golfer zu sein. Es geht um Code-Golf. Sie haben genügend Terme einer Sequenz angegeben, wenn der kürzeste Code, der diese Terme erzeugt, alle Terme der Sequenz erzeugt. Wenn wir dies in Form von Code-Golf betrachten, würde dies bedeuten, dass Sie genügend Testfälle bereitgestellt haben, so dass der kürzeste Code, der die Testfälle besteht, die gewünschte Aufgabe erfüllt.
Herausforderung
Diese Herausforderung ist eine Herausforderung für Polizisten und Räuber . In welchen Cops Testfälle präsentieren und Räuber einen kürzeren Weg finden müssen, um andere Testfälle als die beabsichtigte Sequenz zu fälschen. Cops werden die folgenden Dinge präsentieren:
Ein Teil des Codes, der eine positive Ganzzahl als Eingabe annimmt und eine Ganzzahl als Ausgabe erzeugt. Dieser Code kann entweder null oder eins sein, aber es sollte klar sein, was die Indizierung ist. Dieser Code definiert Ihre Sequenz.
Alle relevanten Plattform- oder Sprachanforderungen, die sich auf die Ausgabe auswirken können, z. B. die Größe von longint.
Eine Zahl , zusammen mit den ersten n Begriffen der Sequenz, wie vom Code berechnet. Diese dienen als "Testfälle".
Räuber werden ein Programm in derselben Sprache finden, das kürzer ist als das vorgestellte und alle Testfälle besteht (erzeugt die gleiche Ausgabe für die ersten Eingaben wie der Code des Polizisten). Der Code des Räubers muss sich auch in der Ausgabe des Cop-Programms für eine Nummer unterscheiden, die größer als n ist .
Wertung
Räuber werden in der Anzahl der Risse gewertet, die sie finden, wobei mehr Risse besser sind. Eine Antwort kann erneut geknackt werden, indem eine gültige Antwort gefunden wird, die kürzer als der ursprüngliche Riss ist. Wenn eine Antwort ein zweites Mal geknackt wird, wird der Punkt eher dem zweiten als dem ersten Cracker gegeben.
quelle
Antworten:
cQuents , Stephens Antwort , 3 Bytes
Probieren Sie es online!
Wie es funktioniert
Sieht so aus, als ob die Sequenzen identisch sein sollten, aber das gibt
12345678910
für einen = 10
Weile"::$
gibt1234567891
.quelle
JavaScript, fəˈnəˈtɪks Antwort (17 Bytes)
Nun, es war einfach, eine viel niedrigere Punktzahl hart zu codieren ... Weicht von der Referenzimplementierung für jeden Eintrag , 0-indiziert ab. Dies verwendet einen sehr bekannten JS-Golftick: Indizieren in eine Sequenz mit einer Ganzzahl, die die Grenzen überschreitet, gibt einen falschen Wert ( ) zurück, sodass sie in diesem Fall einfach mit einem logischen ODER ( ) auf einen Standardwert erzwungen werden kann In diesem Fall wird der letzte Term der Sequenz behandelt, aber auch die folgenden.x ≥ 6
undefined
||
22
Testen
Alternativ können Sie es auch online versuchen!
quelle
Haskell , Laikonis Antwort , 15 Bytes
Probieren Sie es online!
Normalerweise würde ich so etwas in einem Kommentar erwähnen, aber dann dachte ich, Bullen und Räuber sind ein bisschen härter.
Dies ist nur die Antwort von BMO abzüglich des Sonderfalls für
b 42
. Da Laikonis Original über Gleitkommazahlen verfährt, ist es nicht erforderlich, eine Zahl zu finden, die groß genug ist, um Rundungsfehler zu liefern, jedoch nicht in exakterInteger
Arithmetik. Beispielsweise:quelle
Python 2 , Antwort von xnor , 43 Bytes
Der erste Unterschied tritt für :n = 69
Probieren Sie es online!
Credits
Ein Großteil des Verdienstes für diesen Riss muss an @ Mr.Xcoder gehen, der zuerst einen Kommentar zu einem möglichen Angriff mit dieser Methode gepostet hat, und an @PoonLevi, der eine 44-Byte-Lösung gefunden hat.
Wie?
Theorie
Was dazu führt:
Implementierung
<2
==1
Probieren Sie es online!
Probieren Sie es online!
Der letzte Trick ist,
n<1or
statt zu verwendenn and
. Dies ist genauso lang, bewirkt jedoch, dass die letzte Iteration True anstelle von 0 zurückgibt, und fügt daher den fehlenden Offset zu jedem Term hinzu.quelle
Python 3 , crashoz , 45 Bytes
Probieren Sie es online!
x*60-x**3*10+x**5/2-x**7/84
quelle
JavaScript (ES6), Arnauld's Antwort (10 Bytes)
Probieren Sie es online!
quelle
Haskell , Laikonis Antwort ,
2622 Bytes-4 Bytes ohne Infix
div
, danke an Laikoni !Probieren Sie es online!
Erläuterung
ceiling(realToFrac n/2)
div(n+1)2
quelle
((n+1)`div`2)
->div(n+1)2
.> <> , Antwort von crashoz 203 Bytes
Probieren Sie es online!
Ich wollte etwas Kluges damit anfangen, dass ungerade / gerade Zahlen
n=20
bis auf ein wiederholtes Element in der Mitte gleich waren, aber es war einfacher, jedes Element nur hart zu codieren.Die Eingabe erfolgt über die
-v
Flagge. Druckt nichts für Elemente über 34.quelle
Pascal (FPC) , AlexRacers Antwort , 80 Bytes
Probieren Sie es online!
Wann0 ≤ n ≤ 120 Die Ausgänge sind identisch, aber wann n = 128 die obigen Code-Ausgaben 127 , während AlexRacer den Code ausgibt 126 .
Dies scheint eine späte Antwort zu sein, aber trotzdem danke @AlexRacer für ein gutes Puzzle!
quelle
JavaScript, fəˈnəˈtɪks Antwort (12 Bytes)
Dies funktioniert für die angegebenen Werte, schlägt jedoch für viele andere Werte fehl (z. B.x = 6 ) aufgrund von Präzisionsfehlern.
Testen
Alternativ können Sie es auch online versuchen!
quelle
JavaScript, fəˈnəˈtɪks Antwort (17 Bytes)
Sie können im TIO-Link oder im Stack-Snippet-Ergebnis sehen, dass es bei Einträgen über fehlschlägt15 .
Wenn Genauigkeit nur für erforderlich wären ≤ 14 (Der Erste 15 Werte),
x=>Math.exp(x)|1
würde dann auch für 16 Bytes funktionieren.Testen
Alternativ können Sie es auch online versuchen!
quelle
Schale , die BMOs 5-Byte mit
3knackt2 Byte-1 dank BMO (
LdΣ
->LΣ
da, wenn man sich einTnum
,L
führt „von String - Darstellung Länge“)Probieren Sie es online!
Die digitale Länge der Dreieckszahlen * stimmt übereina ( 0 ) ⋯ a ( 23 ) dann unterscheidet sich bei a ( 24 ) 3 während 4 .
... wenn die
LΣ
Erträge←d+16
ergibt* WoT( 0 ) = 0 hat eine digitale Länge von 1 (nicht 0 )
quelle
L
undLd
äquivalent sind, sparen Sie ein Byte;)L
Überschreibungen nicht als "Länge der Zeichenfolgendarstellung" für erkanntTnum
.> <> , Antwort von Aiden F. Pierce , 36 Bytes
Probieren Sie es online!
Eine andere Lösung mit jedem Wert, der pro Zeile fest codiert ist. Da die ursprüngliche Antwort auch größtenteils hart codiert war, fühle ich mich nicht zu schuldig.
quelle
JavaScript, f answernəˈtɪks Antwort , 23 Bytes
Kehrt zurück0 zum n ≥ 14 .
Probieren Sie es online!
Wie?
Der Ausdruck wird
`${73211e9}`
zu der Zeichenfolge erweitert"73211000000000"
und stellt eine Nachschlagetabelle mit 14 Werten bereit, die von 14 subtrahiert werden, was die erwartete Sequenz ergibt.Zumn ≥ 14 , Das Ergebnis ist:
21 Bytes
Rückgaben ≥ 14 , die als gültige Ausgabe angesehen werden können oder nicht.
NaN
fürProbieren Sie es online!
quelle