Chúc mừng ngày tròn Pi


25

Để kỷ niệm Ngày tròn Pi, bạn phải tận dụng ngày hôm nay để thực hiện một chương trình lấy đường kính của vòng tròn và đưa ra chu vi của nó bằng cách nhân đường kính với 3,1416, trong đó phải lấy 3,1416 vào ngày hôm nay.

Input 3
Output 9.4248
etc.

Không lấy ngày làm đầu vào. Bạn không phải sử dụng tất cả các thành phần của ngày nhưng các chữ số của pi phải đến từ việc định dạng một đối tượng Ngày hoặc sử dụng một đối tượng ngày để có được nó. Các câu trả lời cho đến nay nhìn tốt.

Không chắc chắn những gì khác để chỉ định. Tất cả các câu trả lời cho đến nay đáp ứng những gì tôi đang mong đợi.

Hạn chế của tôi là bạn phải sử dụng các thành phần của ngày để đưa ra Pi. Tất nhiên bạn có thể sử dụng các thành phần, nhân với 0 rồi thêm 3.1416, nhưng điều đó thật nhàm chán và lãng phí những ký tự quý giá!

Mã ngắn nhất sẽ thắng!


61
14/3/16 có gì đặc biệt?
Neil

5
xác định sử dụng ngày hôm nay . Tôi có thể lấy ngày tháng dưới dạng số, chia cho chính nó và nhân với hằng số được xác định trước chopi
Luis Mendo

7
@Neil: Bởi vì 3/14/16 và 31/4/16 không phải là ngày thực tế hợp lệ ở định dạng D / M / Y. Không có 14 tháng và tháng tư chỉ có 30 ngày. Cá nhân tôi nghĩ rằng chúng ta nên đợi đến ngày 6/11/2016 (M / D / Y) hoặc có thể là 6/2/83 (D / M / Y), nhưng đó là một cuộc chiến thần thánh hoàn toàn khác.
Darrel Hoffman

8
@DarrelHoffman Bạn là một người đàn ông Tau tôi thấy.
jmasterx

16
Đáng buồn thay, ngày PI duy nhất của nó trong khu vực văn hóa Hoa Kỳ. Người châu Âu, với thứ tự ngày tháng nhạy cảm từ ngữ ngớ ngẩn của họ, không có được ngày PI hàng năm. Hãy dành một suy nghĩ buồn cho họ, khi bạn đang ăn pi (e) hôm nay.
TED

Câu trả lời:


8

05AB1E, 16 13 byte

žfžežg¦¦J*4°/

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

Thật không may, một lỗi với float làm cho nó dài hơn một byte: /

Cảm ơn Adnan vì đã chơi golf 3 byte.

Giải trình

žfžežg¦¦J*4°/
žfžežg         push month day year
      ¦¦       slice off the first two chars from the year (2016 -> 16)
        J      join them together into a number
         *     multiply by input
          4°/  divide by 1e4

¦¦thay vì 2000-ngắn hơn ba byte;)
Adnan

11
+1 žfžežgnghe giống như một từ tiếng Séc hay :)
yo '

Trong UTF-8, tổng số này là 19 byte.
OldBunny2800

3
@ OldBunny2800 05AB1E sử dụng CP1252 để mã hóa.
một spaghetto

Lỗi với phao?
Máy

19

C, 32 byte

#define f(d)d*time(0)/464083315.

Nếu mất độ chính xác hơn một chút là ổn, tôi có thể giảm xuống còn khoảng 29 byte vẫn chính xác đến 4 chữ số sau số thập phân (tính đến thời điểm đăng bài này):

#define f(d)d*time(0)/46408e4

#include<time.h>?
con mèo

Ngoài ra, mã thực thi ở đâu? đây chỉ là thứ để bộ tiền xử lý sao chép / dán; một đoạn Chúng tôi thích triển khai runnable ở đây.
con mèo

3
@tac hầu hết các trình biên dịch C không yêu cầu bạn phải #includetiêu đề thư viện chuẩn. Bao gồm chúng một cách thủ công hầu như luôn là một ý tưởng tốt, nhưng bỏ qua chúng làm cho việc chơi golf trong C dễ dàng hơn rất nhiều.
Josh

12
@tac câu trả lời hành xử chủ yếu giống như một chức năng. Một số câu trả lời ở đây là các chức năng độc lập là tốt. Tôi không thấy điểm trong việc cung cấp một mainhàm mẫu để giải thích cách gọi macro đối số duy nhất này.
Josh

