In tỷ lệ vàng


26

Điều này thật thú vị! Tuy nhiên, chỉ với ba chữ số, cuộc vui đã kết thúc quá sớm. Thử thách này cũng tương tự, nhưng chúng tôi sẽ tiếp tục vui vẻ.

Các thách thức

In càng nhiều chữ số của Tỷ lệ vàng φ càng tốt. Tỷ lệ vàng được định nghĩa là số thỏa mãn φ = (+ 1) / và 100 chữ số đầu tiên được đưa ra bởi:

1.618033988749894848204586834365638117720309179805762862135448622705260462818902449707207204189391111375 ...

Thách thức này không phải là về điện toán! Đó là về việc in càng nhiều chữ số càng tốt mà không cần sử dụng bất kỳ phương pháp nào để thực hiện điều đó hai lần. Vì vậy, tìm nhiều cách sáng tạo để có được chữ số của bạn như bạn có thể!

Hạn chế

Chính nó, việc in các chữ số của sẽ hơi đơn giản, vì vậy đây là các quy tắc:

  1. Bạn phải xây dựng số theo thứ tự từ trái sang phải , bằng cách in từng mảnh hoặc bằng cách xây dựng một chuỗi từ trái sang phải và in nó ở cuối - bạn thậm chí có thể tạo ra một mảng các ký tự chữ số và sau đó nối nó và in nó, miễn là bạn làm theo thứ tự. Trong các quy tắc sau đây, "in" và "đầu ra" có thể đề cập đến bất kỳ quy trình nào trong số đó (ví dụ: nếu bạn đang xây dựng một chuỗi và chuỗi chứa 1.6đó được tính là 1.6đã in).
  2. Đối với mã của bạn, bạn nhận được ngân sách 15 ký tự cho mỗi chữ số . Thời gian không được tính vào ngân sách đó, nhưng cũng phải được in. Lưu ý rằng hạn chế chỉ trên tổng kích thước mã: bạn có thể sử dụng hơn 15 ký tự cho bất kỳ chữ số nào miễn là bạn không sử dụng nhiều hơn trung bình. Trên thực tế, bạn có thể tạo ra một "khoản nợ" bằng các ký tự và "trả hết" sau đó. Ví dụ để in 1.618bạn có 60 ký tự.
  3. Thư viện chuẩn bao gồm / nhập không được tính vào kích thước mã. Nhưng bạn không thể cung cấp cho những người bao gồm các bí danh tốc ký miễn phí!
  4. Bạn không được sử dụng chữ số bạn đang tạo, cũng như bất kỳ chữ số nào bạn đã in. Ví dụ, 1có thể không xuất hiện trong mã nguồn của bạn, bởi vì đó là chữ số đầu tiên. Mã xuất ra 8trong 1.618có thể sử dụng bất kỳ hoặc tất cả các chữ số [0234579], nhưng không có [168]. Với mục đích này, tất cả các chữ đó là tương đương với một đơn chữ số được đối xử như con số đó . Vì vậy, nếu ngôn ngữ của bạn có thể đại diện 9như '\t'bạn không được phép sử dụng ở bất cứ đâu, nơi bạn không thể sử dụng 9thay thế.
  5. Bạn không được tạo ra nhiều chữ số cùng một lúc. Có thể phân chia rõ ràng mã của bạn thành các khối tạo ra một chữ số một lần.
  6. Bạn không được tham khảo bất kỳ hàm dựng sẵn nào , toán tử / boolean / bit-khôn ngoan / chuỗi, biến hoặc hằng mà bạn đã sử dụng trong mã tạo ra một chữ số trước đó. Các ngoại lệ là chuyển đổi số nguyên thành chuỗi, nối chuỗi và các chức năng in mà bạn có thể cần cho mỗi chữ số. Lưu ý rằng việc bạn đề cập đến bất kỳ tên tích hợp nào không quan trọng : chỉ vì bạn đặt bí danh PIcho cả hai pqkhông có nghĩa là bạn có thể sử dụng pmột lần và qmột lần. Tương tự như vậy, bạn được phép sử dụng tên hai lần nếu nó đề cập đến hai phần dựng sẵn khác nhau, như chuỗi lengthvà mảng length.

    Nếu ngôn ngữ lập trình của bạn không có chức năng, hãy sử dụng phán đoán tốt nhất của bạn về tương đương - ví dụ như đối với kịch bản bash, việc gọi các chương trình khác phải tuân theo các quy tắc áp đặt cho các chức năng

  7. Trình của bạn phải được viết bằng một ngôn ngữ duy nhất. Vì vậy, không thực thi trình thông dịch của ngôn ngữ khác để có quyền truy cập vào ngôn ngữ được tích hợp sẵn.

Hàm ý

Tất cả các điểm sau đây đều được ngụ ý bởi các quy tắc trên, nhưng tôi thêm chúng vào đây để tránh các câu hỏi đã xuất hiện trong hộp cát ::

  • Bạn không được phép ghi đè lên các phần của đầu ra bằng cách in một số khoảng trống (thường '\b') ở giữa.
  • Các vòng lặp tạo / xuất nhiều chữ số đều bị cấm. (Tuy nhiên, các vòng lặp tính toán một chữ số là tốt.)
  • Sử dụng một phiên bản bị xáo trộn (1 + √5)/2hoặc chia các số Fibonacci để thu được nhiều hơn một chữ số đều bị cấm.
  • Bạn không thể xác định trước 10 chữ số và lưu trữ chúng trong 10 biến và sau đó chỉ tham chiếu đến các biến đó, bởi vì các tham chiếu biến đó không tạo ra chữ số - mã điền vào biến đó, vì vậy đây là vi phạm quy tắc 6.
  • Thực tế, bạn không thể sử dụng lại bất kỳ kết quả nào trước đó (hoặc kết quả trung gian), vì điều đó có nghĩa là hai chữ số sẽ chia sẻ mã để được tạo .
  • Mặt khác, bạn có thể sử dụng bất kỳ phương tiện nào (không phải hoàn toàn là toán học) để tạo ra các chữ số. (Và bạn nên!)
  • Trong thực tế, không cần phải tính toán bất cứ điều gì, nếu bạn có thể rút ra các chữ số chính xác từ nhiều nơi khác nhau bằng thư viện tiêu chuẩn của mình.
  • Bạn có thể sử dụng một toán tử nhiều lần trong khi tạo một chữ số, do đó, 2+2+2trò chơi công bằng để tạo lần đầu tiên 6(mặc dù không chắc là ngắn nhất).
  • Bạn có thể sử dụng bất kỳ nghĩa đen nào thường xuyên như bạn muốn, bởi vì chúng không phải là hằng số tích hợp. Vì vậy, miễn là bạn không phải in 5, bạn có thể có bao nhiêu 5mã trong mã của mình như bạn muốn.
  • Bạn không thể mã hóa đầu ra, vì điều đó sẽ liên quan đến việc sử dụng các chữ số bạn xuất ra.

