Quel est mon nom? Produire le nom de la langue indirectement [fermé]


40

Produisez uniquement le nom d'un langage de programmation en utilisant uniquement les fonctionnalités du langage lui-même. Le nom du langage ne peut être invoqué qu'indirectement, c'est-à-dire à partir de variables d'environnement non personnalisées, de fonctions ou méthodes intégrées ou de l'interpréteur / compilateur du langage. La sortie devrait être le nom de la langue seulement.

Un exemple serait:

$ awk --v | awk 'NR<2 { print $2}'  # GNU Awk 3.1.8
Awk

La réponse que je choisirai sera celle qui obtiendra le plus grand nombre de votes. En cas d'égalité, la version la plus courte jouée au golf (réponse séparée ou seule donnée) sera le point décisif.


1
Donc, utiliser l'API de réflexion Java n'est pas correct?
Ming-Tang

Je n'y avais pas pensé, mais ça va aussi.
Ty Auvil le

@ George: Hein? Est-ce maintenant un code-golf? Pourquoi? Ce n'était pas avant ...
Joey le

@ Joey: Non, ce n'était pas avant, mais cela ressemblait à une question de code de golf. Je l'ai donc modifiée et quelqu'un l'a approuvé.
Nathan Osman le

@ Joey: Code Golf est le tie-break. Je n'ai pas mis ce TAG à l'origine, mais George l'a suggéré et j'ai accepté.
Ty Auvil

Réponses:


18

Bash, 17 7

bash -c 'echo $0'

ou même

