Polyglott das (nicht konstante) OEIS!

24

Haftungsausschluss: Dies ist stark von "Polyglot the OEIS!" behebt jedoch das Problem, das zum Schließen führte (siehe Abschnitt Ausgabe) und wurde erneut veröffentlicht, um Antworten nicht ungültig zu machen.

Einführung

Wir alle kennen und lieben die Online-Enzyklopädie der Integer-Sequenzen ( OEIS ). Was wäre, wenn wir eine Offline- Version der interessanten Sequenzen machen würden? Nun, das wäre ein bisschen zu einfach, und wie würden Sie eine Sequenz mit unserer Standardschnittstelle auswählen !? Nein, wir brauchen eine einfachere Lösung. Eine Polyglotte!

Eingang

Ihre Eingabe ist eine nicht negative Ganzzahl n.

Ausgabe

Ihre Ausgabe wird entweder sein

  • Der n-te Eintrag einer OEIS-Sequenz ODER
  • Die ersten nEinträge einer OEIS-Sequenz.

Sie können den Index als 1-basiert oder 0-basiert annehmen, wie Sie möchten.

Damit diese Frage nicht zu einem Duplikat der Konstantensequenzen des vielseitigen Ganzzahldruckers wird, sind sie verboten. Dies sollte auch den Schwierigkeitsgrad der Einreichungen erhöhen und "langweilige" Lösungen vermeiden;)

Eine Sequenz ist nicht konstant, wenn zwei ungleiche Sequenzelemente vorhanden sind.

Ähm, wo ist die Herausforderung?

Sie müssen die oben genannte Funktionalität polyglotisieren. Wenn Sie also die Sprachen A, B und C unterstützen, müssen alle unterschiedliche OEIS-Sequenzen implementieren. Die Auswahl der Reihenfolge ist nicht beschränkt, außer dass Sie für alle Sprachen unterschiedliche benötigen.

Das heißt, wenn Sie das bereitgestellte Programm in Sprache A ausführen, wird die Sequenz X generiert, wenn Sie das bereitgestellte Programm in Sprache B ausführen, wird die Sequenz Y generiert (mit X! = Y) und wenn Sie das bereitgestellte Programm ausführen in der Sprache C soll dann die Folge Z erzeugt werden (mit X! = Z && Y! = Z).

Wer gewinnt?

Die Antwort mit den meisten Sequenz- / Sprachpaaren gewinnt. Das erste Kriterium ist die Codegröße (in Byte), wobei die niedrigere besser ist. Der zweite Tie-Breaker ist die Submission Time, wobei eine frühere besser ist.

Irgendwelche abschließenden Worte / Regeln?

  • Sie müssen angeben, welche Sprache welche Sequenz erzeugen soll.
  • Es gelten die Standard-E / A-Regeln.
  • Wenn zwischen den Sprachen unterschiedliche Codierungen verwendet werden, müssen beide Programme dieselbe Bytefolge verwenden.
  • Sprachrevisionen (Python 2/3) gelten als verschiedene Sprachen. Verschiedene Implementierungen einer Sprache (z. B. Browser JS vs Node.js) zählen ebenfalls als verschiedene Sprachen.
  • Es gelten Standardlücken.
SEJPM
quelle
4
Dieser Beitrag wurde gemäß dieser Meta-Q & A verfasst .
SEJPM
Können verschiedene Sprachen unterschiedliche Indizierungen haben?
Stephen
2
@StepHen ja können sie.
SEJPM

Antworten:

16

3 Sprachen (1 Byte) - Pyth ( A001477 ), MATL ( A000027 ), Braingolf ( A000217 )

Q

Wie?

Q macht folgendes:

  • In MATL heißt das + 1, es wird also im Grunde genommen ausgewertet input + 1.

  • In Pyth bedeutet dies Eingabe, sodass nur die Eingabe ausgegeben wird.

  • In Braingolf ist dies die integrierte Funktion für Dreieckszahlen.

Mini-Polyglot

Pyth kann durch eine der folgenden Sprachen ersetzt werden: GolfScript , Pyke , Brachylog oder Brain-Flak .

Mr. Xcoder
quelle
1
Nun,
1
@HyperNeutrino Ich habe gerade meine Antwort von dort portiert, aber ich habe damals sehr gute Sprachen gewählt, also ja: P - Danke!
Mr. Xcoder
Denken Sie daran, dies ist die Anzahl der Sprachen, nicht Code-Golf: P
Stephen
@StepHen Ich denke 3 ist vernünftig.
Mr. Xcoder
14

10 Sprachen, 122 Bytes

#|A=1:0;~@}{\,[.,];oi
#coding:utf-8
print (0 and gets.to_i-1 or int(input())**(2+(1/2>0)));quit()#⎚I±N»
# x
#x%:+.