1
@tac Tôi nghĩ rằng các quy tắc [code-golf] tiêu chuẩn là trừ khi các chức năng bị cấm là ok.
Mindwin

14

AppleScript, 122 120 byte

set a to current date
(display dialog""default answer"")'s text returned*(month of a+day of a*.01+year of a*1e-4 mod.01)

Biến a

Biến a là một đối tượng ngày. Tôi gọi tất cả các thông tin ngày của tôi ra khỏi nó.

Tháng, ngày và năm

Các cuộc gọi tháng, ngày và năm thực sự trả về một đối tượng thường trả về một chuỗi. Để sử dụng đúng như một số, tôi đã bao quanh nó ở cả hai phía với các phép toán để tự động chuyển nó thành một số.

1e-4

1e-4là một byte ngắn hơn .0001.

mod.01

.hoạt động như một dấu phân tách cho AppleScript tự động sửa. Bằng cách sử dụng này, tôi có thể sử dụng modulo và vẫn giữ cho nó một byte cho riêng mình.

Không có báo cáo / nhật ký trả lại

Giá trị cuối cùng được tính tự động được trả về bởi chương trình. Tôi xuất số được tính thông qua hộp trả về.

Và đây là một gif của nó đang chạy!

ngày gif


8
Quên Java, này đã có được những tiết ngôn ngữ nhất
Downgoat

@Downgoat Tôi đoán rằng nó được cho là "có thể đọc được như tiếng Anh" hoặc một cái gì đó ... chúng tôi sử dụng nó một chút trong một công việc của mình và tôi thực sự không thích bất cứ khi nào tôi phải thay đổi các tập lệnh như vậy.
Chris Cirefice 15/03/2016

@ChrisCirefice Vâng, không - ngôn ngữ này có một số phần gây phiền nhiễu cho nó. tức là khối lượng hệ thống âm lượng.
Addison Crump

13

Mathicala + coreutils, 20 byte

<<"!date +%m.%d%y"#&

May mắn thay, Mathicala diễn giải đầu ra của một lệnh bên ngoài dưới dạng một biểu thức. Trong trường hợp này, đầu ra là một float hợp lệ, do đó phép nhân với đối số #hàm được ngụ ý.


Đó là sự kết hợp mà tôi không biết đã tồn tại.
Máy

12

Lua, 30 27 byte

print(...*os.date"%m.%d%y")

Nhân đối số dòng lệnh đầu tiên với ngày hiện tại ở định dạng mm.ddyy, thực tế 03.1416.


9

Bash + bc, 25 20 byte

date +%m.%d%y\*$1|bc

Nhờ manatwork để tiết kiệm năm byte.

Sử dụng:

$ ./pi-round.sh 3
9.4248

Ký hiệu chuỗi ở đây quá dài:date +%m.%d%y\*$1|bc
manatwork 14/03/2016

@manatwork bạn đúng rồi! Tôi đã chơi xung quanh với chính mình nhưng không thể tìm ra cách kết hợp nó. Cảm ơn!
andlrc

6

PowerShell v2 +, 46 28 25 byte

$args[0]*(Date -F "M.dy")

Khá đơn giản. Lấy đầu vào $args[0]và nhân nó theo ngày được định dạng làM.dy ( Get-ngụ ý). Lưu ý rằng điều này có thể mất nhiều thời gian để chạy trên v2 vì nó lặp lại các thay thế có thể cho Date(ví dụ: kiểm tra %PATH%biến môi trường của bạn , v.v.) trước khi giải quyết Get-Date.


Bạn có thể cắt không gian sau -f?
chiến binh 15/03/2016

1
@briantist Đáng buồn thay, không phải ở đây. Chúng tôi đang lạm dụng nhận dạng mẫu của PowerShell, vì cờ thực tế là -Format. Với các cờ như thế này, bạn chỉ cần rõ ràng (ví dụ: nếu bạn có -Debug-Delimiterlà tùy chọn tiềm năng, bạn sẽ cần ít nhất ba chữ cái để phân biệt). Xóa khoảng trắng có nghĩa là PowerShell cố phân tích cờ -F"M.dy"nhưng không thể tìm thấy đối số phù hợp và do đó sẽ gây ra lỗi.
admBorkBork 15/03/2016

ahhh tôi thấy nó bây giờ Đó là những gì tôi nhận được khi đọc nó trên một chuyến tàu sau một ngày dài. Tôi đã giải thích nó như là -fnhà điều hành. Làm cho ý nghĩa tổng thể bây giờ.
nghĩa anh hùng

6