Tóm lại: không sử dụng bất kỳ phương pháp tạo chữ số nào hai lần và không sử dụng chữ số bạn hiện đang xuất hoặc bất kỳ đã được in.

Nếu bạn phát hiện ra một lỗ hổng cho phép bạn có được một số điểm vô hạn (gần như), xin đừng phá hỏng thử thách bằng cách khai thác nó, nhưng hãy cho tôi biết để tôi có thể sửa lỗ hổng này mà không phá vỡ bất cứ điều gì.

Chấm điểm

Chương trình in số chữ số cao nhất sẽ thắng chính xác. Trong trường hợp hòa, mã ngắn hơn phá vỡ cà vạt.

Vui lòng thêm một phiên bản nhận xét không được xác định để xác định phần nào trong mã của bạn tạo ra chữ số nào.

PS: Nếu bất cứ ai đánh bại 100 chữ số ở trên, đây là một số chi tiết .


Bình luận thanh trừng; xin vui lòng thông báo cho tôi cho bất kỳ thông tin bị mất có thể.
Doorknob

"Sử dụng phiên bản bị xáo trộn ..." Đó chỉ là sử dụng công thức bậc hai trên x = (x+1)/x(hoặc x^2 = x+1) (hoặc x^2-x+1).
Cole Johnson

.... Tôi có thể tham khảo một toán tử xác định thực hiện nhiều lần không?
Stackstuck

Ngoài ra, tôi có thể sử dụng lại bài tập không?
Stackstuck

Câu trả lời:


18

PHP, 100 chữ số

Tôi có thể bẻ cong các quy tắc một chút ở đây, nhưng PHP có hàng tá hằng số để lựa chọn:

<?php
echo TRUE . '.' . PM_STR . DNS_A . MSG_EOR . LC_ALL . T_FMT . LOCK_UN . SQL_DATE
. E_NOTICE . IMG_WBMP . INI_ALL . E_PARSE . SOCKET_EBADF . LOG_USER .
IMAGETYPE_JPC . IMG_PNG . GLOB_MARK . LOCK_NB . LOG_NDELAY . D_FMT . PHP_ZTS .
GLOB_ERR . AM_STR . SQL_DOUBLE . SOL_TCP . FILE_APPEND . LOG_ERR . SORT_ASC .
SOCK_RAW . LOG_INFO . LC_TIME . SQL_FLOAT . SORT_DESC . INFO_MODULES . E_ERROR .
IMG_GIF . SQL_REAL . LOG_DEBUG . DNS_NS . CODESET . CAL_FRENCH . CURLE_OK .
LDAP_OPT_RESTART . LOCK_SH . XML_PI_NODE . SQLITE_INTERRUPT . MYSQLI_ASYNC .
CURLM_OK . SNMP_NULL . SQLITE_NOMEM . LC_MESSAGES . IMG_JPG . SO_KEEPALIVE .
SOCKET_ENXIO . LOCK_EX . D_T_FMT . ENT_QUOTES . LOG_NOTICE . SOCK_RDM .
INPUT_ENV . CURLAUTH_NTLM . INPUT_SESSION . AF_INET . IMG_JPEG . SQL_CONCURRENCY
. SEEK_SET . SOCKET_EIO . LC_CTYPE . PHP_URL_QUERY . LOG_KERN . INI_SYSTEM .
IMAGETYPE_BMP . SEEK_END . JSON_HEX_QUOT . LOG_PID . LIBXML_DTDATTR .
XML_DOCUMENT_NODE . PHP_DEBUG . LOG_CRIT . ENT_IGNORE . LC_NUMERIC .
DOM_NOT_SUPPORTED_ERR . PHP_URL_FRAGMENT . FILE_TEXT . IMAGETYPE_TIFF_II .
LOG_CONS . LOG_EMERG . UPLOAD_ERR_CANT_WRITE . MSG_PEEK . SQLITE_OK . FNM_PERIOD
. AF_UNIX . CURLPROTO_FTPS . STREAM_NOTIFY_FAILURE . MYSQL_BOTH .
CURLE_FTP_ACCESS_DENIED . MSG_OOB . FTP_TEXT . LC_MONETARY .
CURLE_COULDNT_CONNECT . SQLITE_BUSY . "\n";

Đây có thể không phải là mã di động, nhưng nó hoạt động tốt trên hệ thống của tôi. Đây là mã đã tạo ra nó:

<?php
$phi = "6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375";
echo "<?php\necho TRUE . '.' . ";
$consts = get_defined_constants();
foreach($consts as $k=>$v) if (preg_match('/\d|TRUE|PHP_EOL/',$k)) unset($consts[$k]);
for ($p=0;$p<strlen($phi);$p++) {
  $d = ord($phi[$p]) - 48;
  $min = 999;
  foreach($consts as $k=>$v) {
    if (strlen("$v")==1 && $v==$d && strlen($k)<$min) {
      $min = strlen($k);
      $maxk = $k;
    }
  }
  if ($min==999) break;
  echo "$maxk . ";
  unset($consts[$maxk]);
}
echo "\"\\n\";\n";

