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

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)

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.



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!


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.

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

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 

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.

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.


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



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

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




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;

2

Dip , 9 Bytes, Kritixi Lithos

Bestimmt nicht die beabsichtigte Antwort.

1^,-$)×1*

Erläuterung:

1$^,-)×   # Basically does nothing
       1* # Repeat "1" n times

Jetzt muss ich nur noch deine A000042-Antwort knacken!
Kritixi Lithos


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!


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

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


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.