In der Übersetzung verloren

15

Dies ist ein wenn Sie nicht mit dem Format vertraut sind. Klicken Sie auf das Tag, um zum Wiki zu gelangen. Es wird keinen Räuberfaden für diese Frage geben.

Bullen

Als Cops müssen Sie zwei Sequenzen aus der Online-Enzyklopädie der ganzzahligen Sequenzen auswählen und ein Programm schreiben, das das n-te Element einer Sequenz als Eingabe verwendet und das n-te Element der zweiten Sequenz ausgibt. Anschließend geben Sie eine Antwort einschließlich des Codes und lassen die ausgewählten Sequenzen aus. Räuber werden versuchen, die Sequenzen zu finden, die Sie ausgewählt haben. Wenn Sie die Sequenzen finden, die Sie sich vorgestellt haben, oder einige andere Sequenzen, für die Ihr Programm Ihre Antwort als geknackt markieren muss . Wenn ein Räuber Sie mit einem Riss informiert, von dem Sie glauben, dass er nicht gültig ist, können Sie einen Beweis vorlegen, dass es sich nicht um einen Riss handelt. Ansonsten müssen Sie es so markieren.

Laut den üblichen Antworten, die seit 7 Tagen nicht geknackt wurden, können sie als sicher eingestuft werden. Ein Cop kann seine Antwort als sicher markieren, indem er die Sequenzen aufdeckt, an die er gedacht hat. Sobald eine Antwort sicher ist, kann sie nicht mehr geknackt werden.

Das Ziel ist es, die Anzahl der Bytes Ihres Programms zu minimieren, während Sie ungerissen bleiben.

Beispiel

Der folgende Python-Code übersetzt das n-te Element von A000290 (die quadratischen Zahlen) in A000217 (die dreieckigen Zahlen):

lambda x:sum(range(0,int(x**.5+1)))

Bestimmungen und Anforderungen

  • Wenn Sie eine Sequenz auswählen, deren Endlichkeit nicht nachgewiesen wurde, müssen Sie alle Begriffe ausgeben, die möglicherweise nicht nur auf der OEIS-Seite aufgeführt sind

  • Als Ausnahme zu den vorherigen Regeln müssen Sprachen ohne Ganzzahlen mit unendlicher Genauigkeit keine Zahlen außerhalb ihres Bereichs ausgeben oder eingeben.

  • Die Größe Ihrer Eingabesequenz darf nachweislich nicht kleiner als die Ausgabesequenz sein.

  • Ihre Eingabesequenz darf keine Wiederholungselemente enthalten (ansonsten ist die Aufgabe so gut wie unmöglich).

  • Das OEIS enthält einen Index auf seiner Seite (die erste Zahl nach dem "OFFSET" -Header). Dies ist standardmäßig Ihr Offset für n (n entspricht dem Index für das erste Element in der Sequenz), wenn Sie einen anderen Index auswählen, den Sie in angeben müssen Deine Antwort.

  • Wenn Sie einen anderen Versatz als den im OEIS aufgelisteten auswählen, müssen Sie dennoch alle Elemente in Ihrer Eingabesequenz dem entsprechenden Element in Ihrer Ausgabesequenz zuordnen.

  • Wenn Ihr Programm eine Eingabe erhält, die nicht in der Eingabereihenfolge enthalten ist, kann es tun, was es will (undefiniertes Verhalten). Es ist jedoch wahrscheinlich in Ihrem besten Interesse, weiterhin eine Ganzzahl auszugeben.

  • Es ist unsportlich, absichtlich die Ausführung Ihres Codes zu erschweren, sei es durch zeitaufwändige Ausführung oder durch unfreie Sprachauswahl . Während ich letztere durchsetzen werde, kann ich erstere nicht objektiv durchsetzen. Ich bitte Sie jedoch, es nicht zu versuchen, um Spaß zu haben, da dies die Herausforderung speziell für diejenigen mit schwächeren Computern erschwert.

Räuber

Deine Aufgabe als Räuber ist es, ungerissene, unsichere Antworten auszuwählen und die Sequenzen zu finden, zwischen denen sie liegen. Wenn Sie eine Lösung finden, die funktioniert (nicht unbedingt die von der Polizei beabsichtigte Lösung), kommentieren Sie die Sequenzen zu der entsprechenden Antwort.

