Tạo số 2014 mà không có bất kỳ số nào trong mã nguồn của bạn


579

Lưu ý để thách thức người viết theo sự đồng thuận meta : Câu hỏi này đã được đón nhận khi được đăng, nhưng những thách thức như thế này, yêu cầu người trả lời làm X mà không sử dụng Y có thể sẽ được nhận kém. Hãy thử sử dụng hộp cát để nhận phản hồi nếu bạn muốn đăng một thử thách tương tự.


Đó là 2017 2018 2019 rồi, mọi người, về nhà đi.

Vì vậy, bây giờ là năm 2014, đã đến lúc cho một câu hỏi về mã liên quan đến số 2014.

Nhiệm vụ của bạn là tạo một chương trình in số 2014mà không sử dụng bất kỳ ký tự nào0123456789 trong mã của bạn và độc lập với bất kỳ biến ngoài nào như ngày hoặc thời gian hoặc một hạt giống ngẫu nhiên.

Mã ngắn nhất (tính theo byte) để làm như vậy trong bất kỳ ngôn ngữ nào có số mã thông báo hợp lệ sẽ thắng.


Bảng xếp hạng:


10
Mặc dù các con số bị bỏ qua trong brainfuck, tôi nghĩ dù sao tôi cũng sẽ đăng một cái. 32 Chars:++++++[>++++++++<-]>++.--.+.+++.
Braden Tốt nhất

4
Brainfuck không phải là ngôn ngữ hợp lệ cho thử thách này.
Joe Z.

8
Tôi tự hỏi nếu câu hỏi này có một sự gia tăng nhỏ phổ biến vào khoảng năm mới.
Joe Z.

3
Chờ đợi "Nào mọi người, bạn có nhận ra đó là năm 2016 không?" :)
padawan

1
@BradenBest Có thể thực hiện trong 31 ký tự theo ít nhất hai cách khác nhau: +++++++ [> +++++++ <-]> + .--. +. +++. và ++++++++++ [> +++++ <-]> .--. +. +++.
Zubin Mukerjee

Câu trả lời:


126

Chuột-2002 , 4 byte.

Đó là 4 byte ASCII ngọt ngào, tinh khiết .

Trong Chuột , các chữ cái trong bảng chữ cái được khởi tạo thành các giá trị 0-25. !là toán tử để in các số nguyên, do đó, bản in này 20sau đó 14(không có dòng mới không liên tục).

U!O!

Không có trình thông dịch trực tuyến khả dụng, nhưng ở đây bạn sẽ tìm thấy một trình thông dịch được viết bằng C (cần một số điều chỉnh trước khi có thể ép buộc gccbiên dịch nó) và trình thông dịch được biên dịch tương tự Win32nhưng hoạt động hoàn hảo trên Linux wine.

Ở đây bạn có thể tìm thấy phiên bản cố định của trình thông dịch, sẽ biên dịch.


7
Wow, đây là một phát hiện tuyệt vời rất nhiều sau đó sau thử thách. Và với một ngôn ngữ rất bí truyền, không ai ở đây đã nghe về nó!
Joe Z.

3
BTW: điều này thực hiện tương tự như của CJam KE, nhưng thực sự hợp lệ vì đó là ngôn ngữ từ trước năm 2014.
Joe Z.

7
Cái nhìn tự mãn trên khuôn mặt của tôi bây giờ giống với thuật sĩ Fortran-77 sau khi đánh bại một số người đề xuất Python trong một mã nhanh nhất .
con mèo

56
Đây là một trò chơi của @cat và Mouse-2002.
Chấn thương kỹ thuật số

5
@DigitalTrauma thực sự: 3
con mèo

1300

Python, 52 byte

print sum(ord(c) for c in 'Happy new year to you!')

Cập nhật cho năm 2015 nhờ @Frg:

print sum(ord(c) for c in 'A Happy New Year to You!')

Di chuột qua để xem phiên bản 2016:

print sum(ord(c) for c in 'Happy New Year to you!!!')

Hãy thử trực tuyến!


186
Bạn xứng đáng với giải thưởng thông minh
Carter Pape

167
wow - đây là như vậy trong tinh thần của câu hỏi này. <3
Johannes

80
Tôi hơi ngạc nhiên khi đó chỉ là cụm từ thứ 4 tôi đã thử sau "Chúc mừng năm mới!", Nó sẽ hoàn hảo cho năm 1374.
dansalmo

55
print sum(ord(c) for c in 'HAPPY NEW YEAR To you too.') Oh chờ đã, tôi trễ một năm rồi. Đó là năm 2013.
Warren P

164
sum(map(ord,'Happy new year to you!'))sẽ lưu 7 ký tự.

243

Befunge 98 - 17 11 9 8 byte

'-:*b-.@

Tương tự như phiên bản cũ, nhưng tôi nhớ về '

'-:* pushes 45, duplicates it, then squares it, producing 2025
b-   subtracts 11 from it, resulting in 2014
.@   prints the result, then ends the program

Điều thú vị là 45 2 -11 là cặp đôi duy nhất của số a, b ở đâu Ý nghĩa của những bộ là [32.126] là tập hợp các ký tự ascii có thể in và [10,15] là tập hợp các số Befunge có thể truy cập dễ dàng. Tôi tìm thấy cặp đó với chương trình python này :

(a,b)[32,126]×[10,15]a2b=2014
for a in range(32,127):
    for c in range(10,16):
        if (a**2-c)==2014:
            print("%s,%s"%(a,c))

Hoặc, nếu trình thông dịch của bạn hỗ trợ unicode, thì điều này hoạt động:

Befunge 98 - 5 byte (4 ký tự)

'ߞ.@