echo ${0#-}

si vous avez déjà lancé bash: D

update : "echo $0"est $0développé en premier, donc 'echo $0'c'est la bonne réponse.


Il ne comporte que le préfixe dash s'il s'agit d'un shell de connexion et ce n'est pas un shell de connexion si c'est celui qui exécute votre programme.
JB

@JB: merci de l'avoir signalé. J'utilisais "s où j'aurais dû 's
Eelvex

On dirait que c'est le gagnant. :)
Ty Auvil

echo $ {SHELL: 5}
Fish Monitor

30

Espace blanc

|  	 	 			
	
    		 	   
	
    		 	  	
	
    			 	  
	
    		  	 	
	
    			  		
	
    			    
	
    		    	
	
    		   		
	
    		  	 	
	


|

Pas un vrai langage, les espaces blancs.
Alexandru


Argh. Désolé Anthony, SE ne me laisse pas vous inviter à voter maintenant.
Alexandru

C'est d'accord. J'ai moi-même appris récemment sur cette langue.
Anthony le

1
Si je ne me trompe pas, votre programme comporte deux erreurs fatales: (1) Soit S, T, L, les espaces, les tabulations et les sauts de ligne, la première instruction est à présent SSTSTSTTTL, mais devrait être SSSTSTSTTTL( 3 S à gauche) - le troisième Sest nécessaire pour indiquer le signe positif du nombre binaire qui le suit (c'est-à-dire le code ascii pour 'W' = 85 = 1010111 en binaire, codé sous la forme de la Lchaîne -terminée TSTSTTTL), et ainsi de suite pour les autres codes ascii. (2) Le prog final TLLLdevrait être TLSSLLL, où TLSSest nécessaire pour sortir le dernier caractère de la pile, et LLLmarque la fin du programme.
res

26

C

#define d(x) x(#x[3])
void main(){d(putchar);}

putchar((int)(putchar)+3);
Mateen Ulhaq

23
putchar("putchar"[3]);Je devais être un idiot il y a un an.
Mateen Ulhaq

Utilisez le paramètre principal. main(a){putchar(a+66);}
A̲̲

23

Python - 23 22

print`credits`[97:103]

2
vous devriez laisser de côté l'espace aprèsprint
gnibbler

Que signifie le ` faire? Je n'ai jamais vu ça.
Kazark

4
Les Backticks sont un alias déconseillé pour repr (). Les backticks ont disparu dans Python 3.x.
0xKirill

2
@ 0xKir Alors? Utilisez-les dans le code de golf jusqu'à leur départ.
Riking

23

J, 4

u:74

Avoir un nom de langue court aide en quelque sorte.


Peut être encore plus court:u:74
jpjacobs

19

Python (win32) - abus du module random

Je ne suis pas sûr que cela fonctionne réellement . Dépend de la mise en œuvre.

print ''.join([(random.seed(835)==None)and'']+[chr(random.randint(64,90)) for x in range(3)]+[(random.seed(53281)==None)and'']+[chr(random.randint(64,90)) for x in range(3)])

Comment as tu trouvé ça? Cela fonctionne également pour moi dans Python 2.6.6 sur Linux.
Escargot mécanique

5
Bon à entendre! J'ai écrit un petit outil de renforcement pour déterminer comment vous devez utiliser le module aléatoire pour obtenir une séquence donnée. Avec une séquence de trois caractères, cela ne prend pas beaucoup de temps - ce script associe deux séquences de trois lettres pour obtenir "PYTHON" :)
zhazam

Le reste consiste à utiliser des listes de compréhension et d'autres astuces pour la faire correspondre à une ligne. Vous pouvez trouver l'outil de
renforcement

Et cela fonctionne sur mon Python 3.1.2 (ajout de parenthèses après print, bien sûr).
Escargot mécanique

1
Presque là: generateSentence(50613, 73)[66:]donne 'PYTHOCN'.
Escargot mécanique

17

Brainfuck

Juste pour le plaisir (je sais que ce n'est pas lié au but de la tâche.), J'ai écrit ce code ...

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

Et quand je l' ai remplacé <, >, [, ], .avec l' espace ...

+++++   -+-+-     ++    +++++  +     +
+    +  +    +   -  +     +    ++    -   
+    +  +    -  +    +    +    - -   - 
+++++   +++++   ------    +    -  +  - 
+    +  +    +  +    -    -    -   + -  
+    +  +    -  -    -    -    -    -+ 
++---   +    +  +    -  +++++  +     - 

+++  + +  +++  + + 
-    + +  +    ++ 
+++  + +  +    + 
+    + -  +    ++
+    ++-  -+-  + +


---  
---
---
---

 - 
---
 - 


12

Python

import sys;print sys.copyright[24:30]

Cela fonctionne aussi pour moi (sys.executable est '/ usr / bin / python')

import sys;print sys.executable[9:]

1
Voici ce que j'obtiens de ceux-ci: Activeet 25\Lib\site-packages\pythonwin\Pythonwin.exe, donc ... ça ne va pas
Nas Banov

import sys;print sys.subversion[0][1:]fonctionne bien
Nas Banov

6
c'est de la triche ... Mais je peux mieux tricher:eval.__doc__[144:150]
JBernardo

11

brainfuck 101

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

On pourrait probablement jouer au golf un peu plus loin, mais il est 6h et je devrais dormir un peu ...


11

C

Dans l'esprit de la réponse de Anon en C (considérant qu'un fichier C a toujours l'extension .c). Je suggérerais:

#include <stdio.h>
void main(){puts(__FILE__+sizeof(__FILE__)-2);}

5
Beaucoup plus court, 25 caractères, une seule ligne, main(){puts(__FILE__+2);}en supposant que le nom de fichier est une seule lettre, par exemple. a.c
Hasturkun

7

Java

public class Name {
    public static void main(String[] args) {
        String s = "";
        s = s.getClass().getName();
        s = s.substring(0, 1).toUpperCase() + s.substring(1, 4);
        System.out.println(s);
    }
}

anon: Soumettez simplement une autre réponse. Ce n'est pas un golf, alors inutile de le garder court.
Joey

6

C

Construit avec DevStudio 2005

#include <stdio.h>
void main ()
{
  int i,j,i2;
  for (i=j=0,i2=200;i2<=200;i2-=19,j==putchar(32|(i2<'Q'&&i2>'+'&&(j<20||i<12||i>28))*3)+8?j=0,i2+=i,i+=putchar('\n')-8:(i2+=j,j+=2));
}

Version légèrement plus courte (avec avertissements du compilateur)

int i,j,k;
for (i=j=k=0;k<=0;k-=19,j==putchar(32|(k<-119&&k>-157&&j<20|i<12|i>28)*3)+8?j=0,k+=i,i+=putchar('\n')-8:(k+=j,j+=2));

La première produira un avertissement indiquant que main n'est pas de type intutilisant gcc.
Oenone

1
Vous n'êtes pas autorisé à utiliser la lettre 'c'.
kinokijuf

6

Rubis - 27

puts RUBY_DESCRIPTION[0..3]

Mise à jour du commentaire de Chris Jester-Young:

Rubis - 24

puts RUBY_COPYRIGHT[0,4]

Mis à jour de Hauleth:

Rubis - 15

p`ruby -v`[0,4]

1. RUBY_COPYRIGHTest plus court que RUBY_DESCRIPTION. 2. [0,4]est plus court que [0..3].
Chris Jester-Young

Encore plus court `` `ruby -v` [0,4]` `
Hauleth

5

chat 3

Créez un fichier avec le contenu suivant (code source)

cat

Et lancez le comme (exécutez le fichier):

$ cat filename

7
Ni indirecte ni une langue?
eternalmatt

4
Cat n'est pas un vrai langage, car il n'est pas complet.
kinokijuf

3
@kinokijuf Il existe de nombreuses langues utiles qui ne sont pas complètes en turing. Voir stackoverflow.com/q/8412741/20713 pour une liste partielle.
éphémère

5
@ ephemient: Cat n'est pas seulement incomplet, ce n'est pas du tout un langage. Il n'a pas de syntaxe, pas de grammeur, pas de mots-clés. Je ne sais pas où bitmask a obtenu sa définition - je ne la suis pas.
utilisateur inconnu

6
@userunknown Il est difficile d'imaginer catêtre une langue et, de plus, cela viole l'esprit de la question (utilise directement le nom de la langue). Mon commentaire visait à réfuter l'idée selon laquelle "Cat n'est pas un vrai langage, car il n'est pas complet de Turing". Ce n'est pas un langage pour d'autres raisons, mais la complétude de Turing n'est pas un facteur décisif.
éphémère



5

Rubis

Pas court, mais très indirectement.

4.times{|x|print((82+11.24*x+8.231*Math.tan(111.2*x)).floor.chr)}


5

Bash / Brainfuck / C

//bin/bash -c 'echo ${0##*/}'
#define p putchar
#define exit main(){p(p+67);p(10);}
exit
//++++++++[->++++++++++++>+>>++>+++<<<<<]>[->+>+>+>+<<<<]
//>+>++.>++.<-.<.>>----.<<---.>>>---.<<++.>---.

Hou la la! Un polyglotte! Prochaine étape: ajouter des espaces.
mardi

4

Brainfuck

>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++++++++++++++++++++++++++++++++++++++.
-----------------.
++++++++.
+++++.
--------.
+++++++++++++++.
------------------.
++++++++.

Br ** n! (Cinq autres à venir ...)
Dr. belisarius

@belisarius: Hm?
Joey le

Br ** n vous.
Mateen Ulhaq

1
vous pouvez faire plus petit avec [...]: ++++++++++ [> ++++++> ++++++++++> ++++++++++ ++> ++++ <<<< -]> ++++++. >> ++++. <---. ++++++++. +++++ .-- ------. >> ++. * << ---. ++++++++.
JBernardo

12
Cela ressemble à la sortie typique de Git .
Joey Adams

4

Perl

$^X=~/([a-z]+)[^\/]+$/;print$1,$/

Je ne reçois qu'en persortie (il manque le dernier l).
BioGeek le

1
@BioGeek: Is your Perl binary called per?
ninjalj

2
I also get per. (My $^X says /usr/bin/perl. The [^\/]+ swallows the l.)
Ilmari Karonen

fixed: $^X=~/([^\/]+)$/;print$1, run with -l command line switch
ardnew

4

Scala — 42

print(((1,1).getClass+"").substring(6,11))

Update — 39 chars

print(('a.getClass+"").substring(6,11))

Nice! A variant, same size: print((""+'a.getClass).split("\\b")(3))
PhiLho

I prefer it capitalized, but of course, it isn't golf anymore. So, for the pleasure of making variants: print(classOf[App].toString.split("\\W").map(_.capitalize).apply(1))
PhiLho

Same trick in 23 chars: (""+Map).patch(5,"",99)
deadsven

And 16: (""+Map).take(5)
deadsven

Or 13: ""+Map take 5
Régis Jean-Gilles

4

C - 34

I don't have enough reputation to add this as a comment to the previous C entry. Same idea as above, but the filename can be anything.c

main(){puts(index(__FILE__,0)-1);}

2
Gah, but now I can't name my files "&raquo;\0<3ASCII.c"
walpen


3

Visual Basic (version 6.0)

MsgBox Right(Error(458), 12)

VBScript

On Error Resume Next
Err.Raise 458
MsgBox Right(Err.Description, 8)

Both VB6 and VBScript

On Error Resume Next
Err.Raise 458
D = Err.Description
MsgBox Mid(D, InStr(2, D, "V"))

The VBScript one produces "Bscript." on my computer.
kinokijuf

You're a bad man.
Riking

3

QBasic (37)

I am using version 1.1 of the QBasic interpreter.

FOR x=0TO 5:?CHR$(PEEK(2588+x));:NEXT


3

GolfScript (13)

"#{$0[0..9]}"

+1 Clever... very clever. Of course, this doesn't work if you've renamed the interpreter, or if you're, say, running it from a different directory.
Ilmari Karonen

Ps. "#{$0}"10< is three chars shorter. :)
Ilmari Karonen

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.