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:]dá '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.