Qual é o meu nome? Produza o nome do idioma indiretamente [fechado]


40

Produza apenas o nome de uma linguagem de programação usando apenas os recursos da própria linguagem. O nome do idioma pode ser invocado apenas indiretamente, ou seja, a partir de variáveis ​​de ambiente não personalizadas, funções ou métodos internos ou o interpretador / compilador do idioma. A saída deve ser apenas o nome do idioma.

Um exemplo seria:

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

A resposta que eu selecionar será aquela com mais votos positivos. Em caso de empate, a versão mais curta do golfe (em separado ou a única resposta dada) será o desempate.


11
Então, usar a API de reflexão Java não está OK?
Ming-Tang

Eu não pensei nisso, mas tudo bem também.
Ty Auvil

@ George: Hein? Agora isso é um código de golfe? Por quê? Não foi antes ...
Joey

@ Joey: Não, não era antes, mas parecia uma questão de código de golfe, então eu editei e alguém aprovou a edição.
Nathan Osman

@ Joey: Code Golf é o desempate. Eu não coloquei o TAG originalmente, mas George sugeriu e eu concordei.
Ty Auvil

Respostas:


18

BASH, 17 7

bash -c 'echo $0'

ou mesmo

echo ${0#-}

se você já executa o bash: D

update : "echo $0"é $0expandido primeiro, assim 'echo $0'como a resposta correta.


É apenas prefixado por traço se for um shell de login e não for um shell de login se for o que executa seu programa.
JB

@JB: obrigado por apontar isso. Eu estava usando "s onde eu deveria ter 's
Eelvex 22/02

Parece que este é o vencedor. :)
Ty Auvil

echo $ {SHELL: 5}
Fish Monitor

30

Espaço em branco

|  	 	 			
	
    		 	   
	
    		 	  	
	
    			 	  
	
    		  	 	
	
    			  		
	
    			    
	
    		    	
	
    		   		
	
    		  	 	
	


|

Não é uma linguagem real, espaço em branco.
Alexandru


Argh. Desculpe Anthony, SE não me permite votar agora.
Alexandru

Está tudo bem. Eu mesmo aprendi recentemente sobre esse idioma.
Anthony

11
Se não me engano, seu programa tem dois erros fatais: (1) Deixar S, T, L denotar Espaço, Tab, Alimentação de Linha repsectivamente, a primeira instrução é atualmente SSTSTSTTTL, mas deve ser SSSTSTSTTTL( 3 S à esquerda) - o terceiro Sé necessário para indicar o sinal positivo do número binário a seguir (ou seja, o código ascii para 'W' = 85 = 1010111 em binário, codificado como a Lsequência terminada TSTSTTTL) e assim por diante para os outros códigos ascii. (2) A final do prog TLLLdeve ser TLSSLLL, onde TLSSé necessário produzir o caractere final da pilha e LLLmarcar o final do programa.
res

26

C

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

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

23
putchar("putchar"[3]);Eu devo ter sido um idiota há um ano.
Mateen Ulhaq

Use o parâmetro principal. main(a){putchar(a+66);}
A _

23

Python - 23 22

print`credits`[97:103]

2
você deve deixar de fora o espaço depoisprint
gnibbler

O que o ` faz? Eu nunca vi isso.
Kazark

4
Backticks são um alias reprovado para repr (). Os backticks desapareceram no Python 3.x.
0xKirill

2
@ 0xKir Então? Use-os no código de golfe até que eles desapareçam.
Riking

23

J, 4

u:74

Ter um nome de idioma curto ajuda bastante.


Pode ser ainda mais curto:u:74
jpjacobs

19

Python (win32) - abuso do módulo aleatório

Não tenho certeza se isso realmente funciona. Depende da implementação.

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

Como você achou aquilo? Também funciona para mim no Python 2.6.6 no linux.
Caracol mecânico

5
Bom ouvir! Eu escrevi uma pequena ferramenta de força bruta para determinar como você precisa propagar o módulo aleatório para obter uma determinada sequência. Com uma seqüência de três caracteres, isso não leva muito tempo - este script une duas seqüências de três letras para obter "python" :)
zhazam

O resto está usando a compreensão da lista e outros truques sujos para ajustá-lo em uma linha. Você pode encontrar a ferramenta bruteforcing aqui :)
zhazam

E funciona no meu Python 3.1.2 (adicionando parênteses depois print, é claro).
Caracol mecânico

11
Quase lá: generateSentence(50613, 73)[66:]'PYTHOCN'.
Caracol mecânico

17

BrainFuck

Apenas por diversão (sei que isso não está relacionado ao objetivo da tarefa.), Escrevi esse código ...

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

E quando eu substituído <, >, [, ], .com espaço ...

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

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


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

 - 
---
 - 


12

Python

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

Isso também funciona para mim (sys.executable é '/ usr / bin / python')

import sys;print sys.executable[9:]

11
Aqui está o que eu recebo de estes: Activee 25\Lib\site-packages\pythonwin\Pythonwin.exe, então ... não é bom
Nas Banov

import sys;print sys.subversion[0][1:]funciona embora
Nas Banov

6
isso é trapaça ... Mas eu posso trapacear melhor:eval.__doc__[144:150]
JBernardo

11

brainfuck 101

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

provavelmente poderia ser jogado um pouco mais longe, mas são 6 da manhã e eu deveria dormir um pouco ...


11

C

No espírito da resposta de Anon em C (considerando que um arquivo C sempre tem a extensão .c). Eu sugiro:

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

5
Muito mais curtos, 25 caracteres, linha única main(){puts(__FILE__+2);}, assumindo que o nome do arquivo seja uma única letra, por exemplo. 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: Basta enviar outra resposta. Como não é um golfe, não há necessidade de mantê-lo curto.
Joey1

6

C

Construído usando o 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));
}

Versão ligeiramente mais curta (com avisos do 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));

o primeiro produzirá um aviso sobre o principal não ser do tipo intusando o gcc.
Enone

11
Você não tem permissão para usar a letra 'c'.
kinokijuf

6

Ruby - 27

puts RUBY_DESCRIPTION[0..3]

Atualização do comentário de Chris Jester-Young:

Ruby - 24

puts RUBY_COPYRIGHT[0,4]

Atualizado a partir de Hauleth:

Ruby - 15

p`ruby -v`[0,4]

1. RUBY_COPYRIGHTé menor do que RUBY_DESCRIPTION. 2. [0,4]é menor do que [0..3].
Chris Jester-Young

Ainda mais curto `` ruby ​​-v` [0,4] ``
Hauleth 27/03

