L'imprimante polyvalente entière

93

Ecrivez un morceau de code exécutable dans au moins trois langues différentes. Le code doit contenir l'entier 1dans la langue numéro un, 2dans la langue numéro deux, 3dans la langue numéro trois, etc.

Règles:

  • La sortie doit être uniquement l'entier, mais les retours à la ligne sont corrects.
  • Le code ne peut prendre aucune entrée
  • Différentes versions majeures de la même langue sont considérées comme uniques. Votre code peut donc être exécutable dans Python 2 et Python 3, mais Python 2.5 et Python 2.7 ne sont pas considérés comme uniques.
  • Vous pouvez utiliser une nouvelle langue si et seulement si elle contient un article esolang / wiki, un interpréteur disponible et une documentation, et si au moins deux utilisateurs l'ont utilisée sur PPCG avant de l'utiliser dans ce challenge. Il doit également respecter ces 4 règles .

Le score de votre soumission est le nombre d'octets dans votre code divisé par le nombre de langues qu'il peut exécuter en cubes. Ainsi, une solution de 54 octets exécutable en 3 langues aura un score de 2:

54 / 3^3 = 2  

Plus le score est bas, mieux c'est.


Classement

Stewie Griffin
la source
6
@muddyfish Vous pourriez être en mesure d'aller chercher la version mineure dans le code, qui vous donner des solutions libres pour tous 2.7.1à 2.7.n. (En fait, sweerpotato ne fait que cela avec les versions majeures.)
Martin Ender
14
Je pense que la solution la plus courte par langue n'a pas de sens ici ...: P
FryAmTheEggman
3
@ Mego Moi non plus, c'est pourquoi je laisse des commentaires sarcastiques sur le problème afin que d'autres personnes
puissent le découvrir
12
Je voulais juste vous féliciter pour la qualité de votre score. Lorsque des problèmes de code mélangent deux quantités dans un score, la balance est presque toujours inactive, de sorte que la meilleure réponse optimisera simplement l'un des scores sans avoir à tenir compte de l'autre. Le poids cubique du nombre de langues était parfait ici ... alors qu’il était toujours possible d’ajouter une autre langue, c’était toujours un très beau défi (mais faisable) de le faire avec le nombre d’octets disponibles. :)
Martin Ender
20
Dans le cadre de ce défi PPCG, nous avons collaboré à la construction d’un polyglotte. Il a maintenant un meilleur score sur ce défi que les principales contributions soumises à ce défi, mais il serait insensé de copier un effort de groupe qui est constamment amélioré, alors je laisse tomber une mention dans les commentaires ici.

Réponses:

90

30 langues, 248 octets, 248/30 ^ 3 = 0.009185

#|#?15g,@           kkmNmSaIeoe99+{\#/-;n@0ea
#[9!@>.>.eeaww#-1@*"12" L
#{  
###
#`{
25
print(4^2 +7)/2


"""
Jo is here.
$'main'MoO OOM
 7
>Jo, 30
>X Jo
f::=~27
::=]##}#(prin 29)
print (7/6*24)###;alert 2#-[>+<-----]>-.|#(write(if(= 1/5 .2)26 3))"""

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:

