Tên tôi là gì? Tạo tên của ngôn ngữ một cách gián tiếp [đóng]


40

Chỉ sản xuất tên của ngôn ngữ lập trình chỉ sử dụng các phương tiện của chính ngôn ngữ đó. Tên của ngôn ngữ chỉ có thể được gọi một cách gián tiếp, tức là, từ các biến môi trường không tùy chỉnh, các hàm hoặc phương thức tích hợp hoặc trình thông dịch / trình biên dịch của ngôn ngữ. Đầu ra chỉ nên là tên của ngôn ngữ.

Một ví dụ sẽ là:

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

Câu trả lời tôi chọn sẽ là câu trả lời nhiều nhất. Trong trường hợp hòa, phiên bản golf ngắn nhất (riêng biệt hoặc câu trả lời duy nhất), sẽ là bộ ngắt kết nối.


1
vậy sử dụng API phản chiếu Java có ổn không?
Ming-Tang

Tôi đã không nghĩ về điều đó, nhưng điều đó cũng tốt.
Ty Auvil

@George: Hả? Bây giờ có phải là một golf-code? Tại sao? Không phải trước đây ...
Joey

@Joey: Không, không phải trước đây, nhưng nó có vẻ giống như một câu hỏi golf mã, vì vậy tôi đã chỉnh sửa nó và ai đó đã chấp thuận chỉnh sửa.
Nathan Osman

@Joey: Code Golf là bộ ngắt kết nối. Tôi đã không đặt TAG đó ban đầu, nhưng George đề nghị và tôi đã đồng ý.
Ty Auvil

Câu trả lời:


18

BASH, 17 7

bash -c 'echo $0'

hoặc thậm chí

echo ${0#-}

nếu bạn đã chạy bash: D

cập nhật : "echo $0"được $0mở rộng đầu tiên vì vậy 'echo $0'là câu trả lời chính xác.


Nó chỉ có tiền tố gạch ngang nếu nó là vỏ đăng nhập và nó không phải là vỏ đăng nhập nếu nó là chương trình chạy chương trình của bạn.
JB

@JB: cảm ơn vì đã chỉ ra điều đó. Tôi đã sử dụng "là nơi tôi nên có 's
Eelvex

Hình như đây là người chiến thắng. :)
Ty Auvil

echo $ {SHELL: 5}
Giám sát cá

30

Khoảng trắng

|  	 	 			
	
    		 	   
	
    		 	  	
	
    			 	  
	
    		  	 	
	
    			  		
	
    			    
	
    		    	
	
    		   		
	
    		  	 	
	


|

Không phải là một ngôn ngữ thực sự, khoảng trắng.
Alexandru


Argh. Xin lỗi Anthony, SE không cho phép tôi nâng cấp bạn bây giờ.
Alexandru

Không sao đâu. Bản thân tôi gần đây đã học về ngôn ngữ này.
Anthony

1
Nếu tôi không nhầm, chương trình của bạn có hai lỗi nghiêm trọng: (1) Để S, T, L biểu thị Space, Tab, Linefeed lặp lại, hướng dẫn đầu tiên hiện tại SSTSTSTTTL, nhưng phải là SSSTSTSTTTL( 3 S ở bên trái) - thứ 3 Slà cần thiết để chỉ ra dấu dương của số nhị phân theo sau nó (tức là mã ascii cho 'W' = 85 = 1010111 ở dạng nhị phân, được mã hóa thành Lchuỗi -terminated TSTSTTTL), v.v. đối với các mã ascii khác. (2) Trận chung kết của prog TLLLphải là TLSSLLLnơi TLSScần thiết để xuất ký tự cuối cùng từ ngăn xếp và LLLđánh dấu kết thúc chương trình.
res

26

C

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

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

23
putchar("putchar"[3]);Tôi phải là một thằng ngốc một năm trước.
Mateen Ulhaq

Sử dụng tham số chính. main(a){putchar(a+66);}
A _

23

Con trăn - 23 22

print`credits`[97:103]

2
bạn nên rời khỏi không gian sauprint
gnibbler

Không những gì ' làm gì? Tôi chưa bao giờ thấy điều đó.
Kazark

4
Backticks là một bí danh không dùng nữa cho repr (). Backticks đã biến mất trong Python 3.x.
0xKirill

