¿Cuál es mi nombre? Producir el nombre del idioma indirectamente [cerrado]

40

Produzca solo el nombre de un lenguaje de programación utilizando solo las facilidades del lenguaje en sí. El nombre del idioma solo puede invocarse indirectamente, es decir, a partir de variables de entorno no personalizadas, funciones o métodos integrados o el intérprete / compilador del lenguaje. La salida debe ser solo el nombre del idioma.

Un ejemplo sería:

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

La respuesta que seleccione será la que tenga más votos. En caso de empate, la versión más corta de golf (separada o la única respuesta dada), será el desempate.

Ty Auvil
fuente
1
Entonces, ¿usar Java Reflection API no está bien?
Ming-Tang
No pensé en eso, pero también está bien.
Ty Auvil
@George: ¿Eh? ¿Es eso ahora un código de golf? ¿Por qué? No fue antes ...
Joey
@Joey: No, no era antes, pero parecía una pregunta de código de golf, así que la edité y alguien aprobó la edición.
Nathan Osman
@Joey: Code Golf es el desempate. Originalmente no puse ese TAG, pero George lo sugirió y acepté.
Ty Auvil

Respuestas:

18

BASH, 17 7

bash -c 'echo $0'

o incluso

echo ${0#-}

si ya ejecutas bash: D

actualización : "echo $0"se $0expande primero, así que 'echo $0'es la respuesta correcta.

Eelvex
fuente
Solo tiene el prefijo de guión si es un shell de inicio de sesión y no es un shell de inicio de sesión si es el que ejecuta su programa.
JB
@JB: gracias por señalar eso. Estaba usando "s donde debería tener 's
Eelvex
Parece que este es el ganador. :)
Ty Auvil
echo $ {SHELL: 5}
Fish Monitor
30

Espacio en blanco

El |  	 	 			
	
    		 	   
	
    		 	  	
	
    			 	  
	
    		  	 	
	
    			  		
	
    			    
	
    		    	
	
    		   		
	
    		  	 	
	


El |
Antonio
fuente
No es un lenguaje real, espacios en blanco.
Alexandru
22
@Alexandru: compsoc.dur.ac.uk/whitespace
dmckee
Argh Lo siento, Anthony, SE no me deja votarte ahora.
Alexandru
Está bien. Yo mismo he aprendido recientemente sobre este idioma.
Anthony
1
Si no me equivoco, su programa tiene dos errores fatales: (1) Dejar que S, T, L denoten Space, Tab, Linefeed respectivamente, la primera instrucción está en este momento SSTSTSTTTL, pero debería ser SSSTSTSTTTL( 3 S a la izquierda) - el tercero Ses necesario para indicar el signo positivo del número binario que lo sigue (es decir, el código ascii para 'W' = 85 = 1010111 en binario, codificado como la Lcadena terminada TSTSTTTL), y así sucesivamente para los otros códigos ascii. (2) El final del programa TLLLdebe ser TLSSLLL, donde TLSSse necesita para generar el carácter final de la pila, y LLLmarca el final del programa.
res
26

do

#define d(x) x(#x[3])
void main(){d(putchar);}
Luego.
fuente
putchar((int)(putchar)+3);
Mateen Ulhaq
23
putchar("putchar"[3]);Debo haber sido un idiota hace un año.
Mateen Ulhaq
Utiliza el parámetro principal. main(a){putchar(a+66);}
A̲̲
23

Python - 23 22