Hừm, tôi phải thừa nhận rằng có lẽ hợp lệ. Điều duy nhất nó có thể thuộc về "nhiều tên liên quan đến cùng một hằng số", nhưng tôi thực sự không có ý định từ ngữ đó để nói về trường hợp này. Tôi đã làm rõ trong câu trả lời của kernigh rằng điều này sẽ chỉ không hợp lệ nếu thực sự chỉ vào cùng một số nguyên, nhưng tôi nghĩ điều đó là không thể. Thực tế là rất nhiều điều này phụ thuộc vào hệ thống của bạn là một sự xấu hổ, nhưng cũng không phải là một phần của các quy tắc. Vì vậy, trừ khi người khác có thể phát hiện ra vấn đề ở đây, tôi sẽ phải thừa nhận rằng câu trả lời của bạn là hoàn toàn hợp lệ. ;)
Martin Ender

<?for(;;);sử dụng 9 MB bộ nhớ. Bây giờ tôi mới biết tại sao ... tôi thích hạn chế tự áp đặt số 7 của @ kernigh, tuy nhiên, nó sẽ đóng lại kẽ hở này. Ngoài ra, với giá trị của nó, đầu ra trên hệ thống của tôi là: codepad.org/wSrtJBco
primo

Mặc dù, việc chạy trình tạo sẽ tạo ra một đại diện hợp lệ, vì vậy +1 cho điều đó;) Một phiên bản chạy trên máy chủ codepad
primo

2
Xin chúc mừng, bạn đã phá vỡ thử thách. ;) ... Không thực sự ... câu trả lời này đã vượt qua thử thách thực tế phần nào, nhưng nó cũng nằm trong các quy tắc theo như tôi có thể thấy, vì vậy tôi sẽ phải thừa nhận thất bại và chấp nhận nó. :)
Martin Ender

11

Perl - 37 chữ số

use Math::Trig;
use POSIX;

print
  !0,'.',chop$=||$=,A==A,2**3,$|,++$^F,75/5/5,pi*pi%\_,4+4,a^Y,w&'?',~"\xcb",$^=~y/_//c,
  ord"\b",unpack(h,"\t").@{[c,c,c,c]},$#{[b..j]},"$^W"|'$',$^H>>log$^H,cos()- -cos,$[,
  $-=sqrt%SIG,$%=$],$+[*$=~/($)/],split('',$~).map(glob,"{,,,}{,}"),index(\L,L),
  exp(exp)<<exp,ceil(sinh acosh$^C).keys{stat$0},rindex(\R,R),($s=ssssss)=~s/s//g,
  $?=acos(--$z),$^T=pack(u,$^T.$^T.TTTT),B~~B,C<=C,length$^V,

392 byte hiện tại, (10,6 mỗi chữ số).

Đầu ra:

1.618033988749894848204586834365638117

Hạn chế tự áp đặt

Tôi đã thêm một vài hạn chế bổ sung để hạn chế việc sử dụng các tính năng ngôn ngữ sẽ tầm thường hóa vấn đề. Ví dụ, @{...}chỉ số mảng và chỉ số cuối cùng của mảng chỉ $#{...}được sử dụng một lần. Mỗi mảng sử dụng được tạo ra một cách khác nhau (so sánh [c,c,c,c], [b..j], split('',$~), map(glob,"{,,,}{,}")). Ngoài ra, không có biểu tượng hoặc bareword nào được sử dụng nhiều lần, mặc dù điều này được cho phép rõ ràng trong mô tả thử thách. Tôi nghĩ rằng đó là một ý tưởng tốt cho perl (hoặc bất kỳ ngôn ngữ nào có các biến đặc biệt chỉ int (có bất kỳ ngôn ngữ nào khác không?)), Vì nó giới hạn số lượng chuyển đổi int ẩn.


Miếng

!0                       # returns 1
'.'
chop$=||$=               # $= is 60, chop the 0, returns 6
A==A                     # returns 1 (because 0==0)
2**3                     # returns 8
$|                       # auto flush, returns 0
++$^F                    # max system filehandle pre-incremented, returns 3
75/5/5                   # returns 3
pi*pi%\_                 # pi² mod a large value, returns 9
4+4                      # returns 8
a^Y                      # bitwise 'a' xor 'Y', returns 8
w&'?'                    # bitwise 'w' and '?', returns 7
~"\xcb"                  # bitwise inversion of char 203, returns 4
$^=~y/_//c               # count non-underscores in $^, returns 9

ord"\b"                  # returns 8
unpack(h,"\t")           # unpack "\t" as a hex nibble, returns 9
@{[c,c,c,c]}             # anonymous array, returns 4 in scalar context
$#{[b..j]}               # final index of the range b..j, returns 8
"$^W"|'$'                # bitwise '0' or '$', returns 4
$^H>>log$^H              # $^H is 256, log$^H is ~5, returns 8
cos()- -cos              # cos(undef) is 1, subtract -1, returns 2
$[                       # array start index, returns 0

$-=sqrt%SIG              # set $- to sqrt(23), returns 4
$%=$]                    # set $% to the version number, returns 5
$+[*$=~/($)/]            # match end on *$ (aka *main::$), returns 8
split('',$~)             # split "STDOUT" into chars, returns 6 in scalar context
map(glob,"{,,,}{,}")     # an array of 8 empty strings, returns 8 in scalar context
index(\L,L)              # finds 'L' in 'SCALAR(...)', returns 3

exp(exp)<<exp            # 2.718281828 << 1, returns 4
ceil(sinh acosh$^C)      # ceil(2.30129...), returns 3
keys{stat$0}             # stat$0 is an array with 13 entries, which has 6 keys when
                         # interpreted as a hash, returns 6 in scalar context
rindex(\R,R)             # finds 'R' in 'SCALAR(...)' in reverse, returns 5
($s=ssssss)=~s/s//g      # replace the every 's' in 'ssssss' with nothing, returns 6