Nó ít nhất hoạt động trên http://www.quirkster.com/iano/js/befunge.html với mã sau (Befunge 93 - 6 byte / 5 ký tự):

"ߞ".@

Phiên bản cũ

cdd**e-.@

tính số, sau đó in nó:

cdd pushes numbers to the stack so that it is this: 12,13,13
**  multiplies top three values of stack, which is now: 2028
e   pushes 14
-   subtracts the top two values of the stack, resulting in: 2014
.   prints the numerical value
@   end of program

Phiên bản cũ hơn:

"*'&("#;:a`j@a+,;

Đẩy các giá trị ascii cho năm 2014, -10. Sau đó in từng cái sau khi thêm 10 vào nó.


78
vi.wikipedia.org/wiki/Befunge ... đây là gì tôi thậm chí không ...
Plato

36
"Ngôn ngữ ban đầu được tạo ra bởi Chris Pressey vào năm 1993 như một nỗ lực để tạo ra một ngôn ngữ khó biên dịch nhất có thể" ...
sẽ là

7
@ 11684 Đầu ra được xác định khá rõ trong câu hỏi. Nếu một chương trình được in: randomstuff2randomstuff0randomstuff1randomstuff4Tôi sẽ không coi đó là một giải pháp hợp lệ.
Cruncher

7
@Plato Thay vì đọc bài viết trên wikipedia (chỉ bao gồm Befunge 93), nếu bạn muốn tìm hiểu về Befunge 98, hãy đọc thông số kỹ thuật chính thức
Justin

3
Wiki: 'Ngôn ngữ ban đầu được tạo ra bởi Chris Pressey vào năm 1993 như một nỗ lực để tạo ra một ngôn ngữ khó biên dịch nhất có thể' ... nhưng tại sao?
CousinCocaine

239

Hồng ngọc, 15

p Time.new.year

Tạm thời;)


Lưu ý rằng phần của câu hỏi

độc lập với bất kỳ biến số bên ngoài nào như ngày hoặc thời gian hoặc hạt giống ngẫu nhiên

đã không được chỉnh sửa cho đến khi tôi đăng câu trả lời của mình ...


Jan Dvorak cung cấp một sự thay thế tuyệt vời trong các ý kiến :

Happy = Time
Happy.new.year

Nhưng nó không nhiệt tình lắm. Tôi thích:

Happy = Time
class Time; alias year! year; end

Happy.new.year!

Hoặc thậm chí:

class Have; def self.a; A.new; end; end
class A; def happy; Time; end; end
class Time; alias year! year; end

Have.a.happy.new.year!

Và đây là dấu câu tiếng Anh chính xác:

def noop x = nil; end
alias a noop
alias happy noop
alias new noop
alias year! noop
def Have x
    p Time.new.year
end

Have a happy new year!

Được rồi được rồi, tôi không thể giúp nó:

def noop x = nil; end
eval %w[we wish you a merry christmas! christmas and a happy new].map{|x|"alias #{x} noop"}*"\n"
def year!; p Time.new.year; end

we wish you a merry christmas! we wish you a merry christmas!
we wish you a merry christmas and a happy new year!

168
Happy = Time; Happy.new.year
John Dvorak

5
@hobbs Không, không phải vậy; câu hỏi không nói gì về điều này
Doorknob

12
Điều này sẽ chỉ hoạt động chính xác một số thời gian.
hà mã

119
Nó đã hoạt động tốt trong tất cả các thử nghiệm cho đến nay
CoderTao

7
Tôi tin rằng tinh thần của câu hỏi là nói năm nay [sẽ xảy ra vào năm 2014]. Do đó, giải pháp này là "di động" kịp thời hơn so với giải pháp được chấp nhận;). Bạn (và Jan Dvorak) nhận được phiếu bầu của tôi!
Olivier Dulac

223

Đi, 2 byte (UTF-16)

Một ký tự unicode (2 byte ở UTF-16, 3 byte ở định dạng UTF-8), đầu ra 2014 là một phần của lỗi

http://ideone.com/dRgKfk

can't load package: package : 
prog.go:1:1: illegal character U+2014 '—'

7
Điều đó rất thông minh, nhưng câu hỏi yêu cầu một chương trình in số.
HelloGoodbye

40
Nếu số mã lỗi được in, bài nộp này sẽ giành chiến thắng.
ToastyMallows

37
+1. Câu hỏi không nói, " chỉ in số và không có gì khác".
Kaz

1
Tôi không quan tâm nếu nó hợp lệ hay không, nó khá tuyệt vời.
Chương trình Redwolf


177

Con trăn, 26 tuổi

print int('bbc',ord("\r"))

53
bbc là 2014 tại căn cứ 13
Darren Stone

71
Tôi cho rằng việc sử dụng các ký tự 'bbc' và việc sử dụng căn cứ 13 là một cống phẩm của Douglas Adams. "Tôi có thể là một trường hợp xin lỗi, nhưng tôi không viết truyện cười trong căn cứ 13."
Brian Minton

10
13 năm trước. YÊN NGHỈ.
Darren Stone

4
IMO, câu trả lời này là trong "True Pythonese"
kmonsoor

8
@BrianMinton: Việc sử dụng Base 13 có lẽ là vì đây là cơ sở duy nhất trong khoảng từ 2 đến 36 cho phép số 2014 được thể hiện mà không có bất kỳ ký tự nào 0- 9.
dan04

146

MATLAB, Scala (4 ký tự, 5 byte)