00000000: 237c 233f 3135 672c 4020 2020 0920 2020  #|#?15g,@   .   
00000010: 206b 6b6d 4e6d 5361 4965 6f65 3939 2b7b   kkmNmSaIeoe99+{
00000020: 5c23 2f2d 3b6e 4030 6561 0a23 5b39 2140  \#/-;n@0ea.#[9!@
00000030: 3e2e 3e2e 6565 6177 7723 2d31 402a 2231  >.>.eeaww#-1@*"1
00000040: 3222 094c 0a23 7b20 090a 2323 230a 2360  2".L.#{ ..###.#`
00000050: 7b0a 3235 0a70 7269 6e74 2834 5e32 202b  {.25.print(4^2 +
00000060: 3729 2f32 0a0a 0a22 2222 0a4a 6f20 6973  7)/2...""".Jo is
00000070: 2068 6572 652e 0a24 276d 6169 6e27 4d6f   here..$'main'Mo
00000080: 4f20 4f4f 4d0a 2037 0a3e 4a6f 2c20 3330  O OOM. 7.>Jo, 30
00000090: 0a3e 5820 4a6f 0a66 3a3a 3d7e 3237 0a3a  .>X Jo.f::=~27.:
000000a0: 3a3d 5d23 237d 2328 7072 696e 2032 3929  :=]##}#(prin 29)
000000b0: 0a70 7269 6e74 2028 372f 362a 3234 2923  .print (7/6*24)#
000000c0: 2323 3b61 6c65 7274 2032 232d 5b3e 2b3c  ##;alert 2#-[>+<
000000d0: 2d2d 2d2d 2d5d 3e2d 2e7c 2328 7772 6974  -----]>-.|#(writ
000000e0: 6528 6966 283d 2031 2f35 202e 3229 3236  e(if(= 1/5 .2)26
000000f0: 2033 2929 2222 220a                       3))""".

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é:

No.  Lang.              Non-esolang?     2D esolang?      BF/BF-deriv?
--------------------------------------------------------------------------
1    COW                                                       ✓
2    CoffeeScript            ✓
3    Common Lisp             ✓
4    Retina
5    Befunge-93                               ✓
6    Python 2                ✓
7    Rail                                     ✓
8    ETA
9    Prelude
10   Gol><>                                   ✓
11   evil
12   Foo                                                       ✓
13   Ruby                    ✓
14   ><>                                      ✓
15   Brian & Chuck                                             ✓
16   Whitespace
17   3var
18   Axo                                      ✓
19   Labyrinth                                ✓
20   Starry
21   Fission                                  ✓
22   Brainfuck                                                 ✓
23   Julia                   ✓
24   Lily                    ✓
25   GolfScript
26   Chicken Scheme          ✓
27   Thue
28   Perl 6                  ✓
29   Picolisp                ✓
30   TRANSCRIPT

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

MoO OOM

qui incrémente la cellule à 1 puis l’imprime sous la forme d’un nombre.

2. CoffeeScript (interprète compris)

CoffeeScript voit:

# comments
###
multiline comment
###;alert 2# comment

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:

#|
multiline comment
|#(write(if(= 1/5 .2)26 3))"""

1/5est un rationnel et pas égal à 0.2, donc 3 est imprimé. La procédure """est une erreur de syntaxe.

Notez que cela printsemble générer une nouvelle ligne et un dernier espace dans Common Lisp. Cependant, heureusement, writefonctionne à 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 """, à savoir 1"2"3"4.

5. Befunge-93 | Interprète

Befunge est un langage 2D et les instructions appropriées sont

# # 15g,@

dans la première ligne, et 5dans la 25ligne. #saute l'instruction suivante, 15gobtient le caractère à la position (1, 5)dans le code (le 5dans la 25ligne), ,sort le caractère et @s'arrête.

6. Python 2 | idéone

Python voit:

# comments
25
print(4^2 +7)/2


"""
multiline string
"""

(4^2+7)/2 = (xor(4,2)+7)/2 = (6+7)/2 = 13/2 = 6, qui obtient printed.

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 est

$'main'
 7
  o
   J

avec le oet Jvenant des lignes utilisées par TRANSCRIPT. Après la sortie 7, le train frappe une Jinstruction 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 etaoinshet leurs versions majuscules, ce qui signifie que le code commence par

NSaIeoe

n...epousse un nombre de base 7 basé sur le contenu des délimiteurs, qui SaIest 624, ou 312 en décimal. opuis sort en tant que caractère, apparemment après le modulo 256, donnant le caractère 8(point de code 56). etente 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 = Truedé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

9!

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

#                                      ;n@0ea

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, la nsort 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

aeeeaeeaww

aincrémente la variable A, eest la fonction de tissage du mal qui mélange les bits de A, et les wsorties A. Par conséquent, nous produisons 1deux fois, donnant 11.

Mais qu'en est-il du reste des instructions, et en particulier wde 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

"12"

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:

# comments
25
print(4^2 +7)/2


"""
multiline string
"""

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 = 13avant d’essayer de diviser nilpar 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:

   ?15
#     >.>.

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 STLespace, tabulation et saut de ligne, le programme commence:

SSSTSSSSL
TL
STL
L
L

La première ligne pousse 16 ( +10000base 2), la précédente l' TLSTimprime 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

kkmmao#/

En raison des restrictions imposées par ETA, nous utilisons khabituellement pour décrémenter la variable B plutôt que apour l’incrémenter. kkdécrémente B en -2 et le mmcarré B deux fois en 16, qui est incrémenté de 17 avec a. Ceci est ensuite sorti avec o.

#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

# # 15 ,@            9 9  + {   \

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

#|#
 [9!@

#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, 9convertit ce 1 en 1*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édent

Si nous supprimons les caractères non reconnus, la partie pertinente du code est

,       +.. +

,est entré, mais puisque nous dirigeons à partir de /dev/nulllà, il n’y en a pas, poussant 0 dans la pile. A +avec n >= 5les espaces précédents pousse n-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

*"12"L

Lengendre 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 de 2et le ..sort deux fois.

23. Julia | Essayez-le en ligne!

Julia voit:

# comments
25
print(4^2 +7)/2

Ce qui est imprimé, c’est 4^2+7 = pow(4,2)+7 = 16+7 = 23, et le programme fait erreur, en essayant de diviser nothingpar 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:

# comment
#[
multiline comment
]## comment
print (7/6*24)# comment

7/6*24 = 1*24 = 24 est imprimé.

25. GolfScript | Essayez-le en ligne!

GolfScript voit:

# comments
25
print(

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, dans

(write(if(= 1/5 .2)26 3))

1/5est 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

f::=~27
::=

qui définit une substitution f -> 27indique alors la fin des substitutions avec ::=. Le seul fdans ifest ensuite remplacé par 27, 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:

# comments
#`{
multiline comment
}# comment
print (7/6*24)# comment

qui imprime 7/6*24 = 28.

29. Picolisp | idéone

Picolisp voit:

# comment
#{
multiline comment
}#(prin 29)

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:

Jo is here.
>Jo, 30
>X Jo

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 par X("examine") dans la troisième ligne.

Sp3000
la source
12
Daaaaaaaaaang ...
AdmBorkBork
9
Je soupçonne que cela peut être le plus bas score non nul sur n'importe quelle question ici.
Morgan Thrapp
C'est incroyable. Je suis en admiration.
Nic Hartley
2
* positif, il existe quelques scores négatifs pour les réponses courtes avec bonus.
CalculatorFeline
Pro-tip du futur: vos onglets ne seront pas foirés si vous entourez votre code dans des prebalises au lieu d'utiliser un bloc de code de style Markdown.
Jakob
148

15 langues, 68 66 65 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- \tdessous:

#I5aeeNTH{\?      \t\t + +3;n@"8"ea9
15}7'`--~!@<"31"LSOe.\t
 \teaww`

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 a 2. 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:

# 5        ?         + +3    8   9
15 7  -- !   31

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 a 1, puis a 5, puis a 7. Nous prenons la différence des deux derniers pour obtenir -2, puis soustrayons cela du 1pour obtenir 3. !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:

IaeeNTHneaSOeea

Iessaie de lire l'entrée mais ne peut pas, alors il pousse -1. apousse le numéro de ligne actuel plus 1, qui est 2. eest divmod , qui remplace ceux avec 0et 1(ou -1, je ne sais pas vraiment, mais peu importe). La suivante les eremplace tous les deux 0.

Maintenant la partie intéressante. NTHneest un nombre de base-7. Net ne esont que les délimiteurs, et les trois chiffres sont THN. C'est-à-dire 54(où Tdigit 1, His 0and nis 5). apousse 2une fois de plus. Sle soustrait, résultant en 52et le Osort comme un caractère ( 4). Maintenant, eessayez à 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:

#I5aeeNTH{\

Heureusement, Axo a aussi des 0s 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. Puis 5appuie sur a 5, 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:

#I5aeeNTH{\
15}7'`--~!@
 teaww`

Maintenant que les lettres, les espaces et les tabulations sont des murs dans Labyrinth, le code accessible se présente comme suit:

# 5      {\
15}7'`--~!@
      `

Le pointeur d'instruction suivra automatiquement ce chemin. #pousse la profondeur de la pile principale ( 0) et la 15transforme en a 15. }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 le 5. 7transforme le zéro en un 7, 'est un no-op. La `négation est unaire, donc nous avons -7. -Soustrait maintenant le -7de l’implicite 0dessous 7. Cette fois, l’IP se tourne bien vers la `, ce qui est une négation unaire, donc nous l’avons 7encore. L'IP se heurte à une impasse et se retourne. Le -fait la même chose que précédemment, alors nous obtenons7une 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 donne 6et 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:

     # I 5 a e
    e N T H { \
   ? + + 3 ; n @
  " 8 " e a 9 1 5
 } 7 ' - - ~ ! @ <
  " 3 1 " L S O e
   . e a w w . .
    . . . . . .
     . . . . .

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 5et 6est 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 est 0, 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. 7définit cet avantage 7. 'revient à d'où nous venons. -soustrait le bord de mémoire que nous venons de définir 7d'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 donne 7au lieu de 6. !@, 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ée 8. 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écessite 3(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:

         { ?         + +         9
  }   --   <        .

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 le 9. -décrémente cette cellule, mais ce n'est pas pertinent. <déplace la tête de la bande sur 9et 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). Le 9peut être ignoré. apousse 10, epousse 14, "8"pousse le code de caractère de 8, @fait pivoter les trois premiers éléments de la pile (en tirant vers le haut 10), de manière à nimprimer le 10et ;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:

aeeneaeeaww

En outre, cela naffecte un État qui ne nous intéresse pas, alors ignorons-le également. aIncrémente maintenant le registre (qui commence à 0), et econstitue l'opération magique du "tissage" du mal qui permute les bits d'une manière particulière. aeeeaeeaarrive à donner la valeur 49qui est le code de caractère de 1. wwl'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:

SSSSSSTTSSLTLST

Ce sont deux commandes:

SSSSSSTTSSL
TLST

Le premier pousse le numéro 12. Plus précisément, SScommence un littéral numérique. Le prochain Sest le bit de signe (positif). Ensuite, tout ce qui est au-dessus Lest 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 le TTSSs est 12en binaire. Fait amusant: si j'ajoutais une 16ème langue, je pourrais sauvegarder un octet ici, car Starry pourrait utiliser les quatre Sdans la represtation binaire de 16. Je doute que je vais bien ...

La TLSTaffiche simplement le haut de la pile sous forme de nombre. ( TLmarque la commande comme une commande d'E / S et STimprime des nombres.)

Impressions de fission 13

Essayez-le en ligne.

La fission ne voit que cette partie du code:

           <"31"L

Lcommence le flux de contrôle avec un atome de gauche. "active / désactive le mode d’impression, de sorte que les 31impressions ne soient que simples 13. 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 au 7lieu de tirer vers le haut 10, puis il 14est imprimé au lieu de 10.

Impressions GolfScript 15

Essayez-le en ligne.

Celui-ci est le plus simple: #commente la première ligne. Puis se 15pousse et }est un "super commentaire", qui ignore le reste du programme. Donc, le 15est imprimé à la fin du programme.

Martin Ender
la source
34
C'est vraiment impressionnant!
sweerpotato
1
@ YassinHajaj Merci, corrigé.
Martin Ender
2
Niiice. Excellent travail pour 15 langues!
ev3commander
1
@ SnoringFrog Eh bien, voilà.
Martin Ender
1
@Eumel Merci, mais la prime concerne spécifiquement les langages "normaux" listés dans sa description, elle devrait donc aller à une telle réponse (comme la très belle solution de Sp3000). Je pense que j'ai quand même eu assez de représentants pour ça. ;)
Martin Ender
42

Python 1.x, 2.x et 3.x, 32 octets / 3 ^ 3 = 1.1851 ...

import sys
print(sys.version[0])

Imprime le premier numéro de la version, qui se trouve 1dans Python 1.x, 2dans Python 2.x et 3dans Python 3.x.

Au moment où nous obtenons Python 9.x, mon score sera glorieux 0.04389!

: ~)!

pomme de terre
la source
10
Sur le chat: Oui, c’est à la fois bon marché et valable =) Cela fait partie de la raison pour laquelle seules les versions majeures ont été considérées comme suffisamment uniques. Je ne sais pas combien de versions Python existent, mais vous pourriez probablement obtenir votre score avec un résultat assez bas en utilisant quelque chose comme ceci ... C'est l'une des rares solutions où je comprends réellement ce qui se passe, alors +1 de ma part; - )
Stewie Griffin
6
En python 10.x (quand il existe), ne serait-il pas imprimé 1car c'est le premier caractère de la chaîne "10.quelque chose"?
ev3commander
1
@ ev3commander Cependant, cette soumission n'est pas spécifiée pour produire une sortie correcte en python10.
Tyzoid
Fixé! Travailler sur une version pérenne, mais Python 1.x n’est pas aussi convivial que les autres: ~)!
sweerpotato
1
Tout ce que je dois faire est de créer un langage qui a trois versions principales. Dans ces trois versions majeures, lors de l’exécution d’un fichier vide, le numéro de version majeure est renvoyé. Le résultat serait 0/3 ^ 3 = 0 Parfait.
Braden Steffaniak
32

3 langues, 2 octets / 27 = 0.074

1P

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

Pest 2-au-pouvoir-de, donc 1P = 2^1 = 2. Essayez-le en ligne .

3. sérieusement

Pdonne 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 \x12travailler avec Bubblegum et gs2 , mais le défi nécessite au minimum trois langues.\x13fonctionnerait s'il y avait une langue dans laquelle cela produit 1.

Abandonnant sur une réponse de 1 octet, je suis passé à deux octets. 3uest 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: /

Sp3000
la source
20

6 langues - 44 octets / 6 ^ 3 = 0,204 ...

Merci à SnoringFrog d'avoir économisé 10 octets!

Travaille dans:

  • Befunge
  • Pyth
  • Brainfuck
  • Hexagone
  • Espace blanc
  • AniRad v0.2

2# "1",@"-[----->+<]>.*@@@!4<SSTST
T
ST
 >6=

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.

32 23 20 22 31 22 2c 40 22 2d 5b 2d 2d 2d 2d 2d 3e 2b 3c 5d 3e 2e 2a 40 40 40 21 34 3c 20 20 09 20 09 0d 0a 09 0d 0a 20 09 0d 0a 20 3e 36 3d

Je vais essayer d'utiliser plus de langages de programmation :)

Befunge (gravures 1):

Essayez-le en ligne

2# "1",@"-[----->+<]>.*@@@!4<
2                             # This puts 2 onto the stack
 #                            # Skips the next op (the space)
   "1"                        # Sets the ASCII value of 1 onto the stack
      ,                       # Pop the last item (1)
       @                      # Terminate program

Pyth (impressions 2):

Essayez-le en ligne

2# "1",@"-[----->+<]>.*@@@!4<
2                             # Prints 2
 #                            # Infinite while loop until an error occurs
   "1"                        # String
      ,@                      # This gives the error and terminates the program

Brainfuck (gravures 3):

Essayez-le en ligne

2# "1",@"-[----->+<]>.*@@@!4<
2# "1",@"                     # Since these are not brainfuck ops, these will be ignored
         -[----->+<]>         # Puts "3" on the stack
                     .        # Prints the last item (3)     

Hexagone (gravures 4):

Essayez-le en ligne

2# "1",@"-[----->+<]>.*@@@!4<   

Une version plus lisible:

   2 # " 1       # The steps:
  " , @ " -      # 1 (2) - Hexagony starts at the top-left of the hexagon
 [ - - - - -     #       - This immediately puts 2 onto the stack
> + < ] > . *    # 2 (#) - Since the stack is 2, this makes the 2nd pointer the 
 @ @ @ ! 4 <     #       - new current pointer
  > 6 = . .      # 3 (*) - The position of the 2nd pointer is in the left-most
   . . . .       #       - position. This sets the stack to the product
                         - of the two neighbours which is zero
                 # 4 (<) - Changes the pointer direction to west
                 # 5 (4) - Sets the stack to 4
                 # 6 (!) - Outputs the decimal 4
                 # 7 (@) - Terminates the program

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:

SSTST                 # This pushes 5 onto the stack
T                     # 
ST                    # This prints the decimal

AniRad version 0.2 (empreinte6 ):

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.

2# "1",@"-[----->+<]>.*@@@!4<      # (#)  Starts at the hashtag (starting point)
                                   #      Direction is down
                                   # (>)  When the pointer gets to the '>', it changes
 >6=                               #      its direction
                                   # (6) Puts 6 onto the stack 
                                   # (=) Pushes the result and terminates
Adnan
la source
1
Plus de langues est définitivement la voie à suivre, je pense ... le dénominateur cubique est vraiment généreux, de sorte qu'il ne devrait pas être trop difficile de battre mon score une fois que vous avez 5 ou 6 langues.
Martin Ender
@ MartinBüttner, oui, mais je ne vois pas comment ajouter une nouvelle langue
Adnan
2
@ Martin oui, c'est généreux. Le dénominateur cubique visait à encourager fortement plus de langues. Je pense que 6 langues sur 50 octets devraient valoir la même chose que 5 langues sur 30 octets. :-) ça deviendra de plus en plus difficile avec le plus de langues que vous utilisez.
Stewie Griffin
Votre code d’espace pourrait être réduit un peu (et je ne pense pas que cela affectera vos autres langues. (Utilisation de L pour le saut de ligne), au lieu de ce que SSSSSSSSSSTTSTSTLTLSSvous avez maintenant, vous pouvez le faire SSSTSTLTLST. Cela pousse un 5 littéral sur la pile, puis
affiche
@ SnoringFrog Merci! Je l'ai édité
Adnan
14

6 7 langues, 32 37 octets, score 0,148 ... 37/7 3 ≈ 0,107872 ...

#7+!"@\"6.@;n5
print(4--int(-3/2)#"
)

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, calcule4 - -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, 5pousse 5, nimprime un nombre et; quitte.

Befunge

#saute le +, !nie logiquement le haut de la pile, "@\"pousse la chaîne @\, 6pousse 6, .imprime un nombre et@ quitte.

Pyth

#commence une boucle infinie, en éliminant les erreurs. 7imprime 7, puis s’ensuit +!"string")ce qui cause fondamentalement une erreur s’il n’a pas deux opérandes pour +terminer le programme.

PurkkaKoodari
la source
13

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.

//\u000a/*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/*\u002a/
import static java.lang.System.out;
public class P{//*/
/*\u002a/public static void//*/
main(/*\u002a/String[] args//*/
){//\u000a/*
out.print=p;
//\u002a/
out.print(1);}
/*\u002a/}//*/

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:

//
/*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/**/
import static java.lang.System.out;
public class P{//*/
/**/public static void//*/
main(/**/String[] args//*/
){//
/*
out.print=p;
//*/
out.print(1);}
/**/}//*/

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:

import static java.lang.System.out;
public class P{
public static void
main(String[] args
){
out.print(1);}
}

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):

///*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/*/
import static java.lang.System.out;
public class P{//*/
/*/public static void//*/
main(/*/String[] args//*/
){//\/*
out.print=p;
///
out.print(1);}
/*/}//*/

Ici, les commentaires sur une seule ligne remplacent les délimiteurs de commentaires sur plusieurs lignes au début, de sorte que tous les #defines et tous les #includeobjets 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:

#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
main(
){
out.print=p;
out.print(1);}

Une astuce polyglotte C / C ++ standard (the #ifdef __cplusplus) est utilisée pour définir un jeton osous la forme "2"soit "3", soit selon le compilateur C ++ ou C qui compile le code. Ensuite, nous définissons une fonction pqui prend un seul intargument (ignoré) et appelle printf, en utilisant notre ojeton nouvellement défini . Comme d'habitude, la valeur de retour est omise, car nous ne sommes pas en mode strict. Ensuite, nous définissons un structavec un seul membre, un pointeur de fonction dont la signature correspond p, et construisons une seule instance nommée out. Dans la méthode principale (on laisse intcomme d'habitude) l'adresse de p(assignée à out.printl' out.printappel).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 ptant que int p(int a){puts("2");}. Malheureusement, C ++ nécessite une #includeentrée / sortie. Si C n'était pas inclus, nous pourrions supprimer la définition de pet la #ifdefmacro de préprocesseur et définir directement une fonction membre dans le structlieu de nécessiter un pointeur de fonction. Malheureusement, C ne supporte pas les fonctions membres.

Mego
la source
12

4 langues, 28 octets / 64 = 0.4375

print((0 and 3^1or 1/2>0)+1)

1. Python 2

0est faux et /est la division entière, donc

(0 and 3^1 or 1/2 > 0) + 1 = (1/2 > 0) + 1 = (0 > 0) + 1 = False + 1 = 1

2. Perl (également Python 3)

0est falsy et /est une division float, donc

(0 and 3^1 or 1/2 > 0) + 1 = (1/2 > 0) + 1 = (0.5 > 0) + 1 = 1 + 1 = 2

3. rubis

0est la vérité et est bitwise ^xor, donc

(0 and 3^1 or 1/2 > 0) + 1 = xor(3,1) + 1 = 2 + 1 = 3

4. Lua

0est la vérité et ^est l'exponentiation, donc

(0 and 3^1 or 1/2 > 0) + 1 = pow(3,1) + 1 = 3 + 1 = 4

Notez que Lua et Ruby ne peuvent pas ajouter de booléens comme s'ils étaient des entiers, d'où leur regroupement. Malheureusement, 0andcela 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):

print(2^(0 or 1))

-3 octets merci à @xnor pour cette version, ce qui la rend beaucoup plus propre :)

Sp3000
la source
Serait 2^(0 or 1)travailler?
xnor
@xnor Ah oui, merci :)
Sp3000
8

BFSRS> <> funge93thon123, 73/343 ≈ 0.212827 ...

Brainfuck, sérieusement ,> <>, Befunge-93, Python 1, Python 2, Python 3

# 4['.]@kX21z-[>+<-----]>--.<;n3
import sys;print(3+int(sys.version[0]))

Contient des non imprimables, hexdump (réversible avec xxd -ps -r):

2320345b272e5d406b5832317a7f2d5b3e2b3c2d2d2d2d2d5d3e2d2d2e3c
3b6e330a696d706f7274207379733b7072696e7428332b696e7428737973
2e76657273696f6e5b305d2929

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:

[.]   initial value of first cell is 0, so loop is skipped
-[>+<-----]>--  push 49 (ASCII ordinal of 1)
.     print "1"
<     move to blank cell
[0]   skip loop because cell is 0
      everything else is ignored

Sérieusement :

# 4['.]@  does some stuff we don't care about
kX        pop entire stack, push as list, discard (essentially the same as é, but is ASCII so we can use Python)
2         push 2
1z        pop 1 item from stack and print (used instead of . so Brainfuck doesn't print here; same as ü in this scenario, but is ASCII so we can use Python)
0x7f      terminate program
          everything else is ignored

><>:

#    mirror, reverse direction
3n;  push 3, print "3", end (reversed because IP is scanning RTL at this point)
     everything else is ignored

Befunge-93:

#     jump over the space
4['.] push 4, print 4 (brackets and ' do nothing)
@     end program
      everything else is ignored

Python 1 (merci Muddyfish):

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+1=5

Python 2 :

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+2=6

Python 3 :

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+3=7
Mego
la source
Python 1 fonctionne également. Voir codegolf.stackexchange.com/a/65652/32686 . N'ajoute aucun caractère (mais change 3en 4)
Bleu
8

14 langues, 73 octets, score = (73/14 ^ 3) = 0.02660349854

#Y2(3`5n~thneo e        ;n@0d c
#   -[>+<"9"L-----]>+.
14  
print(int(15/2))+3

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:

#Y2

Ceci est équivalent à (en JavaScript)

var Y = []; toHex(Y); alert(2);

Quelles sorties 2.

3. élément; Essayez-le en ligne!

Le code correspondant:

    3`

Cela capture 3et 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:

#Y2(3`5n~

#redéfinissent Yêtre le TOS, dans ce cas, 0. 2pousse 2; (fait pivoter la pile N fois, en extrayant N de la pile; 3`pousse -3; et enfin, des 5nimpressions5 .

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:

       n thneo e         n     


  int int          

Code super pertinent:

       n thneo

Ou, ce qui revient: nthne o. n...eest un littéral base-7 et thncorrespond 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:

# comment
# comment
14
print(int(15/2))+3

15/2donne 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:

# comment
# comment
14
print(int(15/2))+3

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:

        <"9"L         

J'ai eu cette idée de la portion Fission de Martin (plutôt comme si je l'avais volée). Lcommence une chose tournée vers la gauche, capture 9et se termine par <.

10. espaces blancs; Essayez-le ici!

Le code approprié, traduisant les espaces Set les tabulations en T:

SSSTSTS
T
ST

Il pousse 10 dans la pile et le sort sous forme de nombre ( T\nST).

11. Python 2

Python 2 voit ceci:

# comment
# comment
14
print(int(15/2))+3

