Nun, jeder liebt Polyglots . Sie erhalten zwei Ganzzahlen in jeder Standardeingabeform (keine Hardcodierung). Ihre Aufgabe ist es, einen Polyglot zu schreiben, der den Minimalwert in einer Sprache und den Maximalwert zwischen den beiden Zahlen in der anderen Sprache findet und die folgenden Operationen ausführt:
- Der Code, der den Maximalwert findet, muss auch deren Summe berechnen.
- Das Programm, das den Minimalwert findet, muss auch das Ergebnis ihrer Subtraktion berechnen (
max - min
) - Hier ist der "knifflige Teil" : Wenn die beiden Zahlen gleich sind, dürfen beide Programme nichts ausgeben / zurückgeben (sowohl zu
STDOUT
als auch zuSTDERR
einer anderenreturn
Methode). - Siehe die Spezifikationen Ausgabeabschnitt , um weitere Informationen über Formatierungs
Eingang
Wie oben angegeben, werden zwei Ganzzahlen als Eingabe in eine Standardmethode verwendet , die beiden Sprachen gemeinsam ist.
Ausgabespezifikationen
- Für das Programm, das das findet
max
, sollte das Format sein:max_value, addition result
- Für das Programm, das das findet
min
, sollte das Format seinmin_value, subtraction result (max - min)
- Die Ergebnisse können mit jedem klaren Trennzeichen gedruckt werden (
,
\n
,,
oder was auch immer Sie wollen), aus der Funktion als String zurückgegeben , die beide erwarteten Werte mit Trennzeichen oder als eine Liste von Zahlen enthält (zB:[max_value,sum]
)
Beispiele:
Input || Max Language Output || Min Language Output
100, 40 || 100, 140 || 40, 60
63, 67 || 67, 130 || 63, 4
-45, -5 || -5, -50 || -45, 40
21, 21 || ||
-1, 1 || 1, 0 || -1, 2
Wertung:
Dies ist Code-Golf . Versuchen Sie also, den kürzesten Code zu schreiben, um die gewünschten Ergebnisse zu erzielen. Beachten Sie dabei, dass Standard-Lücken strengstens verboten sind. Sie müssen zwei verschiedene Sprachen verwenden, keine anderen Versionen derselben Sprache (z. B .: Python 2
- Python 3
Paare sind ungültig)
quelle
Antworten:
05AB1E / Jelly ,
2120 Bytes-1 Byte nachdem ich um Hilfe gebeten habe - danke Emigna! (
`
wirdpush(uwrapped(pop()))
)Rohe Bytes (der Dump rechts zeigt, was mein Windows-Computer anzeigt):
Beide nehmen Eingaben von STDIN entgegen und geben sie als Listendarstellung an STDOUT aus
[x, y]
.Die maximale Sprache ist 05AB1E:
Wo die nicht
.
druckbaren Bytes in der Codepage ( cp1252 ) dargestellt werden, und wahrscheinlich hier in dem, was Sie verwenden (0x18 = CANund 0x04 = EOT).Probieren Sie die 05AB1E-Version aus
Die min Sprache ist Jelly:
Probieren Sie die Jelly-Version .
Wie?
05AB1E:
Gelee:
quelle
C und C ++ (gcc)
117107 Bytes-10 Bytes dank @Steadybox!
Erläuterung: In C wird
auto c=.5
eine Ganzzahlvariable mit der automatischen Speicherklasse deklariert (dies ist der Standardwert), die dann auf 0 initialisiert wird, während in C ++ 11 ein double deklariert wird, das auf 0,5 initialisiert wird. Der Wert der Variablen ist in C ++ also wahr und in C falsch.C - max Sprache: Probieren Sie es online!
C ++ - Min Sprache: Probieren Sie es online!
quelle
auto c=.5
und dannc
anstelle von verwendensizeof'a'-1
. In C wirdauto c=.5
eine Ganzzahlvariable mit der automatischen Speicherklasse deklariert (dies ist die Standardeinstellung), die dann auf 0 initialisiert wird, während in C ++ 11 ein Double deklariert wird, das auf 0,5 initialisiert wird. Daher ist der Wert der Variablen in C ++ wahr und in CPython 3 / Jelly , 42 Bytes
Verwenden von Jellys Codepage zum Codieren der Datei.
Rohe Bytes:
Beide definieren eine unbenannte dyadische Funktion.
Python (die maximale Sprache) sieht:
Testet als Python .
Jelly (die min Sprache) sieht:
Tests als Gelee .
Wie?
Jelly interpretiert 0x0a als
½
das Quadratwurzelatom, während Python es als Newline interpretiert. In Jelly wird 0x7f als Trennung zwischen Verknüpfungen (Funktionen) interpretiert und in der Codepage entweder durch einen Zeilenvorschub oder einen Pfeil dargestellt. Für Jelly ist der letzte Link die Hauptfunktion - hier wird der obige Link nicht aufgerufen (den der Interpreter noch korrekt analysieren muss). Weist in Python 0x23 an,#
dass alles, was dahinter und vor 0x0a steht, ein Kommentar ist.Der Python-Code, der ausgeführt wird:
Der Jelly-Code, der ausgeführt wird:
quelle
\x7f
und\x04
für die nicht druckbaren in der Python-Version).Ruby / Python 3, 102 Bytes
Ruby gibt max / sum zurück, Python gibt min / difference zurück. Input ist ein Array-Objekt, das aus STDIN gelesen wird.
Probieren Sie es online aus: Ruby
Probieren Sie es online aus: Python
Die Hauptsprache, die hier verwendet wird, ist die Verwendung der Wahrheit
0
in Ruby, die in Python falsch ist. Die andere erwähnenswerte Sache ist, dass die Python-sort
Funktion die Liste direkt modifiziert und zurückgibtNone
, während Ruby's das sortierte Array nicht zurückgibt und es daher benötigtb or a
, um die min / max-Werte zu erhalten.Python 3 ist erforderlich, da sich Python 2 beschwert, wenn Sie versuchen,
print
nach deror
Anweisung in der letzten Zeile aufzurufen .quelle
Java / AWK ,
219217212196 BytesProbieren Sie es online!
Java gibt das Maximum und die Summe aus, AWK gibt das Minimum und die Differenz aus. Keine Ausgabe für beide, wenn die Eingaben identisch sind.
Dies ist meine erste polyglotte und erste TIO :)
quelle
JavaScript (ES6) / QBasic,
172171 BytesBasierend auf dieser Lösung von mir eine ähnliche vielsprachige Frage.
Auch diese Lösung nutzt den Kommentar-Ansatz!
JavaScript ist die Min-Sprache. Es wird ein Array mit Zahlen als Eingabe verwendet. Gibt zwei durch getrennte Zahlen aus
,
(1. Zahl ist der kleinste Wert des Eingabearrays und 2. Zahl ist die Differenz zwischen dem größten und dem kleinsten Wert des Eingabearrays), indemalert()
Sie Tutalert()
nichts, wenn die Zahlen gleich sind. Sie können die Funktion wie folgt aufrufenf([100,40])
.QBasic ist die Max-Sprache. Fordert zweimal wiederholt zur Eingabe auf. Druckt die größte Anzahl der Eingabenummern sowie die Summe der größten und kleinsten Zahlen der Eingabe. Tut
PRINT
nichts, wenn die Zahlen gleich sind.Wie funktioniert es?
Markiert in QBasic (eine Sprache der strukturierten BASIC-Familie, für die keine Zeilennummern erforderlich sind)
'
den Anfang eines Kommentars, der bis zum Ende der Zeile reicht. In JavaScript markiert es den Anfang einer Zeichenfolge. Die gesamte erste Zeile ist in QBasic als Kommentar markiert, in JavaScript wird die Zeile jedoch ausgeführt (und diese Zeile enthält den JavaScript-Teil, der die kleinste Zahl und den Unterschied zwischen der größten und der kleinsten Zahl berechnet, sowie ein/*
am Ende Hiermit wird ein Kommentar gestartet, um den Rest des QBasic-Codes vor dem JavaScript-Interpreter zu verbergen.)Der Code von der zweiten bis zur vorletzten Zeile enthält den QBasic-Code zur Berechnung der größten Zahl und der Summe der größten und kleinsten Zahl (der Code ist sehr selbsterklärend).
Die letzte Zeile enthält
'*/
.'
bewirkt, dass der QBasic-Interpreter den folgenden Code als Kommentar interpretiert, während er in JavaScript keine Auswirkungen hat, da er Teil eines Kommentars ist (der am Ende der ersten Zeile gestartet wurde). Der folgende Code (*/
) bewirkt, dass JavaScript den in der ersten Zeile gestarteten Kommentar beendet. Er wird jedoch in QBasic nicht ausgeführt, da QBasic denkt, dass er Teil eines Kommentars ist.Testfälle
JavaScript (min-language):
QBasic (max-language):
Gehe zu dieser Website . Kopieren Sie den folgenden Code und fügen Sie ihn in den Texteditor ein:
Der Grund, warum Zeilennummern erforderlich sind, ist, dass die von mir erwähnte Website nur unstrukturierte BASIC-Sprachen unterstützt. Und diese Website ist der einzige anständige Online-BASIC-Interpreter, den ich finden konnte. Das Ausführen des Codes am Anfang des Posts (der Code ohne Zeilennummern) sollte jedoch in jedem guten QBasic-Interpreter, der strukturierte BASIC- und -Dateien unterstützt, problemlos funktionieren
'
als Kommentar-Starter gut funktionieren (nur wenige tun dies, die meisten jedoch nicht).quelle