Bạn có thể tận dụng hệ thống loại tương đối yếu của MATLAB (và Scala) tại đây. Mẹo nhỏ là áp dụng +thao tác đơn nguyên trên một chuỗi chỉ bao gồm ký tự ߞ(của mã UTF-8 điểm U + 07DE hoặc 2014 ở dạng thập phân). Thao tác này hoàn toàn chuyển đổi chuỗi thành gấp đôi (trong MATLAB) và thành Int(trong Scala):

+'ߞ'

Chi tiết đếm byte:

  • + là ASCII và được tính cho 1 byte
  • ' là ASCII và được tính cho 1 byte (nhưng xuất hiện hai lần trong biểu thức)
  • ߞ là ký tự UTF-8 2 byte

Tổng cộng: 5 byte

TeX (32 26 ký tự, nhiều byte)

\def~{\the\catcode`}~}~\\~\%\bye

Một sự thay thế thậm chí còn ngắn hơn (được đề xuất bởi Joseph Wright ) là

\number`^^T\number`^^N\bye

XeTeX / LuaTeX (13 ký tự, 14 byte)

Nếu XeTeX hoặc LuaTeX được cho phép, đầu vào UTF-8 có thể được sử dụng trực tiếp (theo đề xuất của Joseph Wright ):

\number`ߞ\bye

\let~\number~`^^T~`^^N\bye25 ký tự / byte. Bạn IMHO đếm sai, đó là 25 cho giải pháp của bạn.
yo '

1
@tohecz Tôi nghĩ cả hai giải pháp của chúng tôi thực sự dài 26 byte.
jub0bs

1
Nếu muốn có năm hiện tại, thì 13 byte:\the\year\bye
yo '

2
+'ߞ'cũng hoạt động trong Scala (và một vài ngôn ngữ khác mà tôi tưởng tượng)
Theon

118

dc, 6 ký tự

DiBBCp
  • D đẩy 13 trên ngăn xếp, thậm chí tho cơ số đầu vào là 10 ban đầu
  • i thay đổi cơ số đầu vào (thành 13 từ 10)
  • BBC là cơ sở 13 năm 2014.
  • p in.

Bảng điều khiển đầu ra:

$ dc <<< "DiBBCp"
2014

10
Đúng, nhưng chương trình dc thực tế vẫn là DiBBCp(6 ký tự), phần còn lại chỉ là một cách để chạy nó.
daniero

11
Tôi sẽ nâng cao điều này nhưng nó có 42 điểm! sử dụng cơ sở 13 và từ BBC. Thật tuyệt làm sao! Có vẻ như năm nay chúng ta sẽ tìm thấy câu hỏi cho cuộc sống, vũ trụ và sự vĩnh cửu ;-) en.wikipedia.org/wiki/Base_13 . Thay vào đó, tôi ủng hộ bình luận của @ daniero và để lại câu trả lời với danh tiếng 42 tuyệt vời này ;-)
Pablo Marin-Garcia

4
@ PabloMarin-Garcia, không may một số người không biết đã phá vỡ nó ... Hiện đã có 43 phiếu. Hãy quay lại và downvote! :)
Tomas

3
@Tomas Vogons luôn là Vogons. Kháng chiến là vô ích đối với chế độ dân chủ liên thiên hà.
Pablo Marin-Garcia

2
Tôi thậm chí không thể tìm thấy Dlệnh trong trang man. Nó làm gì? Đừng
bận

93

Mã Morse, 23

;)

..--- ----- .---- ....-

21
"Trong bất kỳ ngôn ngữ nào trong đó số là mã thông báo hợp lệ"
Doorknob

14
"..---" là mã thông báo hợp lệ, trong 5 nét, cho số hai, phải không? Giống như "4" là mã thông báo hợp lệ, trong ba nét, cho số "bốn".
DavidC

8
Chữ nổi có thể ngắn hơn :)
Tiến sĩ belisarius

31
Điểm tốt. Btw, tôi cảm thấy nhẹ nhõm khi không ai hỏi làm thế nào tôi có được Mã Morse để chạy trên máy tính của mình.
DavidC

14
@DavidCarraher Ý bạn là gì? Tôi tự nhiên cho rằng bạn đã sử dụng repo này để giải mã nó. github.com/Nyubis/mspa-morse-decoder Mọi người đang làm điều đó ...
Michael J. Calkins

88

72 45 ký tự trong mã; Mã ký tự không

Đây là xa câu trả lời ngắn nhất được đăng, nhưng chưa ai đăng một câu trả lời mà

  • không sử dụng mã ký tự để thay thế cho số và
  • không gọi ngày hệ thống.

Sử dụng toán học thuần túy (được và chuyển đổi boolean tự động) trong R, từ bảng điều khiển R:

x<-(T+T);x+floor(exp(pi)^x)*x*x-(x*x)^(x*x)/x

In ra số 2014. Tlà từ đồng nghĩa được xác định trước cho true trong R. Các hàm floorexphàm có sẵn trực tiếp trong gói cơ sở, như là pihằng số. R không có toán tử gia tăng, nhưng lặp lại (x*x)hóa ra là ít ký tự thực hiện tăng và giảm hai lần mỗi ký tự.


Phiên bản gốc trong Javascript (72 ký tự)

Vì lý do đơn giản là tôi có thể kiểm tra trong bảng điều khiển và nó không thiếu hoàn toàn khoảng trắng:

m=Math;p=m.pow;t=true;++t+m.floor(p(m.exp(m.PI),t))*t*t++-p(++t,t--)/--t

chạy trong bảng điều khiển của bạn và nó sẽ in lại số 2014.


Đạo cụ cho xkcd (và cả ) để khiến tôi suy nghĩ về exp (pi): e đến pi Minus pi

PS Nếu bạn có thể làm cho cùng một thuật toán ngắn hơn bằng một ngôn ngữ khác, hãy đăng bình luận với nó.


