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


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.


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 |

No es un lenguaje real, espacios en blanco.
Alexandru


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

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]

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.


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

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

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

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


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

 - 
---
 - 


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

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


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

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

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

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]

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

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

Rubí

No corto, pero muy indirectamente.

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
//++++++++[->++++++++++++>+>>++>+++<<<<<]>[->+>+>+>+<<<<]
//>+>++.>++.<-.<.>>----.<<---.>>>---.<<++.>---.

¡Guauu! Un políglota! Siguiente paso: agregar espacios en blanco.
tbodt

4

Brainfuck

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

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,$/

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

¡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);}

2
Gah, pero ahora no puedo nombrar mis archivos "& raquo; \ 0 <3ASCII.c"
walpen


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

El VBScript produce "Bscript". en mi computadora.
kinokijuf

Eres un mal hombre
Riking



3

GolfScript (13)

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

+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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.