Polyglot Anagrams Räuberfaden

22

Dies ist der Räuberfaden dieser Herausforderung

Die Bullen wählen eine OEIS- Sequenz und schreiben zwei vollständige Programme in zwei verschiedenen Sprachen, die das n-te Element in der Sequenz erzeugen, wenn sie über STDIN ein n erhalten. Die beiden Programme müssen Anagramme voneinander sein, dh, sie können aus den Buchstaben des anderen neu angeordnet werden.

Sie geben die OEIS-Nummer, den Quellcode und den Namen einer Sprache an, in der sie gesprochen wird.

Sie müssen ein Anagramm der Vorlage des ursprünglichen Polizisten finden, das in einer anderen Sprache als der vom Polizisten verwendeten ausgeführt wird. Um eine Antwort zu knacken, müssen Sie nur eine Sprache und ein Programm finden, die bzw. das die Sequenz erzeugt und ein Anagramm des Originals ist, nicht unbedingt die Antwort, über die der Cop nachgedacht hat.

Sie können nach Zeichencode ausgeben oder STDERR in Ihre Lösung aufnehmen, aber nur, wenn der Cop angegeben hat, dass seine versteckte Lösung dies tut. Die Dezimalausgabe an STDOUT ist immer ein gültiger Riss.

Auf diese Weise wird den Bullen der Anreiz gegeben, es anhand ihrer Symbolliste so schwer wie möglich zu machen, eine Sprache zu finden, die die Aufgabe erfüllt.

Wertung

Die Person mit den meisten Rissen ist der Gewinner dieses Abschnitts. Nur der erste Riss für jede Lösung zählt für die Punktzahl.

Bestenliste

Ein großes Dankeschön an alle, die an dieser Herausforderung teilgenommen haben.

Hier ist die Rangliste in ihrer jetzigen Form

Place  User             Score
-----------------------------
1      Adnan            3
1      Kritixi Lithos   3
1      Emigna           3
1      milk             3
5      Steven H.        2
5      Wheat Wizard     2
5      jimmy23013       2
8      ETH Productions  1
8      Dennis           1
8      alleks           1
8      Martin Ender     1
8      Oliver           1
8      Conor O'Brien    1
Weizen-Assistent
quelle
Ich bin mir nicht sicher, ob ich den Teil "Anagramm" verstehe. Könnten Sie etwas näher darauf eingehen?
Buffer Over Read
@TheBitByte Die andere Lösung muss dieselben Zeichen wie das Original verwenden, jedoch in einer anderen Reihenfolge neu angeordnet werden.
Weizen-Assistent
Ohne zusätzliche Zeichen?
Buffer Over Read
@TheBitByte ja und ohne irgendwelche Zeichen zu entfernen
Weizen-Assistent

Antworten:

9

05AB1E , 38 Bytes, Loovjo , A000290

nXtdief e():return X*X
pr e(input())##

Probieren Sie es online!

Sehr wahrscheinlich nicht die beabsichtigte Lösung, aber es funktioniert.

Erläuterung

n      # square input
 X     # push 1
  t    # push sqrt(1)
   d   # push is_number(1.0)
    i  # if true do the rest of the code (1.0 is not a number so it will never execute)
Emigna
quelle
1
1.0 is not a number? Könnten Sie bitte näher darauf eingehen?
ETHproductions
1
@ETHproductions: Die Funktion is_numberprüft, ob die Nummer nur aus besteht 0-9. Da .es sich nicht um eine Zahl handelt, wird sie falsch. Die Funktion könnte einen
aussagekräftigeren
8

Jolf, 15 Bytes, Adnan , A000290

*&"?!#$|<=@\^{}

Probieren Sie es hier aus! Auf jeden Fall nicht die beabsichtigte Lösung, aber hey, es funktioniert.

Erläuterung