$?=acos(--$z)            # set $? to 3.14159... implicit int conversion, returns 3
$^T=pack(u,$^T.$^T.TTTT) # set $^T to "8,30P,...", returns 8
B~~B                     # returns 1 (because B represents the same thing as B)
C<=C                     # returns 1 (because 0<=0)
length$^V                # string length of $^V, returns 7

8

Python 2.7, 19 chữ số, 231 ký tự liên quan

from math import ceil, pi, trunc, gamma, sin

print ''.join(map(str,
[33-32,
chr(46),
~-7,
8>>3,
trunc(gamma(4.3)),
'x'.find('x'),
22/7,
range(4).pop(),
len('am I phi?'),
52%44,
2*4,
5|2,
ord('/'),
'\b',
5+2+2,
2<<2,
eval("5+2+2"),
ceil(pi),
'\b',
'\b',
str(sin(5))[5],
5&52]))

Câu trả lời này đã được đăng trước khi lỗ hổng backspace được đóng lại. Vì đây là một mẹo khá thông minh và không có hại cho thử thách trong trường hợp này (và vì đây là câu trả lời thực sự chỉ cho tôi lỗ hổng), nên câu trả lời này có thể vẫn như vậy - vì vậy xin đừng hạ thấp nó dựa trên điều đó, thay vì nâng cao nó cho sự thông minh. :)
Martin Ender

6

Ruby 2.1 cho 54 chữ số, 808 ký tự

#!ruby -rdate -rdigest -ropenssl -rprime -rset -rsocket
print 2/2,?.,9-3,3&5,2*4,2^2,7%4,55>>4,5+4,2<<2,-~7,5|2,2**2,(2r+2+5).to_i,(2.2+5).ceil,(55r/5-2).floor,(2.2*2).to_i,(2r*2*2).ceil,(2.2**2).floor,2.to_bn<<2,__LINE__,$<.to_i,IO::LOCK_NB,Errno::EIO::Errno,File::APPEND,'aaaaaa'.size,?a.encoding.name.sub(/\D+/,''),%w[a a a].size,%w[a b c d].to_set.size,%w[a a a].count,Socket::AF_NS,Date.jd(Date::ITALY).wday,*Digest::MD5.digest(?j).scan(/\d/),Set[?a,?b,?c].count,SignalException.new('FPE').signo,Float::ROUNDS,begin
exit false
rescue Object
$!.status
end,Process::RLIMIT_NPROC,:aaaaaaa.size,Prime.first,?/.next,{a:p,b:p,c:p}.size,STDIN.lineno,?a.crypt('at')[/\d/],{a: :a}.find_index([:a,:a]),/b/=~'aaaaaaaaab',[?a,?b].index(?b),:aaaaaaab=~/b/,?\t.ord,'aaaaaaaab'=~/b/,open(?/).pos,'aaaaab'.index(?b),?\a.bytes{|b|break b},'aaaaaaa'.rindex(?a),%w[a a].map.size

Chương trình này hoạt động với ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-openbsd]. Các hệ thống khác ngoài OpenBSD 5.5 có thể có các giá trị khác nhau cho một vài chữ số.

Giải thích

Các hạn chế của thử thách này, đặc biệt là hạn chế 6, không chính xác đối với Ruby. Vì vậy, tôi thêm các giải thích của riêng tôi:

  1. Các dấu ngoặc đơn, dấu chấm và dấu hai chấm không phải là toán tử. Các dấu ngoặc chỉ thay đổi thứ tự của các hoạt động. Dấu chấm gọi các phương thức, như trong $<.filenovà dấu hai chấm có hằng số, như trong IO::LOCK_NB. Tên của phương thức hoặc hằng là một phần của hoạt động. Bởi vì () . ::không phải là toán tử, tôi không áp dụng hạn chế 6 cho họ. Tôi có thể tái sử dụng chúng để tạo ra nhiều chữ số hơn.
  2. Một phương pháp với cách thực hiện khác nhau là một phương pháp khác. Ví dụ, Array#countEnumerable#countkhông phải là cùng một chức năng cho hạn chế 6. Cả hai phương thức hoạt động giống nhau, nhưng Array#countghi đè Enumerable#countbằng cách thực hiện khác nhau. Nếu tôi sử dụng Array#countđể tạo một chữ số, tôi có thể sử dụng Enumerable#countđể tạo một chữ số khác.
  3. Lớp # mới là một phương thức. Trong Ruby, Mutex.new, Random.new, Time.newvà vân vân tham khảo các phương pháp tương tự, Class#new. Tôi sử dụng SignalException.newđể tạo ra một chữ số. Vì hạn chế 6, tôi có thể không bao giờ sử dụng nữa Class#new.
  4. Các hằng số cho các lớp hoặc mô-đun vẫn là hằng số. Trong Ruby, tên lớp thích FloatIOlà hằng số! Tôi sử dụng IO::LOCK_NBđể tạo ra một chữ số. Vì hạn chế 6, tôi có thể không bao giờ sử dụng nữa IO. Giải thích này chỉ liên kết với Ruby và không phải các ngôn ngữ khác mà tên gói không phải là hằng số.
  5. Văn học không phải là hằng số. Mặc dù 2 là hằng số toán học (không phụ thuộc vào bất kỳ biến nào), nhưng nó không phải là hằng số trong Ruby. Tôi không áp dụng hạn chế 6 đối với chữ và tôi có thể sử dụng lại chữ 2 cho nhiều hơn một chữ số.
  6. Văn học không phải là nhà khai thác. Tôi không áp dụng hạn chế 6 cho dấu ngoặc hoặc dấu ngoặc kép tạo thành mảng, băm, biểu thức chính quy hoặc chuỗi, như trong [] {} // ''. Tôi luôn có thể sử dụng những chữ như vậy để tạo ra nhiều chữ số hơn.
  7. Hai hằng số có cùng giá trị là cùng một hằng số. File::APPENDIPSocket::LOCK_UNlà hai tên cho cùng một số 8. Hạn chế 6 nói, "không quan trọng bằng tên nào bạn đề cập đến bất kỳ tích hợp nào." Bởi vì File::APPENDIPSocket::LOCK_UNchỉ khác nhau theo tên, chúng phải là cùng một hằng số, vì vậy tôi không thể sử dụng chúng cho hai chữ số.
  8. Hai chữ số có thể không đề cập đến cùng một biến toàn cục. Điều này đóng một kẽ hở. Hạn chế 6 chỉ áp dụng cho các hàm, toán tử và hằng. Hạn chế 4 chỉ áp dụng cho chữ. $SAFElà một biến toàn cục tích hợp, không phải là hàm, toán tử, hằng, cũng không phải bằng chữ. $SAFEcó giá trị 0. Với kẽ hở, tôi có thể sử dụng lại $SAFEđể tạo mọi chữ số 0 trong chương trình. Tôi đóng lỗ hổng bằng cách giải thích hạn chế 6 để cũng hạn chế các biến toàn cục.

