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.

Ty Auvil
fonte
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.

Eelvex
fonte
É 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

|  	 	 			
	
    		 	   
	
    		 	  	
	
    			 	  
	
    		  	 	
	
    			  		
	
    			    
	
    		    	
	
    		   		
	
    		  	 	
	


|
Anthony
fonte
Não é uma linguagem real, espaço em branco.
Alexandru
22
@Alexandru: compsoc.dur.ac.uk/whitespace
dmckee
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);}
Anon.
fonte
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]
0xKirill
fonte
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.

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

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

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


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

 - 
---
 - 
JiminP
fonte
13

Piet, 47x2 pixels

Usando codelos 5x5: Programa Piet para imprimir "Piet"

boothby
fonte
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:]
mordedor
fonte
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 ...

Matt
fonte
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);}
Etienne PIERRE
fonte
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);
    }
}
Joey
fonte
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));
Skizz
fonte
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]
Donnie H
fonte
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
Alexandru
fonte
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

Clojure - 16 caracteres

(subs(str =)0 7)
Mikera
fonte
5

Haskell, 47

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

Rubi (17)

p 1299022.to_s 36

Saídas "ruby"

defhlt
fonte
5

Bash / Brainfuck / C

//bin/bash -c 'echo ${0##*/}'
#define p putchar
#define exit main(){p(p+67);p(10);}
exit
//++++++++[->++++++++++++>+>>++>+++<<<<<]>[->+>+>+>+<<<<]
//>+>++.>++.<-.<.>>----.<<---.>>>---.<<++.>---.
Dennis
fonte
Uau! Um poliglota! Próxima etapa: adicione espaço em branco.
24414 tbodt
4

Brainfuck

>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++++++++++++++++++++++++++++++++++++++.
-----------------.
++++++++.
+++++.
--------.
+++++++++++++++.
------------------.
++++++++.
Joey
fonte
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,$/
ninjalj
fonte
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))
Stanislav Yaglo
fonte
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);}
qartis
fonte
2
Gah, mas agora não consigo nomear meus arquivos "& raquo; \ 0 <3ASCII.c"
walpen
4

> <> (Peixe) (11)

Melhor ainda:

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

Lua 25 Chars

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

Ou, análogo à solução J do JB 17 caracteres:

print"\76\117\97"
jpjacobs
fonte
11
_VERSION:sub(1,3)
Mniip 17/05
3

GolfScript (13)

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

Raquete (45)

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