Räuber sollten sich nicht zu sehr darum kümmern, zu überprüfen, ob zwei bestimmte Sequenzen eine Lösung sind. Sie sollten eine Lösung veröffentlichen, wenn sie mit allen Einträgen in OEIS übereinstimmt. Wenn dies nicht die Reihenfolge ist, an die ein Polizist gedacht hat, kann der Polizist den Beweis erbringen, dass es falsch ist, oder ihn als geknackt markieren, wenn er keinen findet.

Weizen-Assistent
quelle
3
Wie kann ein Räuber sicher sein, dass seine Antwort für alle Eingaben richtig ist? Müssen sie es mathematisch beweisen?
Leo
1
@Leo Ein Räuber sollte eine Lösung posten, wenn sie mit allen Einträgen in OEIS übereinstimmt. Wenn dies nicht die Reihenfolge ist, die ein Polizist im Auge hatte , kann er den Beweis erbringen, dass dies falsch ist oder markieren es als geknackt, wenn sie keine finden können. Ich werde den Thread des Räubers aktualisieren.
Weizen-Assistent
2
Es ist schwierig, die Grenze zwischen gängigen Annahmen und unbewiesenen Ideen zu ziehen. Im Interesse der Klarheit würde ich sagen, Sie müssen nachweisen können , dass Ihre Antwort funktioniert.
Dennis
1
Ich habe das Gefühl, dass einige wirklich nette Lösungen auf dumme Weise geknackt werden können wie oeis.org/A000004 -> oeis.org/A000012
Wolfram
2
@ Tennis Ich denke, das ist ein guter Punkt. Es ist ein Mist, dass es für die Leute keine Möglichkeit gibt, einen Repräsentanten zu bekommen, um Risse zu finden, da es so aussieht, als ob das für diese Herausforderung ziemlich schwierig ist.
0

Antworten:

6

Jelly , 14 Bytes (Gebrochen von @Wolfram)

+66%444µ111<µ¡

Probieren Sie es online!

Es sollte ziemlich offensichtlich sein, was dies bewirkt. Tatsächlich gebe ich zum Nutzen der Nicht-Jelly-Benutzer sogar eine Erklärung:

Erläuterung

+66%444µ111<µ¡
       µ    µ¡  Run the transformation
+66%444           "add 66, then modulo 444"
        111<    once if 111 is less than the input, zero times otherwise 

Die Frage ist, warum es das tut?

Riss

Die fraglichen Sequenzen waren A201647 und A201647 . Sie sind endlich und unterscheiden sich nur in den letzten beiden Elementen:

  • 3, 5, 7, 9, 11, 15, 21, 165, 693
  • 3, 5, 7, 9, 11, 15, 21, 231, 315

Wenn also die Eingabe niedrig ist, lasse ich sie gleich und passe einfach eine Funktion an die Transformation der letzten beiden an.


quelle
@ WheatWizard: Wenn Sie glauben, dass Sie einen Vorteil daraus ziehen können, probieren Sie es aus. Aber Sie müssen schnell sein, denn wenn jemand anders es mit aktiviertem Cache testet, verschmutzt er den Cache letztendlich für alle nach ihm.
Durch Deaktivieren des Ausgabecaches von @WheatWizard wird sichergestellt, dass Sie ein neues Ergebnis vom Server erhalten. Dieses neue Ergebnis wird jedoch weiterhin zwischengespeichert.
Dennis
1
@WheatWizard Oder fügen Sie beim Testen einen Cache-Breaker hinzu: eine zufällig ausgewählte Zeichenfolge als Teil eines Kommentars oder eines nicht verwendeten Eingabefelds.
Dennis
+1 Diese Antwort ist wirklich einfach in der Natur, stellt aber immer noch eine Herausforderung für die Räuber
Kritixi Lithos
3

Jelly , 7 Bytes (Gebrochen von Jonathan Allan)

ÆFḅÆdÆẸ

Probieren Sie es online!

Was es macht

ÆFḅÆdÆẸ  Main link. Argument: n

ÆF       Factor n into prime-exponent pairs.
   Æd    Compute σ, the number of divisors of n.
  ḅ      Convert each pair from base σ to integer.
     ÆẸ  Yield the integer whose prime signature (infinite sequence of all prime
         exponents, including zeroes, in order) is equal to the result.
