Selamat Hari Pi Bulat


25

Untuk merayakan Rounded Pi Day, Anda harus memanfaatkan tanggal hari ini untuk membuat program yang mengambil diameter lingkaran dan menampilkan kelilingnya dengan mengalikan diameter dengan 3,1416, di mana 3,1416 harus diperoleh dengan menggunakan tanggal hari ini.

Input 3
Output 9.4248
etc.

Tidak menganggap tanggal sebagai input. Anda tidak harus menggunakan semua komponen tanggal tetapi digit pi harus berasal dari memformat objek Date atau menggunakan objek date untuk mendapatkannya. Jawabannya sejauh ini terlihat bagus.

Tidak yakin apa lagi yang harus ditentukan. Semua jawaban sejauh ini memenuhi apa yang saya harapkan.

Kendala saya adalah bahwa Anda harus menggunakan komponen tanggal untuk membuat Pi. Anda tentu saja dapat menggunakan komponen, kalikan dengan 0 lalu tambahkan 3,1416, tapi itu membosankan dan membuang-buang karakter berharga!

Kode terpendek menang!


61
Apa yang istimewa dari 14/3/16?
Neil

5
tentukan menggunakan tanggal hari ini . Saya bisa mendapatkan tanggal sebagai angka, membagi dengan sendirinya dan dikalikan dengan konstanta yang telah ditentukan sebelumnya untukpi
Luis Mendo

7
@Neil: Karena 3/14/16 dan 31/4/16 bukan tanggal aktual yang valid dalam format D / M / Y. Tidak ada 14 bulan, dan April hanya punya 30 hari. Saya pribadi berpikir kita harus menunggu sampai 6/28/32 (M / D / Y) atau mungkin 6/2/83 (D / M / Y), tapi itu perang suci lainnya.
Darrel Hoffman

8
@DarrelHoffman Anda seorang pria Tau saya lihat.
jmasterx

16
Sayangnya, ini satu-satunya hari PI di wilayah budaya AS. Orang Eropa, dengan pemesanan tanggal yang masuk akal secara leksigrafi yang masuk akal, tidak mendapatkan hari PI tahunan. Jangan khawatirkan mereka, karena Anda makan pi (e) hari ini.
TED

Jawaban:


8

05AB1E, 16 13 byte

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

Cobalah online.

Sayangnya bug dengan floats membuat byte ini lebih lama: /

Terima kasih kepada Adnan karena bermain golf 3 byte.

Penjelasan

ž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

¦¦bukannya 2000-tiga byte lebih pendek;)
Adnan

11
+1 žfžežgterdengar seperti kata bahasa Ceko yang bagus :)
yo '

Dalam UTF-8, ini total 19 byte.
OldBunny2800

3
@ OldBunny2800 05AB1E menggunakan CP1252 untuk penyandian.
spaghetto

Bug dengan pelampung?
CalculatorFeline

19

C, 32 byte

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

Jika kehilangan sedikit akurasi lebih baik, saya bisa turun menjadi sekitar 29 byte yang masih akurat hingga 4 digit melewati desimal (pada saat posting ini):

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

#include<time.h>?
kucing

Juga, di mana kode yang dapat dieksekusi? ini hanya sesuatu untuk preprocessor untuk menyalin / menempel; potongan. Kami menyukai implementasi yang dapat dijalankan di sini.
kucing

3
@tac, sebagian besar kompiler C tidak mengharuskan Anda menggunakan #includeheader perpustakaan standar. Memasukkannya secara manual hampir selalu merupakan ide yang baik, tetapi menghilangkannya membuat kode golf di C jauh lebih mudah.
Josh

12
@tac jawabannya berperilaku sebagian besar sama dengan fungsi. Beberapa jawaban di sini adalah fungsi mandiri juga. Saya tidak melihat titik dalam menyediakan mainfungsi sampel untuk menunjukkan bagaimana memanggil argumen tunggal makro ini.
Josh

1
@tac Saya pikir aturan [kode-golf] standar adalah bahwa kecuali fungsi terlarang 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)

Variabel a

Variabel a adalah objek tanggal. Saya membatalkan semua informasi kencan saya.

Bulan, hari, dan tahun

Panggilan bulan, hari, dan tahun sebenarnya mengembalikan objek yang biasanya mengembalikan string. Untuk menggunakannya dengan benar sebagai angka, saya telah mengelilinginya di kedua sisi dengan operasi matematika untuk secara otomatis melemparkannya ke angka.

