Suche nach geheimen Tauschsequenzen

19

Dies ist ein Herausforderung kann der Räuber Thread gefunden werden hier .

Ihre Aufgabe ist es, Code zu schreiben, der eine OEIS-Sequenz ausgibt und den Namen der Sequenz im Code ( A______) enthält sowie eine zweite separate Sequenz ausgibt, wenn der Name der Sequenz im Code in den Namen der zweiten Sequenz geändert wird.

Hier ist ein Beispiel in Haskell, das für A000217 und A000290 funktioniert .

f x|last"A000217"=='0'=x^2|1>0=sum[1..x]

Probieren Sie es online!

Sie müssen dann eine der beiden Sequenzen aufdecken und den Code, der die zweite Sequenz geheimhält. Räuber werden versuchen, herauszufinden, was die verborgene Sequenz ist. Wenn ein Räuber feststellen kann, wie Ihre Sequenz lautet (oder eine andere Sequenz, die den Kriterien entspricht), ist Ihre Antwort geknackt. Wenn dies in einer Woche nach dem Posten Ihrer Antwort nicht der Fall ist, können Sie Ihre Antwort als sicher markieren und die beabsichtigte Lösung zur Überprüfung offenlegen. Sichere Antworten können nicht geknackt werden.

Input-Output

Von hier genommen

Ihr Code kann eine Funktion oder ein vollständiges Programm sein, das n über eine Standardeingabemethode annimmt und den n- ten Term der Sequenz ausgibt, wie durch den bereitgestellten Index auf der OEIS-Seite indiziert.

Sie müssen alle Werte unterstützen, die in den OEIS-b-Dateien für diese Sequenz angegeben sind. Jede Zahl, die nicht in den b-Dateien enthalten ist, muss nicht unterstützt werden.

Wertung

Ihre Punktzahl ist die Anzahl der Bytes in Ihrem Code, wobei weniger Bytes besser sind.

Weizen-Assistent
quelle
1
Ihre Punktzahl ist die Anzahl der Bytes in Ihrem Code, wobei weniger Bytes besser sind. - Warum ist das dann nicht Code-Golf ?
Mr. Xcoder
@ Mr.Xcoder habe ich vergessen. Lies nicht zu viel in diese Dinge hinein;)
Weizen-Zauberer
Soll Code also eine Sequenz mit einer bestimmten Länge (definiert oder nicht?) Oder ein n-tes Element der Sequenz ausgeben?
Dead Possum
@DeadPossum n- ter Begriff .
Mr. Xcoder
@ WheatWizard schätze ich habe woanders gesucht, aber überwachen. Mein böses
Totes Opossum

Antworten:

5

Python 3 , 62 Bytes, A017016 ( Gebrochen )