1
o =! ""; (o + o) + "" + (oo) + (o + oo) + (o + o + o + o)
Hạt nhân James

4
25 byte: alert ('ߞ'. CharCodeAt ())
oberhamsi

1
+1. Tuy nhiên, bạn khẳng định câu trả lời của bạn là câu trả lời đầu tiên rằng "không sử dụng mã ký tự thay thế cho số và không gọi ngày hệ thống". Điều đó thực sự sai. Câu trả lời của tôi có giải pháp này cdd**e-.@(được đăng trước bạn) không sử dụng mã ký tự hoặc ngày hệ thống. Nó tính số năm 2014. c, delà hệ thập lục phân số số. a,, b..., fđẩy (tương ứng) 10,11, ... 15 cũng 12 * 13 * 13 - 14là tính toán.
Justin

Đây không phải là câu trả lời đầu tiên để không sử dụng mã ký tự; Tôi có một vài cái trước đó.
TimTech

1
@Quincunx: bạn nói đúng; lướt qua tôi không biết rằng phiên bản của bạn đang sử dụng các chữ số hex, không phải mã ký tự.
AmeliaBR

85

Scala REPL

34 29 ký tự.

+"Happy new year to you!".sum

Vâng, nếu bạn thực sự muốn nó chơi golf với bất kỳ ký tự nào, bạn có thể sử dụng:

'@'*' '-'"'

hoặc là

"{yz}"map(_-'I'toChar)

trong đó có 11 và 22 ký tự tương ứng.


4
Ý tưởng thú vị, ngay cả khi nó không đặc biệt chơi gôn. Nhưng chính chuỗi này làm cho nó thú vị hơn, bằng thứ gì đó sử dụng byte cao hoặc thứ gì đó tương tự.
Konrad Borowski

Tôi đã thêm một phiên bản golf.
Mikaël Mayer

Bạn có thể tiết kiệm một vài ký tự từ toIntnhư thế này: +"Happy new year to you!".sum Kiểm tra
Theon

Đã cập nhật. Tôi không biết rằng + cũng có thể là tiền tố.
Mikaël Mayer

68

PHP, 9 byte

Điều này đòi hỏi PHP 7.1 trở xuống. Nó sẽ hoạt động trong PHP 7.2, nhưng nó sẽ dẫn đến một cảnh báo. Không đảm bảo cho bất kỳ phiên bản trong tương lai.

xxdcần thiết vì dữ liệu nhị phân (vì vậy sao chép và dán nó sẽ dễ dàng hơn). Có thể trở lại E_NOTICE, nhưng nó không thực sự quan trọng, phải không?

~ $ xxd -r > 2014.php
0000000: 3c3f 3d7e cdcf cecb 3b                   <?=~....;
~ $ php 2014.php
2014

Ngoài ra, lưu điều này bằng cách sử dụng mã hóa ISO-8859-1.

<?=~ÍÏÎË;

@Quincunx: Tải lên phần này tương đối khó, nhưng đây là Ideone - ideone.com/APHKhn .
Konrad Borowski

1
Điều này có vẻ thú vị; nó làm gì?
Justin

7
@Quincunx: Nó không theo bitwise (0x00 thay đổi thành 0xFF và 0x7F thay đổi thành 0x80) trên mỗi ký tự của chuỗi. Vì chuỗi là mã định danh hợp lệ (bất cứ thứ gì có tập bit cao đều là ký tự định danh cho PHP, có thể để hỗ trợ các mã hóa khác), PHP nghĩ rằng đó là một hằng số, nhưng vì nó không được xác định, nên nó coi nó là một chuỗi.
Konrad Borowski

2
Vì câu hỏi là "Bây giờ là năm 2014 ...", còn bạn thì sao echo date('Y');?
John

6
@ John: Không. Nếu bạn đọc các bình luận cho câu hỏi, bạn sẽ nhận thấy rằng OP không muốn lấy năm nay làm câu trả lời. Bên cạnh đó, <?=date(Y);sẽ là 11 ký tự và tôi có giải pháp trong 9 ký tự.
Konrad Borowski

67

C, 33 byte

main(){printf("%d",'A'*' '-'B');}

19
Thật khó chịu khi yếu tố chính của năm 2014 yêu cầu ASCII 5!
Ben Jackson

Tôi đã nhận được (int a; YES; a ++) {NSLog (@ "% i", a);} cho mục tiêu Cacao Touch C nhưng tôi chưa thể thêm (chưa được xếp hạng đủ). Cuối cùng nó cũng hiển thị một năm 2014 và nó có lỗi trình biên dịch và có thể nó hoàn toàn không hoạt động và được biên dịch có lẽ khoảng 4.2 meg - nhưng hey.
Thép tái chế

chính () {printf ("% d", '\ a \ xde');}
mjy

1
@mjy Thứ tự Byte của chữ nhiều ký tự không được đảm bảo.
Jonathon Reinhart

@JonathonReinhart nghĩa đen đa ký tự là hoàn toàn không thực hiện.
FUZxxl

54

Mathicala, 14 ký tự (hoặc 15 nếu bạn tính bitmap là ký tự)

Nhận dạng văn bản @nhập mô tả hình ảnh ở đây


50
Trên thực tế, bạn nên đếm byte để nó lớn hơn 14 lần kích thước của hình ảnh bitmap.
Sylwester

22
Bitmap có lẽ sẽ là 7.357 ký tự, thực sự.
Joe Z.

5
Ngoài ra, tôi tin rằng một số byte trong ảnh rơi vào \dphạm vi. Cụ thể, nếu đó là GIF, thì chính tiêu đề được đảm bảo có chứa một số.
John Dvorak

