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.


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.


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

|  	 	 			
	
    		 	   
	
    		 	  	
	
    			 	  
	
    		  	 	
	
    			  		
	
    			    
	
    		    	
	
    		   		
	
    		  	 	
	


|

Bukan bahasa nyata, spasi.
Alexandru


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

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]

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.


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

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 ...

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

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


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

 - 
---
 - 


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

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 ...


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

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

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

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]

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

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

Rubi

Tidak pendek, tetapi sangat tidak langsung.

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! Poliglot! Langkah selanjutnya: tambahkan Whitespace.
tbodt

4

Brainfuck

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

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,$/

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

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

2
Gah, tapi sekarang saya tidak bisa memberi nama file saya "& raquo; \ 0 <3ASCII.c"
walpen


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

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


3

GolfScript (13)

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

+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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.