*&"?!#$|<=@\^{}
*                multiply
 &               the two inputs to this func, x, y: x && y
                 returns y if x and y, or the falsey argument.
  "?!#$|<=@\^{}  this string is always truthy, so the second arg is used.
                 two implicit inputs are taken, both equal to the first arg
                 so, this corresponds to *xx, which is x^2.
Conor O'Brien
quelle
7

05AB1E , 49 Byte, Weizen-Assistent , A000290

Eigentlich der gleiche Ansatz wie Emignas Crack: p.

n4i<({({)({[()]){))()()()turpetne/"*"*splint>}}}}

Erläuterung:

n          # Square the input
 4i        # If 4 == 1, do the following...
   <({...

Probieren Sie es online!

Adnan
quelle
1
Nicht die Lösung, die ich suchte, aber trotzdem +1
Weizen-Assistent
7

05AB1E , 35 Byte, Oliver , A000290

Cops sollten aufhören, n^2Herausforderungen in Python zu posten ...

n0iprt(input()**(1+1))
"'1°3¢','m'"

Probieren Sie es online!

Erläuterung

n    # square input
 0i  # if 0 == 1 do the rest of the code
Emigna
quelle
6

2sable , 7 Bytes, Kritixi Lithos , A005843

Code:

r^#ei2*

Erläuterung:

r         # Reverse the stack, which is a no-op
 ^        # XOR the input with itself, always leading to 0
  #       # If 1, break (which stops the program)
   e      # Compute input nPr input, which always leads to 1
    i     # If equal to one, do the following..
     2*   #   Multiply the input by 2.

Probieren Sie es online!

Adnan
quelle
Es ist wunderbar, wie der tatsächliche Code nur 2 Bytes beträgt!
Kritixi Lithos
6

Hexagony , 13 Bytes, Adnan , A002378

?"&\>=})\*!@<

Probieren Sie es online!

Entfaltet:

  ? " &
 \ > = }
) \ * ! @
 < . . .
  . . .

Nicht 100% ob dies das Original ist, denn oben links \ nicht verwendet wird.

Das <\>sind nur Spiegel, das Programm ist also eigentlich ganz linear:

?"&)}=*!@

?          Read input.
 "         Move back and left.
  &        Copy input.
   )       Increment copy.
    }=     Move forward and right and turn around (to face the n and n+1 edges).
      *    Multiply.
       !   Print.
        @  Terminate.
Martin Ender
quelle
5

V , 13 Bytes, DJMcMayhem , A002275

v!:x]''"
@ai1

Probieren Sie es online!

Dies könnte die erste Lösung in der vom Autor beabsichtigten Sprache sein.


Erläuterung

v!:x]''"   Does nothing
@ai1       inserts 1 a times
Weizen-Assistent
quelle
Vielleicht solltest du DJMcMayhem wissen lassen, dass du es geknackt hast? ;)
ETHproductions
@ETHproductions Ich habe ihm im Chat gesagt, dass ich ihn wahrscheinlich in Kommentaren wiedersehen werde.
Weizen-Zauberer
1
This might be the first solution in the language the author intended.Spot on. :)
DJMcMayhem
5

2sable, Conor O'Brien , A000290

~*

Probieren Sie es online!

Ich weiß nicht, wie es funktioniert, es gibt wirklich nur ein Programm, das die Anforderungen erfüllt, und ich bin einfach gezwungen, die Sprache zu finden, in der es funktioniert.

Nachdem ich die Dokumente durchgesehen habe, kann ich mir eine Erklärung einfallen lassen:

~         Push Input OR Input (always pushes the input)
 *        Multiply that by Input 
Steven H.
quelle
5

Pyth , 26 Bytes, Steven H. , A023443

Code:

tQ.qly 7:esau0euii s uxC !

Versuchen Sie es online .

Relativ einfach:

 Q                            Reads input
t                             Substracts 1 from it
  .q                          Quits program (implicit print)
    ly 7:esau0euii s uxC !    None of this ever plays a part...
                                I just thought it'd be fun to scramble it.