n=int(input())
print(sum(1for i in"A017016"if i>"0")*-~n//-~n)

Probieren Sie es online!

Mr. Xcoder
quelle
Ich habe versucht, es so verschleiert wie möglich zu machen ...
Mr. Xcoder
1
@officialaimm Ich habe das mit Absicht gemacht. Ich möchte das verschleiern. Mir ist das Golfen eigentlich egal, weil Python keinen Code-Golf-Obfuscation-Wettbewerb
gewinnt
1
Geknackt?
Totalhuman
War das übrigens die beabsichtigte Lösung?
Totalhuman
@totallyhuman Ja, es war die beabsichtigte Lösung.
Mr. Xcoder
4

Japt , 13 Bytes ( geknackt )

Es gibt (mindestens) eine andere Lösung, wenn jemand anders dagegen vorgehen möchte.

p#A000012uCnG

Probieren Sie es online
A000012


Erläuterung

#gefolgt von einem Zeichen in Japt, gibt uns den Zeichencode dieses Zeichens, an #A=65den der Rest der Zahl angehängt wird, und gibt uns 65000012oder 65000290.

uist die Modulo-Methode (sie unterscheidet sich %darin, dass sie immer eine positive Zahl zurückgibt).

Die nMethode subtrahiert die Nummer, auf die sie angewendet wurde, von der an sie übergebenen Nummer. Cund Gsind die Japt-Konstanten für 11 bzw. 15. Also, CnGgibt uns 4.

Wir haben jetzt 65000012%4=0und 65000290%4=2. Die pMethode erhöht die Zahl, auf die sie angewendet wird (in diesem Fall implizit die Ganzzahl der Eingabe U), um die Potenz der ihr übergebenen Zahl und gibt uns die 2 endgültigen Formeln von U**0und U**2.

Zottelig
quelle
geknackt?
Amtszeit
1
@officialaimm: Richtig, gut gemacht.
Shaggy
Da ich Japt nicht kenne, hatte ich angenommen, dass die zu erhöhende Kraft war (sum_of_numbers_in_oeis(excluding 'A') + 1)%4. : D
officialaimm
1
@officialaimm: Ich mag es zu sehen, wie Räuber Herausforderungen in Sprachen knacken, die sie nicht kennen.
Shaggy
A020338 funktioniert möglicherweise auch , wenn die Eingabe von Zeichenfolgen zulässig ist (1-indiziert).
Bubbler
4

MATL , 30 29 Bytes ( geknackt )

A077430I\2-|Gw^1Mwx*10&Ylk1+&

A077430

Probieren Sie es online!

-1 Byte dank @Sanchises

Cinaski
quelle
1
Sollte jetzt behoben sein
Cinaski
1
Nur ein Hinweis: Sie können "3" durch I1 Byte ersetzen .
Sanchises
@Sanchises Danke! I
Wusste
2
Sie sollten Tabelle 3 auschecken. Zusammen mit l(eins) und O(null) sollten Sie fast nie ein Leerzeichen in Ihren MATL-Programmen verwenden müssen. Beachten Sie in diesem Zusammenhang auch Tabelle 7, die viele nützliche vordefinierte Konstanten enthält (beachten Sie jedoch, dass z. B. 4X2Z%eine Kurzform verwendet wird 1Z%)
Sanchises,
Rissig .
3

C #, 28 Bytes ( geknackt )

n=>n*n*("A000290"[6]<49?1:n)

Funktioniert mit A000290 .

Ein einfacher Einstieg.

Probieren Sie es online!

TheLethalCoder
quelle
Es kann noch nicht geknackt werden> _ <
Mr. Xcoder
@ Mr.Xcoder Kann jetzt :)
TheLethalCoder
1
Craked (obwohl nicht wirklich geknackt!)
Shaggy
@ Shaggy Ich wollte nur den Ball ins Rollen bringen: P
TheLethalCoder
3

Python 2, 43 Bytes, A000079 ( Gebrochen )

Probieren Sie es online aus

lambda n:((sum(map(ord,'A000079'))*2)%8)**n
Totes Opossum
quelle
Geknackt?
TheLethalCoder
@TheLethalCoder Na ja .. Es passt, aber es ist nicht das, was ich gewählt habe. Außerdem habe ich vor deinem Kommentar Änderungen vorgenommen, und es passt nicht mehr
Dead Possum
5
Du hast es nach dem Posten geändert? Ein bisschen unfair.
TheLethalCoder
@TheLethalCoder Ich habe es getan, um vor dieser falsch-positiven Sequenz zu schützen: C
Dead Possum
1
Ich weiß nicht, wie man einen Eintrag bearbeitet, aber anhand der Regeln im OP: " Wenn es ein Räuber schafft, zu bestimmen, wie Ihre Sequenz ist (oder eine andere Sequenz, die den Kriterien entspricht), ist Ihre Antwort geknackt ", nur zu Ihrer Information.
Alleks
3

C #, 75 Bytes, ( geknackt )

n=>{int r=1,e=3-0xA000244%2;for(;n>0;e*=e){r*=(n%2>0?e:1);n>>=1;}return r;}

A000244

Probieren Sie es online!

TheLethalCoder
quelle
Gebrochen
Lynn
@Lynn Was hat es verschenkt? Die erste Sequenz?
TheLethalCoder
3
Sie nehmen die OEIS-Nummer % 2- das Programm kann also buchstäblich nur zwei Dinge tun , abhängig vom Ergebnis: eins für 0und eins für 1. Also habe ich eine ungerade Zahl an ihre Stelle gesetzt, und die Herausforderung hat sich selbst gebrochen.
Lynn
@Lynn Ich nehme an, ich habe nicht daran gedacht, diesen Teil zu verschleiern.
TheLethalCoder
2

Python 2 , 53 Bytes, A000012 [geknackt]

lambda x:len(`x**(sum(map(int,'A000012'[1:]))==22)`) 

Probieren Sie es online!