(int(15/2))+3 est évalué à 11, et c'est imprimé.

12. Gol> <>; Essayez-le ici!

Code pertinent:

#                      ;n@0d c

Celui - ci utilise l'astuce utilisée dans la réponse de Martin qui @tourne dans des directions différentes> <> et Gol> <>. #miroirs, cpousse 12, dpousse 13, 0pousse 0, et @amène cau sommet de la pile, alors être dépassé et imprimé avec;n .

13.> <>; Essayez-le en ligne!

Code pertinent:

#                      ;n@0d c

Encore une fois, en utilisant cela @tourne différentes directions dans> <> et Gol> <>. #miroirs, cpousse 12, dpousse 13, 0pousse 0, et @amène dau sommet de la pile, puis est sorti et imprimé avec ;n.

14. Golfscript; Essayez-le en ligne!

Ce qu'il voit:

# comment
# comment
    14
print(-int(-15/2))+3

Ça pousse 14, printc’est ça, et des erreurs. Volé inspiré par la réponse de Sp3000 .

Conor O'Brien
la source
7

Subskin , Brainfuck et Fob 27 octets / 3 ^ 3 = 1

0#>&$3#<>$-[----->+<]>-.
31

Sous-peau

0
31

Nous plaçons le pointeur d'instruction (peu importe ici) sur 0et le registre de sortie sur 31. Si le contenu du registre de sortie est >= 0, nous produisons la valeur contenue en tant que char. Tout autre code est ignoré.

