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.

Ty Auvil
la source
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.

Eelvex
la source
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

|  	 	 			
	
    		 	   
	
    		 	  	
	
    			 	  
	
    		  	 	
	
    			  		
	
    			    
	
    		    	
	
    		   		
	
    		  	 	
	


|
Anthony
la source
Pas un vrai langage, les espaces blancs.
Alexandru
22
@Alexandru: compsoc.dur.ac.uk/whitespace
dmckee
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);}
Anon
la source
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]
0xKirill
la source
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.

JB
la source
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)])
zhazam
la source
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 ...

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

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


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

 - 
---
 - 
JiminP
la source
13

Piet, 47x2 pixels

Utilisation de codes 5x5: Piet program to print "Piet"

boothby
la source
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:]
gnibbler
la source
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 ...

Mat
la source
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);}
Etienne PIERRE
la source
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);
    }
}
Joey
la source
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));
Skizz
la source
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]
Donnie H
la source
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
Alexandru
la source
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

Clojure - 16 caractères

(subs(str =)0 7)
Mikera
la source
5

Haskell, 47 ans

data H=Haskell deriving Show
main=print Haskell
Thomas Eding
la source
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)}
Jon
la source
5

Rubis (17)

p 1299022.to_s 36

Les sorties "ruby"

defhlt
la source
5

Bash / Brainfuck / C

//bin/bash -c 'echo ${0##*/}'
#define p putchar
#define exit main(){p(p+67);p(10);}
exit
//++++++++[->++++++++++++>+>>++>+++<<<<<]>[->+>+>+>+<<<<]
//>+>++.>++.<-.<.>>----.<<---.>>>---.<<++.>---.
Dennis
la source
Hou la la! Un polyglotte! Prochaine étape: ajouter des espaces.
mardi
4

Brainfuck

>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++++++++++++++++++++++++++++++++++++++.
-----------------.
++++++++.
+++++.
--------.
+++++++++++++++.
------------------.
++++++++.
Joey
la source
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,$/
Ninjalj
la source
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))
Stanislav Yaglo
la source
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);}
qartis
la source
2
Gah, but now I can't name my files "&raquo;\0<3ASCII.c"
walpen
4

><> (Fish) (11)

Even better:

'>'::o2-oo;
jpjacobs
la source
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"))
PleaseStand
la source
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
PleaseStand
la source
3

Lua 25 Chars

print(arg[-1]:match"%w+")

Or, analogue to the J B's J solution 17 chars:

print"\76\117\97"
jpjacobs
la source
1
_VERSION:sub(1,3)
mniip
3

GolfScript (13)

"#{$0[0..9]}"
marinus
la source
+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
3

Racket (45)

racket -e "(display(substring(banner)10 17))"
Francisco
la source