Bình luận

Dòng đầu tiên là #!ruby -rdate -rdigest -ropenssl -rprime -rset -rsocket. Ruby phân tích cú pháp dòng này và tải sáu phần của thư viện tiêu chuẩn của nó, như thể require 'date', require 'digest'v.v. Tôi không tính 56 ký tự này, vì hạn chế 3 miễn trừ "nhập / thư viện tiêu chuẩn".

Phần còn lại của chương trình gọi printvới một danh sách dài các đối số, để chuyển đổi chúng thành chuỗi và in chúng theo thứ tự. Các đối số là:

  1. 1từ 2/2: Division Fixnum # /
    . from ?.: chuỗi ký tự đơn
  2. 6từ 9-3: phép trừ Fixnum # -
  3. 1từ 3&5: bitwise và Fixnum # &
    • Bằng cách giải thích 5, tôi có thể sử dụng 3lại.
  4. 8từ 2*4: phép nhân Fixnum # *
  5. 0từ 2^2: bitwise độc ​​quyền-hoặc Fixnum # ^
  6. 3từ 7%4: mô-đun Fixnum #%
  7. 3từ 55>>4: dịch chuyển bên phải Fixnum # >>
  8. 9từ 5+4: thêm Fixnum # +
  9. 8từ 2<<2: dịch chuyển trái Fixnum # <<
  10. 8từ -~7: phủ định bổ sung Fixnum # - @ Fixnum # ~
    • Phép trừ Fixnum # - và phủ định Fixnum # - @ là các phương thức khác nhau.
  11. 7từ 5|2: bitwise hoặc Fixnum # |
  12. 4từ 2**2: lũy thừa Fixnum # **
  13. 9từ (2r+2+5).to_i: bổ sung hợp lý Rational # + Rational # to_i
    • Theo cách hiểu 2, Fixnum # +Rational # + là các phương thức khác nhau. Cả hai đều thêm số, nhưng chúng có cách triển khai khác nhau, bắt đầu từ các loại khác nhau cho số bên trái.
    • Nghĩa đen như 2rmới là trong Ruby 2.1. 2r+2gọi Rational # + và trả về một tỷ lệ hợp lý khác; 2r+2+5gọi lại Rational # + .
    • Ruby in hợp lý thích 2/1và nổi như thế 2.0. Để khắc phục điều này, tôi chuyển đổi sang số nguyên: to_i làm tròn về 0, trần tròn lên, sàn tròn xuống.
  14. 8từ (2.2+5).ceil: float thêm Float # + Float # ceil
    • Bằng cách giải thích 1, tôi có thể sử dụng dấu ngoặc đơn ()và chấm .lại.
  15. 9từ (55r/5-2).floor: phép chia và phép trừ hợp lý Rational # / Rational # - Rational # floor
  16. 4từ (2.2*2).to_i: phép nhân số float # * Float # to_i
  17. 8từ (2r*2*2).ceil: phép nhân hợp lý Rational # * Rational # ceil
  18. 4từ (2.2**2).floor: lũy thừa hợp lý Rational # **
  19. 8từ 2.to_bn<<2: dịch chuyển trái với số lượng lớn OpenSSL Fixnum # to_bn OpenSSL :: BN # <<
  20. 2từ __LINE__: hằng số ma thuật cho số dòng hiện tại
  21. 0từ $<.to_i: mô tả tệp của đầu vào tiêu chuẩn IO # to_i
  22. 4từ IO::LOCK_NB: cờ cho khóa tệp không chặn
    • Đây là lần đầu tiên trong số nhiều hằng số phụ thuộc vào hệ thống. OpenBSD có 4.
    • Theo cách hiểu 4, tôi có thể không sử dụng nữa IO. Theo cách hiểu 7, tôi không còn có thể sử dụng bất kỳ hằng số nào với giá trị là 4.
  23. 5từ Errno::EIO::Errno: số cho lỗi đầu vào / đầu ra
  24. 8từ File::APPEND: cờ để thêm vào một tập tin
    • Đây là một lỗ hổng xung quanh việc giải thích 4. Tôi có thể không sử dụng IO, nhưng Filethừa hưởng các hằng số từ đó IO, vì vậy File::APPENDlà một cách khác để có được IO::APPEND.
  25. 6từ 'aaaaaa'.size: độ dài của chuỗi Chuỗi # size
  26. 8từ ?a.encoding.name.sub(/\D+/,''): một phần tên của mã hóa Chuỗi # mã hóa Mã hóa # tên Chuỗi # phụ
    • Bằng cách giải thích 6, tôi có thể sử dụng lại dấu ngoặc kép.
    • Kể từ Ruby 2.0, mã hóa mặc định là UTF-8. Tôi lấy tên "UTF-8" và thay thế / \ D + / khớp "UTF-" bằng một chuỗi trống. Điều này mang lại "8".
  27. 3từ %w[a a a].size: chiều dài của mảng Array # size
  28. 4từ %w[a b c d].to_set.size: số phần tử trong tập hợp Array # to_set Đặt # size
  29. 3từ %w[a a a].count: đếm tất cả các phần tử Mảng # đếm
    • Sự khác biệt giữa mảng # kích thướcMảng # count là sau này có đối số tùy chọn để lựa chọn yếu tố nào để đếm. Tôi vượt qua không có đối số, vì vậy nó đếm tất cả các yếu tố.
  30. 6từ Socket::AF_NS: số cho gia đình địa chỉ NS
  31. 5từ Date.jd(Date::ITALY).wday: số ngày trong tuần cho Thứ Sáu ngày 15 tháng 10 năm 1582, khi Ý chuyển sang lịch Gregorian Ngày :: jd Ngày # wday
  32. 6từ *Digest::MD5.digest(?j).scan(/\d/): chữ số ASCII đầu tiên trong bản tóm tắt MD5 nhị phân của "j" Digest :: MD5 :: digest String # scan
    • Chuỗi # scan trả về một mảng của tất cả các kết quả khớp. Các *phần tử vượt qua như là đối số print. Mảng này là ["6"].
  33. 3từ Set[?a,?b,?c].count: đếm tất cả các phần tử Đặt :: [] Số đếm #
    • Theo cách hiểu 2, Array # CountEn Countable # Count là các phương thức khác nhau.
  34. 8từ SignalException.new('FPE').signo: số lớp SIGFPE # new SignalException # Signo
  35. 1từ Float::ROUNDS: chế độ làm tròn, ở đây 1 cho vòng gần nhất
  36. 1from begin(newline) exit false(newline) rescue Object(newline) $!.status(newline) end: trạng thái thoát cho thất bại
    • Đây là giá trị tương tự SystemExit.new(false).status, nhưng theo cách hiểu 3, tôi có thể không còn gọi Class # mới nữa. Thay vào đó tôi nâng và giải cứu một SystemExit.
  37. 7từ Process::RLIMIT_NPROC: số cho giới hạn tài nguyên cho số lượng quy trình cho một người dùng
  38. 7từ :aaaaaaa.size: chiều dài của biểu tượng Biểu tượng # kích thước
  39. 2từ Prime.first: số nguyên tố đầu tiên Số lượng # đầu tiên
  40. 0từ ?/.next: chuỗi tiếp theo sau "?" Chuỗi # tiếp theo
  41. 3từ {a:p,b:p,c:p}.size: độ dài của hàm băm Hash # size Chuỗi # p
  42. 0từ STDIN.lineno: số dòng hiện tại cho đầu vào tiêu chuẩn IO # lineno
    • Bằng cách giải thích 8, tôi có thể không sử dụng lại $<. Tôi sử dụng STDIN. Sự khác biệt là $<một biến toàn cục và STDINlà một hằng số. Một chương trình có thể được đặt $<thành một đầu vào khác, nhưng STDINluôn luôn là giá trị ban đầu của $<.
  43. 3từ ?a.crypt('at')[/\d/]: chữ số ASCII đầu tiên trong mật khẩu được mã hóa Chuỗi # chuỗi mật mã # []
    • Hệ thống với chức năng mã hóa () khác nhau sẽ cho kết quả khác nhau.
  44. 0từ {a: :a}.find_index([:a,:a]): chỉ mục của khóa đầu tiên: a, value: a trong hàm băm Số đếm # find_index
    • Tôi sử dụng hàm băm, không phải là mảng, vì Array # find_index là bí danh cho chỉ số Array # , mà tôi dự định sẽ sử dụng sớm.
  45. 9từ /b/=~'aaaaaaaaab': chỉ mục nơi chuỗi khớp / b / Regapi # = ~
  46. 1từ [?a,?b].index(?b): chỉ mục của "b" đầu tiên trong mảng Array # index
  47. 7từ :aaaaaaab=~/b/: chỉ mục nơi biểu tượng khớp / b / Biểu tượng # = ~
  48. 9từ ?\t.ord: Giá trị ASCII của tab "\ t" Chuỗi # ord
  49. 8từ 'aaaaaaaab'=~/b/: chỉ mục nơi chuỗi khớp / b / Chuỗi # = ~
    • Theo cách hiểu 2, Regapi # = ~String # = ~ là các phương thức khác nhau.
  50. 0từ open(?/).pos: vị trí trong tệp sau khi mở thư mục gốc "/" dưới dạng tệp Kernel # open IO # pos
  51. 5từ 'aaaaab'.index(?b): chỉ mục của "b" đầu tiên trong chuỗi String # index
  52. 7từ ?\a.bytes{|b|break b}: Giá trị ASCII của cảnh báo "\ a" Chuỗi # byte
    • Điều này hoạt động bằng cách lặp lại các byte trong "\ a", nhưng phá vỡ vòng lặp bằng cách trả về byte đầu tiên.
  53. 6từ 'aaaaaaa'.rindex(?a): chỉ mục của "a" cuối cùng trong chuỗi Chuỗi # rindex
  54. 2từ %w[a a].map.size: kích thước của bộ liệt kê ánh xạ từ mảng Array # map Enumerator # size

