Eh bien, tout le monde aime les polyglottes . Vous recevrez deux entiers, dans n'importe quelle forme d'entrée standard (pas de codage en dur). Votre tâche consiste à écrire un polyglotte qui trouve la valeur minimale dans une langue et la valeur maximale entre les deux nombres dans l'autre langue, et effectue les opérations suivantes:
- Le code qui trouve la valeur maximale doit également calculer leur somme.
- Le programme qui trouve la valeur minimale doit également calculer le résultat de leur soustraction (
max - min
) - Voici la "partie délicate" : si les deux nombres sont égaux, les deux programmes ne doivent rien produire / renvoyer (à la fois vers
STDOUT
etSTDERR
ou toute autrereturn
méthode) - Voir la section Spécifications de sortie pour plus de détails sur le formatage
Contribution
Comme indiqué ci-dessus, deux entiers pris en entrée dans toute méthode standard , communs aux deux langues.
Spécifications de sortie
- Pour le programme qui trouve le
max
, le format doit être:max_value, addition result
- Pour le programme qui trouve le
min
, le format doit êtremin_value, subtraction result (max - min)
- Les résultats peuvent être imprimés, avec un delimiter clair (
,
\n
,,
ou tout ce que vous voulez), renvoyée par la fonction comme une chaîne contenant les deux valeurs attendues avec un séparateur ou une liste de numéros (par exemple:[max_value,sum]
)
Exemples:
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
Notation:
Il s'agit de code-golf , essayez donc d'écrire le code le plus court pour obtenir les résultats souhaités, tout en prenant note que les échappatoires standard sont strictement interdites. Vous devez utiliser deux langues différentes, pas d'autres versions de la même langue (par exemple: Python 2
- les Python 3
paires ne sont pas valides)
la source
Réponses:
05AB1E / Jelly ,
2120 octets-1 octet après avoir demandé de l'aide - merci Emigna! (
`
vapush(uwrapped(pop()))
)Octets bruts (le vidage à droite montre ce que ma machine Windows affiche):
Les deux prennent l'entrée de STDIN et la sortie vers STDOUT comme une représentation de liste
[x, y]
.La langue maximale est 05AB1E:
Où les
.
représentent les octets non imprimables dans sa page de codes ( cp1252 ), et probablement ici dans tout ce que vous utilisez (0x18 = CANet 0x04 = EOT).Essayez la version 05AB1E
La langue min est Jelly:
Essayez la version Jelly .
Comment?
05AB1E:
Gelée:
la source
C et C ++ (gcc),
117107 octets-10 octets grâce à @Steadybox!
Explication: En C,
auto c=.5
déclare une variable entière avec la classe de stockage automatique (qui est la valeur par défaut), qui est ensuite initialisée à 0, tandis qu'en C ++ 11, elle déclare un double, qui est initialisé à 0,5. Ainsi, la valeur de la variable sera véridique en C ++ et fausse en C.Langue C - max: Essayez-la en ligne!
C ++ - langage min: essayez-le en ligne!
la source
auto c=.5
, puis utiliser à lac
place desizeof'a'-1
. En C,auto c=.5
déclare une variable entière avec la classe de stockage automatique (qui est la valeur par défaut), qui est ensuite initialisée à 0, tandis qu'en C ++ 11, elle déclare un double, qui est initialisé à 0,5. Ainsi, la valeur de la variable sera véridique en C ++ et fausse en C.Python 3 / Jelly , 42 octets
Utiliser la page de codes de Jelly pour encoder le fichier.
Octets bruts:
Les deux définissent une fonction dyadique sans nom.
Python (le langage max) voit:
Tests en Python .
Jelly (la langue min) voit:
Tests en gelée .
Comment?
Jelly interprète 0x0a comme
½
l'atome de racine carrée tandis que Python l'interprète comme une nouvelle ligne. Dans Jelly 0x7f est interprété comme une séparation entre les liens (fonctions) et est représenté par une nouvelle ligne ou un pilcrow dans sa page de codes. Pour Jelly, le dernier lien est la fonction principale - ici, il n'appelle pas le lien ci-dessus (que l'interprète doit encore analyser correctement). En Python 0x23,#
indique que tout ce qui se trouve après et avant 0x0a, une nouvelle ligne, est un commentaire.Le code Python qui est exécuté:
Le code Jelly qui s'exécute:
la source
\x7f
et\x04
pour les non imprimables dans celui en Python).Ruby / Python 3, 102 octets
Ruby renvoie max / sum, Python renvoie min / difference. L'entrée est un objet tableau lu depuis STDIN.
Essayez-le en ligne: Ruby
Essayez-le en ligne: Python
La principale bizarrerie utilisée ici est l'utilisation de la vérité
0
en Ruby, qui est fausse en Python. L'autre chose à noter est que lasort
fonction de Python modifie la liste sur place et retourneNone
, tandis que Ruby ne le fait pas et retourne le tableau trié, d'où la nécessité d'utiliserb or a
pour obtenir le min / max.Python 3 est requis car Python 2 se plaint si vous essayez d'appeler
print
après l'or
instruction dans la dernière ligne.la source
Java / AWK ,
219217212196 octetsEssayez-le en ligne!
Java sort le max et la somme, AWK sort le min et la différence. Pas de sortie non plus si les entrées sont identiques.
Ceci est mon premier polyglotte et mon premier TIO :)
la source
JavaScript (ES6) / QBasic,
172171 octetsBasé sur ma solution d'une question polyglotte similaire .
Cette solution utilise également l'approche des commentaires!
JavaScript est le min-langage. Il prend en entrée un tableau contenant des nombres. Génère deux nombres séparés par
,
(le premier nombre est la plus petite valeur du tableau d'entrée et le deuxième nombre est la différence entre la plus grande et la plus petite valeur du tableau d'entrée) paralert()
ing. N'aalert()
rien si les nombres sont égaux. Vous pouvez appeler la fonction commef([100,40])
.QBasic est la langue max. Demande à plusieurs reprises des commentaires, deux fois. Imprime le plus grand nombre de numéros d'entrée ainsi que la somme des plus grands et des plus petits nombres de l'entrée. N'a
PRINT
rien si les nombres sont égaux.Comment ça marche?
Dans QBasic (un langage de la famille BASIC structurée; il ne nécessite pas de numéros de ligne),
'
marque le début d'un commentaire qui va jusqu'à la fin de la ligne. Alors qu'en JavaScript, il marque le début d'une chaîne. Ainsi, toute la première ligne est marquée comme un commentaire dans QBasic mais en JavaScript, la ligne est exécutée (et cette ligne contient la partie JavaScript qui calcule le plus petit nombre et la différence des plus grands et des plus petits nombres, ainsi qu'un/*
à la fin qui démarre un commentaire afin de masquer le reste du code QBasic de l'interpréteur JavaScript.)Le code de la deuxième ligne à l'avant-dernière ligne contient le code QBasic pour calculer le plus grand nombre et la somme du plus grand et du plus petit nombre (le code est très explicite).
La dernière ligne contient
'*/
.'
fait que l'interpréteur QBasic interprète le code suivant comme un commentaire, alors qu'en JavaScript, il n'a aucun effet car il fait partie d'un commentaire (qui a été démarré à la fin de la première ligne). Le code suivant (*/
) oblige JavaScript à terminer le commentaire qui a été démarré dans la première ligne, mais il n'est pas exécuté dans QBasic car QBasic pense qu'il fait partie d'un commentaire.Cas de test
JavaScript (min-langue):
QBasic (max-langue):
Accédez à ce site Web . Copiez collez le code suivant dans leur éditeur de texte:
La raison pour laquelle les numéros de ligne sont requis est que le site Web que j'ai mentionné ne prend en charge que les langues BASIC non structurées. Et ce site Web est le seul interprète BASIC en ligne décent que j'ai pu trouver. Cependant, l'exécution du code présent en haut de la publication (le code sans numéros de ligne) devrait fonctionner correctement dans tout bon interpréteur QBasic qui prend en charge le BASIC structuré et en
'
tant que démarreur de commentaires (peu le font pas, la plupart le font cependant)la source