Dennis
quelle
3
Möglicherweise gibt es andere gültige Zuordnungen, aber die, an die Sie sich meines Erachtens erinnert haben, waren Primzahlen - A000040 bis 2 ^ (2p + 1), p prime - A100626 .
Jonathan Allan
@ JonathanAllan Ich kam auch zu A000040 -> A100626, obwohl Sie meine langsamen Finger schlagen
Ahemone
Wir können auch sehen , dass es halten wird: wenn der Eingang eine Primzahl ist, p, ÆFErträge (p,1)und ÆdRenditen 2, so wird uns 2p+1, was bedeutet , ÆẸdie erste Primzahl ergeben wird, 2an die Macht dieses Ergebnis erhöht 2^(2p+1).
Jonathan Allan
@ JonathanAllan Ja, das war es, was ich wollte.
Dennis
2

Python 3, 256 Bytes ( geknackt! )

from math import*
def p(i,m):
 r=0;d=floor(log(i))
 for y in range(d):r+=(pow(16,d-y-1)%(8*y+m))/(8*y+m)
 o=-1;y=d
 while r!=o:o=r;r+=pow(16,d-y-1)/(8*y+m);y+=1
 return r
def q(n):r=4*p(n,1)-2*p(n,4)-p(n,5)-p(n,6);return floor((1-(-r%1)if r<0 else r%1)*16)

Probieren Sie es online!

Tut mir leid, wenn dieser Code schrecklich aussieht, ich denke, das ist mein erster Python-Golf. Das Casting in Python erleichtert das Codieren.

betseg
quelle
Ich nehme an, die fragliche Funktion ist q?
Weizen-Assistent
Außerdem kscheint die Variable nicht verwendet zu werden, sodass Sie einige Bytes sparen können, indem Sie sie entfernen.
Weizen-Assistent
Ist es A001671 bis A062964 ?
Weizen-Assistent
@ WheatWizard ja, danke und ja.
Betseg
2

Verarbeitung , 184 Bytes, SICHER!

