Mutlu Yuvarlak Pi Günü


25

Round Pi Gününü kutlamak için, çemberin çapını kaplayan ve çevresini çıkaran bir program yapmak için bugünün tarihinden faydalanmalısınız, burada 3.1416 ile bugünün tarihi kullanılarak 3.1416 elde edilmesi gerekir.

Input 3
Output 9.4248
etc.

Tarihi girdi olarak almaz. Tarihin tüm bileşenlerini kullanmanız gerekmez, ancak pi'nin rakamları bir Date nesnesini biçimlendirmekten veya bunu elde etmek için bir tarih nesnesini kullanmaktan gelmelidir. Şimdiye kadar cevaplar iyi görünüyor.

Başka ne belirteceğinden emin değilim. Şu ana kadarki cevaplar beklediğim şeyi karşılıyor.

Benim kısıtım, Pi ile gelmek için tarihin bileşenlerini kullanmanız gerektiği idi. Tabii ki bileşenleri kullanabilir, 0 ile çarpıp 3.1416 ekleyebilirsiniz, ancak bu sıkıcı ve değerli karakterleri boşa harcar!

En kısa kod kazanır!


61
14/3/16 ile ilgili bu kadar özel olan ne?
Neil

5
bugünün tarihini kullanarak tanımlar . Tarihi bir sayı olarak alabilir, kendi başıma bölebilir ve önceden tanımlanmış bir sabitle çarpabilirimpi
Luis Mendo

7
@Neil: Çünkü 3/14/16 ve 31/4/16, D / M / Y formatında geçerli tarihler değildir. 14 ay yok ve Nisan ayında 30 gün var. Ben şahsen 6/28/32 (M / D / Y) ya da belki 6/2/83 (D / M / Y) kadar beklememiz gerektiğini düşünüyorum, ama bu tamamen başka bir kutsal savaş.
Darrel Hoffman,

8
@DarrelHoffman Gördüğüm bir Tau adamısın.
jmasterx

16
Ne yazık ki, ABD kültür alanındaki tek PI gün. Avrupalılar, aptalca sözel olarak duyarlı tarih sıralamasıyla yıllık PI günlerine sahip olamazlar. Bugün pi (e) yediğiniz için üzücü bir düşünce yapın.
TED,

Yanıtlar:


8

05AB1E, 16 13 bayt

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

Çevrimiçi deneyin.

Ne yazık ki, kayan noktalara sahip bir hata bunu daha uzun bir bayt yapar: /

3 baytlık golf oynadığı için Adnan'a teşekkür ederiz.

açıklama

ž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

¦¦bunun yerine 2000-üç bayt daha kısadır;)
Adnan,

11
+1 žfžežggüzel bir Çek kelimesine benziyor :)
yo '

UTF-8'de bu toplam 19 bayttır.
OldBunny2800

3
@ OldBunny2800 05AB1E, kodlama için CP1252'yi kullanır.
Bir spaghetto

Yüzen böcek?
Hesap MakinesiFeline

19

C, 32 bayt

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

Biraz daha fazla doğruluk kaybetmek yeterliyse, ondalık basamağı geçen 4 basamağa kadar hala doğru olan yaklaşık 29 bayta kadar indirebilirim (bu gönderim zamanı itibariyle):

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

#include<time.h>?
kedi,

Ayrıca, çalıştırılabilir kod nerede? bu sadece önişlemcinin kopyalaması / yapıştırması için bir şeydir; Bir snippet. Burada çalıştırılabilir uygulamaları severiz.
kedi,

3
@ C çoğu C derleyicisi #includestandart kütüphane başlıklarını gerektirmez . Bunları manuel olarak dahil etmek neredeyse her zaman iyi bir fikirdir, ancak bunları atlamak, C'de kod golfünü çok daha kolay hale getirir.
Josh,

12
@tac, cevap çoğunlukla bir fonksiyonla aynı şekilde çalışır. Buradaki birkaç cevap, bağımsız fonksiyonlardır. mainBu tek bağımsız değişken makrosunun nasıl çağrılacağını göstermek için örnek bir işlev sağlama noktasında anlamıyorum .
Josh,

1
@tac standart [code-golf] kurallarının yasaklanmış işlevler tamam olmadığı sürece olduğunu düşünüyorum.
Mindwin

14

AppleScript, 122 120 bayt

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)

Değişken bir

A değişkeni bir tarih nesnesidir. Tüm tarih bilgilerimi bunun dışında aradım.