2
@ 0xKir Vậy sao? Sử dụng chúng trong mã golf 'cho đến khi chúng biến mất.
Đạp xe

23

J, 4

u:74

Có một tên ngôn ngữ ngắn làm loại trợ giúp.


Thậm chí có thể ngắn hơn:u:74
jpjacobs

19

Python (win32) - lạm dụng mô-đun ngẫu nhiên

Tôi không chắc liệu điều này thực sự hoạt động. Phụ thuộc vào việc thực hiện.

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

Làm thế nào bạn tìm được? Nó cũng hoạt động với tôi trong Python 2.6.6 trên linux.
Ốc cơ khí

5
Thật tốt khi nghe! Tôi đã viết một công cụ bruteforcing nhỏ để xác định cách bạn cần gieo hạt mô-đun ngẫu nhiên để có được một chuỗi nhất định. Với chuỗi ba ký tự, việc này không mất quá nhiều thời gian - tập lệnh này kết hợp hai chuỗi ba ký tự để có được "PYTHON" :)
zhazam

Phần còn lại là sử dụng sự hiểu biết danh sách và các thủ thuật bẩn thỉu khác để làm cho nó phù hợp với nó trong một dòng. Bạn có thể tìm thấy công cụ bruteforcing tại đây :)
zhazam

Và nó hoạt động trên Python 3.1.2 của tôi ( printdĩ nhiên là thêm dấu ngoặc đơn ).
Ốc cơ khí

1
Hầu như có: generateSentence(50613, 73)[66:]cho 'PYTHOCN'.
Ốc cơ khí

17

BrainFuck

Chỉ để cho vui (tôi biết điều này không liên quan đến mục đích của nhiệm vụ.), Tôi đã viết mã này ...

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

Và khi tôi thay thế <, >, [, ], .với không gian ...

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

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


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

 - 
---
 - 


12

Con trăn

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

Điều này cũng hoạt động với tôi (sys.executable là '/ usr / bin / python')

import sys;print sys.executable[9:]

1
Đây là những gì tôi nhận được từ những điều này: Active25\Lib\site-packages\pythonwin\Pythonwin.exe, vì vậy ... không tốt
Nas Banov

import sys;print sys.subversion[0][1:]hoạt động mặc dù
Nas Banov

6
đó là gian lận ... Nhưng tôi có thể gian lận tốt hơn:eval.__doc__[144:150]
JBernardo

11

cân não 101

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

có lẽ có thể chơi gôn xa hơn một chút, nhưng đã 6 giờ sáng và tôi nên ngủ một chút ...


11

C

Theo tinh thần câu trả lời của Anon trong C (xem xét tệp C luôn có phần mở rộng .c). Tôi muốn đề xuất:

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

5
Ngắn hơn nhiều, 25 ký tự, dòng đơn main(){puts(__FILE__+2);}, giả sử tên tệp là một chữ cái, ví dụ. 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: Chỉ cần gửi câu trả lời khác. Đây không phải là một sân gôn, vì vậy không cần phải giữ nó ngắn.
Joey

6

C

Được xây dựng bằng 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));
}

Phiên bản ngắn hơn một chút (có cảnh báo trình biên dịch)

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

đầu tiên sẽ đưa ra cảnh báo về việc không phải là loại intsử dụng gcc.
oenone

1
Bạn không được phép sử dụng chữ 'c'.
kinokijuf

6

Hồng ngọc - 27

puts RUBY_DESCRIPTION[0..3]

Cập nhật từ bình luận của Chris Jester-Young:

Hồng ngọc - 24

puts RUBY_COPYRIGHT[0,4]

Cập nhật từ Hauleth:

Hồng ngọc - 15

p`ruby -v`[0,4]

1. RUBY_COPYRIGHTngắn hơn RUBY_DESCRIPTION. 2. [0,4]ngắn hơn [0..3].
Chris Jester-Young

Thậm chí ngắn hơn `` `ruby -v` [0,4]` `
Hauleth

5

mèo 3

Tạo một tệp có nội dung sau (mã nguồn)

cat

Và chạy nó như thế nào (thực hiện tệp):

$ cat filename

7
Không gián tiếp hay ngôn ngữ?
everalmatt