Ấn tượng! Hầu hết các giải thích của bạn là phù hợp với các quy tắc nào. 1. Tôi không bao giờ có ý định hạn chế các lệnh toán tử, hội thảo và truy cập truy cập, đó là lý do tại sao tôi nói các toán tử "toán học, boolean, bit-khôn ngoan và chuỗi". 2. Được bảo vệ bởi quy tắc 6. 3. Sử dụng lại ngôn ngữ mới sẽ tốt trong các ngôn ngữ khác, bởi vì đó thường là toán tử - nó không thể được sử dụng lại trên cùng một lớp vì nó gọi hàm tạo (hàm dựng sẵn). Làm thế nào là trong Ruby? Có newthực sự luôn luôn gọi cùng một imlement hay nó được ghi đè trong các lớp con? [ctd.]
Martin Ender

4. Tôi sẽ ổn nếu bạn tạo một ngoại lệ ở đó cho Ruby, nhưng cảm ơn vì sự khéo léo của bạn. ;) 5. và 6. Không họ không, đó là lý do tại sao một số quy tắc được nêu theo cách họ đang có. 7. Đó là một điểm tinh tế tốt mà tôi đã không nghĩ đến. Về mặt kỹ thuật, nếu họ không tham khảo cùng 8, sẽ tốt hơn nếu sử dụng cả hai. 8. Điểm hay, tôi đã không nghĩ về các biến tích hợp. Tôi sẽ kiểm tra xem nó có thực sự phá vỡ bất kỳ quy tắc đệ trình và sửa đổi nào khác không 6. Cảm ơn vì đã chơi công bằng! :)
Martin Ender