Brainfuck

-[----->+<]>-.

Met 3dans le registre, décrémente la valeur une fois avec -et finalement sort avec. .

Gousset

#>&$3#<>$

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 un 3, 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 $.

pomme de terre
la source
7

7 langues, 55/7 ^ 3 ≈ 0.16035

S'exécute dans PowerShell v1, v2, v3, v4 et v5, Foo et Pyth

#7.q"6""
$p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]

Les chiffres 1 à 5 utilisent une logique similaire à celle de la réponse de sweerpotato . La $PSVersionTablevariable 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:

PS C:\Tools\Scripts> $PSVersionTable

Name                           Value                                                                                                                           
----                           -----                               
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34209
BuildVersion                   6.3.9600.17400
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

Dans ce code, nous le stockons d’abord $ppour 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:

  • Si la variable n'existe pas, PowerShell va créer dynamiquement et l' affecter $NULL, le !qui est $TRUE, ou 1qui correspond au second élément du tableau, qui délivre en sortie1 .
  • Si la variable existe (comme c'est le cas dans v2 +), !le résultat de la variable est $FALSEou 0, 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

AdmBorkBork
la source
Que diriez- $p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]vous Cela fonctionne sur mon Powershell, mais peut-être pas sur toutes les versions précédentes.
Lynn
7

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:

/*
*??/
/
#include <stdio.h>
#ifndef __cplusplus
#define true 8/*
import sys
print(sys.version[0])
'''
#*??/
/
#endif
int main(){int a=(true>1)?-6:3;printf("%d",(true//*
+a
//**??/
/+2));}
#define a \
'''
/**\u002f
public class p{public static void main(){System.out.println("7");}}
/**/

Ungolfed:

/*
*??/
/

#include <stdio.h>

#ifndef __cplusplus
#define true 8/*

import sys
print(sys.version[0])
'''
#*??/
/
#endif 

int main()
{
    int a = (true > 1) ? -6 : 3;
    printf ("%d", (true//*
    +a
    //**??/
/
    +2));
}
#define a \
'''

/**\u002f
public class p
{
    public static void main()
    {
        System.out.println("7");
    }
}
/**/

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 \nsimplement 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 \noctets é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!)

Zaibis
la source
7

4 langues (Befunge-93, Microscript II, Microscript et Foo), score 7/64 = 0,109

"4"1.@2

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

SuperJedi224
la source
6

Python 1 | 2 | 3, 27 octets / 27 = 1

print(len("\xabc")+(1/2>0))

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 à Falsepartir de Python 2.3, puis (1/2>0) == (0.5>0)renvoie TruePython 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

L'échappement \ x dans les littéraux de chaîne prend maintenant exactement 2 chiffres hexadécimaux. Auparavant, il utilisait tous les chiffres hexadécimaux suivant le 'x' et prenait les 8 bits les plus bas du résultat, donc \ x123456 était équivalent à \ x56.

(De Quoi de neuf dans Python 2.0 )

Sp3000
la source
6

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.

#include <stdio.h> /*
print ((("0"+"0"==0)and 3) or (0and 2or 1));
__DATA__ = 1
"""""
*/
int main(){putchar(
#ifdef __OBJC__
'6'
#else
#ifdef __cplusplus
'5'
#else
'4'
#endif
#endif
);return 0;}/*
"""
#*/

Python 3, estampes 1

L'astuce est la suivante:

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Cela va imprimer 1

Ruby, estampes 2

Le code interprété pour Ruby est:

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Donc, cela imprime 2

Perl, impressions 3

Le code interprété pour Perl est:

print ((("0"+"0"==0)and 3) or (0and 2or 1));
__DATA__ = 1

Tout d'abord, le __DATA__jeton indique au compilateur Perl que la compilation est terminée. Tout ce qui suit est ignoré.

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Et des impressions 3

C, estampes 4

Le code interprété est assez différent des autres:

#include <stdio.h>
int main(){putchar(
#ifdef __OBJC__
'6'
#else
#ifdef __cplusplus
'5'
#else
'4'
#endif
#endif
);return 0;}

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.

Adnan
la source
5

5 langues, 18 octets / 5 ^ 3 = 0,144

Fonctionne dans Brainbool , Mathematica , Foo , > <> et Befunge-93 .

4!<n;+Print@2"3".5

Brainbool

Brainbool est comme Brainfuck, mais il ne fonctionne que sur des bits et son entrée et sa sortie consistent uniquement en 0et 1.

4!<n;+Print@2"3".5
  <                   move the pointer to the left
     +                logic not
                .     print the current cell

Mathematica

Dans Mathematica, tout est une expression et a une valeur. Print@2imprime 2et retourne le symbole Null. 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.

> <>

4!<n;+Print@2"3".5
4                     push 4
 !                    skip the next command
   n                  pop and print it as a number
    ;                 end the program

Befunge

4!<n;+Print@2"3".5
4                     push 4
 !                    logical not
  <                   makes the program counter travel to the right
 !                    logical not
4                     push 4
                 5    push 5
                .     pop and print it as a number
             "3"      push the string "3"
            2         push 2
           @          end the program

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

cn;+"11".Print@Floor@$VersionNumber

Alephalpha
la source
5

6 langues, 38/6 ^ 3 = 0,17592̅5̅9̅

Espace blanc , Brainfuck, Ruby, Labyrinthe , Foo, Sérieusement

Légende:

£: onglet

: espace

§: 0x7f

puts•2;#4!@•-[>+<-----]>6.§"5"•£    
£
•£

Cela 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)

