Apa nama saya? Menghasilkan nama bahasa secara tidak langsung [ditutup]

40

Hasilkan hanya nama bahasa pemrograman dengan hanya menggunakan fasilitas bahasa itu sendiri. Nama bahasa hanya dapat dipanggil secara tidak langsung, yaitu, dari variabel lingkungan non kustom, fungsi atau metode bawaan atau interpreter / kompiler bahasa. Keluaran harus berupa nama bahasa saja.

Salah satu contohnya adalah:

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

Jawaban yang saya pilih adalah jawaban dengan suara terbanyak. Dalam hal seri, versi golf terpendek (terpisah atau satu-satunya jawaban yang diberikan), akan menjadi pemutus dasi.

Ty Auvil
sumber
1
jadi menggunakan Java reflection API tidak OK?
Ming-Tang
Saya tidak memikirkan itu, tapi tidak apa-apa juga.
Ty Auvil
@ George: Hah? Apakah itu sekarang kode-golf? Mengapa? Itu tidak sebelum ...
Joey
@ Joey: Tidak, bukan sebelumnya, tapi sepertinya pertanyaan kode golf, jadi saya mengeditnya dan seseorang menyetujui hasil edit.
Nathan Osman
@ Joey: Code Golf adalah pemutus dasi. Awalnya saya tidak memakai TAG itu, tetapi George menyarankannya dan saya setuju.
Ty Auvil

Jawaban:

18

BASH, 17 7

bash -c 'echo $0'

atau bahkan

echo ${0#-}

jika Anda sudah menjalankan bash: D

Update : "echo $0"akan $0diperluas pertama sehingga 'echo $0'adalah jawaban yang benar.

Eelvex
sumber
Ini hanya dash-awalan jika itu adalah shell login dan itu bukan shell login jika itu yang menjalankan program Anda.
JB
@ JK: terima kasih sudah menunjukkannya. Saya menggunakan "s di mana saya seharusnya 's
Eelvex
Sepertinya ini adalah pemenangnya. :)
Ty Auvil
echo $ {SHELL: 5}
Fish Monitor
30

Ruang putih

|  	 	 			
	
    		 	   
	
    		 	  	
	
    			 	  
	
    		  	 	
	
    			  		
	
    			    
	
    		    	
	
    		   		
	
    		  	 	
	


|
Anthony
sumber
Bukan bahasa nyata, spasi.
Alexandru
22
@Alexandru
dmckee
Argh. Maaf Anthony, SE tidak membiarkan saya menjengkelkan Anda sekarang.
Alexandru
Tidak apa-apa. Saya sendiri baru-baru ini belajar tentang bahasa ini.
Anthony
1
Jika saya tidak salah, program Anda memiliki dua kesalahan fatal: (1) Membiarkan S, T, L menunjukkan Spasi, Tab, Linefeed secara berurutan, instruksi pertama saat ini SSTSTSTTTL, tetapi seharusnya SSSTSTSTTTL( 3 S di sebelah kiri) - ke-3 Sdiperlukan untuk menunjukkan tanda positif dari angka biner yang mengikutinya (yaitu kode ascii untuk 'W' = 85 = 1010111 dalam biner, dikodekan sebagai Lstring -minminated TSTSTTTL), dan seterusnya untuk kode ascii lainnya. (2) Final prog TLLLharus TLSSLLL, di mana TLSSdiperlukan untuk menampilkan karakter akhir dari stack, dan LLLmenandai akhir program.
res
26

C

#define d(x) x(#x[3])
void main(){d(putchar);}
Segera.
sumber
putchar((int)(putchar)+3);
Mateen Ulhaq
23
putchar("putchar"[3]);Saya pasti idiot setahun yang lalu.
Mateen Ulhaq
Gunakan parameter utama. main(a){putchar(a+66);}
A _
23

Python - 23 22