Alleks
quelle
2
Beabsichtigte Lösung! (Natürlich ohne das Scrambling.)
Steven H.
1
Das ist großartig! Gute Idee. Tut mir leid, dass ich Sie nicht direkt darüber informiert habe ... Zu wenig Mitarbeiter.
Alleks
Kein Problem! Glückwunsch.
Steven H.
5

Python 3, 118 Bytes, ETHproductions, A042545

s,a=801**.5-28,[0,0==0]
for i in range(int(input())):a+=[a[i]+a[-1]*int(1/s)];s=1/s-1//s
(print(a[-2]),) #.0fhlmop|

Teste es auf Ideone .

Cop Vorlage

i=input();s=1/(801**.5-28);a=[0,1]
for p in range(i):a+=[a[-2]+a[-1]*int(s)];s=1/(s-int(s))
print a[i]#,,,.//000fhlmo|

Was ist unterschiedlich

Die Cop-Übermittlung funktioniert in Python 3 aus zwei Gründen nicht.

  • Die Eingabefunktion von Python 2 wertet automatisch eine Eingabezeile aus, während das Gegenstück von Python 3 die Zeile nur als Zeichenfolge zurückgibt. Wir können einfach int aufrufen , um dies zu beheben.

  • print war eine Anweisung in Python 2, aber es ist eine Funktion in Python 3. Dies bedeutet insbesondere, dass wir das Argument mit Klammern umgeben müssen.

Das heißt, wir brauchen int()und (), aber diese Zeichen sind nicht alle Teil des Kommentars. Das heißt, wir müssen einige Änderungen vornehmen.

Statt der Fraktion s behalten wir den Überblick über 1 / s .

Die Initialisierung von s - s=1/(801**.5-28)- wird s=801**.5-28gespeichert, die Zeichen werden gespeichert 1/().

Der Faktor von a [-1] bei der Aktualisierung von a - int(s)- wird int(1/s), was die Zeichen kostet1/ .

Das Update von s - s=1/(s-int(s))- s=1/s-1//skostet die Zeichen 1//, speichert aber die Zeichen (int()).

Die gespeicherten Zeichen ()(int())decken die Zeichen ab, die wir zum Portieren des Codes nach Python 3 benötigten, aber das Erhalten dieser Zeichen kostet uns etwas 1//. Wir können //dem Kommentar entnehmen , müssen ihn aber an 1anderer Stelle speichern .

Eine Möglichkeit (die einzige?), Das Notwendige 1zu speichern, besteht darin, das 1bei der Initialisierung von a mit zu ersetzen 0==0. Das kostet diese vier Zeichen, aber wir können 00dem Kommentar entnehmen .

Bisher haben wir den folgenden Code.

i=int(input());s=801**.5-28;a=[0,0==0]
for p in range(i):a+=[a[-2]+a[-1]*int(1/s)];s=1/s-1//s
print(a[i]) #,,,.()0fhlmo|

Um eines der =jetzt "Schulden" wiederherzustellen , können wir die Initialisierung von s und a mit einer einzigen Zuweisung neu schreiben : s,a=801**.5-28,[0,0==0]Zusätzlich spart dies a ;und kostet a, , die dem Kommentar hinzugefügt und aus ihm entfernt werden können.

Die Sekunde =kann gespeichert werden, indem die Eingabe nicht in einer Variablen gespeichert wird, dh range(int(input()))stattdessen geschrieben und die Zeichen in gespeichert werden i=. Wir verwenden i nach der Schleife als gut, aber das i - te Element von a ist nur die zweite von rechts, so dass wir ersetzen können imit -2. Aus dem gleichen Grund kann a[-2]der Schleifenkörper mit ausgetauscht werden i.

Wir haben jetzt eine Permutation in funktionierenden Python 3-Code:

s,a=801**.5-28,[0,0==0]
for i in range(int(input())):a+=[a[i]+a[-1]*int(1/s)];s=1/s-1//s
print(a[-2]) #,.()0fhlmop|

Dieser Code funktioniert jedoch auch in Python 2! Eine Möglichkeit , dies zu fixieren ist zu ersetzen print(a[-2])mit (print(a[-2]),); Wir haben die Zeichen, die wir im Kommentar brauchen. Wie bereits erwähnt, ist print eine Funktion in Python 3, mit der das Tupel ( None ,) erstellt wird . Die print- Anweisung von Python 2 ist jedoch ein SyntaxError in einem Tupel-Literal.

Dennis
quelle
Verdammt, nett ... vielleicht hätte ich ein bisschen mehr Zeit damit verbringen sollen, eine kommentarlose Version zu schreiben. Ich werde meine beabsichtigte Lösung posten.
ETHproductions
Ich habe eine modifizierte Version meines Programms erstellt, die sowohl in Python 2 als auch in Python 3 funktioniert, keine Kommentare verwendet und eine ganz andere (beabsichtigte) Lösung hat. Lohnt es sich, als separate Antwort zu posten?
ETHproductions
Wenn es sowohl in Python 2 als auch in Python 3 funktioniert, ist es keine gültige Lösung. Der Riss kann nicht in der Originalsprache funktionieren.
Dennis
Ich verstehe nicht Der beabsichtigte Riss ist nicht in Python.
ETHproductions
Oh, du meinst eine neue Cop- Vorlage. Ich dachte, wir reden über einen anderen Riss als diesen ... Klar, mach weiter und poste ihn.
Dennis
4

Pyth, 7 Bytes, Luis Mendo , A000217

x:{ps}1

Das Programm wird nach Aufforderung mit Fehler beendet p die richtige Antwort gedruckt wurde.

Probieren Sie es hier online aus !

Steven H.
quelle
3

05AB1E , 12 Byte, Tuskiomi , A000012

1,(FI1=1=1,)

Probieren Sie es online!

Erläuterung

1,            # print 1
  (           # negate input
   F          # that many times do (i.e. no times)
    I1=1=1,)  # the rest of the code
Emigna
quelle
Lustig. Ich hatte kein zweites Programm dafür, weil ich nicht verstand, was Bullen und Räuber waren (whoops). Gute Arbeit, erfinderisch zu sein!
Tuskiomi
3

05AB1E , 38 Bytes, Conor O'Brien , A000290

n2iJ=>eval(Array(J).fill(J).jo`+`)|-2;

Probieren Sie es online!


Erläuterung

Dies basiert auf Emignas Riss hier .

n   #Squares the number
 2i #Runs the rest of the code if 2==1
Weizen-Assistent
quelle
Ich habe meine Antwort mit der beabsichtigten Lösung bearbeitet. gute Arbeit! Ich muss meinen Ansatz überdenken ...
Conor O'Brien
2

CJam, 70 Bytes, Shebang , A000217

ri),:+








e#|  d00->1@@@++-^,[o=input(v=0i=1whil o v=i i+=1pnt v

Probieren Sie es hier aus.

jimmy23013
quelle
Ich hatte Angst vor der CJam-Lösung;)
Kade
2

Konvex, 75 Bytes, Boboquack , A004526

2/Q2 2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2*2*2*; 2*;                 2; 2; 2;

Probieren Sie es online aus

Wie es funktioniert:

2  e# push 2
 / e# pop first 2, divide, push result
   e# push a bunch of garbage but discard it all with semi-colons (;)
  Q2 2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2*2*2*; 2*;                 2; 2; 2;
Milch
quelle
2

Dip , 9 Bytes, Kritixi Lithos

Bestimmt nicht die beabsichtigte Antwort.

1^,-$)×1*

Erläuterung:

1$^,-)×   # Basically does nothing
       1* # Repeat "1" n times