4
Cat không phải là một ngôn ngữ thực sự, bởi vì nó không phải là Turing-Complete.
kinokijuf

3
@kinokijuf Có rất nhiều ngôn ngữ hữu ích chưa hoàn chỉnh. Xem stackoverflow.com/q/8412741/20713 để biết danh sách một phần.
ephemient

5
@ephemient: Cat không chỉ không hoàn thiện, nó hoàn toàn không phải là ngôn ngữ. Nó không có cú pháp, không ngữ pháp, không từ khóa. Tôi không biết nơi bitmask có định nghĩa của mình - tôi không tuân theo nó.
người dùng không xác định

6
@userunknown Thật khó để tưởng tượng catlà một ngôn ngữ, và bên cạnh đó điều này vi phạm tinh thần của câu hỏi (sử dụng tên ngôn ngữ trực tiếp). Nhận xét của tôi là bác bỏ ý kiến ​​cho rằng "Cat không phải là ngôn ngữ thực sự, vì nó không hoàn chỉnh". Nó không phải là ngôn ngữ vì những lý do khác, nhưng tính đầy đủ của Turing không phải là yếu tố quyết định tốt.
ephemient



5

Hồng ngọc

Không ngắn, nhưng rất gián tiếp.

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

Ồ Một đa âm! Bước tiếp theo: thêm khoảng trắng.
tbodt

4

Brainfuck

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

Br ** n! (còn năm nữa để đi ...)
Tiến sĩ belisarius

@ Belisarius: Hửm?
Joey

Br ** n bạn.
Mateen Ulhaq

1
bạn có thể làm nhỏ hơn bằng [...]: ++++++++++ [> ++++++> ++++++++++> +++++++++ ++> ++++ <<<< -]> ++++++. >> ++++. <---. ++++++++. +++++ .-- ------. >> ++. * << ---. ++++++++.
JBernardo

12
Điều này trông giống như đầu ra Git điển hình .
Joey Adams

4

Perl

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

Tôi chỉ nhận được pernhư đầu ra (thiếu l cuối cùng).
BioGeek

1
@BioGeek: Là Perlnhị phân của bạn được gọi per?
ninjalj

2
Tôi cũng nhận được per. (Tôi $^Xnói /usr/bin/perl. Những [^\/]+con én l.)
Ilmari Karonen

đã sửa : $^X=~/([^\/]+)$/;print$1, chạy với -lchuyển đổi dòng lệnh
ardew

4

Scala - 42

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

Cập nhật - 39 ký tự

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

Tốt đẹp! Một biến thể, cùng kích thước: print (("" + 'a.getClass) .split ("\\ b") (3))
PhiLho

Tôi thích nó được viết hoa, nhưng tất nhiên, nó không phải là golf nữa. Vì vậy, vì niềm vui của việc tạo các biến thể: print (classOf [App] .toString.split ("\\ W"). Map (_. Capitalize) .apply (1))
PhiLho

Thủ thuật tương tự trong 23 ký tự: ("" + Bản đồ) .patch (5, "", 99)
dẫn

Và 16: ("" + Bản đồ)
.take

Hoặc 13:""+Map take 5
Régis Jean-Gilles

4

C - 34

Tôi không có đủ danh tiếng để thêm nhận xét này vào mục C trước đó. Cùng một ý tưởng như trên, nhưng tên tệp có thể là bất cứ thứ gì.c

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

2
Gah, nhưng bây giờ tôi không thể đặt tên cho các tệp của mình "& raquo; \ 0 <3ASCII.c"
walpen


3

Visual Basic (phiên bản 6.0)

MsgBox Right(Error(458), 12)

VBScript

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

Cả VB6 và VBScript

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

VBScript một tạo ra "Bscript." trong máy của tôi.
kinokijuf

Bạn là một người đàn ông tồi.
Đạp xe

3

QBasic (37)

Tôi đang sử dụng phiên bản 1.1 của trình thông dịch QBasic.

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


3

GolfScript (13)

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

+1 Thông minh ... rất thông minh. Tất nhiên, điều này không hoạt động nếu bạn đổi tên trình thông dịch, hoặc nếu bạn, giả sử, chạy nó từ một thư mục khác.
Ilmari Karonen

Thi thiên "#{$0}"10<là ba ký tự ngắn hơn. :)
Ilmari Karonen

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.