print`credits`[97:103]
0xKirill
sumber
2
Anda harus meninggalkan ruang setelahprint
gnibbler
Apa yang ` lakukan? Saya belum pernah melihat itu.
Kazark
4
Backticks adalah alias usang untuk repr (). Backticks hilang dalam Python 3.x.
0xKirill
2
@ 0xKir Jadi? Gunakan mereka dalam kode golf 'sampai hilang.
Bersepeda
23

J, 4

u:74

Memiliki nama bahasa yang singkat tidak membantu.

JB
sumber
Bisa lebih pendek:u:74
jpjacobs
19

Python (win32) - penyalahgunaan modul acak

Saya tidak yakin apakah ini benar-benar berfungsi. Tergantung pada implementasinya.

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
sumber
Bagaimana Anda menemukan itu? Ini juga berfungsi untuk saya di Python 2.6.6 di linux.
Siput mekanik
5
Senang mendengarnya! Saya menulis alat bruteforcing kecil untuk menentukan bagaimana Anda perlu seed modul acak untuk mendapatkan urutan tertentu. Dengan urutan tiga karakter, ini tidak memakan waktu terlalu lama - skrip ini menggabungkan dua urutan tiga huruf untuk mendapatkan "PYTHON" :)
zhazam
Sisanya menggunakan pemahaman daftar dan trik kotor lainnya untuk membuatnya sesuai dalam satu baris. Anda dapat menemukan alat bruteforcing di sini :)
zhazam
Dan itu berfungsi pada Python 3.1.2 saya ( printtentu saja menambahkan tanda kurung ).
Siput mekanik
1
Hampir sampai: generateSentence(50613, 73)[66:]memberi 'PYTHOCN'.
Siput mekanik
17

BrainFuck

Hanya untuk bersenang-senang (saya tahu ini tidak terkait dengan tujuan tugas.), Saya menulis kode ini ...

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

Dan ketika saya diganti <, >, [, ], .dengan ruang ...

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

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


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

 - 
---
 - 
JiminP
sumber
13

Piet, 47x2 piksel

Menggunakan kode 5x5: Program Piet untuk mencetak "Piet"

stan
sumber
12

Python

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

Ini juga berfungsi untuk saya (sys.executable adalah '/ usr / bin / python')

import sys;print sys.executable[9:]
gnibbler
sumber
1
Inilah yang saya dapatkan dari ini: Activedan 25\Lib\site-packages\pythonwin\Pythonwin.exe, jadi ... tidak ada gunanya
Nas Banov
import sys;print sys.subversion[0][1:]bekerja
Nas Banov
6
itu curang ... Tapi saya bisa menipu lebih baik:eval.__doc__[144:150]
JBernardo 5'11
11

brainfuck 101

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

mungkin bisa bermain golf sedikit lebih jauh, tapi jam 6 pagi dan saya harus tidur ...

Mat
sumber
11

C

Dalam semangat jawaban Anon dalam C (mengingat file C selalu memiliki ekstensi .c). Saya sarankan:

#include <stdio.h>
void main(){puts(__FILE__+sizeof(__FILE__)-2);}
Etienne PIERRE
sumber
5
Jauh lebih pendek, 25 karakter, baris tunggal main(){puts(__FILE__+2);},, dengan asumsi nama file adalah huruf tunggal, mis. a.c
Hasturkun
7

Jawa

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
sumber
anon: Kirimkan saja jawaban lain. Ini bukan golf, jadi tidak perlu singkat.
Joey
6

C

Dibangun menggunakan 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 sedikit lebih pendek (dengan peringatan kompiler)

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));
Mendesis
sumber
yang pertama akan menghasilkan peringatan tentang main tidak sedang intmenggunakan gcc.
Oenone
1
Anda tidak diizinkan menggunakan huruf 'c'.
kinokijuf
6

Ruby - 27

puts RUBY_DESCRIPTION[0..3]

Pembaruan dari komentar Chris Jester-Young:

Ruby - 24

puts RUBY_COPYRIGHT[0,4]

Diperbarui dari Hauleth:

Ruby - 15

p`ruby -v`[0,4]
Donnie H
sumber
1. RUBY_COPYRIGHTlebih pendek dari RUBY_DESCRIPTION. 2. [0,4]lebih pendek dari [0..3].
Chris Jester-Young
Bahkan lebih pendek `` `ruby -v` [0,4]` `
Hauleth
5

kucing 3

Buat file dengan konten berikut (kode sumber)

cat

Dan jalankan seperti (menjalankan file):

$ cat filename
Alexandru
sumber
7
Bukan tidak langsung atau bahasa?
eternalmatt
4
Kucing bukan bahasa nyata, karena itu bukan Turing-lengkap.
kinokijuf
3
@kinokijuf Ada banyak bahasa berguna yang tidak menyelesaikan Turing. Lihat stackoverflow.com/q/8412741/20713 untuk daftar parsial.
ephemient
5
@ephemient: Cat tidak hanya tidak selesai, tetapi juga bukan bahasa. Tidak memiliki sintaks, tidak ada grammer, tidak ada kata kunci. Saya tidak tahu dari mana bitmask mendapatkan definisinya - saya tidak mengikutinya.
pengguna tidak diketahui
6
@userunknown Sulit membayangkan catmenjadi bahasa, dan selain itu melanggar semangat pertanyaan (menggunakan nama bahasa secara langsung). Komentar saya adalah untuk membantah gagasan bahwa "Kucing bukan bahasa asli, karena itu bukan Turing-lengkap". Itu bukan bahasa karena alasan lain, tetapi kelengkapan Turing bukanlah faktor penentu yang baik.
ephemient
5

Clojure - 16 karakter

(subs(str =)0 7)
mikera
sumber
5

Haskell, 47

data H=Haskell deriving Show
main=print Haskell
Thomas Eding
sumber
5

Rubi

Tidak pendek, tetapi sangat tidak langsung.

4.times{|x|print((82+11.24*x+8.231*Math.tan(111.2*x)).floor.chr)}
Jon
sumber
5

Ruby (17)

p 1299022.to_s 36

Keluaran "ruby"

defhlt
sumber
5

Bash / Brainfuck / C

//bin/bash -c 'echo ${0##*/}'
#define p putchar
#define exit main(){p(p+67);p(10);}
exit
//++++++++[->++++++++++++>+>>++>+++<<<<<]>[->+>+>+>+<<<<]
//>+>++.>++.<-.<.>>----.<<---.>>>---.<<++.>---.
Dennis
sumber
Wow! Poliglot! Langkah selanjutnya: tambahkan Whitespace.
tbodt
4

Brainfuck

>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++++++++++++++++++++++++++++++++++++++.
-----------------.
++++++++.
+++++.
--------.
+++++++++++++++.
------------------.
++++++++.
Joey
sumber
Br ** n! (masih ada lagi ...)
Dr. belisarius
@belisarius: Hm?
Joey
Br ** n Anda.
Mateen Ulhaq
1
Anda dapat membuatnya lebih kecil dengan [...]: +++++++++++ [> ++++++> +++++++++++> ++++++++++ ++> ++++ <<<< -]> ++++++. >> ++++. <---. ++++++++. +++++ .-- ------. >> ++. * << ---. ++++++++.
JBernardo
12
Ini terlihat seperti keluaran Git biasa .
Joey Adams
4

Perl

$^X=~/([a-z]+)[^\/]+$/;print$1,$/
ninjalj
sumber
Saya hanya mendapatkan persebagai output (hilang l akhir).
BioGeek
1
@BioGeek: Apakah Perlbiner Anda dipanggil per?
ninjalj
2
Saya juga mendapatkan per. (Saya $^Xmengatakan /usr/bin/perlThe. [^\/]+Menelan l.)
Ilmari Karonen
diperbaiki $^X=~/([^\/]+)$/;print$1-l
:,
4

Scala - 42

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

Perbarui - 39 karakter

print(('a.getClass+"").substring(6,11))
Stanislav Yaglo
sumber
Bagus! Varian, ukuran yang sama: print (("" + a.getClass) .split ("\\ b") (3))
PhiLho
Saya lebih suka huruf besar, tapi tentu saja, bukan golf lagi. Jadi, untuk kesenangan membuat varian: print (classOf [App] .toString.split ("\\ W"). Map (_. Bermodal besar) .apply (1))
PhiLho
Trik yang sama dalam 23 karakter: ("" + Peta) .patch (5, "", 99)
deadsven
Dan 16: ("" + Peta). Ambil (5)
deadsven
Atau 13:""+Map take 5
Régis Jean-Gilles
4

C - 34

Saya tidak memiliki reputasi yang cukup untuk menambahkan ini sebagai komentar pada entri C sebelumnya. Gagasan yang sama seperti di atas, tetapi nama file bisa apa saja

main(){puts(index(__FILE__,0)-1);}
qartis
sumber
2
Gah, tapi sekarang saya tidak bisa memberi nama file saya "& raquo; \ 0 <3ASCII.c"
walpen
4

> <> (Ikan) (11)

Bahkan lebih baik:

'>'::o2-oo;
jpjacobs
sumber
3

Visual Basic (versi 6.0)

MsgBox Right(Error(458), 12)

VBScript

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

Baik VB6 dan VBScript

On Error Resume Next
Err.Raise 458
D = Err.Description
MsgBox Mid(D, InStr(2, D, "V"))
Tolong berdiri
sumber
VBScript yang menghasilkan "Bscript." di komputer saya.
kinokijuf
Kamu orang jahat.
Bersepeda
3

QBasic (37)

Saya menggunakan penerjemah QBasic versi 1.1.

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

Lua 25 Chars

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

Atau, analog dengan solusi J JB's 17 chars:

print"\76\117\97"
jpjacobs
sumber
1
_VERSION:sub(1,3)
mniip
3

GolfScript (13)

"#{$0[0..9]}"
marinus
sumber
+1 Pintar ... sangat pintar. Tentu saja, ini tidak berfungsi jika Anda telah mengganti nama penerjemah, atau jika Anda, katakanlah, menjalankannya dari direktori yang berbeda.
Ilmari Karonen
Ps. "#{$0}"10<lebih pendek tiga karakter. :)
Ilmari Karonen
3

Racket (45)

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