puts•2;#4!@ -[>+<-----]>6.§"5"•£
puts•                            skipped
     2                           push 2 onto stack
      ;                          pop 2 from stack
       #                         push current stack depth (0) to stack
        4                        push 4 to stack
         !                       print top of stack as integer
          @                      program terminates

Foo

Essayez-le en ligne.

La seule chose qui affecte la sortie est "5", qui en imprime 5.

Sérieusement

Essayez-le en ligne.

puts•2;#4!@ -[>+<-----]>6.§"5"•£
puts•2;#4!@ -[>+<-----]>           assorted stack manipulation that doesn't affect this program
                        6          push 6 to the stack
                         .         output top of the stack
                          §        (0x7f) terminate program
SnoringFrog
la source
5

5 langues, Chaîne , Minkolang , Foo , Brainf ** k-ng et Vitsy , 21/5 ^ 3 = 0,168

2|<«+!@"3".N+m

5N»

Brainf ** k-ng

2|<«+!@"3".N+m

5N»
  <            go left (should still be ok)
    +!         output 1
      @        halt execution

Chaîne

2|<«+!@"3".N+m

5N»
2              «add 2 to the current string»
 |<            «take off and put on the string (no op)»
   «           «comment»

  »
               «implicit output»

Foo

2|<«+!@"3".N+m

5N»
       "3"     print three

Minkolang

2|<«+!@"3".N+m

5N»
2              C push 2 to the stack [2] C
 |             C mirror C
2              C push 2 to the stack [2,2] C
             m C ignored C
            +  C add top two [4] C
           N   C output C
          .    C terminate program C

Vitsy

2|<«+!@"3".N+m

5N»
2              push 2
 |             mirror
2              push 2
             m pop 2, goto line 2
5              push 5
 N             output 5
  »            ignored

Je peux probablement ajouter> <> ou quelque chose.

Conor O'Brien
la source
1
Vous savez, je n'ai jamais trouvé un bon usage du miroir. xD
Addison Crump
5

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:

Rain-Flak: (([]()()()<()()()>)()()){}         -> 3
BrainHack: (([]()()()<()()()>)()()){}({}())   -> 4
Craneflak: (([]()()()<()()()>)()()){}{}({}()) -> 1

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

Rain-Flak: (()()()()()())         -> 6
BrainHack: (()()()()()())({}())   -> 7

Nous avons ensuite la différence entre Brain-Flak et Brain-Flak Classic. Dans Classic, la hauteur de pile []est -1remplacé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.

Assistant de blé
la source
4

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.

'2"3""1"1<<1>;;"2"3;

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):

["", 0]                                             #  default stack

["", 0, ""]                                 #   '   #  read input from command line
["", 0, "", 2]                              #   2   #  push 2 to the stack
["", 0, "", 2, "3"]                         #  "3"  #  push "3" to the stack
["", 0, "", 2, "3", "1"]                    #  "1"  #  push "1" to the stack
["", 0, "", 2, "3", "1", 1]                 #   1   #  push 1 to the stack
[0, "", 2, "3", "1", 1, ""]                 #   <   #  rotate the stack leftwards
["", 2, "3", "1", 1, "", 0]                 #   <   #  rotate the stack leftwards
["", 2, "3", "1", 1, "", 0, 1]              #   1   #  push 1 to the stack
[1, "", 2, "3", "1", 1, "", 0]              #   >   #  rotate the stack rightward
[1, "", 2, "3", "1", 1, 0, ""]              #   ;   #  swap the top two stack elements
[1, "", 2, "3", "1", 1, "", 0]              #   ;   #  swap the top two stack elements
[1, "", 2, "3", "1", 1, "", 0, "", 2]       #  "2"  #  push 2 to the stack
[1, "", 2, "3", "1", 1, "", 0, "", 2, "3"]  #   3   #  push "3" to the stack
[1, "", 2, "3", "1", 1, "", 0, "", "3", 2]  #   ;   #  swap the top two stack elements

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):

[]                         #  default stack