13
Bạn là tất cả killjoys. Tốt thôi, hãy sử dụng First @ ToCharacterCode @ "" cho 25 ký tự, 26 byte.
Michael Stern

9
Như một phần thưởng, đây là một giải pháp Mathicala với 30 ký tự --URLFetch @ " goo.gl/miVwHe "
Michael Stern

53

Python3.4.0b2 (0 byte)

% python3.4  
Python 3.4.0b2 (v3.4.0b2:ba32913eb13e, Jan  5 2014, 11:02:52) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Điều này sẽ không hoạt động khi mọi người cập nhật phiên bản Python 3 của họ một năm kể từ bây giờ.
Joe Z.

21
Đó là lý do tại sao tôi đã đề cập đến python3.4.0b2 , Nó sẽ không xảy ra hai lần. Ngày phát hành của nó, không phải ngày hệ thống.
BẠN

6
Điều này làm tôi mỉm cười!
Matt Fletcher

2
Cũng hoạt động trong Python 3.4.2.
Erik the Outgolfer

Bạn không được phép thêm đầu ra bên ngoài.
MilkyWay90

48

Javascript, 23 byte

Sử dụng chuyển đổi cơ sở 64

alert(atob("MjAxNA=="))

23 ký tự (16 với atob của chính nó)

Hoặc là

alert("MMXIV") // ;)

27
MMXIVkhông có điểm chung nào 2014, tôi đã kiểm tra lần cuối ...// ;)
Joe Z.

23
Người La Mã cổ đại có thể không đồng ý. Cái đầu tiên sản xuất năm 2014, bằng tiếng Anh hiện đại.
logic8

1
Cái

1
nếu bạn mở bàn điều khiển bằng chrome, hãy dán nó và nhấn enter để trả về giá trị - tôi sẽ thêm một cảnh báo cho nó vì nó dài hơn các bảng điều khiển khác.
logic8

5
@ logic8: Đẹp một +1. Một phiên bản JavaScript khác cũng hoạt động: (4 byte) [!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]- alert([!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]);Mặc dù tôi không chắc nó đáp ứng Joe Zyêu cầu của họ.
Không có

41

Perl - 10 ký tự

Giải pháp này được cung cấp bởi BrowserUK trên PerlMonks , mặc dù tôi đã loại bỏ một số dấu câu và khoảng trắng không cần thiết khỏi giải pháp mà anh ấy đã đăng. Đó là một chút "không" trên chuỗi nhị phân bốn ký tự.

say~"ÍÏÎË"

Các ký tự được hiển thị ở trên đại diện cho các octet nhị phân cd: cf: ce: cb và là cách chúng xuất hiện trong ISO-8859-1 và ISO-8859-15.

Đây là toàn bộ tập lệnh trong hex, cộng với một ví dụ chạy nó:

$ hexcat ~/tmp/ten-stroke.pl
73:61:79:7e:22:cd:cf:ce:cb:22
$ perl -M5.010 ~/tmp/ten-stroke.pl
2014

Perl (không có bit cao) - 14 ký tự

say'````'^RPQT

Điều này sử dụng một bitwise "hoặc" trên hai chuỗi bốn ký tự "RPQT""````"(nghĩa là bốn backticks).

$ ~/tmp/fourteen-stroke.pl
73:61:79:27:60:60:60:60:27:5e:52:50:51:54
$ perl -M5.010 ~/tmp/fourteen-stroke.pl
2014

(Ban đầu tôi có hai chuỗi theo cách khác, yêu cầu khoảng trắng giữa printRPQT để tách các mã thông báo. @DomHastings chỉ ra rằng bằng cách chuyển chúng xung quanh tôi có thể lưu một ký tự.)

Perl (gian lận) - 8 ký tự

Điều này có lẽ không nằm trong tinh thần của cuộc thi, nhưng hdb trên PerlMonks đã chỉ ra rằng Perl cung cấp một biến được gọi $0có chứa tên của chương trình hiện tại đang được thực thi. Nếu chúng tôi được phép đặt tên tệp chứa tập lệnh "2014", thì $0sẽ bằng với năm 2014. $0chứa một chữ số, vì vậy chúng tôi không thể sử dụng trực tiếp, nhưng ${...}chứa một biểu thức ước lượng thành 0 sẽ ổn; ví dụ:

say${$|}

Để thống nhất, chúng ta hãy làm điều hexcat-then-perl với điều đó:

$ hexcat 2014
73:61:79:24:7b:24:7c:7d
$ perl -M5.010 2014
2014

Tôi nghĩ rằng điều này là gian lận, nhưng dù sao nó cũng là một giải pháp thú vị, rất đáng được đề cập.


2
Xin chào, nếu bạn đảo ngược chuỗi và barewords, bạn có thể lưu char : print"````"^RPQT. Có thể sử dụng sayquá trên 5.10+ bằng cách sử dụng -E thay vì -e, nhưng tôi không biết liệu điều đó có phải chịu hình phạt +2 cho các đối số dòng lệnh khác nhau không?
Dom Hastings

2
Bạn có thể chấp nhận việc chỉ định rằng bạn đang sử dụng Perl 5 và saykhông bị phạt.
Peter Taylor

@DomHastings, cá nhân tôi nghĩ rằng nếu bạn sẽ làm điều đó với "-e" hoặc "-E", tôi sẽ nói rằng bạn nên bao gồm toàn bộ lệnh, bao gồm cả "perl -E" trong số ký tự của bạn .
tobyink


4
Bạn cũng có thể lưu một byte khác bằng cách sử dụng chuỗi ký tự không yêu cầu dấu ngoặc kép, chẳng hạn như say ABCD^srrp.
Primo

40