Ay, gün ve yıl

Ay, gün ve yıl çağrıları gerçekte normalde dize döndüren bir nesne döndürür. Düzgün bir sayı olarak kullanmak için, her iki tarafa da otomatik olarak bir sayıya çevirmek için matematiksel işlemlerle sarıldım.

1e-4

1e-4ondan daha kısa bir bayttır .0001.

mod.01

.AppleScript otomatik düzeltmesine ayırıcı olarak işlev görür. Bunu kullanarak, modulo kullanabilir ve hala kendim için bir bayt tutabilirim.

Dönüş ifadesi / günlüğü yok

Otomatik olarak hesaplanan son değer program tarafından döndürülür. İade kutusu üzerinden hesaplanan rakamı verdim.

Ve işte çalışan bir gif!

pi gün gif


8
Java Forget, bu en ayrıntılı dili olmak zorunda
Downgoat

@Downgoat Sanırım "İngilizce gibi okunabilir" olması gerekiyordu ... ya da işimden birinde biraz kullanıyoruz ve bu tür komut dosyalarında değişiklik yapmak zorunda kaldığımda gerçekten hoşuma gitmiyor.
Chris Cirefice

@ChrisCirefice Evet, hayır - bu dilin kendine sinir bozucu parçaları var. yani hacim sistemi hacmi.
Addison Crump

13

Mathematica + coreutils, 20 bayt

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

Neyse ki, Mathematica harici bir komutun çıktısını bir ifade olarak yorumlar. Bu durumda, çıktı geçerli bir kayan noktadır, böylece işlev argümanıyla çarpma #yapılır.


Bu, bilmediğim bir kombinasyondu.
Hesap MakinesiFeline

12

Lua, 30 27 Bayt

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

İlk komut satırı argümanını mm.ddyy, gerçekte olan biçimdeki geçerli tarihe göre çarpın 03.1416.


9

Bash + bc, 25 20 bayt

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

Beş byte tasarruf sağladığınız için teşekkürler .

Kullanımı:

$ ./pi-round.sh 3
9.4248

Buradaki string notasyonu çok uzun:date +%m.%d%y\*$1|bc
Manatwork

@ manatwork haklısın! Aynı kendimle oynuyordum ama nasıl birleştireceğimi bulamadım. Teşekkürler!
andlrc

6

PowerShell v2 +, 46 28 25 bayt

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

Oldukça basit. Girdiyi alır $args[0]ve ( ima edildiği gibi) biçimlendirilmişM.dy tarihe göre çoğaltır Get-. Yerleşmeden önce bunun Date(örneğin, %PATH%ortam değişkeninizi kontrol etme , vb.) Olası değişiklikleri yinelediği için v2'de çalışması uzun zaman alabilir Get-Date.


Sonra boşluğu kesebilir misin -f?
briantist

1
Ne yazık ki burada değil. Gerçek bayrak olduğundan, PowerShell'in kalıp tanıma özelliğini kötüye kullanıyoruz -Format. Bunun gibi bayraklarla, sadece belirgin olmanız gerekir (örneğin, eğer -Debugve -Delimiterpotansiyel seçenekler olarak, ayırt etmek için en az üç harfe ihtiyacınız olacak). Boşluğu kaldırmak, PowerShell'in bayrağı ayrıştırmaya çalıştığı -F"M.dy"ancak eşleşen bir argüman bulamadığı anlamına gelir ve bu nedenle bir hata atar.
AdmBorkBork,

ahhh şimdi görüyorum. Uzun bir günün ardından bunu bir trende okumak için elde ettiğim şey bu. -fOperatör olarak yorumluyordum . Şimdi tamamen mantıklı.
briantist

6

R 3.2.4, 55 51 47 bayt

düzenleme Ben scanteşekkür @ use FryAmTheEggMan kullanabileceğini fark ettim . @MickyT sayesinde 4 bayt azaltıldı.

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

Golfe ilk girişimi. Pi günün kutlu olsun!


1
PPCG'ye Hoşgeldiniz :) Ben bir R programcısı değilim, ancak bir fonksiyona, sadece bir fonksiyonu değerlendiren bir ifadeye ihtiyacınız yok. Bu yüzden onu bırakabileceğinden eminim f=.
FryAmTheEggman 14:16

2
Daha da ileri gidebilir ve yapabilirsinizscan()*as.numeric(format(Sys.Date(),'%m.%d%y'))
MickyT