Tôi không thể tìm thấy bất kỳ vi phạm quy tắc nào trong câu trả lời này vì vậy tôi đã chấp nhận nó. Tuy nhiên, tôi muốn thưởng cho câu trả lời của bạn, vì đó là câu trả lời dài nhất thực sự diễn ra theo cách thử thách được dự định. Do đó, tôi sẽ đưa ra một tiền thưởng cho thử thách này. Tiền thưởng sẽ chạy trong bảy ngày mặc dù và nếu một câu trả lời đi cùng với nhịp đập của bạn theo cách "công bằng", tôi sẽ trao tiền thưởng tương ứng. (Tất nhiên, bạn có thể tự do thử và đánh bại bất kỳ ứng cử viên nào;).) Hy vọng bạn ổn với điều đó!
Martin Ender

5

Java, 21 chữ số, 276 ký tự

class C{public static void main(String[]a){System.out.print((3&5)+"."+(2|4)+Byte.BYTES+2*4+"".length()+(7-4)+~-4+(7+2)+(2<<2)+(int)Math.sqrt('@')+(2^5)+(int)Math.pow(2,2)+32%23+Byte.SIZE+('$'>>2)+Float.BYTES+Long.BYTES+Integer.BYTES+Double.BYTES+Short.BYTES+Math.round(.2));}}

class C {
  public static void main(String[] a) {
    System.out.print(
      (3&5)+       // 1
      "."+         // .
      (2|4)+       // 6
      Byte.BYTES+  // 1
      2*4+         // 8
      "".length()+ // 0
      (7-4)+       // 3
      ~-4+         // 3
      (7+2)+       // 9
      (2<<2)+      // 8
      (int)Math.sqrt('@')+  // 8
      (2^5)+       // 7
      (int)Math.pow(2,2)+   // 4
      32%32+       // 9
      Byte.SIZE    // 8

      // rest of explanation to come later today
    );
  }
}

Ha, tôi thích 7-4& -4+7, thật thông minh! :)
Martin Ender

thông minh, nhưng tôi nghĩ rằng nó vi phạm quy tắc không sử dụng lại hằng số (tích cực 7 được sử dụng trong cả hai)
sai

1
@rangu 7không phải là một hằng số mà là một nghĩa đen
Martin Ender

Vậy tại sao bạn dừng lại ở đó?
Valentin Grégoire

4

Ruby, 74 ký tự, 10 chữ số

Đó chỉ là một sự khởi đầu; Tôi phải đi vì vậy tôi sẽ cải thiện nó sau.

$><<[3-2,?.,3+3,?..size,2**3,$*.size,24/8,7%4,[*7..77][2],2*4,7.next].join

Tôi có 76 ký tự được lưu lại sau này, khi nó sẽ khó khăn hơn!


Đây là một khởi đầu tốt! Cuối cùng một câu trả lời trong tinh thần của câu hỏi. :)
Martin Ender

3

Ruby, 17 chữ số, 168 byte

$><<[-~0,'.',9-3,3/3,2**3,$.,25%22,'   '=~/$/,2+7,2<<2,"10".oct,2|5,[2,2,2,2].size,[*$....2*5].last,(2^5).succ,'a'.to_i(25).pred,'aaaa'.count('a'),eval(55.chr.next)]*''

Ung dung:

$><<[
  -~0,                # 1
  '.',                # .
  9-3,                # 6
  3/3,                # 1
  2**3,               # 8
  $.,                 # 0
  25%22,              # 3
  '   '=~/$/,         # 3
  2+7,                # 9
  2<<2,               # 8
  "#{'a'.hex}".oct,   # 8
  2|5,                # 7
  [2,2,2,2].size,     # 4
  [*$....2*5].last,   # 9
  (2^5).succ,         # 8
  'a'.to_i(25).pred,  # 9
  'aaaa'.count('a'),  # 4
  eval(55.chr.next)   # 8
]*''

Chưa bị buộc phải làm bất cứ điều gì đặc biệt thông minh, tôi có thể quay lại và thêm chữ số.


1
"Không bị buộc phải làm bất cứ điều gì đặc biệt thông minh." Vâng, tôi đã hình dung ra Ruby, Perl và các nghi phạm thông thường sẽ không có thời gian thực sự khó khăn với 15 ký tự cho mỗi chữ số, nhưng tôi muốn chừa chỗ cho những thứ như dẫn xuất C và Mathicala với các thư viện tiêu chuẩn lớn nhưng tên phức tạp hơn.
Martin Ender

"Nếu chúng thực sự chỉ là bí danh, không [bạn không thể sử dụng chúng]." succnextlà bí danh.
Doorknob

1
Cái đầu tiên được gọi trên Fixnum, cái thứ hai trên String, vì vậy tôi không nghĩ chúng được tính là cùng một phương thức.
lịch sử

Ah, điểm tốt. Tuy nhiên, câu hỏi cũng cho biết "Bạn không được đề cập đến bất kỳ ... hằng số nào bạn đã sử dụng trong mã tạo ra một chữ số trước đó" và bạn sử dụng $.hai lần. Mặc dù, phải yêu $....: D
Doorknob

2

Golf , 17 chữ số

Một nỗ lực đơn giản. Golfscript có thể có rất nhiều chữ cái một chữ cái không chữ và số, nhưng nó không có nhiều chữ dựng sẵn nói chung!