Die nächste Sequenz ist A055642 (Länge der Ziffern in einer Dezimalzahl). Wofür die Zahl sich auswertet, da die Summe der Ziffern in OEIS gleich 22 ist; Der Wert len ​​(...) berechnet somit die tatsächliche Länge der eingegebenen Nummer für 'A055642'. Für Sequenzen A000012 (oder eine andere als A055642. Die Länge ist immer gleich Eins, da die ausgewertete Zahl '1' ist.

officialaimm
quelle
1
Geknackt?
Totalhuman
1

Python 3, 65 Bytes, A000027, geknackt

a=lambda a,n=((int("A000027",11)-0x103519a)%100%30+1)/2:a//(14-n)

Yay verrückte Arithmetik!

Pfeffer
quelle
Ähm, A004526, gibt an, n=12was richtig aussieht, aber das Ergebnis wird um einen Index abweichen. Habe ich einen Käfer geknackt oder bin auf einen sehr cleveren roten Hering hereingefallen?
Jonathan Allan
Weder; Sie haben A004526 falsch interpretiert, was eindeutig besagt a(n) = floor(n/2); Die aufgeführte Sequenz beginnt mit 0. Dies ist jedoch die beabsichtigte Lösung.
Paprika
Oh ja der Offset - stimmt (puh), danke! Na dann geknackt .
Jonathan Allan
1

Smalltalk, 148 Bytes, sicher!

|x o|x:=(16rA018253*0.00861-1445345)floor. o:=OrderedCollection new. 1 to:x/2 do:[:i|x\\i=0 ifTrue:[o add:i]].o add:x.^o at:stdin nextLine asInteger

A018253

Nimmt eine ganze Zahl als Eingabe, die Reihenfolge ist 1-basiert.

Die beabsichtigte zweite Sequenz ist A133020 . In der Beschreibung zu A018253 finden Sie einen Link zu einer Liste von Einträgen für Folgen, die sich auf die Teiler von Zahlen beziehen . In dieser Liste steht A133020 unter Quadratteilen: 100² . Wenn Sie die gesamte Sequenz sehen möchten, fügen Sie sie Transcript show: o printString; cr.vor der return- ^Anweisung in den Code ein.


quelle
1

Haskell, 226 Bytes, sicher!

Nicht sicher, ob schlau oder hässlich, vielleicht beides ...

o n=read.pure.(!!n)$"A001906"
m::Integral a=>[a->a->a]
m=[const,(+),(-),(*),div,(^)]++(flip<$>m)
l=o 1:o 3-o 1:zipWith(m!!(o 6+o 3-o 2))(tail l)l
f=(l!!).((m!!(o 4+o 5+o 6-2*o 1-o 2))$sum[1|n<-[1..6],odd(o n)]).((m!!o 6)$o 3)

Das berechnet jetzt A001906 , aber es sollte in der Lage sein, viele Sequenzen zu generieren.

Probieren Sie es online!


Lösung: A131078

Sie fragen sich, ob dies zu schwierig war oder niemand es versuchte?

o 1bis o 6sind die Ziffern der Seriennummer, mist eine Liste von Operationen. list eine rekursiv definierte unendliche Liste mit den ersten beiden Werten, die aus der Seriennummer abgeleitet wurden, und den verbleibenden Werten, die aus den vorherigen beiden Werten unter Verwendung einer festen Operation aus berechnet wurden m. Im Fall von A001906 kann die Definition auf vereinfacht werden

l=0:1:zipWith(flip(+))(tail l)l

(flip(+))ist (normalerweise) dasselbe wie (+)und wir erhalten eine bekannte (aber nicht die kürzeste) Definition der Fibonacci-Zahlen. Dieses Rekursionsschema könnte A001906 direkt berechnen, dies erfordert jedoch eine kompliziertere Operation als die in m. Ein weiteres Beispiel: Die Verwendung der Startwerte 1und 2und der Operation (*)ergibt die Serie A000301 . Es wird von unserem Code berechnet, wenn die Seriennummer durch ersetzt wird ?103206.

Schließlich findiziert die Funktion die Liste l, jedoch erst nach einer gewissen Transformation der Eingabe. Bei A001906 reduziert sich der Mittelteil auf (*)2, so dass wir die Fibonacci-Zahlen nur an geraden Positionen erhalten. Es wird der richtige Teil flip const 1, der die Identitätsfunktion darstellt und nicht weiter stört.

Für die Lösung werden A131078die Ausgangswerte lsind 1und 0, und der Betrieb ist flip const, der lässt lsein 1,0,1,0,.... Der mittlere Teil von fwird (flip div 4)zu 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,.... Dies sah nach einer netten Antwort aus, aber dann sah ich, dass A131078 bei beginnt n=1, also habe ich den rechten Teil von hinzugefügt f, der hier flip(-)1abgezogen werden soll.

Meine Idee war es, es ein wenig zu verschleiern, indem ich mZiffern aus den Seriennummern verwende und darin indiziere. Dann wurde es mehr verschleiert (komplizierte Begriffe), damit es funktioniert (vielleicht habe ich nicht lange genug nach Alternativen gesucht). und dann wurde es noch mehr verschleiert (rechter Teil von f), damit es wirklich funktioniert. Trotzdem denke ich, dass ein paar Vermutungen und Versuche es geknackt haben könnten.

Christian Sievers
quelle
Ich habe ein paar Sequenzen ausprobiert und sie gaben normalerweise eine Division durch Nullfehler, negative Exponentenfehler oder schienen für immer zu laufen. Um ehrlich zu sein, Haskell macht mir Angst, ich kann einfach nicht meinen Kopf darum wickeln, ich glaube, ich habe zu viel Zeit mit dem Verfahren verbracht.
Wenn Sie es nur versuchen, gibt es das zusätzliche Problem, dass selbst die Lösung einen "negativen Index" -Fehler ausgibt, wenn sie angegeben wird 0. Das ist in Ordnung, denn es beginnt erst bei 1! Ab 1sollte auch ein Teil der "Division durch Null" -Fehler entfernt werden. Ich bin überrascht von Beispielen, die für immer laufen. Vielleicht schafft die Indexumwandlung in diesen Fällen sehr große Werte ...
Christian Sievers
0

Python 3.6, 114 Bytes, geknackt

from random import*
g=lambda n:eval(''.join(Random("A005843").choices('n8-9+17n#8*+26%n1 32-3+4-545*-#6*7',k=34)))

A005843

g(n) Gibt den n-ten Wert der Sequenz für n> = 0 zurück.

random.choices(s,k)ist neu in Python 3.6 und gibt kElemente zurück , die smit "Ersetzen" ausgewählt wurden.

RootTwo
quelle
Fühlen Sie sich sehr nach Verschlüsselung / Hashing.
Paprika
@ppperry - wenn das gegen die Regeln verstößt, werde ich es entfernen.
RootTwo
Geknackt?
Phlarx
0

Chip , 67 Bytes, geknackt von Yimin Rong

2D5B#{*Cm49!}E-7
(A000012d#,zkmsh
b-\6/e2)[1Zv^~^S
33a#kcf3g88taz1@

A000012 . Ein bisschen frech, ja.

Probieren Sie es online!

Verwendet Bytes für I / O, also war ich nett und baute einen Bashy / Pythony-Wrapper.


Die alternative Sequenz lautet A060843 . Probieren Sie es online für Eingaben 1..4.

Yimin Rong duckte sich, ein so kurzes Chip-Programm kann nur sehr einfache Dinge berechnen. Die ursprüngliche Sequenz ist nur eine, und die alternative Sequenz sind die beschäftigten Bibernummern, von denen nur 4 bekannt sind.

Diese Nummern 1, 6, 21, 107sind für die Eingänge einfach fest codiert 1..4.

Eine interessante Sache über Chip für diese Herausforderung besteht darin , dass die Ziffern 0- 9sind nicht Zahlen, sondern logische Elemente. Insbesondere sind 0- 7die acht Bits, die den Kopf des Stapels adressieren, 8und 9sind die Lese- und Schreibumschaltungen. Das machte es ein bisschen interessanter und viel verschleierter.

Ein mögliches Werbegeschenk ist, dass nur A- angezeigt wird D, was bedeutet, dass wir nur 4 Bits zum Indizieren der Sequenz haben. Das bedeutet, dass es maximal 16 verschiedene Werte geben kann. Tatsächlich werden nur A- Cfür die alternative Sequenz verwendet, wobei höchstens 8 verschiedene Werte angegeben werden.

Für alle, die interessiert sein könnten, hier derselbe Code, ohne No-Ops und unbenutzte Elemente:

.

   B  *C 49!
 A000012d ,z  s
b-\6/e   1Zv-~^S
`3a`-cf3g`8taz1
Phlarx
quelle
Nur um das Offensichtliche auszuschließen, versuchen Sie nicht, sich in eine leere Sequenz zu schleichen, z. B. A290000 ? Technisch gesehen würde diese Sequenz passen, da Ihr Code bei der Eingabe von Null nichts zurückgibt!
Ha, es gibt mindestens einen Wert in der anderen Sequenz :) Außerdem sollte ich sagen, dass ich dies so entworfen habe, dass es 1-indiziert ist, da OEIS auf diese Weise indiziert wird.
Phlarx
(Egal, ich habe Gegenbeispiele gefunden. Mein Code ist immer noch 1-indiziert.)
Phlarx
Also habe ich noch ein bisschen nachgedacht, und das Nichtstun ist Pythons Schuld. Es gab keine Ausgabe für Null, daher lief mein Code nie. Ich habe das jetzt im TIO-Link behoben. (Hat der Bitlänge eine Etage von 1 Byte gegeben).
Phlarx
1
Rissig .