Qual è il mio nome? Produrre indirettamente il nome della lingua [chiuso]


40

Produrre solo il nome di un linguaggio di programmazione utilizzando solo le funzionalità del linguaggio stesso. Il nome della lingua può essere invocato solo indirettamente, ovvero da variabili d'ambiente non personalizzate, funzioni o metodi integrati o interprete / compilatore della lingua. L'output dovrebbe essere solo il nome della lingua.

Un esempio potrebbe essere:

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

La risposta che selezionerò sarà quella con il punteggio più alto. In caso di pareggio, la versione più corta da golf (separata o l'unica risposta data) sarà il pareggio.


1
quindi l'utilizzo dell'API di riflessione Java non è corretto?
Ming-Tang,

Non ci ho pensato, ma va bene lo stesso.
Ty Auvil,

@George: eh? Adesso è un code-golf? Perché? Non è stato prima ...
Joey,

@Joey: No, non lo era prima, ma sembrava una domanda di golf del codice, quindi l'ho modificato e qualcuno ha approvato la modifica.
Nathan Osman,

@Joey: Code Golf è il pareggio. All'inizio non avevo applicato il TAG, ma George lo ha suggerito e ho accettato.
Ty Auvil,

Risposte:


18

BASH, 17 7

bash -c 'echo $0'

o anche

echo ${0#-}

se hai già eseguito bash: D

aggiornamento : "echo $0"viene $0prima espanso, quindi 'echo $0'è la risposta corretta.


Ha solo il prefisso se è una shell di accesso e non è una shell di accesso se è quella che esegue il programma.
JB,

@JB: grazie per averlo sottolineato. Stavo usando "s dove avrei dovuto 's
Eelvex il

Sembra che questo sia il vincitore. :)
Ty Auvil,

echo $ {SHELL: 5}
Fish Monitor,

30

Lo spazio bianco

|  	 	 			
	
    		 	   
	
    		 	  	
	
    			 	  
	
    		  	 	
	
    			  		
	
    			    
	
    		    	
	
    		   		
	
    		  	 	
	


|

Non è un vero linguaggio, spazi bianchi.
Alexandru,


Argh. Scusa Anthony, SE non mi consente di votare adesso.
Alexandru,

Va tutto bene. Io stesso ho recentemente imparato a conoscere questa lingua.
Anthony,

1
Se non sbaglio, il tuo programma ha due errori fatali: (1) Lettere S, T, L denota spazio, Tab, Linefeed ripetutamente, la prima istruzione è attualmente SSTSTSTTTL, ma dovrebbe essere SSSTSTSTTTL( 3 S a sinistra) - il terzo Sè necessario per indicare il segno positivo del numero binario che lo segue (cioè il codice ASCII per 'W' = 85 = 1010111 in binario, codificato come Lstringa terminata TSTSTTTL), e così via per gli altri codici ASCII. (2) Il finale del prog TLLLdovrebbe essere TLSSLLL, dove TLSSè necessario per ottenere il carattere finale dalla pila, e LLLsegna la fine del programma.
res

26

C

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

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

23
putchar("putchar"[3]);Devo essere stato un idiota un anno fa.
Mateen Ulhaq,

Usa il parametro principale. main(a){putchar(a+66);}
A̲̲

23

Python - 23 22

print`credits`[97:103]

2
dovresti lasciare fuori lo spazio dopoprint
gnibbler,

Cosa fa il ` fare? Non l'ho mai visto.
Kazark

4
I backtick sono un alias deprecato per repr (). I backtick sono andati in Python 3.x.
0xKirill

2
@ 0xKir Quindi? Usali nel codice golf 'fino a quando non sono andati.
Riking

23

J, 4

u:74

Avere un nome di lingua breve aiuta in qualche modo.


Può essere ancora più breve:u:74
jpjacobs,

19

Python (win32) - abuso del modulo casuale

Non sono sicuro che funzioni davvero . Dipende dall'attuazione.

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

Come l'hai trovato? Funziona anche per me in Python 2.6.6 su Linux.
Lumaca meccanica

5
Buono a sapersi! Ho scritto un piccolo strumento di bruteforcing per determinare come è necessario eseguire il seeding del modulo casuale per ottenere una determinata sequenza. Con una sequenza di tre caratteri, questo non richiede troppo tempo - questo script unisce due sequenze di tre lettere per ottenere "PYTHON" :)
zhazam

Il resto sta usando la comprensione dell'elenco e altri trucchi sporchi per farlo rientrare in una riga. Puoi trovare lo strumento bruteforcing qui :)
zhazam,

E funziona sul mio Python 3.1.2 (aggiungendo le parentesi dopo print, ovviamente).
Lumaca meccanica

1
Quasi lì: generateSentence(50613, 73)[66:]'PYTHOCN'.
Lumaca meccanica

17

BrainFuck

Solo per divertimento (so che questo non è correlato allo scopo dell'attività.), Ho scritto questo codice ...

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

E quando ho sostituito <, >, [, ], .con spazio ...

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

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


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

 - 
---
 - 


12

Pitone

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

Questo funziona anche per me (sys.executable è '/ usr / bin / python')

import sys;print sys.executable[9:]

1
Ecco cosa ottengo da questi: Activee 25\Lib\site-packages\pythonwin\Pythonwin.exe, quindi ... non va bene
Nas Banov

import sys;print sys.subversion[0][1:]funziona però
Nas Banov

6
è un imbroglio ... Ma posso imbrogliare meglio:eval.__doc__[144:150]
JBernardo

11

brainfuck 101

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

probabilmente si potrebbe giocare a golf leggermente più in là, ma sono le 6 del mattino e dovrei dormire un po '...


11

C

Nello spirito della risposta di Anon in C (considerando un file C ha sempre l'estensione .c). Suggerirei:

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

5
Molto più breve, 25 caratteri, riga singola main(){puts(__FILE__+2);}, supponendo che il nome file sia una singola lettera, ad es. a.c
Hasturkun,

7

Giava

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 inviare un'altra risposta. Questo non è un golf, quindi non c'è bisogno di tenerlo breve.
Joey,

6

C

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

Versione leggermente più corta (con avvisi del compilatore)

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

il primo produrrà un avviso sul fatto che main non è di tipo intusando gcc.
oenone,

1
Non ti è permesso usare la lettera 'c'.
Kinokijuf,

6

Rubino - 27

puts RUBY_DESCRIPTION[0..3]

Aggiornamento dal commento di Chris Jester-Young:

Rubino - 24

puts RUBY_COPYRIGHT[0,4]

Aggiornato da Hauleth:

Rubino - 15

p`ruby -v`[0,4]

1. RUBY_COPYRIGHTè più corto di RUBY_DESCRIPTION. 2. [0,4]è più corto di [0..3].
Chris Jester-Young,

Ancora più breve `` ruby ​​-v` [0,4] ``
Hauleth

5

gatto 3

Crea un file con il seguente contenuto (codice sorgente)

cat

Ed eseguilo come (esegui il file):

$ cat filename

7
Né indiretto né una lingua?
eternalmatt,

4
Il gatto non è un vero linguaggio, perché non è completo di Turing.
Kinokijuf,

3
@kinokijuf Ci sono molte lingue utili che non sono complete di Turing. Vedere stackoverflow.com/q/8412741/20713 per un elenco parziale.
effimero

5
@ephemient: Cat non solo non è completo, non è affatto una lingua. Non ha sintassi, né grammatica, né parole chiave. Non so da dove la maschera di bit abbia ottenuto la sua definizione - non la seguo.
utente sconosciuto

6
@userunknown È difficile immaginare di catessere una lingua, e oltre a ciò viola lo spirito della domanda (usa direttamente il nome della lingua). Il mio commento è stato quello di confutare l'idea che "Cat non è un vero linguaggio, perché non è completo di Turing". Non è una lingua per altri motivi, ma la completezza di Turing non è un buon fattore decisivo.
effimero



5

Rubino

Non breve, ma molto indiretto.

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

Wow! Un poliglotta! Passaggio successivo: aggiungi spazio bianco.
martedì

4

Brainfuck

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

Br ** n! (ne
resteranno

@belisarius: Hm?
Joey,

Br ** n tu.
Mateen Ulhaq,

1
puoi rimpicciolirlo con [...]: ++++++++++ [> ++++++> ++++++++++> +++++++++ ++> ++++ <<<< -....]> >> ++++++ ++++ <--- ++++++++ +++++ .-- ------. >> ++. * << ---. ++++++++.
JBernardo,

12
Sembra un tipico output di Git .
Joey Adams,

4

Perl

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

Ottengo solo percome output (manca la l finale).
BioGeek,

1
@BioGeek: il tuo Perlbinario è chiamato per?
ninjalj,

2
Ho anche per. (Il mio $^Xdice /usr/bin/perl. [^\/]+Ingoia il l.)
Ilmari Karonen,

risolto $^X=~/([^\/]+)$/;print$1-l
:,

4

Scala - 42

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

Aggiornamento - 39 caratteri

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

Bello! Una variante, stessa dimensione: print (("" + 'a.getClass) .split ("\\ b") (3))
PhiLho,

Lo preferisco maiuscolo, ma ovviamente non è più il golf. Quindi, per il piacere di creare varianti: print (classOf [App] .toString.split ("\\ W"). Map (_. Capitalize) .apply (1))
PhiLho,

Stesso trucco in 23 caratteri: ("" + Mappa) .patch (5, "", 99)
deadsven

E 16: ("" + Mappa) .take (5)
deadsven,

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

4

C - 34

Non ho abbastanza reputazione per aggiungere questo come commento alla precedente voce C. Stessa idea di cui sopra, ma il nome file può essere any.c

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

2
Gah, ma ora non posso nominare i miei file "& raquo; \ 0 <3ASCII.c"
walpen


3

Visual Basic (versione 6.0)

MsgBox Right(Error(458), 12)

VBScript

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

Sia VB6 che VBScript

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

Quello VBScript produce "Bscript". sul mio computer.
Kinokijuf,

Sei un uomo cattivo.
Riking

3

QBasic (37)

Sto usando la versione 1.1 dell'interprete QBasic.

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


3

GolfScript (13)

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

+1 intelligente ... molto intelligente. Naturalmente, questo non funziona se hai rinominato l'interprete o se, diciamo, lo stai eseguendo da una directory diversa.
Ilmari Karonen,

Ps. "#{$0}"10<è tre caratteri più brevi. :)
Ilmari Karonen,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.