".",                         # 1: string length (separate from array length)
'.'    
3 3+                         # 6: addition
''[49]+                      # 1: string concatenation
-9~                          # 8: bitwise not
2!                           # 0: boolean not
7 4%                         # 3: modulus
4(                           # 3: decrement
7))                          # 9: increment
257 2/2/2/2/2/               # 8: division
4 2*                         # 8: multiplication
22 5- 5- 5-                  # 7: subtraction
2 2?                         # 4: power
[2 5] 2 base                 # 9: base conversion
[2 2 2 2 2 2 2 2],           # 8: array length (separate from str length)
[2 2 2 2 2 2 2 2 2 5]5?      # 9: array.find()
2 2+                         # 4: addition
"2 2*2*"~                    # 8: eval

2
Tôi nghĩ bạn có thể tiếp tục với 5,)\; # range, right uncons, flip, and pop.
Peter Taylor

1

Bash, 5 chữ số trong 65 ký tự

Tôi sẽ cập nhật điều này sớm! Hiện tại, nó chỉ in 1.6180và không chứa bất kỳ chữ số nào.

false
tr -d ' '<<<$?.`wc -c<<<abcde``nl<<<' '``kill -l FPE`$(())

Giải trình

Các phương pháp sau được sử dụng để tạo các chữ số:

1: trạng thái thoát của false

6: độ dài chuỗi

1: nllạm dụng

8: killsố tín hiệu

0: giá trị số của biểu thức trống


1

Toán học 9 8 chữ số, trong 86 83 78 ký tự.

10`8FromDigits@#/10^Length@#&@{a/a,3!,-I I,2π/(45°),#&''[],Prime@2,Sqrt@9,4+5}

Đầu ra:

1.6180339

Ah, tôi biết tôi đã phạm sai lầm ở đâu đó. Ký hiệuPrefix dường như không hoạt động trong trường hợp này. Sử dụng unicode Pi và Degree, dường như vẫn hoạt động.
Kiểm đếm

Vâng, # & '' [] sẽ tạo ra lỗi từ thiếu đầu vào, trong khi ở dạng này, nó bỏ qua rằng nó không có đầu vào. Vẫn không tha cho tôi khỏi việc không sử dụng nó ở nơi nó hoạt động.
Kiểm đếm

1
Cám ơn. Cá nhân tôi rất thích # & '' [] (Về cơ bản là đạo hàm thứ hai của f [x] = x
Tally

(Làm sạch các ý kiến.) Đó khá tốt đẹp, nhưng bạn có thể có thể tiết kiệm một nhân vật, bằng cách thay thế #bằng một chữ số cho phép, và thả một trong những dấu gạch ngang.
Martin Ender

Hình theo cách này tôi có thể lưu chữ số đó để sử dụng trong tương lai.
Kiểm đếm

1

Julia - 23 chữ số trong 345 ký tự (chính xác 15 chữ số)

print(div(2,2),'.','/'+7,length(" "),2^3,size([])[end],isqrt(9),int(cbrt(27)),54-45,'h'$'P',[2:22][7],endof("2222222"),count(isodd,[5,5,5,5]),search("Hello man",'n'),nextpow2(5),rsearch("Love boat",'t'),sizeof('й'),("I"summary(b"H"))[22],iceil(float(pi)),iround(cosh(e)),ifloor(exp(catalan)),cmp(5,5),itrunc(5sin(one(Int))),uint(erfcx(-ones())))

Đầu ra: 1.6180339887498948482045

Tôi đã giải thích các ký tự và chuỗi có thể sử dụng được, miễn là tôi không sử dụng lại một ký tự hoặc chuỗi cụ thể (các ký tự trong chuỗi có thể được sử dụng lại, miễn là chuỗi đó không được sử dụng); tuy nhiên, tôi không cho phép bản thân sử dụng giá trị int của một ký tự trực tiếp. Có một ký tự không phải ASCII (й).

Theo cách dễ đọc hơn (không phải mã thực tế):

1> div(2,2)
.> '.'
6> '/'+7
1> length(" ")
8> 2^3
0> size([])[end]
3> isqrt(9)
3> int(cbrt(27))
9> 54-45
8> 'h'$'P'
8> [2:22][7]
7> endof("2222222")
4> count(isodd,[5,5,5,5])
9> search("Hello man",'n')
8> nextpow2(5)
9> rsearch("Love boat",'t')
4> sizeof('й')
8> ("I"summary(b"H"))[22]
4> iceil(float(pi))
8> iround(cosh(e))
2> ifloor(exp(catalan))
0> cmp(5,5)
4> itrunc(5sin(one(Int)))
5> uint(erfcx(-ones()))

0

C ++ 12,4 ký tự trên mỗi dòng, là 14 ký tự trên mỗi dòng cho mỗi chữ số

Đã sửa lỗi tôi sử dụng lại các toán tử.

#include <iostream>
#include <math.h>
#define S std::string
#define C(x) std::cout<<x
int main()
{
C(cos(0));
C(char(46));
C('j'%'d');
C('\0'+3-2);
C(sqrt('@'));
C(log(1));
C('c'/'!');
S s("xyz");
C(s.size());
return 0;
}

Không chắc chắn nếu sử dụng ký tự như thế này được tính là char charals hay không? Nếu mã này được chấp nhận, nó có thể được tiếp tục mãi mãi và nợ char sẽ được trả lại.

#include <iostream>
#define C(x) std::cout<<x
int main()
{
C('b'-'a');//1
C(char(46));//.
C('g'-'a');//6
C('b'-'a');//1
C('i'-'a');//8
C('a'-'a');//0
C('d'-'a');//3
C('d'-'a');//3
C('j'-'a');//9
//etc
return 0;
}

Các chữ đều ổn (vì chúng không tương đương với các số có một chữ số), nhưng bạn tiếp tục sử dụng lại -toán tử. Ngoài ra, tôi thích cách bạn đếm nhận xét cho độ dài dòng. : D
Martin Ender

Vâng, điều đó có vẻ tốt hơn nhiều, nhưng bạn đang sử dụng 1để sản xuất một 0(không được phép, bởi vì 1xuất hiện sớm hơn trong tỷ lệ vàng). Ngoài ra, bạn cần phải đếm #define S(không phải cái khác), vì nó không bao gồm mà chỉ xác định một bí danh tốc ký.
Martin Ender
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.