int x(int y){int b=TRIANGLES-MITER;for(int i=OVERLAY/BURN;i>#fffffe;b*=(int)pow(y,(MOVE-HAND+0.)/(int)sqrt(red(color(-1<<16))/(int)log(color(0)*color(-1)))),i-=QUAD/DARKEST);return b;}

Eine Funktion, die ein int aufnimmt und ein int zurückgibt. Solange sich die eingegebene Nummer im intBereich befindet, sollte das Programm einwandfrei funktionieren.

Das ist nicht langsam, nur unlesbar. Viel Glück!


Ich bin überrascht, dass diese Einreichung so lange gedauert hat. Na ja, zumindest ist es die erste sichere Einreichung :)

A000578 bis A000290

Mit anderen Worten: die Würfel zu den Quadraten.

Erläuterung

Bei der Beantwortung der Frage, ob keine Zeichenfolgen (oder Zahlen) angehängt sind , habe ich eine Liste von Verarbeitungskonstanten gefunden, die Ints darstellen. Hat zum Beispiel CORNEReinen Wert von 0. Die vollständige Liste finden Sie hier . Um den Wert einer Konstanten zu ermitteln, können Sie einfachprint .

Auf diese Weise entschied ich mich, bestimmte Zahlen mit Kombinationen dieser Konstanten zu tauschen, um sie zu verschleiern. Folgendes erhalten Sie also, wenn Sie die Konstanten durch ihre jeweiligen int-Werte ersetzen.

int x(int y){int b=9-8;for(int i=512/8192;i>#fffffe;b*=(int)pow(y,(13-12+0.)/(int)sqrt(red(color(-1<<16))/(int)log(color(0)*color(-1)))),i-=16/16);return b;}

Selbst jetzt wird nicht der vollständige Code angezeigt. Die Farben bleiben erhalten. Bei der Verarbeitung haben Farbvariablen Int-Werte, z. B. Weiß ( #ffffff) ist -1, #fffffeist -2, #fffffdist -3und so weiter. Dies kann durch printdie Farbe ermittelt werden. Vereinfachen wir also die Farben.

int x(int y){int b=9-8;for(int i=512/8192;i>-2;b*=(int)pow(y,(13-12+0.)/(int)sqrt(red(color(-1<<16))/(int)log(-16777216*-1))),i-=16/16);return b;}

Wir sind ungefähr auf halbem Weg :) Um die Werte zu verstehen, müssen wir die numerischen Ausdrücke vereinfachen.

int x(int y){int b=1;for(int i=0;i>-2;b*=(int)pow(y,(1.)/(int)sqrt(red(color(-65536))/(int)log(16777216))),i-=1);return b;}

Viel klarer! Vereinfachen wir nun den Logarithmus.

int x(int y){int b=1;for(int i=0;i>-2;b*=(int)pow(y,(1.)/(int)sqrt(red(color(-65536))/(int)16.6...)),i-=1);return b;}


int x(int y){int b=1;for(int i=0;i>-2;b*=(int)pow(y,(1.)/(int)sqrt(red(color(-65536))/16)),i-=1);return b;}

Fast vorbei! Jetzt müssen wir diesen (int)sqrt(red(color(-65536))/16))Bissen herausfinden . color(-65536)ist rot, also rgb(255, 0, 0). Jetzt gibt die red()Funktion den Wert der roten Komponente im Argument zurück (das ist eine Farbe). Wie viel Rot steckt in Rot? Die Antwort lautet 255: Damit bekommen wir

(int)sqrt(255/16))
(int)sqrt(15)
(int)3.8...
3

Das Einsetzen in das Programm führt zu:

int x(int y){int b=1;for(int i=0;i>-2;b*=(int)pow(y,(1.)/3),i-=1);return b;}

Ja, es ist geschafft!

int x(int y){                        // y is the cube
  int b=1;                           // variable that holds the final result
  for(int i=0;                       // for-loop that
          i>-2;                      // loops twice
          b*=(int)pow(y,(1.)/3),     // multiply b by the cube root of y
          i-=1);                     // decrement the looping variable
  return b;                          // finally return b
}

Zusammenfassend ergibt dies das Quadrat (durch zweimaliges Multiplizieren in der for-Schleife) der Kubikwurzel der eingegebenen Zahl.

Kritixi Lithos
quelle
0

Mathematica (oder was auch immer) -  Cracked!

f[x_] := Quotient[ 366403414911466530559405368378193383110620062 - 
    755296348522256690003418238667147075159564695 x + 
    525778437135781349270885523650096958873079916 x^2 - 
    156594194215500250033652167655133583167162556 x^3 + 
    20861131421245483787723229627506507062999392 x^4 - 
    1181515772235154077024719095229309394979146 x^5 + 
    29382627265060088525632055454760915985604 x^6 - 
    308672970015057482559939241399297150364 x^7 + 
    1087516675449597417990589334580403666 x^8 - 
    312989984559486345089577524231879 x^9, 
  265451130886621254401938908479744271974400 ]

Ich weiß, dass Mathematica keine freie Software ist, aber diese Funktion ist trivial, um auf eine beliebige Lieblingssprache zu portieren, in der Sie es ausführen möchten. Sie berechnet buchstäblich den Wert des gegebenen Grad-9-Polynoms, das an der Eingabe-Ganzzahl ausgewertet wird, und nimmt dann den Ganzzahl-Quotienten von diesem Wert und der 42-stelligen Zahl in der letzten Zeile. Wertet zum Beispiel f[100]zu aus -3024847237.

Greg Martin
quelle
2
A003173 bis A165892 . Nicht wirklich ein Programmierproblem, aber;)
Leo
2
Wie auch immer, da Mathematica nicht kostenlos ist, habe ich dies geschrieben , um es in eine Python-Funktion zu verwandeln
Leo,
@Leo: Großartige Arbeit! Es gibt auch ein Osterei in der Funktion; hast du es gefunden? : D
Greg Martin
Uhhh ... Nope :(
Leo
Um eine Neun-Elemente-Menge auf eine andere Neun-Elemente-Menge abzubilden, würde ich nur ein Polynom vom Grad 8 benötigen. Sie könnten den (richtigen) Schluss ziehen, dass es einen weiteren Eingabewert gibt, den ich einem bestimmten Ausgabewert zugeordnet habe. Lassen Sie mich wissen, ob (wann) Sie es finden :)
Greg Martin