Ich kann definitiv ein paar mehr hinzufügen. 1-indiziert, sofern nicht anders angegeben.

Beachten Sie, dass ich bei TIO-Links möglicherweise nicht auf dem neuesten Stand bin, wenn ich sicher bin, dass sich neuere Änderungen nicht auf ältere Programme auswirken. Sie können sie testen, wenn Sie möchten, aber bei jeder Änderung 10+ neue TIO-Links kopieren wird nach einer Weile anstrengend. Ich werde alle 5 Updates oder so neue kopieren.

cQuents v0, A000007

Relevanter Code: #|A=1:0;

#|Afängt die Eingabe ab und ist für Python-Kommentare da. =1Bedeutet, dass das erste Element ist 1, :0der Rest ist 0, gibt den neingegebenen Begriff aus n. cQuents v0 hat einen seltsamen Bug / eine seltsame Funktion, die beim ;Lesen eines unerwarteten, aber gültigen Tokens, wie z. B. , das Parsen beendet.

Probieren Sie es online!

PingPong, A001478

Relevanter Code: #|A=1:0;~@

Ausgänge über Exit-Code. 0-indiziert.

#überspringt das nächste Zeichen. =tut hier nichts. 1drückt 1und :druckt 1auf STDOUT. 0drückt 0. )tut nichts. ;drückt die Eingabe, ~knallt und drückt -n-1. @beendet. Der Exit-Code befindet sich oben im Stapel.

Probieren Sie es online!

Axo, A001477

Relevanter Code: }{\

0-indiziert. }Liest und verschiebt eine Ganzzahl von STDIN (erfordert aus irgendeinem Grund einen abschließenden Zeilenumbruch), {druckt einen Stapelanfang und \beendet das Programm. Ich bin mir nicht sicher, was die vorangegangenen Zeichen tun, aber nichts, was in diesem Fall von Bedeutung ist.

Probieren Sie es online!

Brainfuck, A000027

Relevanter Code: ,[.,]

Einfaches Katzenprogramm von esolangs.org. Gibt die Eingabe aus.

Probieren Sie es online!

> <> A000030

Relevanter Code: #...;oi

#spiegelt und bricht nach rechts um, wodurch es zum Lesen geleitet wird io;und das erste Zeichen der Eingabe ausgegeben wird. 0-indiziert.

Probieren Sie es online!

Ruby, A023443

Relevanter Code: print (0 and gets.to_i-1...)

0-indiziert. 0Gibt die Eingabe minus 1 aus. Ist in Ruby wahr, in Python jedoch falsch.

Probieren Sie es online!

Python 3, A000578

Relevanter Code: print (0 and gets.to_i-1 or int(input())**(2+(1/2>0)));quit()

Vom Original-Post von HyperNeutrino abgerissen, aber ein ziemlich bekannter Polyglot. quit()beendet das Programm.

Probieren Sie es online!

Python 2, A000290

Relevanter Code:

#coding:utf-8
print (0 and gets.to_i-1 or int(input())**(2+(1/2>0)));quit()

#coding:utf-8wird benötigt, damit das Charcoal-Zeug funktioniert. Auch von HyperNeutrinos ursprünglichem Post abgerissen. quit()beendet das Programm.

Probieren Sie es online!

Charcoal, A001489

Relevanter Code: ⎚I±N»

0-indiziert. Löscht die Konsole (Charcoal druckt ASCII wie sie ist) und I±Ndruckt das Negativ der Eingabe. »ist ein Analysefehler und beendet das Programm.

Dank ASCII-only für die Hilfe im Chat.

Probieren Sie es online!

Cardinal, A020725

Relevanter Code:

 x
x%:+.

Fügt der Eingabe 1 hinzu und drückt alle anderen Zeiger zusammen.

Probieren Sie es online!

Stephen
quelle
Es sieht so aus, als wäre der Exit-Code für PingPong der ToS. Er wird mit 2 ^ 32 umbrochen, wie es von einer 64-Bit-Ganzzahl mit Vorzeichen erwartet wird.
Jonathan Allan
@ JonathanAllan cool, danke.
Stephen
Müssen Sie wirklich mit einem Analysefehler beenden, wenn sich der Charcoal-Code bereits am Ende des Programms befindet?
MD XF
@MDXF Nein, ich wollte (bin) am Ende mehr hinzufügen
Stephen
10

5 Sprachen ( 05AB1E , Eigentlich , CJam , Gelee , MATL ), 7 Bytes

UD>li)+