1e-4

1e-4byte lebih pendek dari .0001.

mod.01

.bertindak sebagai pemisah ke AppleScript koreksi otomatis. Dengan menggunakan ini, saya dapat menggunakan modulo dan masih menyimpannya byte untuk saya sendiri.

Tidak ada pernyataan kembali / log

Nilai terakhir yang dihitung secara otomatis dikembalikan oleh program. Saya menampilkan nomor yang dihitung melalui kotak kembali.

Dan ini dia gif!

hari pi gif


8
Lupakan Java, ini harus menjadi bahasa yang paling verbose
Downgoat

@Downgoat saya kira itu seharusnya "dapat dibaca seperti bahasa Inggris" atau sesuatu ... kami menggunakannya sedikit di salah satu pekerjaan saya dan saya sangat tidak suka setiap kali saya harus membuat perubahan pada skrip tersebut.
Chris Cirefice

@ ChrisCirefice Ya, tidak - bahasa ini memiliki beberapa bagian yang mengganggu. yaitu volume sistem volume.
Addison Crump

13

Mathematica + coreutils, 20 byte

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

Untungnya, Mathematica menginterpretasikan output dari perintah eksternal sebagai ekspresi. Dalam hal ini outputnya adalah float yang valid, sehingga perkalian dengan argumen fungsi #tersirat.


Itu kombinasi yang saya tidak tahu ada.
CalculatorFeline

12

Lua, 30 27 Bytes

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

Lipat gandakan argumen baris perintah pertama dengan tanggal saat ini dalam format mm.ddyy, yang sebenarnya 03.1416.


9

Bash + bc, 25 20 byte

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

Berkat manatwork karena telah menghemat lima byte.

Pemakaian:

$ ./pi-round.sh 3
9.4248

Notasi di sini-string sangat panjang:date +%m.%d%y\*$1|bc
manatwork

@manatwork kamu benar! Saya bermain-main dengan yang sama tetapi saya tidak tahu cara menggabungkannya. Terima kasih!
andlrc

6

PowerShell v2 +, 46 28 25 byte

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

Cukup mudah. Mengambil input $args[0]dan mengalikannya dengan tanggal diformat sebagaiM.dy (yang Get-tersirat). Perhatikan bahwa ini mungkin membutuhkan waktu lama untuk dijalankan pada v2 karena ia dapat mengganti kemungkinan Date(misalnya, memeriksa %PATH%variabel lingkungan Anda , dll.) Sebelum memutuskan Get-Date.


Bisakah Anda memotong ruang setelah -f?
briantist

1
@ Pakar Sedih, tidak di sini. Kami menyalahgunakan pengenalan pola PowerShell, karena bendera yang sebenarnya adalah -Format. Dengan flag seperti ini, Anda hanya perlu tidak ambigu (misalnya, jika Anda memiliki -Debugdan -Delimitersebagai opsi potensial, Anda memerlukan setidaknya tiga huruf untuk membedakan). Menghapus ruang berarti PowerShell mencoba mengurai bendera -F"M.dy"tetapi tidak dapat menemukan argumen yang cocok, dan karenanya menimbulkan kesalahan.
AdmBorkBork

ahhh aku melihatnya sekarang. Itulah yang saya dapatkan untuk membaca ini di kereta setelah hari yang panjang. Saya menafsirkannya sebagai -foperator. Masuk akal total sekarang.
briantist

6

R 3.2.4, 55 51 47 byte

sunting Saya sadar saya bisa menggunakan scanterima kasih @FryAmTheEggMan. Mengurangi 4 byte berkat @MickyT.

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

Usaha pertama di golf. Selamat hari pi!


1
Selamat datang di PPCG :) Saya bukan programmer R, tetapi Anda tidak perlu menyediakan fungsi yang disebutkan, hanya ekspresi yang mengevaluasi ke suatu fungsi. Jadi saya cukup yakin Anda bisa menjatuhkannya f=.
FryAmTheEggman

2
Anda bahkan bisa melangkah lebih jauh dan melakukanscan()*as.numeric(format(Sys.Date(),'%m.%d%y'))
MickyT

2
as.doublebukannya as.numericmenyimpan byte tambahan
Flounderer

5

GNU Awk, 23 karakter

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

Contoh dijalankan:

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

5

Pyth, 19 byte

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

Coba di sini!
Hanya bekerja pada 2016-03-14 tentu saja.