Hồng ngọc, 20

p 'bbc'.to_i ?\r.ord

Giải thích: bbcnằm 2014trong cơ sở 13. Ngắn hơn Python. Không ngắn như Forth.


23
"Không ai viết truyện cười trong căn cứ 13!"
Jean-Michaël Celerier

1
? w = $; "^ XA [_AXeMFGIAHJLjKNAEFEJJNHQHNKLAEMINJOJOHLAGKHOJOJ [AG [HQHRFJAH} IHAIGGwIIAHHGwKHAHGHrEUAGQFiGVAGQGfIPAFHKHHbJHAQII] MGASHNSOHATIdIAUJJRLIAWLIQGKAZOFUA] ZAeSAiPAjOAkLA" .codepoints {| r | r- = 68; $> << (r <0 ?? \ n: (w = w = =? $? '':? $) * r)}
Darren Stone

1
p 'ߞ'.ordcho một chương trình đầy đủ chức năng, 'ߞ'.ordbên trong irb. Hoạt động trên 1.9+
Ricardo Panaggio

1
Không có các ký tự unicode "lạ": ?-*?--?\v(45 * 45 - 11) (Ruby 1.8)
Ricardo Panaggio

Một ký tự nhỏ hơn: ?.*?.-?f(46 * 46 - 102) (chỉ một lần nữa là Ruby 1.8)
Ricardo Panaggio

29

Quyền hạn, 9

+"ߞ"[""]

ߞ( U + 07DE NKO LETTER KA ) được tính là hai byte theo thông tin thẻ golf-code .

[""]trả về ký tự đầu tiên từ chuỗi ( ""được chuyển đổi thành 0). Unary plus opeartor ( +) chuyển đổi ký tự thành một số nguyên.


1
Theo codegolf.stackexchange.com/tags/code-golf/info , nó sẽ được tính là 9 ký tự.
Konrad Borowski

@GlitchMr, cảm ơn, tôi đã sửa câu trả lời của mình.
Danko Durbić

3
Đây ['']là một mẹo hay. Tôi thường sử dụng [char]nhưng thực sự ngắn hơn :)
Joey

27

Scala REPL - 6 ký tự

"?="##