Probieren Sie es online !:

  • 05AB1E : Sequenz A000027 (positive ganze Zahlen: a ( n ) = n ; 1-basiert)
  • Tatsächlich : sequence A023443 (nicht negative ganze Zahlen einschließlich 1: eine ( n ) = n -1; 0-basiert)
  • Cjam : Sequenz A020725 (positive ganze Zahlen ohne 1: a ( n ) = n +1; 1-basiert)
  • Jelly : Sequenz A005843 (nicht negative gerade Zahlen: a ( n ) = 2 * n ; 0-basiert)
  • MATL : Sequenz A000290 (Quadrate: a ( n ) = n 2 ; 1-basiert). Wird mit einem Fehler beendet, nachdem die Ausgabe erstellt wurde.
Luis Mendo
quelle
7

3 Sprachen: Proton, A000583 ; Python 3, A000578 ; Python 2, A000290

Proton , 49 Bytes

print(int(input())**(2+(1/2>0)+((''',''')!=',')))

Probieren Sie es online!

Python 3 , 49 Bytes

print(int(input())**(2+(1/2>0)+((''',''')!=',')))

Probieren Sie es online!

Python 2 , 49 Bytes

print(int(input())**(2+(1/2>0)+((''',''')!=',')))

Probieren Sie es online!

Erläuterung

Proton hat keine '''...'''Saiten, (''',''')wird also ('' ',' ''), was irgendwie keine Probleme verursacht. Es wertet zu aus '', macht zu (''',''')!=','bewertenTrue .

Python hat diese Zeichenfolgen, wird also (''',''')nur ','so (''',''')!=','ausgewertetFalse .

Python 2 verwendet die Bodenteilung für Ganzzahlen, 1/2>0ist also in Python 2 falsch und in Python 3 wahr.

HyperNeutrino
quelle
Sie können möglicherweise weitere langs hinzufügen, wenn Sie die Python-Zeile in umwandeln 1//1;print(int(input())**(2+(1/2>0)+((''',''')!=',')));quit()und anschließend Sprachen wie JavaScript hinzufügen
Stephen
@StepHen Klar, das könnte funktionieren, danke. Das werde ich tun, sobald ich JavaScript hinzugefügt habe: P
HyperNeutrino
6

5 Sprachen, 107 Bytes

s=1/2;1//2;q=int(input())*([2,3][s>0]);"""/.__id__;'
alert(+prompt()+1);`"""#=;#';q=gets
print(q)#)|<>%2)#`

Perl: A000035

Die Verwendung =als Trennzeichen für s///Mittel , die wir einfach Code ausschließen können wir nicht wollen, und die Verwendung )als Trennzeichen für q{}Mittel nach printing qin allen anderen Sprachen, können wir arbeiten nur <>direkt, ohne Besorgnis erregend.

s/1...q/i...#/;
print(<>%2)

Probieren Sie es online!

Ruby: A001477

In Ruby //ist tatsächlich /(dividieren durch) /.../(Regex-Übereinstimmung), so lange der Regex beendet und in eine Zahl umgewandelt wird, können wir sicher durch ihn dividieren. __id__kürzer ist als .to_s.ordwir uns, dann in nur wollen den Rest des Codes nicht enthalten 's, Satz qzu getsund printdie anderen mit allen ihm.

s=1/2;1//2..."/.__id__;'...';q=gets
print(q)

Probieren Sie es online!

Python 2: A005843

Verwenden Sie den Standardtrick, um 2 von 3 zu unterscheiden, und schließen Sie Dinge ein, die wir nicht wollen, """und kommentieren Sie sie.

s=1/2;1//2;q=int(input())*([2,3][s>0]);"""/...`"""
print(q)

Probieren Sie es online!

Python 3: A008585

Probieren Sie es online!

JavaScript (ES6-Browser): A000027

Für JS war es ziemlich einfach, das Vorhandene nicht wiederzuverwenden printund sich für SpiderMonkey zu entscheiden, aber das könnte auch möglich sein.

s=1/2;1//2;q=int(input())*([2,3][s>0]);"""/.__id__;'
alert(+prompt()+1);`"""#=;#';q=gets
print(q)#)|<>%2)#`

Dom Hastings
quelle
3

6 Sprachen: Kubisch 5/6/7/8/9/10, 44 40 32 Bytes

Durchgestrichen 44 ist immer noch regulär 44; (

DDR'DDR$:_0?{R'DDRDDB'%0}!{+00%}

Dies druckt:

Erläuterung:

DDR'DDR$:_0?{R'DDRDDB'%0}!{+00%}
DDR'DDR                            get top face sum to 2 (all versions)
       $:                          read input and set notepad to it
         _0                        set notepad to input modulo 2
           ?{...........}          if truthy
             R'DDRDD                reset cube
                    B'              set top face to Cubically version number
                      %0            print top face
                         !{....}   if falsy
                           +00      add 2 to notepad twice
                              %     print

Probieren Sie es online! (Kubisch 6x6x6)

MD XF
quelle