Penjelasan

* Qvs [.d4 \ .. d5> 2`.d3 # Q = input

     .d4 # bulan ini
        \. # dot antara bulan dan hari
          .d5 # hari saat ini dalam sebulan
             > 2`.d3 # 2 digit terakhir tahun ini
   s [# concat semuanya menjadi string
  v # eval -> convert ke float
* Q # dikalikan dengan input untuk mendapatkan keliling

5

PHP, 45 26 25 24 byte

Menggunakan penyandian Windows-1252

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

Jalankan seperti ini:

echo '<?=$argv[1]*date(~‘Ñ•†);' | php -- 3
  • Disimpan 19 byte dengan menggunakan date()bukanDateTime::format
  • Disimpan satu byte dengan menggunakan tag gema
  • Menyimpan byte dengan menggunakan pengkodean ISO-8859 dan meniadakan string format, jadi tidak perlu tanda kutip ganda. Mungkin sedikit mengacaukan terminal Anda saat menjalankannya dari CLI, tetapi berhasil.

Jika Anda menganggap register_globals benar, Anda dapat menggunakan $nvia /?n=3di url.
Martijn

@ Martijn Itu membutuhkan PHP 4.1 atau pengaturan menggunakan php.inifile. kata aross sebelum itu ingin menjauhi metode seperti itu.
Ismael Miguel

4

Python 2, 58 karakter

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

Cobalah!

Penjelasan:

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 karakter

Ini menggunakan metode khusus Firefox .

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

Terimakasih untuk:

Contoh dijalankan (Firefox Web Console):

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

Catatan: ini akan gagal di Firebug Console. Tampaknya Firebug melakukan beberapa ekspansi pada string template, mentransformasikannya `%m.%d%y`menjadi `%__fb_scopedVars(m).d%y`sebelum meneruskannya ke kode.


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

Oh [facepalm] Tidak tahu kenapa, saya biasanya lupa trik itu. Meskipun saya menggunakan string template secara teratur.
manatwork

Aku tahu. Saya juga tidak mengerti. Apa yang saya coba dapatkan adalah cara untuk menghapusnya newdari sana.
Ismael Miguel

Saya mencobanya di Firefox dan itu bekerja dengan baik. Saya salin-tempel dari konsol. Karena saya sudah diganti ('...')dengan 2 backticks, itu 2 byte.
Ismael Miguel


2

Mathematica, 54

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

2

Vitsy + coreutils, 19 byte

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

Penjelasan:

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

Tidak dapat dijalankan dalam mode aman, karena ini menggunakan metode exec Runtime.



2

Oracle 11g, 50 49 byte

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

satu byte lebih sedikit, terima kasih kepada @MickyT


Anda dapat menjatuhkan ruang sebelumFROM
MickyT

2

Python 3, 74 54 byte

menggunakan modul waktu alih-alih datetime seperti Loovjo's Answer

import time
lambda n:n*float(time.strftime('%m.%d%y'))

solusi sebelumnya

from datetime import*
lambda n:n*float(datetime.now().strftime('%m.%d%y'))

2
@ Zenadix Konsensus meta adalah bahwa fungsi yang tidak disebutkan namanya OK.
FryAmTheEggman

2

Google Sheets, 13 byte

Bytes dihitung dengan satu byte per karakter, nol byte per sel kecuali untuk sel input yang ditunjuk, dua byte. Tanda sama dengan untuk memulai formula tidak dihitung. (Saya tidak tahu apakah ini standar, tolong perbaiki saya jika saya salah.)

Jalankan cuplikan untuk melihat kode.

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>

Ini berfungsi karena Anda dapat menentukan format tanggal Anda sendiri di Google Sheets. Saya membuatnya jadi begitu <month>.<day><year>.


Anda mungkin ingin bertanya pada meta tentang sistem penilaian ini. ; P
Addison Crump

Akan lakukan ketika saya punya waktu (mungkin malam ini di Maryland)
OldBunny2800

2

Pyke , 16 15 byte, pengkodean ASCII

C867wä%J"bT4^/*

Penjelasan:

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

atau 11 byte (tidak kompetitif), (menambahkan string tunggal, 2 digit tahun, jumlah string)

C856\.R3sb*

Penjelasan:

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

Saya menduga ini Pyke berbeda dari pyke.sourceforge.net ? Bisakah Anda memposting tautan ke spesifikasi bahasa?
Robert Fraser


Hanya ingin tahu, enkode apa yang digunakan Pyke? Jika itu UTF-8, ini adalah 16 byte.
OldBunny2800

1
@ OldBunny2800 Tidak masalah; dalam hal ini menggunakan ascii tua yang baik karena semua poin kode di bawah 255. Menurut meta.codegolf.stackexchange.com/a/5879/32686 , jawabannya dapat menentukan pengodeannya sendiri tanpa biaya
Blue

1

JavaScript ES6, 68 66 byte

Disimpan 2 byte berkat dev-null!

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

Fungsi anonim. Beberapa menggunakan:

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

1
Anda harus mencoba menggunakanwith
Ismael Miguel

1

Tcl / Tk, 58 byte

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

(Itu program yang lengkap. Jika Anda ingin menipu dan menghapus putspernyataan eksplisit maka itu hanya 51 byte - Anda harus memulai tclsh dan mengetik / menempelkan yang berikut secara langsung, :)

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

Racket, 112 karakter

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

Membaca angka dari input dalam sintaks pembaca standar.


1

TI-84 Basic, 30 byte

Bekerja pada kalkulator TI-83/84; E adalah token notasi ilmiah dan ~ adalah token negatif.

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

Kasus cobaan

D=?3
          9.4248

1

R 48 byte

d*as.double(format(Sys.Date(),format="%m.%d%y"))

1

MATL , 17 byte

Z'2$'mm.ddyy'XOU*

Cobalah online!

Z'              % get current date and time as float 
2$'mm.ddyy'XO   % format as a string with custom format 
U               % convert to number 
*               % multiply by implicit input 

1

TI-BASIC, 16 13 9 byte

Xround(π,1+min(getDate

Kami membulatkan πke beberapa tempat desimal yang sama dengan minimum {month,day,year}, dan kemudian mengalikannya dengan input.

Ini adalah fungsi yang mengambil input melalui X. Simpan ke salah satu variabel-Y, misalnya Y1, lalu panggil seperti Y1([number])di homescreen.


Tampaknya ada beberapa ketidaksepakatan bahwa menerima input melalui Ansdiizinkan.
AdmBorkBork

Bagaimana ini hanya 13 byte? Tidak menghitung Input A, saya menghitung 22 karakter.
OldBunny2800

1
@ OldBunny2800 TI-BASIC berbasis token, masing-masing atom direpresentasikan sebagai satu atau dua byte.
Adám

@ OldBunny2800 Halaman kode ada di sini .
lirtosiast

1

APL , 19 byte

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

⎕TSadalah 2016 3 14 12 34 56 789yaitu 14 Mar rd 2016 tepat sebelum 12:35
make menjadi string, yaitu '2016 3 14 12 34 56 789'
8↑2↓menjatuhkan dua yang pertama ( '20') kemudian mengambil berikutnya delapan ( '16 3 14 ')
2⌽memutar dua karakter, memberikan ' 3 14 16'
make menjadi angka ( 3 14 16)
membalikkan daftar, memberikan 16 14 3
0.01⊥evaluasi dalam basis ¹/₁₀₀ , = 16 × 0,01² + 15 × 0,01¹ + 3 × 0,01⁰ = 0,0016 + 0,15 + 3 = 3,1416
⎕×dikalikan dengan input

atau

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

⎕TSadalah 2016 3 14 12 34 56 789, yaitu 14 Mar rd 2016 tepat sebelum 12:35
make menjadi string, yaitu '2016 3 14 12 34 56 789'
7↑2↓menjatuhkan dua yang pertama ( '20') kemudian mengambil berikutnya tujuh ( '16 3 14')
2⌽memutar dua karakter, memberikan ' 3 1416'
make menjadi angka ( 3 1416)
membalikkan daftar, memberikan 1416 3
1E¯4⊥evaluasi dalam basis ¹/ ₁₀₀₀₀, = 1416 × 0.01¹ + 3 × 0.01⁰ = 0.1416 + 3 = 3.1416
⎕×dikalikan dengan input


Bagaimana cara kerjanya?
OldBunny2800

1
@ OldBunny2800 Hapus?
Adám

Ya, terima kasih, tetapi dalam UTF-8 ini adalah 38 byte.
OldBunny2800


1
@ OldBunny2800 APL menggunakan halaman kode sendiri - masing-masing karakter ini satu byte. (Ini sebelum ASCII keberatan Anda ...)
spaghetto
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.