( ##là ý nghĩa biểu tượng của Scala hashCodevà chuỗi Java "?="băm đến 2014.)

Scala REPL - 4 ký tự, 5 byte

+'ߞ'

Toán học trên nhân vật unicode yêu thích của chúng tôi tạo ra một Int.


27

Javascript, 18 ký tự

alert(btoa('ÛMx'))

Cập nhật: trong ES6, sử dụng một mẫu bằng chữ có thể lưu hai ký tự:

alert(btoaMx`)

Đoạn mã trên khá dễ hiểu bằng cách ghi nhớ btoachuyển đổi một chuỗi thành một chuỗi khác theo một bộ quy tắc được xác định rõ ( RFC 4648 ). Để xem cách chuyển đổi hoạt động, chúng ta sẽ viết chuỗi đầu vào "ÛMx" dưới dạng một chuỗi các chữ số nhị phân, trong đó mỗi ký tự được hiển thị dưới dạng mã ký tự 8 bit.

Ký tự đầu vào | Û | M | x
Mã ký tự (thập phân) | 219 | 77 | 120
Mã ký tự (nhị phân) | 11011011 | 01001101 | 01111000

Sau khi sắp xếp lại các chữ số nhị phân ở hàng cuối cùng trong nhóm 6, chúng ta nhận được biểu diễn nhị phân của 4 số mới, tương ứng với các chỉ số Base64 của 4 ký tự trong chuỗi "2014".

Chỉ số Base64 (nhị phân) | 110110 | 110100 | 110101 | 111000
Chỉ số Base64 (thập phân) | 54 | 52 | 53 | 56
Nhân vật đầu ra | 2 | 0 | 1 | 4

Theo thông số kỹ thuật HTML, các ký tự đầu ra có thể được truy xuất từ ​​các chỉ số Base64 của chúng theo bảng này: http://dev.w3.org/html5/spec-LC/webappapis.html#base64-table .

Nếu bạn không quan tâm đến các chi tiết, bạn có thể để trình duyệt thực hiện các tính toán cho bạn và tìm ra rằng "ÛMx" là kết quả của việc đánh giá atob('2014')trong Javascript.


câu hỏi đề cập đến việc in số. Tôi biết rằng việc đánh giá trong bảng điều khiển sẽ dẫn đến kết quả được trả về, nhưng trên Code Golf, người ta thường mong đợi rằng các câu trả lời của JS sẽ bao gồm một số dạng IO ( alertphổ biến nhất).
zzzzBov

@zzzzBov Có, câu trả lời ban đầu của tôi bao gồm một alertcuộc gọi.
GOTO 0

Nó liệt kê Cộng đồng như đã loại bỏ alert. Tôi tự hỏi liệu các tiêu chuẩn đã thay đổi đối với codegolf hay liệu đó chỉ là một thay đổi được Cộng đồng chấp nhận.
zzzzBov

@zzzzBov: Đó là một thay đổi của người dùng ẩn danh được chấp nhận bởi SHiNKiROU và luser droog. Dù sao, chỉnh sửa này đã kích hoạt một cuộc thảo luận về Meta ( meta.codegolf.stackexchange.com/questions/804/ .).
Konrad Borowski

@xfix, Không phải bản chỉnh sửa này đã khiến tôi phải đặt câu hỏi đó trên meta, tôi đã thấy đủ các mã golf nơi mọi người có sự bất đồng về việc liệu bảng điều khiển dev có được tính là in hay không, mà tôi cho rằng nó đáng để yêu cầu một tiêu chuẩn.
zzzzBov

24

Một mục GolfScript khác, 9 ký tự có thể in

Tôi tin rằng nó ngắn hơn bất kỳ mục GolfScript có thể in nào cho đến nay:

"!="{*}*)

( Mục nhập 7 ký tự của Peter Taylor đánh bại nó, nhưng bao gồm các ký tự điều khiển không in được.)

Tôi gọi đây là "đó là năm ngoái!" mục nhập, bởi vì những gì nó thực sự làm là tạo ra số 2013 trong 8 ký tự, là 33 × 61, và sau đó tăng nó lên một. ;-)


Bạn giành chiến thắng (đối với môn thể thao golf ascii)
aditsu

21

C (31)

main(){printf("%o",' b'/'\b');}

C (32)

main(){printf("%x%o",' ','\f');}

C (30)

main(){printf("%x",' j'^'~');}

C (30)

main(){printf("%d",'\a\xde');}

Làm thế nào về chỉ "%x"'b'*'S'? Đó là 8212 dec hoặc 2014 hex. Lưu một char một nghĩa đen và hai trên chuỗi định dạng.
MSalters

@MSalters Không, 'b'*'S'là 8134. Hệ số nguyên tố của 8212 là 2 * 2 * 2053, vì vậy tôi không thấy một cách dễ dàng để sản xuất nó.
fredoverflow

Bah, đã kiểm tra với phân chia số nguyên rằng 8212/'b' == 'S':(
MSalters

và bát phân cũng không hoạt động (02014 = 1036 = 37 * 28, 28 là không thể in được)
MSalters

1
@FredOverflow điều gì về giải pháp 28 char của tôi? main () {đặt (__ NGÀY __ + '\ a');}
Arunprasad Rajkumar

20

Thứ tư, 14

'> '" * '^ - .      

1
Bạn có thể giải thích làm thế nào điều này hoạt động?
Chương trìnhFOX

1
Tôi biểu thị hằng số nguyên dưới dạng ký tự bằng cách sử dụng các giá trị thứ tự (ASCII) của chúng. Vì vậy, đây là: 62 34 * 94 - . Nếu bạn không nói tiếng Forth, điều này có nghĩa print (62 * 34 - 94).
Darren Stone

Forth (Gforth 0.7.0), 5 byte, 4 ký tự: 'ߞ .Nó in ký tự.
18446744073709551615

20

GolfScript, 14

'-+,/'{)))))}%

Cách thức hoạt động: ASCII hoạt động như sau:

...
+
,
-
.
/
0
1
2
3
4
...

Vì vậy, cái này lấy mã ASCII của mỗi ký tự, trừ năm và gắn nó vào một chuỗi.

{...}%mang lại một mảng các ký tự của một chuỗi được ánh xạ, khi được đưa ra một chuỗi làm đối số. Vì vậy, nó tăng mỗi ký tự lên 5 ( )có nghĩa là tăng).


Các +cuối cùng là không cần thiết. Ngoài ra, thay vì tăng 5 lần, chỉ cần thêm năm. Tổng tiết kiệm: 4 ký tự. '-+,/'{5+}%
Justin

15
@Quincunx, 5là một con số.
Peter Taylor

5
@PeterTaylor Mình cứ quên.
Justin

Giải pháp thông minh
Sumurai8

Phiên bản CJam này : "-+,/"_,)f+. :) (Sau đó, một lần nữa, CJam có KD.)
Martin Ender

19

Python, 32 ký tự

print ord(',')*ord('-')+ord('"')

Có lẽ có thể giảm nó bằng cách sử dụng Unicode char 2014 ߞ, nhưng tôi đã không thử.

Quincunx lưu ý rằng

a=ord('.');print a*a-ord('f')

ngắn hơn ba ký tự.


Phiên bản unicode hoạt động, ít nhất là trong Python 3 với IDLE : print(ord("ߞ")). Nó dường như không hoạt động trong Python 2; Python 2 có thể không hỗ trợ unicode.
Justin

3
Ngoài ra, với phiên bản của bạn, a=ord('.');print(a*a-ord('f'))ngắn hơn 2 ký tự.
Justin

@Quincunx Nó hỗ trợ, tuy nhiên bạn cần phải có một bộ mã hóa cụ thể vào tệp của mình và nối uvào cuối chuỗi (sẽ là "ߞ"u)
Kroltan

2
@Kroltan Thật ra, tôi khá chắc phần thứ hai không đúng. Trong Python 2, bạn phải thêm vào các chuỗi uđể nói rằng chúng là unicode, nhưng trong Python 3, tất cả các chuỗi đều tự động unicode
murgatroid99

1
Tương tự như nhận xét ở trên, không có unicode print ord('.')**2-ord('f')thì ngắn hơn một chút.
MLS

18

APL (6 byte, 4 ký tự)

⊃⎕TS

Chỉ hoạt động trong năm nay mặc dù.

Tại sao nó hoạt động:

      ⎕TS
2014 1 1 11 58 5 811
      ⊃⎕TS
2014

Không phụ thuộc vào ngày hệ thống, đó là 10 byte (7 ký tự):

⎕UCS'ߞ'

6
Thật không may, câu trả lời chỉ hoạt động trong năm nay là không hợp lệ.
Joe Z.

Tôi không biết APL: hộp vuông đó có phải là char APL không, hay tôi thiếu một đại diện phông chữ (Chrome)?
Carl Witthoft

@JoeZ .: Câu hỏi đặt ra không nói điều đó nhưng tôi đã thêm một mà không dựa vào nó là 2014.
marinus

4
@CarlWitthoft: Nó được gọi là quad ( ), nó được cho là trông như thế.
bến tàu

18

Python 32 10 byte, 91 85 (66 mathđược nhập theo mặc định) byte thuần toán

Có một số thú vị bằng văn bản này:

my_lst = []
for i in range(33, 126):
    for j in range(i, 126):
        if 2014 - 126 < i * j < 2014 - 33:
            if j not in range(48, 58):
                my_lst.append("ord('" + unichr(i) +
                              "')*ord('" + unichr(j) +
                              "')+ord('" + unichr(2014 - i * j) + "')")

for val in my_lst:
    print val, '->', eval(val)

In tất cả các cách có thể tôi có thể viết 2014bằng phương pháp của Bruno Le Floch (32 ký tự):

ord('!')*ord(':')+ord('d') -> 2014
ord('!')*ord(';')+ord('C') -> 2014
ord('!')*ord('<')+ord('"') -> 2014
ord('"')*ord(':')+ord('*') -> 2014
ord(')')*ord('/')+ord('W') -> 2014
ord('*')*ord('-')+ord('|') -> 2014
ord('*')*ord('.')+ord('R') -> 2014
ord('*')*ord('/')+ord('(') -> 2014
ord('+')*ord(',')+ord('z') -> 2014
ord('+')*ord('-')+ord('O') -> 2014
ord('+')*ord('.')+ord('$') -> 2014
ord(',')*ord(',')+ord('N') -> 2014
ord(',')*ord('-')+ord('"') -> 2014

Nhưng điều này rõ ràng là dư thừa, vì vậy nếu trình thông dịch của bạn được đặt thành utf-8 theo mặc định, thì tất cả những gì bạn cần là:

>>> ord(u'ߞ')
2014

Ngoài ra, nhờ AmeliaBR (cho ý tưởng), tôi đã cố gắng hết sức để thực hiện một phiên bản toán học thuần túy:

from math import*
a,b,c=int(e),round(e),ceil(pi);print int(a**(b*c-(c-b))-a*a**c-a)

ord (',') ** 2 + ord ('N')
MLS

6
@MLS Chà, có một chữ số trong đó :)
Joachim Isaksson

2
Tôi đã tối ưu hóa phiên bản toán học của bạn một chút: a,b=int(e),int(pi);c=a+a;print a**(b*c-c+b)-a*a**c-avà bạn có thể loại bỏ việc nhập toán học hoàn toàn bằng cách sử dụng thực tế là Truetrong Python 2.x giống hệt với số nguyên 1 đang hoạt động, đưa nó xuống 50 ký tự:o=True;a=o+o;b=a+o;c=b+o;print a**(b*c-o)-a*a**c-a
Ponkadoodle

Bạn có thể lưu một ký tự nếu bạn sử dụng Python 3:ord('ߞ')
asmeker

@JoachimIsaksson Một chữ số không có số;)
Mega Man

17

R (20 ký tự)

@popojan (anh ấy chưa được phép đăng câu trả lời ở đây) đã cung cấp giải pháp trong vòng 20 ký tự.

sum(T+T:exp(T+pi))-T

Đầu ra:

> sum(T+T:exp(T+pi))-T
[1] 2014

R (22 ký tự)

Người dùng ẩn danh đã đề xuất giải pháp ngắn hơn.

strtoi("bbc",pi*pi+pi)

2014nằm BBCtrong cơ sở 13. pi*pi+pi(= 13.0112) được R xử lý trong ngữ cảnh này dưới dạng số nguyên 13. Kết quả:

> strtoi("bbc",pi*pi+pi)
2014

R (30 ký tự)

Cảm ơn @Tomas!

cat(a<-T+T,T-T,T/T,a*a,sep="")

Đầu ra:

> cat(a<-T+T,T-T,T/T,a*a,sep="")
2014

R (31 ký tự)

cat(T+T,T-T,T/T,T+T+T+T,sep="")

Lấy cảm hứng từ câu trả lời của AmeliaBR . Đầu ra:

> cat(T+T,T-T,T/T,T+T+T+T,sep="")
2014

Ồ, +1! Và tôi hy vọng giải pháp số La Mã của mình sẽ là tốt nhất ... :( ;-)
Tomas

Các biến thể dưới đây có thể được thực hiện ngắn hơn: cat(a<-T+T,T-T,T/T,a^a,sep="")(30 ký tự), paste0(aT+T,T-T,T/T,a^a)(26 ký tự)
Tomas

@Tomas, chức năng paste0không được phép, vì nó chứa ký hiệu 0. Giải pháp của bạn tạo ra 30 ký tự nếu sử dụng cat.
djhurio

tạo tập tin 2014trong thư mục hiện tại và viết list.files()- 12 ký tự
Zbynek

@Zbynek, tôi hy vọng giải pháp của bạn sẽ không hợp lệ trong phạm vi chung của quy tắc codegolf.
djhurio

15

Java - 77 75 ký tự

75 ký tự nếu printđược thêm vào trong một lớp với phương thức chính:

class C{public static void main(String[]a){System.out.print('#'*'<'-'V');}}

Nó có nghĩa 35*60-86là bằng với năm 2014


2
Tôi thích công thức của bạn.
Johannes

7
Điều này thực sự cần phải dài hơn, bởi vì định nghĩa lớp cần phải có trong nó để chạy. Cách ngắn nhất mà tôi biết (với Java 6):class a{static{System.out.println('#'*'<'-'V');}}
Justin

1
@Quincunx, với Java 7, cần có một phương thức chính
True Soft

2
@TrueSoft Lưu ý Tôi đã nói "với Java 6". Bạn nên chọn Java ngắn nhất có thể.
Justin

2
Bạn có thể xóa 'ln' trong println để giảm ký tự ...
laksys
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.