['2]               #  '2   #  push the character code of "2" to the stack
['2, "3"]          #  "3"  #  push "3" to the stack
['2, "3", "1"]     #  "1"  #  push "1" to the stack
['2, "3", "1", 1]  #   1   #  push 1 to the stack
['2, "3", "1"]     #   <   #  leave the greater of the top two stack elements on the stack
['2, 0]            #   <   #  leave the greater of the top two stack elements on the stack
['2, 0, 1]         #   1   #  push 1 to the stack
['2, 1]            #   >   #  leave the lesser of the top two stack elements on the stack
['2]               #   ;   #  pop the top stack value
[]                 #   ;   #  pop the top stack value
['2]               #  "2"  #  push the character code of "2" to the stack
['2, "3"]          #   3   #  push "3" to the stack
['2]               #   ;   #  pop the top stack item

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 3est dupliqué par l'opérateur final. 3est l'élément le plus haut à la fin du programme, donc il est sorti.

Zach Gates
la source
4

5 langues, 18 octets / 5 ^ 3 = 0,144

Ouroboros , Pip , QBasic, Foo et Pyth

5'"4"()"
1?3'@n()2

1. Ouroboros

Chaque ligne du programme représente un serpent mangeant sa queue.

Serpent 1

Push 5, 'est un non-op, push 52(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 ( ?), poussez 3, 'c'est un non-op. @fait pivoter le symbole 1vers le haut de la pile et le nsort sous forme de nombre, laissant 3le 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 à 5un numéro de ligne. Sur la deuxième ligne, se 1trouve un numéro de ligne et ?3un raccourci pour PRINT 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"impressions 4. 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

5est 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 indique name '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.

DLosc
la source
@ Dennis Merci! La page Esolangs n'avait pas de lien vers cet interprète.
DLosc
Voici l' index des langues actuellement disponibles. Si vous souhaitez que j'en ajoute un, envoyez-moi une requête ping en chat.
Dennis
4

4 langues, 24 octets, 24/4 ^ 3 = 0.375

print(1//0.5--1+1/2*2
);

1. PHP

PHP exécute print(1);ce qui équivaut à 1

2. Lua

Lua exécute print(1//0.5);ce qui équivaut à 2

3. 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)

Penalosa
la source
Bonne réponse, j'aime les réponses dans les langues conventionnelles :-) j'espère que vous vous amuserez au golf sur ppcg :-) veuillez essayer n'importe lequel de mes défis précédents si vous pensez qu'ils sont intéressants :-) Certains sont un peu difficiles et d'autres plus basic :-)
Stewie Griffin Le
Vous pourriez être intéressé par la prime de 100 représentants décrite dans le défi. Outgolf Sp3000 (28 octets, 4 langues) n'utilise que les langues conventionnelles (définies dans le lien) et c'est à vous :-) Malheureusement, les pythons 2 et 3 ne sont pas considérés comme uniques dans le défi des primes.
Stewie Griffin
3

Brainfuck-ng, Foo,> <>, 9 octets / 3 ^ 3 = 0.333 ...

#+!"2";n3

Brainfuck-ng

Les seuls caractères qu'il reconnaît sont +et !:

+ Increment cell by one
! Print as integer

Impressions 1

Foo

Imprime tout entre guillemets.

"2"

Impressions 2

> <>

#Reflète le point à gauche, 3pousse 3 dans la pile, le nsort comme un entier, ;arrête le programme.

#      ;n3
phase
la source
2

3 langues, 82 83/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:

K... Jax... Jy... Jy...   ...
My...    My...
... ...     ......................XO!

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, ici 1.

2. espaces blancs

[Space][Space][Space][Tab][Line Feed]
[Tab][Line Feed]
[Space][Tab]

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 2sur la pile et les deux autres lignes impriment le haut de la pile sous forme de nombre, ici 2.
Notez que dans le code combiné, j'ai substitué des tabulations avec quatre espaces en raison de limitations techniques.

3. Beatnik

K Jax
Jy Jy
My My
XO

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 17sur 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 efficacement 17dans 51. La dernière ligne imprime le caractère en haut de la pile, ici 3.
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.

Mike Bufardeci
la source
2
3 ^ 3 = 27 ==> 82/27 = 3.037037037037037 ...
AdmBorkBork
1
Votre code Whitespace imprime 0, pas 2. Testé ici et ici .
Dennis
@ Dennis Merci, j'avais omis le bit de signe.
Mike Bufardeci
2

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

  • C99
  • objC90
  • C ++ 0x
  • Rubis
  • Perl
#if __cplusplus
#define x\
=begin\
=pod
#endif
int a=
#ifndef x
1//**/
+1
#else
3
#endif
;int main(){printf("%d",a);}
#ifdef f
=end
puts 5;
=begin
=cut
print"4";
=end
#endif
Zaibis
la source
2

3 langues, 15 octets, score 0.555 ...

Je vais ajouter plus de langues plus tard.

2//1+1#😅😨

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 la 2partie est exécutée.

3. Python 2/3 REPL

Les commentaires en Python commencent par #, de sorte que seule la 2//1+1partie 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.

acrolithe
la source
2

4 langues, 97 octets, 0.37890625

s="1";s=~-3;2//2;'''/.to_s.ord;"=;print 4;
__DATA__
=1;
";#'''#";print=s=>console.log(3)
print(s)

Rubis

Cela met sà "1", en utilisant compare =~contre -3dans un contexte vide, tente de diviser 2par /2;'''/.to_s.ordcommence alors une nouvelle chaîne contenant =;print 4; __DATA__ =1;, frappe un commentaire, alors prints squi est encore 1.

Python

Ensembles sà "1"comme ci - dessus, puis fixe à nouveau à ce ~-3qui est 2. Nous courons une division entière de 2//2, puis il y a une docstring contenant /.to_s.ord;"=;print 4; __DATA__ =1; ";#, suivie d'un commentaire, enfin printing s, qui est toujours 2.

JavaScript

Définit spour "1"le redéfinir ~-3comme indiqué ci-dessus, puis il y a une 2ligne suivie d'un commentaire. Ensuite, nous définissons la variable __DATA__sur 1. Il y a une courte chaîne contenant ;#'''#suivi de la définition de la fonction printqui 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;"/, prints 4et le reste de la chaîne est masqué derrière l' __DATA__identificateur.

Dom Hastings
la source
2

QBasic, QBIC et> <>, 18 octets / 3 ^ 3 langues = 0.66666 points

1:?v+1'-5`
''`>3n;

Panne:

1. QBasic ( Obtenir l'IDE )

1:          Line number 1
  ?         Print
   v+1      undefined var v = 0 + 1 = 1
'-5`        The rest of theis code is a QBasic comment
''`>3n;     As is this

2. QBIC ( Obtenez l'interprète )

1     inserts a 1 in the code - mostly harmless
:     Reads from the cmd line. Nothing there, creates an empty variable a
?     Print
v+1   v is initialised to 6, +1 = 7
'     Code Literal: everything till the ` is passed to QBasic without processing
 -5`  7-5 = 2

''`>3n; Code literal with the first literal being a ': comment in QBasic

3.> <> ( essayez-le en ligne )

1:  Push a 1 on the stack, duplicate stack
?   Pop top off the stack and skip next instruction if that's a 0
v   Move downwards - rest of the line is ignored

>   move to the right
3   Push 3 onto the stack
n   Print the top of the stack as a number
;   End the program
Steenbergh
la source
1
Je pense que vous voulez faire un cube du nombre de langues dans votre score (c'est-à-dire 18 / (3 ^ 3))
junkie en mathématiques
1

JavaScript, HTML et PHP, 72 octets / 3 ^ 3 = 2,67

1<!top?2:2//><!--<?='--'.'><script>document.body.innerHTML=3</script>'?>

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:2et 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 HTML 1par 3.

cuniculus
la source
1
Bienvenue sur PPCG.SE! Excellent premier post! Deux choses: nous n’aimons généralement pas les réponses basées sur les REPL (le programme Javascript). De plus, le code PHP ne semble pas fonctionner lorsque je le mets dans un interpréteur en ligne , comment fonctionne le code PHP?
GamrCorps
Merci! Eh bien, c’est techniquement PHP + HTML (c’est-à-dire s’il s’agit du code source de code.php, visiter le site / code.php dans un navigateur affiche 3.
cuniculus
Essayez-le ici: mowbl.com/se.php .
Cuniculus