R 3.2.4, 55 51 47 byte

chỉnh sửa Tôi nhận ra tôi có thể sử dụng scancảm ơn @FryAmTheEggMan. Giảm 4 byte nhờ @MickyT.

scan()*as.numeric(format(Sys.Date(),'%m.%d%y'))

Nỗ lực đầu tiên tại một sân golf. Chúc mừng ngày pi!


1
Chào mừng bạn đến với PPCG :) Tôi không phải là lập trình viên R, nhưng bạn không cần cung cấp một hàm được đặt tên, chỉ là một biểu thức đánh giá một hàm. Vì vậy, tôi khá chắc chắn rằng bạn có thể thả f=.
FryAmTheEggman 14/03/2016

2
Bạn có thể đi xa hơn và làmscan()*as.numeric(format(Sys.Date(),'%m.%d%y'))
MickyT 14/03/2016

2
as.doublethay vì as.numericlưu một byte bổ sung
Flounderer

5

GNU Awk, 23 ký tự

$0*=strftime("%m.%d%y")

Chạy mẫu:

bash-4.3$ awk '$0*=strftime("%m.%d%y")' <<< 3
9.4248

5

Bình thường, 19 byte

*Qvs[.d4\..d5>2`.d3

Hãy thử nó ở đây!
Tất nhiên chỉ hoạt động vào năm 2016-2014.

Giải trình

* Qvs [.d4 \ .. d5> 2`.d3 # Q = đầu vào

     .d4 # tháng hiện tại
        \. # chấm giữa tháng và ngày
          .d5 # ngày hiện tại của tháng
             > 2`.d3 # 2 chữ số cuối của năm
   s [# concat mọi thứ thành một chuỗi
  v # eval -> chuyển đổi để nổi
* Q # nhân với đầu vào để có chu vi

5

PHP, 45 26 25 24 byte

Sử dụng mã hóa Windows-1252

<?=$argv[1]*date(~‘Ñ•†);

Chạy như thế này:

echo '<?=$argv[1]*date(~‘Ñ•†);' | php -- 3
  • Đã lưu 19 byte bằng cách sử dụng date()thay vìDateTime::format
  • Đã lưu một byte bằng cách sử dụng thẻ echo
  • Đã lưu một byte bằng cách sử dụng mã hóa ISO-8859 và phủ định chuỗi định dạng, do đó không cần dấu ngoặc kép. Có thể làm rối thiết bị đầu cuối của bạn một chút khi chạy nó từ CLI, nhưng hoạt động.

Nếu bạn giả sử register_globals là true, bạn có thể sử dụng $nthông qua /?n=3trong url.
Martijn

@Martijn Điều đó yêu cầu PHP 4.1 hoặc cài đặt nó bằng php.initệp. aross đã nói trước đó muốn tránh xa phương pháp đó.
Ismael Miguel

4

Python 2, 58 ký tự

import time
print float(time.strftime("%m.%d%y"))*input()

Thử nó!

Giải trình:

import time                                   # Import time time module
print                                         # Print the following
      float(                                  # Cast to float
            time.strftime("%m.%d%y"))         # Format the time as MM.DDYY
                                     *input() # Multiply by input

4

JavaScript, 41 39 ký tự

Điều này sử dụng một phương pháp độc quyền của Firefox .

d=>new Date().toLocaleFormat`%m.%d%y`*d

Nhờ vào:

Chạy mẫu (Bảng điều khiển Firefox Web):

> (d=>new Date().toLocaleFormat`%m.%d%y`*d)(3)
9.4248

Lưu ý: điều này sẽ thất bại trong Bảng điều khiển Firebird. Có vẻ như Fireorms thực hiện một số mở rộng trên chuỗi mẫu, chuyển đổi `%m.%d%y`thành `%__fb_scopedVars(m).d%y`trước khi chuyển nó vào mã.


1
-2 byte:d=>new Date().toLocaleFormat`%m.%d%y`*d
Ismael Miguel

Oh. [facepalm] Không biết tại sao, tôi thường quên thủ thuật đó. Mặc dù tôi sử dụng các chuỗi mẫu thường xuyên.
manatwork 15/03/2016

Tôi biết. Tôi thực sự không nhận được một trong hai. Những gì tôi đang cố gắng để có được là một cách để loại bỏ điều đó newtừ đó.
Ismael Miguel

Tôi đã thử nó trên Firefox và nó hoạt động tốt. Tôi sao chép từ bảng điều khiển. Vì tôi đã thay thế ('...')bằng 2 backticks, đó là 2 byte.
Ismael Miguel


2

Toán học, 54

.0001FromDigits[Now@{"Month","Day","YearShort"},100]#&

2

Vitsy + coreutils, 19 byte

'y%d%.m%+ etad',W*N

Giải trình:

'y%d%.m%+ etad',W*N
'y%d%.m%+ etad'       Push 'date +%m.%d%y' to the stack.
               ,      Execute as shell.
                W     Grab input from STDIN and eval it.
                 *    Multiply the top two items
                  N   Output as a number.

Không thể chạy trong chế độ an toàn, vì điều này sử dụng phương thức exec của Runtime.


2

SpecBAS , 39 byte

1 INPUT n: ?n*VAL DATE$(TIME,"mm.ddyy")

Không có gì khác thường. Định dạng ngày dưới dạng một chuỗi sau đó nhân đầu vào với VAL(giá trị) của chuỗi đó.


Phiên dịch / trình biên dịch liên kết?
con mèo


Tôi đã chỉnh sửa liên kết vào câu trả lời của bạn
mèo

2

Oracle 11g, 50 49 byte

SELECT &n*to_char(sysdate,'MM.DDYY')FROM dual;

một byte ít hơn, nhờ @MickyT


bạn có thể thả khoảng trống trướcFROM
MickyT


2

Google Sheets, 13 byte

Byte được tính bằng một byte cho mỗi ký tự, 0 byte cho mỗi ô trừ ô nhập được chỉ định, hai byte. Dấu bằng để bắt đầu một công thức không được tính. (Tôi không biết đây có phải là tiêu chuẩn không, vui lòng sửa lại cho tôi nếu tôi sai.)

Chạy đoạn mã để xem mã.

table {
  empty-cells: show;
}
table,
th,
td {
  border: 1px solid black;
}
<table border="1">
  <tr>
    <th></th>
    <th>1</th>
    <th>2</th>
    <th>3</th>
  </tr>
  <tr>
    <td>A</td>
    <td>&lt;input></td>
    <td style="text-align:right">3.1416</td>
    <td style="font-family:'Ubuntu Mono',monospace">=<span style="color:rgb(257,142,29)">A1</span>*<span style="color:rgb(126,55,148)">A2</span>
    </td>
  </tr>
</table>

Điều này hoạt động vì bạn có thể xác định định dạng ngày của riêng mình trong Google Sheets. Tôi đã làm nó để nó là như vậy <month>.<day><year>.


Bạn có thể muốn hỏi về meta về hệ thống tính điểm này. ; P
Addison Crump

Sẽ làm khi tôi có thời gian (có thể tối nay ở Maryland)
OldBunny2800

2

Pyke , 16 15 byte, mã hóa ASCII

C867wä%J"bT4^/*

Giải trình:

C867            - b,c,d = year, day, month
    wä          - a = base_96("ä") - 100
      %         - a = a%b
       J"       - a = "".join([a,c,d])
         b      - b = base(a, 10)
          T4^   - a = 10^4
             /  - a = a/b
              * - imp_print(a*eval_or_not(input))

hoặc 11 byte (không cạnh tranh), (thêm chuỗi đơn, năm 2 chữ số, tổng hợp chuỗi)

C856\.R3sb*

Giải trình:

C856        - a,b,c = 2d_year, day, month
    \.      - d = "."
      R3    - a,b,c = b,c,a
        s   - a = sum(a,b,c)
         b  - a = base(a, 10)
          * - imp_print(a*eval_or_not(input))

Tôi đoán đây là một Pyke khác với pyke.sourceforge.net ? Bạn có thể gửi một liên kết đến thông số ngôn ngữ?
Robert Fraser


Chỉ cần tự hỏi, Pyke sử dụng mã hóa gì? Nếu đó là UTF-8, thì đây là 16 byte.
OldBunny2800

1
@ OldBunny2800 Không thành vấn đề; trong trường hợp này, nó sử dụng ascii cũ tốt vì tất cả các điểm mã đều dưới 255. Theo meta.codegolf.stackexchange.com/a/5879/32686 , câu trả lời có thể xác định mã hóa của riêng nó miễn phí
Blue

1

JavaScript ES6, 68 66 byte

Đã lưu 2 byte nhờ dev-null!

x=>x*((a=new Date).getMonth()+1+"."+a.getDate()+(a.getYear()-100))

Chức năng ẩn danh. Một số cách sử dụng:

f(1)    == 3.1416
f(5)    == 15.708
f(f(2)) == 19.73930112

1
Bạn nên thử sử dụngwith
Ismael Miguel

1

Tcl / Tk, 58 byte

puts [expr {[gets stdin]*[clock f [clock se] -f %N.%d%g]}]

(Đó là một chương trình hoàn chỉnh Nếu bạn muốn ăn gian và loại bỏ các rõ ràng. putsTuyên bố sau đó nó chỉ 51 byte - bạn sẽ phải bắt đầu tclsh và gõ / dán sau nhập trực tiếp, mặc dù :)

expr {[gets stdin]*[clock f [clock se] -f %N.%d%g]}

1

Java 114 byte

public double p(double d){
  return (d*Double.parseDouble(new SimpleDateFormat("MM.ddyy").format(new Date())));
}

96 byte:float p(float d){return d*Float.parseFloat(new SimpleDateFormat("MM.ddyy").format(new Date()));}
Addison Crump

1

Vợt, 112 ký tự

(define d(seconds->date(current-seconds)))(*(read)(+(date-month d)(*(date-day d).01)(*(-(date-year d)2e3)1e-4)))

Đọc số từ đầu vào trong cú pháp đọc tiêu chuẩn.


1

TI-84 Cơ bản, 30 byte

Hoạt động trên máy tính TI-83/84; E là mã thông báo khoa học và ~ là mã thông báo tiêu cực.

Prompt D:getDate:D(Ans(2)+E~4Ans(1)-.2+.01Ans(3

Trường hợp thử nghiệm

D=?3
          9.4248



1

TI-BASIC, 16 13 9 byte

Xround(π,1+min(getDate

Chúng tôi làm tròn πđến một số vị trí thập phân bằng với mức tối thiểu {month,day,year}và sau đó nhân nó với đầu vào.

Đây là một hàm lấy đầu vào thông qua X. Lưu trữ nó vào một trong các biến Y, ví dụ Y1, sau đó gọi như Y1([number])trên màn hình chính.


Dường như có một số bất đồng rằng việc đưa đầu vào qua Ansđược cho phép.
admBorkBork 15/03/2016

Làm thế nào đây chỉ có 13 byte? Không tính Đầu vào A, tôi đếm 22 ký tự.
OldBunny2800

1
@ OldBunny2800 TI-BASIC là mã thông báo, mỗi nguyên tử được biểu diễn dưới dạng một hoặc hai byte.
Adam

@ OldBunny2800 Trang mã ở đây .
lirtosiast

1

APL , 19 byte

⎕×0.01⊥⌽⍎2⌽8↑2↓⍕⎕TS

⎕TS2016 3 14 12 34 56 789tức ngày 14 tháng 3 thứ năm 2016 ngay trước 12:35
làm thành chuỗi, tức là '2016 3 14 12 34 56 789'
8↑2↓thả đầu tiên hai ( '20') sau đó đi tới tám ( '16 3 14 ')
2⌽xoay hai nhân vật, cho ' 3 14 16'
làm vào số ( 3 14 16)
đảo ngược danh sách, đưa ra 16 14 3
0.01⊥đánh giá trong cơ sở ¹/₁₀₀ , = 16 × 0,01² + 15 × 0,01¹ + 3 × 0,01⁰ = 0,0016 + 0,15 + 3 = 3,1416
⎕×nhân với đầu vào

hoặc là

⎕×1E¯4⊥⌽⍎2⌽7↑2↓⍕⎕TS

⎕TSđược 2016 3 14 12 34 56 789, tức là ngày 14 tháng 3 thứ năm 2016 ngay trước 12:35
làm thành chuỗi, tức là '2016 3 14 12 34 56 789'
7↑2↓thả đầu tiên hai ( '20') sau đó đi tới bảy ( '16 3 14')
2⌽xoay hai nhân vật, cho ' 3 1416'
làm vào số ( 3 1416)
đảo ngược danh sách, đưa ra 1416 3
1E¯4⊥đánh giá trong cơ sở ¹/ ₁₀₀₀₀, = 1416 × 0,01¹ + 3 × 0,01⁰ = 0,1416 + 3 = 3,1416
⎕×nhân với đầu vào


Cái này hoạt động ra sao?
OldBunny2800

1
@ OldBunny2800 Rõ ràng?
Adám

Vâng, cảm ơn bạn, nhưng trong UTF-8, đây là 38 byte.
OldBunny2800


1
@ OldBunny2800 APL sử dụng trang mã riêng - mỗi ký tự này là một byte. (Điều này là trước khi ASCII nhớ bạn ...)
một spaghetto
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.