2
as.doubleas.numericek bir bayt yerine kaydeder
Flounderer

5

GNU Awk, 23 karakter

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

Örnek çalışma:

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

5

Pyth, 19 bayt

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

Burada dene!
Sadece 2016-03-14 saatleri arasında çalışır.

açıklama

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

     .d4 # geçerli ay
        \. # ay ve gün arasında nokta
          .d5 # ayın geçerli günü
             > 2`.d3 # yılın son 2 basamağı
   s [# her şeyi bir dizgeye dönüştürür
  v # eval -> yüzdürmek
* Q # çevreyi elde etmek için girişle çarpın

5

PHP, 45 26 25 24 bayt

Windows-1252 kodlamasını kullanır

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

Bu şekilde koş:

echo '<?=$argv[1]*date(~‘Ñ•†);' | php -- 3
  • Kullanarak 19 bayt Kaydedilen date()yerineDateTime::format
  • Echo etiketini kullanarak bir bayt kaydedildi
  • ISO-8859 kodlamasını kullanarak ve biçim dizgisini olumsuzlayarak bir bayt kaydetti, bu nedenle çift tırnak işareti kullanmanıza gerek kalmadı. Terminalinizi CLI'den çalıştırırken bir miktar karışıklığa neden olabilir, ancak çalışır.

Register_globals değerini true olarak kabul ederseniz , url $naracılığıyla kullanabilirsiniz /?n=3.
Martijn

@Martijn Bu PHP 4.1 gerektirir veya php.inidosyayı kullanarak ayarlayarak . aross daha önce böyle bir yöntemden uzaklaşmak istediğini söyledi.
Ismael Miguel

4

Python 2, 58 karakter

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

Dene!

Açıklama:

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

Bu, tescilli bir Firefox yöntemi kullanır .

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

Sayesinde:

Örnek çalışma (Firefox Web Konsolu):

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

Not: Firebug Konsolu'nda başarısız olacaktır. Kundakçı dönüştürerek, şablon dize bazı genişleme performansa sahip olduğunu görünüyor `%m.%d%y`içine `%__fb_scopedVars(m).d%y`koduna geçirmeden önce.


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

Ah. [facepalm] Neden bilmiyorum, genelde bu numarayı unutuyorum. Şablon dizelerini düzenli kullanmama rağmen.
Manat çalışması 15:16

Biliyorum. Ben de gerçekten anlamadım. Almaya çalıştığım şey onu neworadan çıkarmanın bir yolu .
Ismael Miguel

Firefox'ta denedim ve iyi çalıştı. Konsoldan kopyala yapıştırdım. ('...')2 backtick ile değiştirdiğimden bu 2 bayt.
Ismael Miguel


2

Mathematica, 54

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

2

Vitsy + coreutils, 19 bayt

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

Açıklama:

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

Runtime's exec yöntemini kullandığından, güvenli modda çalıştırılamaz.



2

Oracle 11g, 50 49 bayt

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

@MickyT sayesinde bir tane daha az bayt


önce boşluk bırakabilirsinizFROM
MickyT

2

Python 3, 74 54 bayt

Loovjo's Answer gibi datetime yerine zaman modülünü kullanma

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

önceki çözüm

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

2
@ Zenadix Meta fikir birliği , isimlendirilmemiş işlevlerin tamam olduğu yönündedir .
FryAmTheEggman

2

Google Sayfaları, 13 bayt

Bayt, karakter başına bir bayt, belirlenmiş giriş hücresi hariç hücre başına sıfır bayt, iki bayt ile hesaplanır. Formül başlatmak için eşittir işareti sayılmaz. (Bunun standart olup olmadığını bilmiyorum, lütfen hatalıysam beni düzeltin.)

Kodu görmek için pasajı çalıştırın.

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>

Bu çalışır, çünkü kendi tarih biçimlerinizi Google E-Tablolarda tanımlayabilirsiniz. Öyle yaptım <month>.<day><year>.


Bu puanlama sistemi hakkında meta hakkında soru sormak isteyebilirsiniz. ; P
Addison Crump,

Zaman (ne zaman bu gece Maryland'de olabilir)
yapacağım

2

Pyke , 16 15 bayt, ASCII kodlaması

C867wä%J"bT4^/*

Açıklama:

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

veya 11 bayt (rekabetçi olmayan), (string single, 2 digit year, string sumables ekler)

C856\.R3sb*

Açıklama:

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

Bundan daha farklı bir Pyke olduğunu tahmin ediyorum pyke.sourceforge.net ? Dil spesifikasyonuna bir link gönderebilir misiniz?
Robert Fraser,


Sadece merak ediyorum, Pyke hangi kodlamayı kullanıyor? UTF-8 ise, bu 16 bayttır.
OldBunny2800

1
@ OldBunny2800 Önemli değil; tüm kod noktaları göre 255 altındadır olarak bu durumda eski güzel ascii kullanan meta.codegolf.stackexchange.com/a/5879/32686 , cevap o hiçbir ücret ödemeden kendi kodlama var tanımlayabilirsiniz
Mavi

1

JavaScript ES6, 68 66 bayt

Dev-null sayesinde 2 bayt kurtarıldı!

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

Anonim işlev Bazı kullanımlar:

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

1
Kullanmayı denemelisinwith
Ismael Miguel

1

Tcl / Tk, 58 bayt

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

(Bu tam bir programdır. Açık putsifadeyi aldatmak ve kaldırmak istiyorsanız, yalnızca 51 bayttır - tclsh'i başlatmanız ve aşağıdakini doğrudan yazmanız / yapıştırmanız gerekir :)

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

1

Java 114 bayt

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

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

1

Raket, 112 karakter

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

Standart okuyucu sözdizimindeki girişten sayıyı okur.


1

TI-84 Temel, 30 bayt

TI-83/84 hesap makinelerinde çalışır; E, bilimsel işaret simgesidir ve olumsuz simgedir.

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

Test durumu

D=?3
          9.4248

1

R 48 bayt

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

1

MATL , 17 bayt

Z'2$'mm.ddyy'XOU*

Çevrimiçi deneyin!

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 bayt

Xround(π,1+min(getDate

Biz yuvarlamak πait minimuma eşit ondalık basamağa bir dizi {month,day,year}girişi ile çarpın o zaman, ve.

Bu, X ile girdi alan bir işlevdir. Örneğin Y1, Y değişkenlerinden birine Y1([number])kaydedin ve ardından ana ekranda olduğu gibi çağırın .


Var gibi gözüküyor bazı anlaşmazlıklar yoluyla girişi alarak bu Ansizin verilir.
AdmBorkBork,

Bu sadece 13 bayt nasıl? Giriş A sayılmıyor, 22 karakter sayılır.
OldBunny2800

1
OldBunny2800 TI-BASIC belirteç tabanlıdır, her atom bir veya iki bayt olarak temsil edilir.
Adám

@ OldBunny2800 Kod sayfası burada .
lirtosiast

1

APL , 19 bayt

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

⎕TSolduğu 2016 3 14 12 34 56 789yani 14 Mart rd 2016 Sağ 12:35 civarında önce
dizeye yapmak, yani '2016 3 14 12 34 56 789'
8↑2↓iki (ilk damla '20'sonra (bir sonraki Sekiz tane) '16 3 14 ')
2⌽, iki karakter döndürmek vererek ' 3 14 16'
(sayılar içine markasını 3 14 16)
vererek listeyi ters 16 14 3
0.01⊥tabanında değerlendirmek ¹/₁₀₀ , = 16 × 0.01² + 15 × 0.01¹ + 3 × 0.01⁰ = 0.0016 + 0.15 + 3 = 3.1416
⎕×giriş ile çarpın

veya

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

⎕TSolduğu 2016 3 14 12 34 56 789, yani 14 Mart rd 2016 Sağ 12:35 civarında önce
dizeye yapmak, yani '2016 3 14 12 34 56 789'
7↑2↓ilk iki (damla '20'sonra (bir sonraki yedi almak) '16 3 14')
2⌽, iki karakter döndürmek vererek ' 3 1416'
(sayılar içine markasını 3 1416)
vererek listeyi ters 1416 3
1E¯4⊥tabanında değerlendirmek ¹/ ₁₀₀₀₀, = 1416 × 0.01¹ + 3 × 0.01⁰ = 0.1416 + 3 = 3.1416
⎕×giriş ile çarpma


Bu nasıl çalışıyor?
OldBunny2800 16.06

1
@ OldBunny2800 Temizle?
Adám

Evet, teşekkür ederim, ancak UTF-8'de bu 38 bayttır.
OldBunny2800


1
@ OldBunny2800 APL kendi kod sayfasını kullanır - bu karakterlerin her biri bir bayttır. (Bu ASCII'nin aklından önceydi ...)
bir
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.