<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 65641; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 31516; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d?\.?\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
2.7.1
à2.7.n
. (En fait, sweerpotato ne fait que cela avec les versions majeures.)Réponses:
30 langues, 248 octets, 248/30 ^ 3 = 0.009185
Edit: Beatnik enlevé car les tests de primalité dans Beatnik pourraient ne pas être possibles.
Le code contient des onglets (qui sont mutilés par Stack Exchange) et une fin de ligne, alors voici le
xxd
:Alternativement, vous pouvez copier et coller le code de cette "Essayez-le en ligne!" lien .
C'est assez mal joué, mais je voulais jouer sur l'idée qu'une fois que vous avez assez de langues, compter le nombre d'octets n'a plus autant d'importance. Cela dit, il y a certaines langues que je pourrais encore facilement ajouter (par exemple, Objeck), mais qui sont actuellement trop longues pour être utiles. Je manque de bonnes langues, alors je vais peut-être m'arrêter ici pour l'instant.
Exécutez tous les programmes avec
</dev/null 2>/dev/null
(c.-à-d. Entrée vide, STDERR surpressé).L'explication est assez longue, alors voici un résumé:
1. vache
COW est un dérivé de Brainfuck avec des commandes supplémentaires, dont l’une est une sortie numérique. Tout élément invalide est ignoré, le programme exécuté est donc simplement
qui incrémente la cellule à 1 puis l’imprime sous la forme d’un nombre.
2. CoffeeScript (interprète compris)
CoffeeScript voit:
qui alerte simplement 2.
(Oui, ce serait probablement mieux si une autre langue prenait cette place, mais je suis trop paresseux pour remanier à ce stade: P)
3. Common Lisp | idéone
Common Lisp (clisp) voit:
1/5
est un rationnel et pas égal à0.2
, donc 3 est imprimé. La procédure"""
est une erreur de syntaxe.Notez que cela
print
semble générer une nouvelle ligne et un dernier espace dans Common Lisp. Cependant, heureusement,write
fonctionne à la fois dans le programme Common Lisp et dans le programme de poulet.4. rétine | Essayez-le en ligne!
Restrictions introduites : chaque seconde ligne commençant par la première doit être une expression rationnelle valide.
Chaque paire de lignes forme une étape de remplacement, remplaçant les occurrences des correspondances de la regex de la première ligne par la deuxième. Au milieu, nous avons la paire
qui remplace la chaîne vide initiale par
"""
. La dernière ligne vide, qui ne fait partie d'aucune paire, est traitée comme une étape de correspondance, en comptant le nombre de correspondances de l'expression régulière. Il y a quatre occurrences de chaîne vide dans"""
, à savoir1"2"3"4
.5. Befunge-93 | Interprète
Befunge est un langage 2D et les instructions appropriées sont
dans la première ligne, et
5
dans la25
ligne.#
saute l'instruction suivante,15g
obtient le caractère à la position(1, 5)
dans le code (le5
dans la25
ligne),,
sort le caractère et@
s'arrête.6. Python 2 | idéone
Python voit:
(4^2+7)/2 = (xor(4,2)+7)/2 = (6+7)/2 = 13/2 = 6
, qui obtientprint
ed.7. rail | Essayez-le en ligne!
Le rail est un langage 2D et l'exécution commence à partir
$
de la fonction principale, en direction du sud-est. Ainsi, la partie de code pertinente estavec le
o
etJ
venant des lignes utilisées par TRANSCRIPT. Après la sortie 7, le train frappe uneJ
instruction non reconnue , ce qui bloque le programme.8. ETA | Essayez-le en ligne!
Restrictions introduites: les caractères antérieurs au programme ETA ne doivent pas être insérés
etaoinsh
.ETA ne reconnaît que les lettres
etaoinsh
et leurs versions majuscules, ce qui signifie que le code commence parn...e
pousse un nombre de base 7 basé sur le contenu des délimiteurs, quiSaI
est624
, ou 312 en décimal.o
puis sort en tant que caractère, apparemment après le modulo 256, donnant le caractère8
(point de code 56).e
tente ensuite de se diviser avec une pile vide, ce qui échoue.9. prélude | Essayez-le en ligne!
Restrictions introduites: pas plus d'une
()
dans une colonne,()
correspondance d'une lecture de colonne à la fois, pas de boucles infinies causées par()
.Cela nécessite que l'interpréteur Python se soit
NUMERIC_OUTPUT = True
défini.Prelude est un langage dans lequel chaque ligne est exécutée séparément. Beaucoup de caractères sont exécutés, mais la partie importante est la
sur la deuxième ligne, qui sort 9.
()
dans Prelude, désigne une boucle, mais grâce à la proéminence de#
s (qui sort de la pile), les sommets des piles sont toujours à 0 au moment où une boucle est touchée, donc aucun sont courus. Les restrictions de code source de Prelude concernant l’()
introduction de certains espaces superflus.10. Gol> <> | Interprète
Cette partie (et> <>) fonctionne comme la réponse de Martin . Le code pertinent est
Gol> <> est un langage 2D et
#
reflète l’IP, le faisant se déplacer vers la gauche. Il encercle, poussez 10, 14 et 0 à la pile.@
fait ensuite tourner la pile en ramenant 10 au sommet, lan
sort et;
arrête le programme.11. le mal | Essayez-le en ligne!
Cette partie est également similaire à la réponse de Martin.
le mal ignore tout sauf les minuscules. Ignorant quelques caractères supplémentaires, la partie pertinente est
où
a
incrémente la variableA
,e
est la fonction de tissage du mal qui mélange les bits deA
, et lesw
sortiesA
. Par conséquent, nous produisons1
deux fois, donnant11
.Mais qu'en est-il du reste des instructions, et en particulier
w
de la dernière ligne? Disons simplement qu'il est parfois plus facile de manipuler le code et de prier pour qu'il fonctionne toujours dans tout ce qui, ici, a tout ...12. Foo | Essayez-le en ligne!
Foo affiche tout ce qui se trouve entre guillemets, la partie pertinente est donc la
sur la deuxième ligne. Cependant, comme nous avons besoin de guillemets plus tard, nous utilisons une méthode similaire à celle de Martin pour éliminer l’erreur Foo, à savoir la méthode précédente
#-1@
. On ne sait pas pourquoi cela fonctionne dans une langue dans laquelle les soldats sont confrontés à une pile vide et à des erreurs de division par zéro, mais je suis heureux que ce soit le cas.13. rubis | idéone
Comme Python, Ruby voit:
Cependant, il est intéressant de noter que la chaîne multiligne est en fait trois chaînes distinctes (
""
,"..."
,""
) concaténés. La ligne d’impression est imprimée(4^2+7) = xor(4,2)+7 = 6+7 = 13
avant d’essayer de divisernil
par 2.14. > <> | Essayez-le en ligne!
Cette partie est la même que la partie Gol> <>, sauf que
@
le 14 est placé en haut, ce qui produit une sortie.15. Brian & Chuck | Essayez-le en ligne!
Brian & Chuck est un dérivé de BF avec deux bandes, le pointeur d’instruction d’une bande étant le pointeur de mémoire de l’autre. En l'absence de
```
, les deux premières lignes du code source sont utilisées pour initialiser les bandes.Les caractères pertinents dans les deux premières lignes sont:
La
?
bande de Brian passe le contrôle à Chuck dans la cellule désignée (la#
) est non nulle. Le mandrin s'exécute ensuite>.>.
et affiche les deux caractères après le point d'interrogation.16. espaces blancs | Interprète
En utilisant respectivement
STL
espace, tabulation et saut de ligne, le programme commence:La première ligne pousse 16 (
+10000
base 2), la précédente l'TLST
imprime sous forme de nombre. Les trois prochaines nouvelles lignes interrompent le programme.Notez cependant que ce programme est spécifique à l’interprète. Le reste des erreurs de syntaxe de code dans la plupart des interprètes, un interprète plus indulgent est donc nécessaire, comme celui ci-dessus.
17. 3var | Essayez-le en ligne!
De la première ligne, une série d'instructions sont exécutées, mais les plus pertinentes sont
En raison des restrictions imposées par ETA, nous utilisons
k
habituellement pour décrémenter la variable B plutôt quea
pour l’incrémenter.kk
décrémente B en -2 et lemm
carré B deux fois en 16, qui est incrémenté de 17 aveca
. Ceci est ensuite sorti aveco
.#
est ensuite utilisé pour réinitialiser B à 0 et/
provoque la sortie d'erreur du programme via une division par 0.18. Axo | Essayez-le en ligne!
Restrictions introduites: aucune instruction avant le programme Axo ne modifie le sens de l'IP
Encore une fois, une série d'instructions sont exécutées dans la première ligne, mais les plus pertinentes sont
Axo est un langage 2D similaire à Befunge. Il
#
s'agit également d'un pont qui saute l'instruction suivante, mais uniquement si le haut de la pile est égal à zéro.15,
pousser à la pile, mais la pile est vidée avec@
.99+
puis pousse 18,{
sorties et\
s'arrête.19. Labyrinthe | Essayez-le en ligne!
Labyrinth est un autre langage 2D, et les instructions exécutées sont
#
pousse la longueur de la pile, qui est 0 la première fois.|
est au niveau du bit OU, ne changeant rien car la pile ne contient que des 0, et la seconde#
pousse maintenant 1 en raison du zéro isolé. On tourne à droite à cause du 1,9
convertit ce 1 en1*10+9 = 19
, l’!
imprime et@
s’arrête.Ce programme repose sur le fait que l’
[
instruction n’est pas reconnue à l’heure actuelle et qu’il est donc traité comme un mur.20. étoilé | Essayez-le en ligne!
Restrictions introduites: Tous les
+
s doivent avoir au moins un espace précédentSi nous supprimons les caractères non reconnus, la partie pertinente du code est
,
est entré, mais puisque nous dirigeons à partir de/dev/null
là, il n’y en a pas, poussant 0 dans la pile. A+
avecn >= 5
les espaces précédents poussen-5
, alors l'instruction suivante pousse 2...
puis sort ces deux chiffres dans l'ordre inverse.Ensuite, nous avons un
+
avec un seul espace précédent, qui est dupliqué. Cependant, la pile est vide, nous avons donc une erreur.21. fission | Essayez-le en ligne!
La seule partie pertinente pour la fission est
L
engendre un atome qui se déplace vers la gauche,"21"
imprime 21 et*
s'arrête.22. Brainfuck | Essayez-le en ligne!
Restrictions introduites: non
.
avant la première[
Cela nécessite un interpréteur qui donne 0 sur EOF et a des cellules de 8 bits. Le code pertinent est
L'inital
-
consiste à décaler le+
, et le premier[...]
n'est pas exécuté car la cellule est à 0. Ce qui suit-[>+<-----]>-
définit la cellule sur le code de caractère de2
et le..
sort deux fois.23. Julia | Essayez-le en ligne!
Julia voit:
Ce qui est imprimé, c’est
4^2+7 = pow(4,2)+7 = 16+7 = 23
, et le programme fait erreur, en essayant de divisernothing
par 2. Notez que Julia ne semble pas s’inquiéter du fait que le reste du code causerait de toute façon une erreur de syntaxe.24. Lily | Interprète
Lily voit:
7/6*24 = 1*24 = 24
est imprimé.25. GolfScript | Essayez-le en ligne!
GolfScript voit:
GolfScript est basé sur une pile. 25 est donc placé dans la pile, puis sauté et imprimé
print
.(
tente ensuite de décrémenter la chaîne vide implicite sur la pile, ce qui échoue et entraîne une erreur dans le programme.26. régime de poulet | idéone
Chicken Scheme a la même
#| ... |#
syntaxe de commentaire multiligne que Common Lisp. Cependant, dans1/5
est un flotteur qui est égal à0.2
, donc 26 est plutôt émis.27. Thue | Essayez-le en ligne!
Thue est un langage basé sur la réécriture de chaînes. La première partie pertinente est
qui définit une substitution
f -> 27
indique alors la fin des substitutions avec::=
. Le seulf
dansif
est ensuite remplacé par27
, qui est sorti.28. Perl 6 | idéone
Perl 6 a une nouvelle syntaxe de commentaire, à savoir
#`(some bracket)
un commentaire multiligne allant jusqu'au crochet correspondant. Ainsi, Perl 6 voit:qui imprime
7/6*24 = 28
.29. Picolisp | idéone
Picolisp voit:
qui imprime 29. La ligne suivante provoque ensuite une erreur de syntaxe.
30. TRANSCRIPTION | Essayez-le en ligne!
TRANSCRIPT est un esolang thématique inspiré d’aventures textuelles. Les lignes non reconnues sont ignorées (ce qui vous permet d'ajouter un texte d'histoire ou de saveur supplémentaire parmi les instructions de code réelles). Les lignes pertinentes sont donc:
La première ligne déclare une variable chaîne
Jo
, en utilisant un nom à deux lettres, car les noms à une lettre semblent échouer. La deuxième ligne définit cette chaîne sur"30"
, qui est sortie parX
("examine") dans la troisième ligne.la source
pre
balises au lieu d'utiliser un bloc de code de style Markdown.15 langues,
686665 octets / 15 ^ 3 = 0.019 ...Retina , Starry , Prelude , ETA , Axo , Labyrinth , Hexagony , Foo , Brian & Chuck , Gol> <> , le mal , l’ espace , la fission , > <> et GolfScript .
Après une réécriture massive, j'ai réussi à intégrer quatre langues supplémentaires. Le code contient les quelques onglets pour les espaces blancs. Depuis que Stack Exchange les convertit en espaces, je les ai représentés ci-
\t
dessous:Je pense avoir fini d’ajouter des langues (bien que l’ajout d’un seul puisse sauver quelques octets de ce que j’ai déjà). Je me demande si c'est golfable ... 65 octets pour 15 langues, c'est un saut considérable sur 32 octets pour 11 langues, et j'ai maintenant au moins un caractère inutile pour faire fonctionner Foo ..
Impressions de rétine
1
Essayez-le en ligne.
Heureusement, la première ligne est une expression rationnelle valide. Cependant, cette expression rationnelle ne correspond évidemment pas à l'entrée vide, aussi la première étape (constituée des deux premières lignes) ne fait rien.
La troisième ligne est autonome, elle est donc traitée comme une étape de correspondance qui, par défaut, compte le nombre de correspondances. Cependant, le
`
est un séparateur qui indique à Retina que la partie en face de celle-ci est une chaîne de configuration (il n’est pas arrivé de connaître les options indiquées ici) et la partie après est la regex. Donc, l'expression régulière est vide et Retina trouve exactement une correspondance.Impressions étoilées
2
Essayez-le en ligne.
Starry ignore tout sauf les espaces et
+*,'`.
. Chaque commande est l'un de ces caractères en conjonction avec les espaces depuis le dernier de ces caractères. Supprimons donc tout le code étranger:Sept espaces suivis d'
+
une poussée a2
. Un espace suivi d'un+
double le duplique.'
est un saut conditionnel. Il fait apparaître le haut de la pile, ce qui est vrai (positif). Il saute donc à l'étiquette correspondante (où les étiquettes sont indiquées par`
et "correspondant" signifie "avec le même nombre d'espaces en tête"), qui est la première`
..
sans espaces devant elle imprime ensuite le haut de la pile sous forme de nombre.Impressions prélude
3
Essayez-le en ligne.
Cela suppose que l'interpréteur Python utilise la sortie numérique. Enlevons tous les no-ops:
La première voix fait un tas de trucs, mais rien de tout cela n’a de l’importance, car il n’ya pas
!
d’impression des résultats. La deuxième voix pousse a1
, puis a5
, puis a7
. Nous prenons la différence des deux derniers pour obtenir-2
, puis soustrayons cela du1
pour obtenir3
.!
l'imprime. La troisième voix n'a que des no-ops.Impressions ETA
4
Essayez-le en ligne.
ETA ignore tout sauf les caractères
ETAOINSH
(en tout cas). Le code tel que vu par ETA est donc:I
essaie de lire l'entrée mais ne peut pas, alors il pousse-1
.a
pousse le numéro de ligne actuel plus 1, qui est2
.e
est divmod , qui remplace ceux avec0
et1
(ou-1
, je ne sais pas vraiment, mais peu importe). La suivante lese
remplace tous les deux0
.Maintenant la partie intéressante.
NTHne
est un nombre de base-7.N
et nee
sont que les délimiteurs, et les trois chiffres sontTHN
. C'est-à-dire54
(oùT
digit1
,H
is0
andn
is5
).a
pousse2
une fois de plus.S
le soustrait, résultant en52
et leO
sort comme un caractère (4
). Maintenant,e
essayez à nouveau divmod, mais la pile contient deux zéros, donc le programme se termine avec une erreur (mais ne pollue pas STDOUT en le faisant).Impressions Axo
5
Essayez-le en ligne.
Cette langue était à elle seule responsable de la réécriture. Je ne pouvais pas avoir le
}
sur la première ligne car cela bloquerait l'entrée dans Axo (voir l'historique des révisions pour ce dont je parle). Pour Axo, seule cette partie du code est pertinente:Heureusement, Axo a aussi des
0
s implicites au bas de sa pile, car#
le haut de la pile apparaît (pour vérifier si l'instruction suivante doit être ignorée ou non). Les lettres sont toutes non-ops. Puis5
appuie sur a5
, l’{
imprime,\
termine le programme. Assez simple, vraiment.Empreintes de labyrinthe
6
Essayez-le en ligne.
Je tronque un peu le code, car la moitié droite n'est jamais atteinte, et je l'utilise également
t
à la place de\t
, pour que les colonnes s'alignent correctement:Maintenant que les lettres, les espaces et les tabulations sont des murs dans Labyrinth, le code accessible se présente comme suit:
Le pointeur d'instruction suivra automatiquement ce chemin.
#
pousse la profondeur de la pile principale (0
) et la15
transforme en a15
.}
le déplace vers la pile auxiliaire, et nous ne l'utilisons plus. Cela met commodément le haut de la pile à zéro, de sorte que l’IP ne tourne pas à gauche sur le5
.7
transforme le zéro en un7
,'
est un no-op. La`
négation est unaire, donc nous avons-7
.-
Soustrait maintenant le-7
de l’implicite0
dessous7
. Cette fois, l’IP se tourne bien vers la`
, ce qui est une négation unaire, donc nous l’avons7
encore. L'IP se heurte à une impasse et se retourne. Le-
fait la même chose que précédemment, alors nous obtenons7
une fois de plus. Le sommet de la pile étant désormais positif, l'adresse IP tourne à droite. Il y en a un autre-
qui redonne-7
. Ensuite,~
bitwise NOT, qui le donne6
et l’!
imprime. C'est juste le bon moment pour le faire, car maintenant la pile est à nouveau vide, de sorte que l'IP ne tourne pas à gauche sur le{
mais continue tout droit dans ce@
qui termine le programme.Hexagone
7
Essayez-le en ligne.
Le code déplié ressemble à ceci:
Normalement, ce serait un programme Hexagony terrifiant, mais les personnages réellement utilisés ne sont pas trop nombreux. En fait, ils sont à peu près les mêmes que ceux utilisés par Labyrinth et je pense que la façon dont je distingue
5
et6
est très agréable. :)La ligne du haut peut être fondamentalement ignorée.
#
normalement passer à une adresse IP différente, mais le bord de la mémoire actuelle est0
, de sorte qu'il ne le fait pas. Les lettres ne font que définir une valeur de mémoire fixe, mais nous n'allons pas l'utiliser. Après la fin de la première ligne, le flux de contrôle se poursuit dans la ligne du milieu (en partant de la}
droite). Le}
déplace vers un autre bord de la mémoire.7
définit cet avantage7
.'
revient à d'où nous venons.-
soustrait le bord de mémoire que nous venons de définir7
d'un bord de mémoire inutilisé (0
), nous obtenons donc-7
. La prochaine-
fait la même chose encore, donc c'est un no-op. Jusqu'ici, assez semblable à Labyrinth (à part la disposition de la mémoire). Mais maintenant~
n'est pas au niveau des bits PAS mais une négation unaire dans Hexagonie. Donc, cela donne7
au lieu de6
.!@
, comme dans Labyrinth, affiche la valeur et termine le programme.Foo impressions
8
Essayez-le en ligne.
Comme nous le savons tous depuis le Quiz sur le langage de programmation, imprimer des choses est assez simple dans Foo, même si la majeure partie du code est un fouillis aléatoire de caractères. Aucun des caractères n'affecte la sortie sauf celle
"8"
qui est imprimée8
. Bien, il y a le"31"
plus tard, mais Foo se termine avec une erreur à la fin de la première ligne. Je ne sais pas exactement pourquoi cela se produit, mais cela nécessite3
(ou tout autre chiffre) dans la ligne du haut, qui n'est utilisée nulle part ailleurs.Impressions de Brian et Chuck
9
Essayez-le en ligne.
Répétons cette opération en supprimant la troisième ligne (elle n'est jamais analysée) et en remplaçant tous les caractères non pertinents (par exemple, les no-ops ou les cellules non lues) par des espaces:
Pour rappel, chaque ligne est un Brainfuck-like dont la bande est le code source de l'autre programme. Le flux de contrôle commence sur la première ligne (appelée Brian).
Le
{
déplace la tête de la bande complètement vers la gauche (où il est déjà), et les?
mains contrôlent le flux vers Chuck (la deuxième ligne). Là,}
déplace la tête de la bande vers la droite jusqu'à trouver une cellule zéro. Cela ne se produit pas avant la fin du programme, de sorte que la tête de lecture se termine une cellule après le9
.-
décrémente cette cellule, mais ce n'est pas pertinent.<
déplace la tête de la bande sur9
et l’.
imprime. Chuck est à court de programme et se termine.Gol> <> impressions
10
Testé ici.
#
est un miroir, l’adresse IP saute immédiatement à la fin de la première ligne (et va à gauche). Le9
peut être ignoré.a
pousse10
,e
pousse14
,"8"
pousse le code de caractère de8
,@
fait pivoter les trois premiers éléments de la pile (en tirant vers le haut10
), de manière àn
imprimer le10
et;
met fin au programme.Merci à Sp3000 pour suggérer d'utiliser à la
@
place de!
(qui a enregistré un octet).empreintes diaboliques
11
Merci à Sp3000 de m'avoir envoyé des listes de commandes forcées pour générer des nombres à un chiffre.
Essayez-le en ligne.
evil ignore tout sauf les minuscules et le code ressemble à ceci:
En outre, cela
n
affecte un État qui ne nous intéresse pas, alors ignorons-le également.a
Incrémente maintenant le registre (qui commence à0
), ete
constitue l'opération magique du "tissage" du mal qui permute les bits d'une manière particulière.aeeeaeea
arrive à donner la valeur49
qui est le code de caractère de1
.ww
l'imprime deux fois.Tirages blancs
12
Essayez-le en ligne.
Ok, nous savons que Whitespace ne lit que les espaces, les tabulations et les sauts de ligne, alors écrivons le code tel que vu par Whitespace avec
STL
:Ce sont deux commandes:
Le premier pousse le numéro
12
. Plus précisément,SS
commence un littéral numérique. Le prochainS
est le bit de signe (positif). Ensuite, tout ce qui est au-dessusL
est une représentation binaire du nombre. Il y a une tonne de zéros non significatifs, dont nous avons besoin pour Starry, mais ils n'affectent pas le nombre. Alors leTTSS
s est12
en binaire. Fait amusant: si j'ajoutais une 16ème langue, je pourrais sauvegarder un octet ici, car Starry pourrait utiliser les quatreS
dans la represtation binaire de16
. Je doute que je vais bien ...La
TLST
affiche simplement le haut de la pile sous forme de nombre. (TL
marque la commande comme une commande d'E / S etST
imprime des nombres.)Impressions de fission
13
Essayez-le en ligne.
La fission ne voit que cette partie du code:
L
commence le flux de contrôle avec un atome de gauche."
active / désactive le mode d’impression, de sorte que les31
impressions ne soient que simples13
. Ensuite, l'atome est capturé dans le coin du<
, ce qui termine le programme.> <> impressions
14
Testé ici.
Distinguer entre> <> et Gol> <> n'est pas aussi facile que je le pensais, car Gol> <> fait presque toujours la même chose que> <> pour les commandes qui existent dans les deux, et les commandes qui n'existent que dans Gol> < > cause> <> de planter. Cependant,
@
tourne dans l’autre sens> <>, de telle sorte qu’il appuie vers le bas au7
lieu de tirer vers le haut10
, puis il14
est imprimé au lieu de10
.Impressions GolfScript
15
Essayez-le en ligne.
Celui-ci est le plus simple:
#
commente la première ligne. Puis se15
pousse et}
est un "super commentaire", qui ignore le reste du programme. Donc, le15
est imprimé à la fin du programme.la source
Python 1.x, 2.x et 3.x, 32 octets / 3 ^ 3 = 1.1851 ...
Imprime le premier numéro de la version, qui se trouve
1
dans Python 1.x,2
dans Python 2.x et3
dans Python 3.x.Au moment où nous obtenons Python 9.x, mon score sera glorieux
0.04389
!: ~)!
la source
1
car c'est le premier caractère de la chaîne "10.quelque chose"?3 langues, 2 octets / 27 = 0.074
Eh bien, il bat au moins la moitié des soumissions: P
1. GolfScript
GolfScript ignore le
P
, ne produisant que le 1. Essayez-le en ligne .2. Par
P
est 2-au-pouvoir-de, donc1P = 2^1 = 2
. Essayez-le en ligne .3. sérieusement
P
donne le nième nombre premier, zéro indexé. Nous obtenons 3 puisque c'est le deuxième prime. Essayez-le en ligne .Remarques
Mon objectif initial était de trouver une réponse valide sur 1 octet. Mon premier essai a été de
\x12
travailler avec Bubblegum et gs2 , mais le défi nécessite au minimum trois langues.\x13
fonctionnerait s'il y avait une langue dans laquelle cela produit 1.Abandonnant sur une réponse de 1 octet, je suis passé à deux octets.
3u
est un appel proche, produisant 1 dans Japt , 3 en GolfScript et 4 en Sérieusement, mais il était difficile de trouver un langage qui en produisait 2 pour combler le vide.Tout cela m'a pris beaucoup trop de temps: /
la source
6 langues - 44 octets / 6 ^ 3 = 0,204 ...
Merci à SnoringFrog d'avoir économisé 10 octets!
Travaille dans:
Remarque: Avant de l'essayer en ligne, assurez-vous de remplacer S par des espaces et T par des tabulations, ou bien convertissez le fichier hexadécimal suivant en ASCII.
Je vais essayer d'utiliser plus de langages de programmation :)
Befunge (gravures
1
):Essayez-le en ligne
Pyth (impressions
2
):Essayez-le en ligne
Brainfuck (gravures
3
):Essayez-le en ligne
Hexagone (gravures
4
):Essayez-le en ligne
Une version plus lisible:
Espace blanc (empreintes
5
):Essayez-le en ligne
Etant donné que les autres caractères sont ignorés mais les espaces et les tabulations, nous avons les éléments suivants:
AniRad version 0.2 (empreinte
6
):D'une certaine manière, cela fonctionne pour la version 0.2, mais donne une erreur pour la version 0.4. Je ne sais pas pourquoi. Vous pouvez trouver la version 0.2 ici . Pour exécuter ceci, vous pouvez copier et coller le code de l'interpréteur dans repl.it et l'exécuter. Après cela, il vous suffit de coller le programme dans STDIN et de l'exécuter.
la source
SSSSSSSSSSTTSTSTLTLSS
vous avez maintenant, vous pouvez le faireSSSTSTLTLST
. Cela pousse un 5 littéral sur la pile, puis67 langues,3237 octets, score0,148 ...37/7 3 ≈ 0,107872 ...Brainfuck-ng
+
incrémente la cellule en cours,!
imprime en tant qu'entier,@
quitte.#
et"
sont des NOP.Python 2
La première ligne est un commentaire. En utilisant la division entière, calcule
4 - -int(-3 / 2) = 4 - -int(-2) = 4 - -(-2) = 4 - 2 = 2
et affiche le résultat.Python 3
Identique à la précédente, mais avec une division flottante.
4 - -int(-3 / 2) = 4 - -int(-1.5) = 4 - -(-1) = 4 - 1 = 3
.Lua
--
commence un commentaire, et#
sur la première ligne est un commentaire, donc en grosprint(4)
.> <>
#
reflète IP,5
pousse 5,n
imprime un nombre et;
quitte.Befunge
#
saute le+
,!
nie logiquement le haut de la pile,"@\"
pousse la chaîne@\
,6
pousse 6,.
imprime un nombre et@
quitte.Pyth
#
commence une boucle infinie, en éliminant les erreurs.7
imprime 7, puis s’ensuit+!"string")
ce qui cause fondamentalement une erreur s’il n’a pas deux opérandes pour+
terminer le programme.la source
JavaC ++ C, 363/27 = 13.4 ....
Java imprime 1, C ++ imprime 2, C imprime 3. Je n'ai pas battu tous les records (parce que Java), mais j'aime beaucoup la façon intelligente et abusive de créer un polyglotte dans ces langages que j'ai découvert.
Ceci est un gâchis. Voici un aperçu de la façon dont cela fonctionne. Les littéraux Unicode (
\u000a
, autrement connu comme un saut de ligne, et\u002a
, autrement connu sous le nom*
) sont développés par le compilateur Java dans leurs caractères réels. Alors, voici ce que voit le compilateur Java:Tous ces éléments au début sont ignorés car ils sont tous encadrés par un commentaire multi-lignes (
/* ... */
). Nous verrons plus tard que le mélange de commentaires sur une ligne et de plusieurs lignes nous permet de contrôler exactement les parties commentées dans chaque langue. Dans la méthode principale, nous commençons un commentaire sur plusieurs lignes, puis nous avons//*/
. Normalement, ce serait un commentaire d’une seule ligne, mais comme nous sommes dans un commentaire de plusieurs lignes, le//
ne fait rien, ce qui permet de le*/
fermer.C'est le code Java équivalent, avec les commentaires supprimés:
Voici ce que voit le compilateur C / C ++ (j'ai supprimé les littéraux Unicode, car ils ne sont pas développés par le compilateur et ne font donc rien):
Ici, les commentaires sur une seule ligne remplacent les délimiteurs de commentaires sur plusieurs lignes au début, de sorte que tous les
#define
s et tous les#include
objets sont prétraités. Ensuite, des commentaires sur plusieurs lignes sont utilisés pour commenter le code boiletplate pour Java. C'est le code équivalent, avec les commentaires supprimés:Une astuce polyglotte C / C ++ standard (the
#ifdef __cplusplus
) est utilisée pour définir un jetono
sous la forme"2"
soit"3"
, soit selon le compilateur C ++ ou C qui compile le code. Ensuite, nous définissons une fonctionp
qui prend un seulint
argument (ignoré) et appelleprintf
, en utilisant notreo
jeton nouvellement défini . Comme d'habitude, la valeur de retour est omise, car nous ne sommes pas en mode strict. Ensuite, nous définissons unstruct
avec un seul membre, un pointeur de fonction dont la signature correspondp
, et construisons une seule instance nomméeout
. Dans la méthode principale (on laisseint
comme d'habitude) l'adresse dep
(assignée àout.print
l'out.print
appel).p
) et elle est appelée.Si C ++ n'était pas inclus dans les langages, nous pourrions supprimer tout le code du préprocesseur et le définir en
p
tant queint p(int a){puts("2");}
. Malheureusement, C ++ nécessite une#include
entrée / sortie. Si C n'était pas inclus, nous pourrions supprimer la définition dep
et la#ifdef
macro de préprocesseur et définir directement une fonction membre dans lestruct
lieu de nécessiter un pointeur de fonction. Malheureusement, C ne supporte pas les fonctions membres.la source
4 langues, 28 octets / 64 = 0.4375
1. Python 2
0
est faux et/
est la division entière, donc2. Perl (également Python 3)
0
est falsy et/
est une division float, donc3. rubis
0
est la vérité et est bitwise^
xor, donc4. Lua
0
est la vérité et^
est l'exponentiation, doncNotez que Lua et Ruby ne peuvent pas ajouter de booléens comme s'ils étaient des entiers, d'où leur regroupement. Malheureusement,
0and
cela ne fonctionne pas à Lua, nous ne pouvons donc pas enregistrer d'octet.Version précédente de 17 octets imprimée 1 (Lua), 2 (Ruby), 3 (Python / Perl):
-3 octets merci à @xnor pour cette version, ce qui la rend beaucoup plus propre :)
la source
2^(0 or 1)
travailler?BFSRS> <> funge93thon123, 73/343 ≈ 0.212827 ...
Brainfuck, sérieusement ,> <>, Befunge-93, Python 1, Python 2, Python 3
Contient des non imprimables, hexdump (réversible avec
xxd -ps -r
):J'ajouterai plus de langues (et probablement d'octets) au fil du temps. Les langues figurant dans l'en-tête sont répertoriées dans l'ordre de leur impression. Supposons des cellules d'habillage de 8 bits et une bande qui ne se plaindra pas d'aller à gauche de la position initiale (habillage ou infini) de Brainfuck.
Brainfuck:
Sérieusement :
><>
:Befunge-93:
Python 1 (merci Muddyfish):
Python 2 :
Python 3 :
la source
3
en4
)14 langues, 73 octets, score = (73/14 ^ 3) = 0.02660349854
Je peux ajouter quelques langues, mais je pense que je vais ajouter ce que j'ai ici.
1. Brainbool ; Essayez-le en ligne!
Le code correspondant:
C'est vraiment juste
+.+
, ce qui sort 1.2. Jolf ; Essayez-le ici!
Le caractère
(
cesse d'interpréter le code source, le code correspondant est donc:Ceci est équivalent à (en JavaScript)
Quelles sorties 2.
3. élément; Essayez-le en ligne!
Le code correspondant:
Cela capture
3
et l’imprime.4. Brainfuck ; Essayez-le en ligne!
Le code pertinent est:
Quel est le moyen standard de générer le code de caractères à 4 et de le sortir, et quelques autres trucs après.
5. Reng; Essayez-le ici!
~
termine le programme, donc le code pertinent ici est:#
redéfinissentY
être le TOS, dans ce cas,0
.2
pousse 2;(
fait pivoter la pile N fois, en extrayant N de la pile;3`
pousse -3; et enfin, des5n
impressions5
.6. ETA; Essayez-le en ligne!
ETA ne lit que les lettres E, T, A, O, I, N, S, H, de sorte que le code exécuté uniquement est le suivant:
Code super pertinent:
Ou, ce qui revient:
nthne o
.n...e
est un littéral base-7 etthn
correspond au nombre base-7 pour 54.o
renvoie ce caractère. La soumission est erronée, mais je ne sais pas pourquoi.7. Python 3
Ce qu'il voit:
15/2
donne 7,5, de même que la/
division float.int(...)
fait du nombre un int, qui est ensuite imprimé. Le programme fait une erreur quand+3
est rencontré.8. Julia
Julia voit:
Au lieu de tronquer 15/2, Julia l'arrondit, ce qui donne 8. Elle imprime ceci, puis fait une erreur en rencontrant +3.
9. fission; Essayez-le en ligne!
Code pertinent:
J'ai eu cette idée de la portion Fission de Martin (plutôt comme si je l'avais volée).
L
commence une chose tournée vers la gauche, capture9
et se termine par<
.10. espaces blancs; Essayez-le ici!
Le code approprié, traduisant les espaces
S
et les tabulations enT
:Il pousse 10 dans la pile et le sort sous forme de nombre (
T\nST
).11. Python 2
Python 2 voit ceci:
(int(15/2))+3
est évalué à 11, et c'est imprimé.12. Gol> <>; Essayez-le ici!
Code pertinent:
Celui - ci utilise l'astuce utilisée dans la réponse de Martin qui
@
tourne dans des directions différentes> <> et Gol> <>.#
miroirs,c
pousse 12,d
pousse 13,0
pousse 0, et@
amènec
au sommet de la pile, alors être dépassé et imprimé avec;n
.13.> <>; Essayez-le en ligne!
Code pertinent:
Encore une fois, en utilisant cela
@
tourne différentes directions dans> <> et Gol> <>.#
miroirs,c
pousse 12,d
pousse 13,0
pousse 0, et@
amèned
au sommet de la pile, puis est sorti et imprimé avec;n
.14. Golfscript; Essayez-le en ligne!
Ce qu'il voit:
Ça pousse
14
,print
c’est ça, et des erreurs.Voléinspiré par la réponse de Sp3000 .la source
Subskin , Brainfuck et Fob 27 octets / 3 ^ 3 = 1
Sous-peau
Nous plaçons le pointeur d'instruction (peu importe ici) sur
0
et le registre de sortie sur31
. Si le contenu du registre de sortie est>= 0
, nous produisons la valeur contenue en tant quechar
. Tout autre code est ignoré.Brainfuck
Met
3
dans le registre, décrémente la valeur une fois avec-
et finalement sort avec.
.Gousset
C'est un peu plus compliqué, puisque Brainfuck lit également les instructions
<
et>
dans Fob. Nous entrons en mode exécution avec#
et incrémentons le pointeur de Brainfuck d'un point à un autre, ce qui nous facilite la tâche plus tard. Nous n'avons encore rien à exécuter, donc rien n'est exécuté.Nous entrons en mode accumulateur avec
$
, ajoutons un3
, entrons de nouveau en mode exécution, poussons le contenu de l'accumulateur dans la pile avec<
et finalement nous produisons le contenu avec>
.Pour empêcher Brainfuck de visser avec le programme, nous entrons à nouveau en mode d'accumulation avec
$
.la source
7 langues, 55/7 ^ 3 ≈ 0.16035
S'exécute dans PowerShell v1, v2, v3, v4 et v5, Foo et Pyth
Les chiffres 1 à 5 utilisent une logique similaire à celle de la réponse de sweerpotato . La
$PSVersionTable
variable spéciale a été introduite dans PowerShell v2 et contient une liste de construction complète, des révisions, etc. Voici un exemple de sortie de la variable:Dans ce code, nous le stockons d’abord
$p
pour que la longueur du code soit plus courte. Ensuite, nous vérifions son existence en utilisant la variable comme index dans un tableau à deux éléments:$NULL
, le!
qui est$TRUE
, ou1
qui correspond au second élément du tableau, qui délivre en sortie1
.!
le résultat de la variable est$FALSE
ou0
, qui indexe le premier élément, qui fournit le numéro de version.En utilisant Foo for 6, nous exploitons ce
#
commentaire dans PowerShell. Il est donc ignoré lors de son exécution dans un environnement PS. Cependant, Foo sera ravi de cracher le numéro6
puis de poursuivre le reste du programme, ce qui ne fait rien.En utilisant Pyth pour 7, on retourne
7
, puis on quitte immédiatement avec.q
, donc la boucle infinie while-true qui a commencé avec#
importe peu. Depuis qu'il nous reste quelque chose qui s'imprime implicitement. Merci à @ FryAmTheEggman pour cet ajout.Edit - Géré quelques octets grâce à Mauris Edit - explication Pyth clarifiée grâce à Sp3000
la source
$p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]
vous Cela fonctionne sur mon Powershell, mais peut-être pas sur toutes les versions précédentes.7 langues, 287/7 ^ 3 = 0.836
Probablement le score le plus bas obtenu, de toute façon, j'aime bien ces 3 versions de C polyglot.Ajout de la solution Python ennuyeuse pour au moins se qualifier pour la prime "3 langues uniques".
Ajout de Java en abusant des trigrammes C pour différentes interprétations de commentaires.
Travaille dans:
Python 1
Python 2
Python 3
C89
C99
C ++
Java
version golfée:
Ungolfed:
Ok, cela devient probablement un peu trop dur et j’espère que mes compétences en anglais seront suffisantes pour expliquer cela de manière ordinaire.
Tout d'abord, je vais expliquer les différents types de commentaires que j'ai utilisés pour encapsuler les structures de langage, chacune pour sa propre part.
Prenons donc le premier bloc:
Pour Java, ceci n'est que le début d'un commentaire multiligne. Mais ... en C99 / 89 / ++, cela revient à
Depuis
??/
est un trigraphe car\
en C, le\
caractère est assez cohérent et consomme même des sauts de ligne dans ses fonctions de commande. Cela provoque\n
simplement le " résultat" d'un résultat au lieu d'un saut de ligne. cela signifie, étant donné que ce tableau d'octets représentant le premier bloc: [/
] [*
] [\n
] [*
] [?
] [?
] [/
] [\n
] [/
] serait après l'évaluation du graphe: [/
] [*
] [\n
] [*
] [\
] [\n
] [/
] Où la fonctionnalité cohérente des\
déclencheurs et "consomme" les\n
octets évalués restants et finalement en C langs sont: [/
] [*
] [\n
] [*
] [/
]Mais à propos de tout cela, Java ne sait rien et traite tout ce qui suit comme un commentaire jusqu'à ce que cette astuce soit renversée.
(à suivre!)
la source
4 langues (Befunge-93, Microscript II, Microscript et Foo), score 7/64 = 0,109
Befunge: Appuyez sur 4, appuyez sur 1, imprimez 1 et terminez.
Microscript II: Créez la chaîne "4", supprimez-la, prenez la racine carrée de l'un, supprimez-la, et définissez enfin x sur 2. Celle-ci est alors imprimée de manière implicite.
Microscript: Poussez 52 sur la pile (qui ne sera jamais utilisée pour le reste du programme), incrémentez le registre (initialement zéro) de un, puis incrémentez le registre de deux. Ceci est ensuite imprimé implicitement.
Foo: Imprimez la chaîne "4", puis appuyez sur 2
la source
Python 1 | 2 | 3, 27 octets / 27 = 1
L'utilisation des numéros de version par @ sweerpotato m'a fait me demander s'il était possible de distinguer les Pythons en moins. Voici le meilleur que j'ai trouvé.
Explication
Pour distinguer Python 3 des versions précédentes, nous utilisons le truc standard division d’entier contre division en virgule flottante.
(1/2>0) == (0>0)
renvoie 0 pré-Python 2.3 ou àFalse
partir de Python 2.3, puis(1/2>0) == (0.5>0)
renvoieTrue
Python 3.Pour distinguer Python 1 du reste, nous prenons la longueur de la chaîne
"\xabc"
, longueur 1 en Python 1 et longueur 2 à partir de Python 2. Pourquoi? Parce que(De Quoi de neuf dans Python 2.0 )
la source
Python 3, Ruby, Perl, C, C ++, Objective-C 202 octets / 6 ^ 3 = 0,935 ...
C'était assez amusant en fait, et beaucoup de jouer avec des booléens.
Vous pouvez toutes les versions du code sur le site suivant , en copiant / collant le code dans l'interpréteur.
Python 3, estampes
1
L'astuce est la suivante:
Cela va imprimer
1
Ruby, estampes
2
Le code interprété pour Ruby est:
Donc, cela imprime
2
Perl, impressions
3
Le code interprété pour Perl est:
Tout d'abord, le
__DATA__
jeton indique au compilateur Perl que la compilation est terminée. Tout ce qui suit est ignoré.Et des impressions
3
C, estampes
4
Le code interprété est assez différent des autres:
Cela imprimera simplement le caractère
4
.C ++, impressions
5
Le même que le code C
Cela va imprimer le caractère
5
.Objective-C, estampes
6
Le même que le code C
Cela va imprimer le caractère
6
.la source
5 langues, 18 octets / 5 ^ 3 = 0,144
Fonctionne dans Brainbool , Mathematica , Foo , > <> et Befunge-93 .
Brainbool
Brainbool est comme Brainfuck, mais il ne fonctionne que sur des bits et son entrée et sa sortie consistent uniquement en
0
et1
.Mathematica
Dans Mathematica, tout est une expression et a une valeur.
Print@2
imprime2
et retourne le symboleNull
. Après cela, le code effectue des calculs symboliques, mais n'imprime rien.Foo
"3"
impressions 3. Je ne sais pas ce que font les autres parties.> <>
Befunge
12 langues, 35 octets / 12 ^ 3 = 0,0202546 ...
En utilisant le tour du bonbon , pas cher mais puissant.
Fonctionne dans Brainbool , Mathematica 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 et 10.0 , Foo et > <> .
la source
6 langues, 38/6 ^ 3 = 0,17592̅5̅9̅
Espace blanc , Brainfuck, Ruby, Labyrinthe , Foo, Sérieusement
Légende:
£
: onglet•
: espace§
: 0x7fCela contient des caractères non imprimables, alors voici l'hexdump:
7075747320323b23342140202d5b3e2b3c2d2d2d2d2d5d3e362e7f22352220090a090a20090a
Explication:
Espace blanc
Essayez-le en ligne. (Remarque: mon programme omet les trois derniers sauts de ligne pour terminer le programme. Je l’ai écrit / testé sur Whitelips et le résultat est correct, mais pas sur Try It Online. Le programme lié a donc ces deux caractères ajoutés. comme je peux le constater, certains interprètes vous le permettent, d'autres sont bloqués dans une boucle infinie sans la terminaison explicite)
(en omettant les caractères ignorés)
spacespacespacetabenter: pousser un 1 sur la pile
tabenterspacetab: affiche le haut de la pile
Rubis
Ne devrait pas avoir besoin d'expliquer. Les impressions 2, traitent le reste de cette ligne (ergo, le programme brainfuck) comme un commentaire, le reste du fichier comme vide.
Brainfuck
Essayez-le en ligne.
Nécessite un interprète prenant en charge les débordements. La première cellule passe par-dessus à 255, puis l’utilise comme compteur de boucle pour générer 51, qui est le code ASCII pour 3.
Labyrinthe
Essayez-le en ligne.
(omettre les deux dernières lignes pour la lisibilité car elles ne sont jamais atteintes)
Foo
Essayez-le en ligne.
La seule chose qui affecte la sortie est "5", qui en imprime 5.
Sérieusement
Essayez-le en ligne.
la source
5 langues, Chaîne , Minkolang , Foo , Brainf ** k-ng et Vitsy , 21/5 ^ 3 = 0,168
Brainf ** k-ng
Chaîne
Foo
Minkolang
Vitsy
Je peux probablement ajouter> <> ou quelque chose.
la source
Craneflak , Classique Brain-Flak , Rain-Flak , BrainHack , Brain-Flueue , Miniflak , MiniHack : .1020
Essayez-le en ligne!
Explication
La première chose qui se passe ici est qu'il y a une différence dans la façon dont les commentaires sont lus entre les interprètes BrainHack, CraneFlak et Rain-Flak. Craneflak n'a pas de commentaire, dans Rain-Flak
#
, le reste de la ligne et dans BrainHack,#{...}
à l'intérieur.Alors, voici ce que chaque langue lit:
La prochaine chose est la différence entre le cerveau-flaks et les miniflaks. Rain-Flak et BrainHack prennent en charge le miniflak, où toutes les opérations supplémentaires sont simplement supprimées. Cela signifie qu'ils perdent le
[]
et<...>
Nous avons ensuite la différence entre Brain-Flak et Brain-Flak Classic. Dans Classic, la hauteur de pile
[]
est-1
remplacée, ce qui signifie que notre résultat est égal à 1 de moins que dans Rain-Flak classique, ce qui en fait 2.Enfin, nous avons la différence entre brain-flak et brain-flueue. Dans brain-flueue, une file d'attente est utilisée à la place d'une pile. Normalement, brain-flak pousse 3 puis 5 et fait apparaître le 5, mais dans brain-flueue, le pop se débarrasse du 3 et non du 5.
la source
Voie lactée 1.0.2 , CJam et STXTRM , 20 octets / 3 ^ 3 = 0.741
J'imagine qu'il y a au moins une autre langue que je pourrais ajouter.
Explication
Voie lactée ,
1
Dans la Voie Lactée, les chaînes ne sont désignées que par des paires de guillemets doubles. Un seul devis lit les entrées à partir de la ligne de commande; s'il n'y en a pas, il pousse une chaîne vide. Les signes supérieur à et inférieur à feront pivoter la pile entière vers la droite et vers la gauche, respectivement. Enfin, un point-virgule permute les deux premiers éléments de la pile.
Voici une visualisation de pile (la pile montrée est le résultat de l’opération listée après qu’elle s’est produite):
CJam ,
2
Dans CJam, les chaînes sont également désignées par des paires de guillemets doubles. Un guillemet simple pousse le code de caractère du caractère suivant. Lorsqu'un code de caractère est sorti, il est affiché en tant que caractère correspondant. Les signes "plus grand que" et "moins que" agissent comme prévu en évaluant l'ordre des deux premiers éléments de la pile. Enfin, un point-virgule ignore l'élément de pile supérieur. A la fin du programme, le contenu de la pile est sorti.
Voici une visualisation de pile (la pile montrée est le résultat de l’opération listée après qu’elle s’est produite):
STXTRM ,
3
Dans MSM, tout ce qui n'est pas un opérateur est poussé dans la pile en tant que caractère. Un point-virgule duplique l'élément de pile supérieur. Le programme se poursuit jusqu'à ce qu'il n'y ait plus d'opérateurs ou qu'il n'y ait qu'un seul élément sur la pile.
Le dernier caractère de la pile
3
est dupliqué par l'opérateur final.3
est l'élément le plus haut à la fin du programme, donc il est sorti.la source
5 langues, 18 octets / 5 ^ 3 = 0,144
Ouroboros , Pip , QBasic, Foo et Pyth
1. Ouroboros
Chaque ligne du programme représente un serpent mangeant sa queue.
Serpent 1
Push
5
,'
est un non-op, push52
(code ASCII de"4"
).(
fait que le serpent saute un nombre et mange autant de caractères de sa queue. Comme cela aboutit à avaler le pointeur d'instruction (et l'ensemble du serpent), l'exécution s'interrompt.Serpent 2
Poussez
1
, poussez un nombre aléatoire (?
), poussez3
,'
c'est un non-op.@
fait pivoter le symbole1
vers le haut de la pile et len
sort sous forme de nombre, laissant3
le haut de la pile. Puis(
mange ce nombre de caractères à partir de la fin du serpent, avalant le pointeur d’instruction et s’arrêtant.Vous pouvez exécuter ce programme en ligne dans l'interprète Stack Snippet ici .
2. Pip
La plupart du programme consiste en des expressions qui sont évaluées et ignorées:
5
'"
(caractère littéral)4
"()"
1?3'@
(expression ternaire)n
(variable, = nouvelle ligne)()
(néant)Enfin, la dernière expression
2
, est imprimée.3. QBasic
Tout ce qui suit
'
est un commentaire. La première ligne se résume donc à5
un numéro de ligne. Sur la deuxième ligne, se1
trouve un numéro de ligne et?3
un raccourci pourPRINT 3
.(Apparemment, avoir des numéros de ligne en panne n'est pas un problème, même si ce serait facile à corriger si c'était le cas.)
4. Foo
Presque tout est sans faille.
"4"
impressions4
. Les parenthèses (x2) sont une boucle qui s'exécute jusqu'à ce que la cellule du tableau en cours soit égale à zéro, ce qui est vrai immédiatement et que la boucle se ferme.@
, lorsqu'il n'est pas suivi d'un nombre, prend la valeur de la cellule de tableau actuelle (initialisée à 0) et la transmet à la pile.Je ne suis pas tout à fait sûr de savoir comment le second, sans égal,
"
est censé être traité. La version en ligne semble ajouter une nouvelle ligne à la sortie, ce que permettent les règles du challenge.5. Pyth
5
est sortie. Ensuite, le programme rencontre'"4"
, qui tente de lire à partir d'un fichier nommé4
. Tant que ce fichier n'existe pas, je pense que cela devrait mettre fin au programme avec une erreur. (La version en ligne indiquename 'open' is not defined
- je suppose, car l’ouverture de fichiers n’est pas autorisée en ligne.)Le caractère errant
"
à la fin de la ligne 1 garantit que la ligne 2 ne provoque pas d'erreur de syntaxe avant l'exécution.la source
4 langues, 24 octets, 24/4 ^ 3 = 0.375
1. PHP
PHP exécute
print(1);
ce qui équivaut à 12. Lua
Lua exécute
print(1//0.5);
ce qui équivaut à 23. Python 2
Python 2 exécute
print(1//0.5--1+1/2*2);
ce qui équivaut à 3 (division entière)4. Python 3
Python 3 exécute
print(1//0.5--1+1/2*2);
ce qui équivaut à 4 (division float)la source
Brainfuck-ng, Foo,> <>, 9 octets / 3 ^ 3 = 0.333 ...
Brainfuck-ng
Les seuls caractères qu'il reconnaît sont
+
et!
:Impressions
1
Foo
Imprime tout entre guillemets.
Impressions
2
> <>
#
Reflète le point à gauche,3
pousse 3 dans la pile, len
sort comme un entier,;
arrête le programme.la source
3 langues,
8283/3 ^ 3 = 3,074 ...Fonctionne dans ??? , Espaces blancs et Beatnik . Ou plutôt, cela devrait fonctionner dans ces langues mais je ne vais pas pouvoir les tester avant quelques jours. Quoi qu'il en soit, voici le code:
1. ???
??? est fondamentalement un brainfuck, mais il utilise la ponctuation courante comme commandes au lieu des caractères traditionnels.
.
incrémente la cellule de mémoire actuelle, ce qui est effectué 49 fois.!
prend la cellule de mémoire actuelle et l’imprime sous forme de caractère, ici1
.2. espaces blancs
Les espaces sont un langage qui ignore tous les caractères non-blancs. Ici, je l'ai converti en une forme facilement lisible. La première ligne pousse
2
sur la pile et les deux autres lignes impriment le haut de la pile sous forme de nombre, ici2
.Notez que dans le code combiné, j'ai substitué des tabulations avec quatre espaces en raison de limitations techniques.
3. Beatnik
Beatnik est une langue dans laquelle chaque mot est converti en son score de Scrabble, ces scores étant alors interprétés comme des commandes. La première ligne pousse
17
sur la pile. La deuxième ligne duplique le sommet de la pile deux fois et la troisième ligne ajoute la partie supérieure des éléments de la pile en même temps deux fois, triplant efficacement17
dans51
. La dernière ligne imprime le caractère en haut de la pile, ici3
.Notez que j'utilise Beatnik à la valeur faciale, en supposant qu'il n'y a pas d'erreur dans la spécification Beatnik d'origine. Notez également que j'utilise le système de notation North American English Scrabble.
Si ce n'est pas clair à présent, chacune de ces langues n'accepte qu'un certain type de caractère (ponctuation, espaces et lettres, respectivement). L'écriture de ce polyglotte était donc aussi simple que d'écrire les programmes individuels. La seule "astuce" consiste à utiliser le code Whitespace pour séparer les mots de Beatnik. Au-delà de cela, les programmes individuels ne se chevauchent pas du tout.
la source
5 langues, 175/5 ^ 3 = 1,4
J'ai décidé de poster une réponse différente car la prime modifie les exigences de manière à ne pas me sentir satisfait de ma première réponse (mais cela me satisfait toujours du point de vue du défi général!).
Alors voici ma solution qui qualifys pour le défi de prime:
Il compile dans
la source
3 langues, 15 octets, score 0.555 ...
Je vais ajouter plus de langues plus tard.
1. Emotinomicon
Emotinomicon ignore pratiquement tout texte qui n'est pas une chaîne.
😅
pousse 1 pour empiler et😨
affiche le TOS sous forme de nombre.2. Javascript
Les commentaires en Javascript commencent par
//
, donc seule la2
partie est exécutée.3. Python 2/3 REPL
Les commentaires en Python commencent par
#
, de sorte que seule la2//1+1
partie est exécutée.//
est une division entière en Python 3 et identique à celle/
de Python 2. 2 divisé par 1 correspond à 2, plus 1 correspond à 3.la source
4 langues, 97 octets, 0.37890625
Rubis
Cela met
s
à"1"
, en utilisant compare=~
contre-3
dans un contexte vide, tente de diviser2
par/2;'''/.to_s.ord
commence alors une nouvelle chaîne contenant=;print 4; __DATA__ =1;
, frappe un commentaire, alorsprint
ss
qui est encore1
.Python
Ensembles
s
à"1"
comme ci - dessus, puis fixe à nouveau à ce~-3
qui est2
. Nous courons une division entière de2//2
, puis il y a une docstring contenant/.to_s.ord;"=;print 4; __DATA__ =1; ";#
, suivie d'un commentaire, enfinprint
ings
, qui est toujours2
.JavaScript
Définit
s
pour"1"
le redéfinir~-3
comme indiqué ci-dessus, puis il y a une2
ligne suivie d'un commentaire. Ensuite, nous définissons la variable__DATA__
sur1
. Il y a une courte chaîne contenant;#'''#
suivi de la définition de la fonctionprint
qui code la sortie à 3, qui est appelée à la ligne suivante.Perl
Exécute une substitution équivalente à
s/"1";s/~-3;2\/\/2;'''\/.to_s.ord;"/
,print
s4
et le reste de la chaîne est masqué derrière l'__DATA__
identificateur.la source
QBasic, QBIC et> <>, 18 octets / 3 ^ 3 langues = 0.66666 points
Panne:
1. QBasic ( Obtenir l'IDE )
2. QBIC ( Obtenez l'interprète )
3.> <> ( essayez-le en ligne )
la source
JavaScript, HTML et PHP, 72 octets / 3 ^ 3 = 2,67
En HTML, ceci imprimera le 1 en tête, ignorera la
<!window?2:2//>
balise et le reste sera un commentaire HTML.En JavaScript, il évalue
1<!window?2:2
et génère 2 (ceci doit être exécuté dans une console) et le reste est un commentaire.En PHP, ce qui suit est la sortie du serveur:
1<!top?2:2//><!----><script>document.body.innerHTML=3</script>
qui remplace le HTML1
par3
.la source