5

gato 3

Crie um arquivo com o seguinte conteúdo (código fonte)

cat

E execute-o como (execute o arquivo):

$ cat filename

7
Nem indireto nem idioma?
eternalmatt 22/07

4
Gato não é uma linguagem real, porque não é completa em Turing.
kinokijuf

3
@kinokijuf Existem muitos idiomas úteis que não são completos para o Turing. Consulte stackoverflow.com/q/8412741/20713 para obter uma lista parcial.
ephemient 27/03

5
@ephemient: Cat não só não está completo, como não é um idioma. Não possui sintaxe, gramática ou palavras-chave. Não sei de onde o bitmask conseguiu sua definição - não a sigo.
desconhecido utilizador

6
@userunknown É difícil imaginar catser um idioma e, além disso, viola o espírito da pergunta (usa o nome do idioma diretamente). Meu comentário foi refutar a idéia de que "gato não é uma linguagem real, porque não é um termo completo para Turing". Não é um idioma por outras razões, mas a completude de Turing não é um bom fator de decisão.
ephemient 28/03



5

Rubi

Não é curto, mas muito indiretamente.

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

Uau! Um poliglota! Próxima etapa: adicione espaço em branco.
24414 tbodt

4

Brainfuck

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

Br ** n! (mais cinco para ir ...)
Dr. belisarius

@belisarius: Hum?
Joey

Br ** n você.
Mateen Ulhaq

11
você pode diminuir com [...]: ++++++++++ [> ++++++> ++++++++++> ++++++++++ ++> ++++ <<<< -]> ++++++. >> ++++. <---. ++++++++. +++++ .-- ------. >> ++. * << ---. ++++++++.
JBernardo 07/07

12
Parece uma saída típica do Git .
Joey Adams

4

Perl

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

Recebo apenas percomo saída (faltando o final l).
BioGeek

11
@BioGeek: Seu Perlbinário é chamado per?
Njalj 03/07

2
Eu também entendo per. (My $^Xdiz /usr/bin/perlA. [^\/]+Engole o l.)
Ilmari Karonen

fixo: $^X=~/([^\/]+)$/;print$1, correr com -lopção de linha de comando
ardnew

4

Scala - 42

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

Atualização - 39 caracteres

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

Agradável! Uma variante do mesmo tamanho: print (("" + 'a.getClass) .split ("\\ b") (3))
PhiLho

Eu prefiro que seja maiúsculo, mas é claro que não é mais golfe. Portanto, para o prazer de fazer variantes: print (classOf [App] .toString.split ("\\ W"). Map (_. Capitalize) .apply (1))
PhiLho

Mesmo truque em 23 caracteres: ("" + Mapa) .patch (5, "", 99)
deadsven

E 16: ("" + Mapa) .take (5)
deadsven

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

4

C - 34

Não tenho reputação suficiente para adicionar isso como um comentário à entrada C anterior. A mesma idéia acima, mas o nome do arquivo pode ser qualquer coisa.c

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

2
Gah, mas agora não consigo nomear meus arquivos "& raquo; \ 0 <3ASCII.c"
walpen


3

Visual Basic (versão 6.0)

MsgBox Right(Error(458), 12)

VBScript

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

VB6 e VBScript

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

O VBScript produz "Bscript". no meu computador
kinokijuf

Você é um homem mau.
Riking

3

QBasic (37)

Estou usando a versão 1.1 do intérprete QBasic.

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


3

GolfScript (13)

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

+1 Inteligente ... muito inteligente. Obviamente, isso não funcionará se você renomear o intérprete ou se, por exemplo, estiver executando-o em um diretório diferente.
Ilmari Karonen 30/03/12

Ps. "#{$0}"10<é três caracteres mais curto. :)
Ilmari Karonen 30/03

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.