Oliver Ni
quelle
Jetzt muss ich nur noch deine A000042-Antwort knacken!
Kritixi Lithos
2

Pip , 6 Bytes, DLosc , A000012

.()49o

Ich dachte, ich würde zuerst den Esolang des OP ausprobieren ;-)

Probieren Sie es online aus.

ETHproductions
quelle
Eigentlich war ich gespannt, ob es einen anderen gibt, bei dem es funktionieren würde. :) Aber gute Arbeit.
DLosc
1

05AB1E , 25 Byte, Mego , A000583

Code:

nnYi=put("");prit`Y**4`,X

Erläuterung:

n       # Square the input
 n      # Square the squared input
  Y     # Constant that pushes 2
   i    # If equal to 1, do the following:
    =put...

Probieren Sie es online!

Adnan
quelle
Ach komm schon, du hast mich um 12 Sekunden geschlagen :)
Emigna
@Emigna Die Zeit zwischen den Antworten ist unheimlich: p.
Adnan
1
Es wurde auch nicht registriert, als ich zum ersten Mal auf den Post drückte, also wären sie fast augenblicklich gewesen :)
Emigna
1

Dip , 8 Bytes, Oliver , A000042

(1J&F},1

Erläuterung

              #Implicit Input
(             #Start range loop
 1            #Push 1 to the stack
  J           #Join all the elements in the stack
   &          #End program
    F},1      #These are ignored

Das Lustige ist, dass dies die beabsichtigte Sprache war! Dip ist ein Esolang von Oliver.

Testfälle und Ausführen von Dip über die Befehlszeile

$python3 dip.py
Dip v1.0.0 by Oliver Ni.
>>> (1J&F},1
> 4
1111
>>> (1J&F},1
> 7
1111111
Kritixi Lithos
quelle
1

2sable, 14 Bytes, Dopapp , A121377

Q@5 2*%6 8*+.&

Probieren Sie es online aus.

Wie es funktioniert (mehr oder weniger):

Q@
  5              # Push 5
    2            # Push 2
     *           # Pop (2), pop (5), push 5*2=10
      %          # Pop (10), pop (input), push input%10
       6         # Push 6
         8       # Push 8
          *      # Pop (8), pop (6), push 8*6=48
           +     # Pop (48), pop (input), push input+48
            .&
Milch
quelle
1

Dip , 5 Bytes, Oliver , A000012

`¸WW/

Die Sequenz druckt nur 1unabhängig von der Eingabe. Olivers Antwort druckt a 1.0. Dieses Programm druckt auch ein 1.0. Dies ist anscheinend die beabsichtigte Lösung.

Erläuterung

`¸                  # push character `¸`
  W                 # pushes 1000000
   W                # pushes 1000000 also
    /               # divides the last two items in stack resulting in 1.0
                    # implicit output (1.0)

Alternative Lösung (mit freundlicher Genehmigung von @milk)

Konvex , 5 Bytes

WW¸`/

Probieren Sie es online!

Erläuterung

                  // implicit input
W                 // pushes -1
 W                // pushes -1 also
  ¸               // calculates the LCM of the two numbers (which evaluates to 1)
   `              // finds its string representation
    /             // slices the string (so that it would evaluate to "1")
                  // implicit output
Kritixi Lithos
quelle
1
Alternativer Riss in Convex: WW¸` /
milk
@milch Danke! Ich habe es in meiner letzten Bearbeitung hinzugefügt
Kritixi Lithos
Ihr Convex-Programm funktioniert nicht so, wie Sie denken. Ab sofort wird zweimal -1 gedrückt, die LCMs werden ihnen zugewiesen (dies wäre 1), die Zeichenfolgendarstellung wird gefunden und schließlich wird die Zeichenfolge (dies wäre "1") nach allen [input]Zeichen getrennt (da die Eingabe eine Zahl ist.
GamrCorps,
@GamrCorps Wie ist es jetzt?
Kritixi Lithos