print`credits`[97:103]
0xKirill
fuente
2
usted debe dejar de lado el espacio despuésprint
gnibbler
¿Qué hace el ` hacer? Nunca he visto eso.
Kazark el
44
Los backticks son un alias en desuso para repr (). Los backticks se han ido en Python 3.x.
0xKirill
2
@ 0xKir Entonces? Úsalos en el código de golf hasta que se hayan ido.
Riking
23

J, 4

u:74

Tener un nombre corto en el idioma ayuda.

JB
fuente
Puede ser aún más corto:u:74
jpjacobs
19

Python (win32) - abuso del módulo aleatorio

No estoy seguro de si esto realmente funciona. Depende de la implementación.

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
fuente
¿Cómo encontraste eso? También me funciona en Python 2.6.6 en Linux.
Caracol mecánico
55
¡Qué bueno escuchar! Escribí una pequeña herramienta de fuerza bruta para determinar cómo necesita sembrar el módulo aleatorio para obtener una secuencia determinada. Con una secuencia de tres caracteres, esto no lleva mucho tiempo: este script une dos secuencias de tres letras para obtener "PYTHON" :)
zhazam
El resto es usar listas de comprensión y otros trucos sucios para que encaje en una sola línea. Puede encontrar la herramienta de fuerza bruta aquí :)
zhazam
Y funciona en mi Python 3.1.2 (agregando paréntesis después print, por supuesto).
Caracol mecánico
1
Casi allí: generateSentence(50613, 73)[66:]da 'PYTHOCN'.
Caracol mecánico
17

BrainFuck

Solo por diversión (sé que esto no está relacionado con el propósito de la tarea), escribí este código ...

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

Y cuando reemplacé <, >, [, ], .con espacio ...

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

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


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

 - 
---
 - 
JiminP
fuente
13

Piet, 47x2 píxeles

Usando códecs 5x5: Programa Piet para imprimir "Piet"

boothby
fuente
12

Pitón

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

Esto también funciona para mí (sys.executable es '/ usr / bin / python')

import sys;print sys.executable[9:]
gnibbler
fuente
1
Esto es lo que obtengo de estos: Activey 25\Lib\site-packages\pythonwin\Pythonwin.exe, entonces ... nada bueno
Nas Banov
import sys;print sys.subversion[0][1:]funciona
Nas Banov
66
eso es trampa ... Pero puedo engañar mejor:eval.__doc__[144:150]
JBernardo 05 de
11

brainfuck 101

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

probablemente podría jugar un poco más de golf, pero son las 6 am y debería dormir un poco ...

Mate
fuente
11

do

En el espíritu de la respuesta de Anon en C (considerando que un archivo C siempre tiene la extensión .c). Sugeriría:

#include <stdio.h>
void main(){puts(__FILE__+sizeof(__FILE__)-2);}
Etienne PIERRE
fuente
55
Mucho más corto, 25 caracteres, una sola línea main(){puts(__FILE__+2);}, suponiendo que el nombre de archivo es una sola letra, por ejemplo. 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
fuente
anon: Solo envía otra respuesta. Esto no es un golf, por lo que no es necesario que sea corto.
Joey
6

do

Creado con 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));
}

Versión ligeramente más corta (con advertencias del compilador)

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
fuente
el primero generará una advertencia acerca de que main no es de tipo intusando gcc.
enone
1
No está permitido usar la letra 'c'.
kinokijuf
6

Rubí - 27

puts RUBY_DESCRIPTION[0..3]

Actualización del comentario de Chris Jester-Young:

Rubí - 24

puts RUBY_COPYRIGHT[0,4]

Actualizado de Hauleth:

Rubí - 15

p`ruby -v`[0,4]
Donnie H
fuente
1. RUBY_COPYRIGHTes más corto que RUBY_DESCRIPTION. 2. [0,4]es más corto que [0..3].
Chris Jester-Young
Aún más corto `` `ruby -v` [0,4]` `
Hauleth
5

gato 3

Cree un archivo con el siguiente contenido (código fuente)

cat

Y ejecútelo como (ejecute el archivo):

$ cat filename
Alexandru
fuente
77
Ni indirecto ni un idioma?
eternalmatt
44
El gato no es un lenguaje real, porque no es Turing completo.
kinokijuf
3
@kinokijuf Hay muchos lenguajes útiles que no son completos para Turing. Consulte stackoverflow.com/q/8412741/20713 para obtener una lista parcial.
Ephemient
55
@ephemient: Cat no solo no está completa, no es un lenguaje en absoluto. No tiene sintaxis, ni gramática, ni palabras clave. No sé de dónde sacó Bitmask su definición, no la sigo.
Usuario desconocido
66
@userunknown Es difícil imaginar catser un idioma, y ​​además esto viola el espíritu de la pregunta (usa el nombre del idioma directamente). Mi comentario fue refutar la idea de que "Cat no es un lenguaje real, porque no es completo de Turing". No es un lenguaje por otras razones, pero la integridad de Turing no es un buen factor decisivo.
ephemient
5

Clojure - 16 caracteres

(subs(str =)0 7)
mikera
fuente
5

Haskell, 47

data H=Haskell deriving Show
main=print Haskell
Thomas Eding
fuente
5

Rubí

No corto, pero muy indirectamente.

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

Rubí (17)

p 1299022.to_s 36

Salidas "ruby"

defhlt
fuente
5

Bash / Brainfuck / C

//bin/bash -c 'echo ${0##*/}'
#define p putchar
#define exit main(){p(p+67);p(10);}
exit
//++++++++[->++++++++++++>+>>++>+++<<<<<]>[->+>+>+>+<<<<]
//>+>++.>++.<-.<.>>----.<<---.>>>---.<<++.>---.
Dennis
fuente
¡Guauu! Un políglota! Siguiente paso: agregar espacios en blanco.
tbodt
4

Brainfuck

>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++++++++++++++++++++++++++++++++++++++.
-----------------.
++++++++.
+++++.
--------.
+++++++++++++++.
------------------.
++++++++.
Joey
fuente
Br ** n! (
faltan
@belisarius: ¿Hm?
Joey
Br ** n usted.
Mateen Ulhaq
1
puede hacer más pequeño con [...]: ++++++++++ [> ++++++> ++++++++++> +++++++++ ++> ++++ <<<< -]> ++++++. >> ++++. <---. ++++++++. +++++ .-- ------. >> ++. * << ---. ++++++++.
JBernardo
12
Esto se parece a la salida típica de Git .
Joey Adams
4

Perl

$^X=~/([a-z]+)[^\/]+$/;print$1,$/
ninjalj
fuente
Solo obtengo percomo salida (falta el l final).
BioGeek
1
@BioGeek: ¿Se Perlllama tu binario per?
ninjalj
2
Yo también entiendo per. (Mi $^Xdice /usr/bin/perl. Las [^\/]+golondrinas l.)
Ilmari Karonen
corregido: $^X=~/([^\/]+)$/;print$1ejecutar con el -linterruptor de línea de comando
ardnew
4

Scala - 42

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

Actualización - 39 caracteres

print(('a.getClass+"").substring(6,11))
Stanislav Yaglo
fuente
¡Agradable! Una variante, mismo tamaño: print (("" + 'a.getClass) .split ("\\ b") (3))
PhiLho
Prefiero que esté en mayúscula, pero por supuesto, ya no es golf. Entonces, para el placer de hacer variantes: print (classOf [App] .toString.split ("\\ W"). Map (_. Capitalize) .apply (1))
PhiLho
El mismo truco en 23 caracteres: ("" + Mapa) .patch (5, "", 99)
deadsven
Y 16: ("" + Mapa) .take (5)
deadsven
O 13:""+Map take 5
Régis Jean-Gilles
4

C - 34

No tengo suficiente reputación para agregar esto como un comentario a la entrada anterior de C. La misma idea que la anterior, pero el nombre del archivo puede ser cualquier cosa.

main(){puts(index(__FILE__,0)-1);}
qartis
fuente
2
Gah, pero ahora no puedo nombrar mis archivos "& raquo; \ 0 <3ASCII.c"
walpen
4

> <> (Pez) (11)

Aun mejor:

'>'::o2-oo;
jpjacobs
fuente
3

Visual Basic (versión 6.0)

MsgBox Right(Error(458), 12)

VBScript

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

Tanto VB6 como VBScript

On Error Resume Next
Err.Raise 458
D = Err.Description
MsgBox Mid(D, InStr(2, D, "V"))
Por favor levantese
fuente
El VBScript produce "Bscript". en mi computadora.
kinokijuf
Eres un mal hombre
Riking
3

QBasic (37)

Estoy usando la versión 1.1 del intérprete QBasic.

FOR x=0TO 5:?CHR$(PEEK(2588+x));:NEXT
Por favor levantese
fuente
3

Lua 25 Chars

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

O, análogo a los caracteres de la solución J de JB 17:

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

GolfScript (13)

"#{$0[0..9]}"
marinus
fuente
+1 inteligente ... muy inteligente. Por supuesto, esto no funciona si ha cambiado el nombre del intérprete o si, por ejemplo, lo está ejecutando desde un directorio diferente.
Ilmari Karonen
PD. "#{$0}"10<Es tres caracteres más cortos. :)
Ilmari Karonen
3

Raqueta (45)

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