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!

jmasterx
sumber
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
sebuah spaghetto
sumber
¦¦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
Josh
sumber
#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

Addison Crump
sumber
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.

murphy
sumber
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.

Katenkyo
sumber
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
andlrc
sumber
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.

AdmBorkBork
sumber
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!

bouncyball
sumber
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
manatwork
sumber
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
Denker
sumber
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.
aross
sumber
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
Loovjo
sumber
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.

manatwork
sumber
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
3

Ruby, 40 byte

->n{n*Time.new.strftime('%m.%d%y').to_f}
Gagang pintu
sumber
2

Mathematica, 54

.0001FromDigits[Now@{"Month","Day","YearShort"},100]#&
shrx
sumber
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.

Addison Crump
sumber
2

SpecBAS , 39 byte

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

Tidak ada yang luar biasa. Memformat tanggal sebagai string kemudian mengalikan input dengan VAL(nilai) string itu.

Brian
sumber
Tautan penerjemah / kompiler?
kucing
Saya telah mengedit tautan ke jawaban Anda
cat
2

Oracle 11g, 50 49 byte

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

satu byte lebih sedikit, terima kasih kepada @MickyT

Argenis García
sumber
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'))
Erwan
sumber
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>.

OldBunny2800
sumber
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))
Biru
sumber
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
Conor O'Brien
sumber
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]}
Dúthomhas
sumber
1

Java 114 byte

public double p(double d){
  return (d*Double.parseDouble(new SimpleDateFormat("MM.ddyy").format(new Date())));
}
Jeff I
sumber
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.

Winny
sumber
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
Timtech
sumber
1

R 48 byte

d*as.double(format(Sys.Date(),format="%m.%d%y"))
Jeff I
sumber
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 
Luis Mendo
sumber
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.

lirtosiast
sumber
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

Adám
sumber
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