Happy Rounded Pi Day


25

Aby uczcić Dzień Zaokrąglonego Pi, musisz skorzystać z dzisiejszej daty, aby stworzyć program, który przyjmuje średnicę koła i wyprowadza jego obwód, mnożąc średnicę przez 3,1416, gdzie 3,1416 należy uzyskać przy użyciu dzisiejszej daty.

Input 3
Output 9.4248
etc.

Nie przyjmuje daty jako danych wejściowych. Nie musisz używać wszystkich składników daty, ale cyfry pi muszą pochodzić z formatowania obiektu Date lub użycia obiektu date w celu jego uzyskania. Odpowiedzi do tej pory wyglądają dobrze.

Nie jestem pewien, co jeszcze określić. Wszystkie dotychczasowe odpowiedzi odpowiadają oczekiwaniom.

Moim ograniczeniem było to, że musisz wymyślić komponenty daty, aby stworzyć Pi. Możesz oczywiście użyć składników, pomnożyć przez 0, a następnie dodać 3,1416, ale to jest nudne i marnuje cenne znaki!

Najkrótszy kod wygrywa!


61
Co jest takiego specjalnego w 14/3/16?
Neil

5
zdefiniuj używając dzisiejszej daty . Mógłbym uzyskać datę jako liczbę, podzielić ją samą i pomnożyć przez predefiniowaną stałą dlapi
Luis Mendo

7
@ Neil: Ponieważ 3/14/16 i 31/4/16 nie są prawidłowymi faktycznymi datami w formacie D / M / Y. Nie ma 14 miesięcy, a kwiecień ma tylko 30 dni. Osobiście uważam, że powinniśmy poczekać do 28.0632 (M / D / Y), a może 6/2/83 (D / M / Y), ale to zupełnie inna święta wojna.
Darrel Hoffman

8
@DarrelHoffman Jesteś mężczyzną Tau, którego widzę.
jmasterx

16
Niestety, to jedyny dzień PI w amerykańskim obszarze kultury. Europejczycy, z ich głupim, logicznie sensownym porządkiem dat, nie mają rocznych dni PI. Oszczędź im smutnej myśli, gdy jesz dziś swoje pi (e).
TED

Odpowiedzi:


8

05AB1E, 16 13 bajtów

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

Wypróbuj online.

Niestety błąd w pływakach powoduje, że ten bajt jest dłuższy: /

Dzięki Adnan za grę w golfa z 3 bajtów.

Wyjaśnienie

ž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

¦¦zamiast 2000-jest o trzy bajty krótszy;)
Adnan

11
+1 žfžežgbrzmi jak miłe czeskie słowo :)
yo

W UTF-8 suma ta wynosi 19 bajtów.
OldBunny2800

3
@ OldBunny2800 05AB1E używa CP1252 do kodowania.
spaghetto

Błąd z pływakami?
CalculatorFeline

19

C, 32 bajty

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

Jeśli utrata nieco większej dokładności jest w porządku, mogę sprowadzić ją do około 29 bajtów, wciąż zachowując dokładność do 4 cyfr po przecinku (w chwili opublikowania):

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

#include<time.h>?
kot

Ponadto, gdzie jest kod wykonywalny? jest to coś, co preprocesor może skopiować / wkleić; urywek. Lubimy tutaj możliwe do wdrożenia implementacje.
kot

3
@tac większość kompilatorów C nie wymaga #includestandardowych nagłówków bibliotek. Ręczne włączenie ich jest prawie zawsze dobrym pomysłem, ale ich pominięcie znacznie ułatwia grę w golfa w C.
Josh

12
@tac odpowiedź zachowuje się w większości tak samo jak funkcja. Kilka odpowiedzi tutaj to także samodzielne funkcje. Nie widzę sensu w udostępnianiu przykładowej mainfunkcji do zademonstrowania, jak wywołać to makro pojedynczego argumentu.
Josh

1
@tac Myślę, że standardowe zasady [code-golf] są takie, że jeśli zabronione funkcje nie są prawidłowe.
Mindwin

14

AppleScript, 122 120 bajtów

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)

Zmienna a

Zmienna a jest obiektem daty. Odwołuję wszystkie moje informacje o dacie.

Miesiąc, dzień i rok

Wywołania miesiąca, dnia i roku faktycznie zwracają obiekt, który normalnie zwraca ciąg. Aby właściwie użyć go jako liczby, otoczyłem go po obu stronach operacjami matematycznymi, aby automatycznie rzucić go na liczbę.

1e-4

1e-4jest bajtem krótszym niż .0001.

mod.01

.działa jako separator autokorekty AppleScript. Korzystając z tego, mogę używać modulo i nadal zachować dla mnie bajt.

Brak raportu zwrotnego / dziennika

Ostatnia obliczona automatycznie wartość jest zwracana przez program. Podaję liczbę obliczoną za pomocą pola zwrotu.

A oto gif z tego działa!

pi day gif


8
Zapomnij o Javie, to musi być najbardziej szczegółowy język
Downgoat

@Downgoat Wydaje mi się, że powinien on być „czytelny jak po angielsku” lub coś w tym stylu… używamy go trochę w jednym z moich zadań i naprawdę nie lubię, gdy muszę wprowadzać zmiany w takich skryptach.
Chris Cirefice,

@ChrisCirefice Tak, nie - w tym języku są irytujące elementy. tj. głośność systemu głośności.
Addison Crump

13

Mathematica + coreutils, 20 bajtów

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

Na szczęście Mathematica interpretuje wynik polecenia zewnętrznego jako wyrażenie. W tym przypadku wynikiem jest poprawna liczba zmiennoprzecinkowa, więc #implikowane jest mnożenie przez argument funkcji .


To kombinacja, o której istnieniu nie wiedziałam.
CalculatorFeline,

12

Lua, 30 27 bajtów

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

Pomnóż pierwszy argument wiersza polecenia przez bieżącą datę w formacie mm.ddyy, który jest w rzeczywistości 03.1416.


9

Bash + bc, 25 20 bajtów

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

Dzięki manatwork za oszczędność pięciu bajtów.

Stosowanie:

$ ./pi-round.sh 3
9.4248

Ta notacja tutaj jest tak długa:date +%m.%d%y\*$1|bc
manatwork

@manatwork masz rację! Bawiłem się tym samym, ale nie mogłem wymyślić, jak to połączyć. Dzięki!
andlrc

6

PowerShell v2 +, 46 28 25 bajtów

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

Całkiem proste. Pobiera dane wejściowe $args[0]i mnoży je przez datę sformatowaną jakoM.dy ( Get-implikowana). Zauważ, że uruchomienie v2 może zająć dużo czasu, ponieważ iteruje możliwe podstawienia Date(np. Sprawdzenie %PATH%zmiennej środowiskowej itp.) Przed ustabilizowaniem się Get-Date.


Czy możesz później wyciąć przestrzeń -f?
briantistka

1
@Briantist Niestety, nie tutaj. Nadużywamy rozpoznawania wzorców PowerShell, ponieważ rzeczywista flaga to -Format. Przy takich flagach wystarczy być jednoznacznym (na przykład, jeśli masz -Debugi -Delimiterjako potencjalne opcje, potrzebujesz co najmniej trzech liter do odróżnienia). Usunięcie spacji oznacza, że ​​PowerShell próbuje parsować flagę, -F"M.dy"ale nie może znaleźć argumentu, który pasuje, i dlatego generuje błąd.
AdmBorkBork

ahhh, teraz to widzę. To właśnie dostaję za czytanie tego w pociągu po długim dniu. Interpretowałem to jako -foperatora. Teraz ma sens.
briantistka

6

R 3.2.4, 55 51 47 bajtów

edit Zdałem sobie sprawę, że mogę skorzystać scandzięki @FryAmTheEggMan. Zmniejszone 4 bajty dzięki @MickyT.

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

Pierwsza próba golfa. Szczęśliwego dnia pi!


1
Witamy w PPCG :) Nie jestem programistą języka R, ale nie trzeba podawać nazwanej funkcji, a jedynie wyrażenie, które zwraca wartość funkcji. Jestem więc pewien, że możesz upuścić f=.
FryAmTheEggman

2
Możesz pójść jeszcze dalej i zrobićscan()*as.numeric(format(Sys.Date(),'%m.%d%y'))
MickyT

2
as.doublezamiast as.numericzapisuje dodatkowy bajt
Flądrowiec

5

GNU Awk, 23 znaki

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

Przykładowy przebieg:

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

5

Pyth, 19 bajtów

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

Wypróbuj tutaj!
Oczywiście działa tylko w dniach 14.03.2016.

Wyjaśnienie

* Qvs [.d4 \ .. d5> 2`.d3 # Q = wejście

     .d4 # bieżący miesiąc
        \. # kropka między miesiącem a dniem
          .d5 # bieżący dzień miesiąca
             > 2`.d3 # ostatnie 2 cyfry roku
   s [# konkatuje wszystko w ciąg
  v # eval -> przekonwertować na zmiennoprzecinkowe
* Q # pomnóż przez wejście, aby uzyskać obwód

5

PHP, 45 26 25 24 bajtów

Używa kodowania Windows-1252

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

Uruchom tak:

echo '<?=$argv[1]*date(~‘Ñ•†);' | php -- 3
  • Zaoszczędzono 19 bajtów, używając date()zamiastDateTime::format
  • Zapisano bajt za pomocą znacznika echo
  • Zapisano bajt przy użyciu kodowania ISO-8859 i negując ciąg formatu, więc nie ma potrzeby stosowania podwójnych cudzysłowów. Może trochę zepsuć twój terminal podczas uruchamiania go z CLI, ale działa.

Jeśli przyjmujesz, że wartość register_globals ma wartość true, możesz użyć $nadresu /?n=3w adresie URL.
Martijn

@Martijn To wymaga PHP 4.1 lub ustawienia go za pomocą php.inipliku. Aross powiedział wcześniej, że chce odejść od takiej metody.
Ismael Miguel

4

Python 2, 58 znaków

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

Spróbuj!

Wyjaśnienie:

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 znaków

Korzysta z zastrzeżonej metody tylko dla przeglądarki Firefox .

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

Dzięki:

Uruchomienie przykładowe (konsola internetowa Firefox):

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

Uwaga: to się nie powiedzie w konsoli Firebug. Wydaje się, że Firebug wykonuje pewne rozwinięcie ciągu szablonu, przekształcając się `%m.%d%y`w `%__fb_scopedVars(m).d%y`przed przekazaniem go do kodu.


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

O. [facepalm] Nie mam pojęcia, dlaczego zwykle zapominam o tej sztuczce. Chociaż regularnie używam ciągów szablonów.
manatwork

Wiem. Naprawdę nie rozumiem też. To, co próbuję uzyskać, to sposób na usunięcie tego newz tego miejsca.
Ismael Miguel

Wypróbowałem to w Firefoksie i działało dobrze. Skopiowałem z konsoli. Ponieważ zastąpiłem ('...')2 backtickami, to 2 bajty.
Ismael Miguel


2

Mathematica, 54

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

2

Vitsy + coreutils, 19 bajtów

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

Wyjaśnienie:

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

Nie można uruchomić w trybie awaryjnym, ponieważ używa ona metody wykonawczej Runtime.



2

Oracle 11g, 50 49 bajtów

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

jeden bajt mniej, dzięki @MickyT


możesz upuścić miejsce przedFROM
MickyT


2

Arkusze Google, 13 bajtów

Bajty są obliczane z jednym bajtem na znak, zero bajtów na komórkę, z wyjątkiem wyznaczonej komórki wejściowej, dwa bajty. Znak równości, aby rozpocząć formułę, nie jest liczony. (Nie wiem, czy to standard, popraw mnie, jeśli się mylę).

Uruchom snippet, aby zobaczyć kod.

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>

Działa to, ponieważ możesz zdefiniować własne formaty dat w Arkuszach Google. Zrobiłem to tak, że tak jest <month>.<day><year>.


Możesz zapytać na meta o ten system punktacji. ; P
Addison Crump

Zrobię, gdy będę miał czas (może dziś wieczorem w Maryland)
OldBunny2800

2

Pyke , 16 15 bajtów, kodowanie ASCII

C867wä%J"bT4^/*

Wyjaśnienie:

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

lub 11 bajtów (niekonkurencyjne), (dodaje pojedyncze ciągi, 2-cyfrowy rok, sumy ciągów)

C856\.R3sb*

Wyjaśnienie:

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

Zgaduję, że to inny Pyke niż pyke.sourceforge.net ? Czy możesz opublikować link do specyfikacji języka?
Robert Fraser,


Zastanawiam się, jakiego kodowania używa Pyke? Jeśli jest to UTF-8, jest to 16 bajtów.
OldBunny2800

1
@OldBunny2800 It doesn't matter; in this case it uses good old ascii as all code points are below 255. According to meta.codegolf.stackexchange.com/a/5879/32686, the answer can define it's own encoding at no cost
Blue

1

JavaScript ES6, 68 66 bytes

Saved 2 bytes thanks to dev-null!

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

Anonymous function. Some uses:

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

1
You should try using with
Ismael Miguel

1

Tcl/Tk, 58 bytes

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

(That's a complete program. If you want to cheat and remove the explicit puts statement then it's only 51 bytes -- you'd have to start tclsh and type/paste the following in directly, though:)

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

1

Java 114 bytes

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

Racket, 112 characters

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

Reads the number from input in standard reader syntax.


1

TI-84 Basic, 30 bytes

Works on TI-83/84 calculators; E is the scientific notation token and ~ is the negative token.

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

Test Case

D=?3
          9.4248


1

MATL, 17 bytes

Z'2$'mm.ddyy'XOU*

Try it 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 bytes

Xround(π,1+min(getDate

We round π to a number of decimal places equal to the minimum of {month,day,year}, and then multiply it by the input.

This is a function that takes input through X. Store it to one of the Y-variables, for example Y1, and then call like Y1([number]) on the homescreen.


There seems to be some disagreement that taking input via Ans is allowed.
AdmBorkBork

How is this only 13 bytes? Not counting Input A, I count 22 characters.
OldBunny2800

1
@OldBunny2800 TI-BASIC is token based, each atom is represented as one or two bytes.
Adám

@OldBunny2800 The code page is here.
lirtosiast

1

APL, 19 bytes

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

⎕TS is 2016 3 14 12 34 56 789 i.e. March 14rd, 2016 right before 12:35 pm
make into string, i.e. '2016 3 14 12 34 56 789'
8↑2↓ drop first two ('20') then take next eight ('16 3 14 ')
2⌽ rotate two characters, giving ' 3 14 16'
make into numbers (3 14 16)
reverse the list, giving 16 14 3
0.01⊥ evaluate in base ¹⁄₁₀₀, = 16 × 0.01² + 15 × 0.01¹ + 3 × 0.01⁰ = 0.0016 + 0.15 + 3 = 3.1416
⎕× multiply with input

or

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

⎕TS is 2016 3 14 12 34 56 789, i.e. March 14rd, 2016 right before 12:35 pm
make into string, i.e. '2016 3 14 12 34 56 789'
7↑2↓ drop first two ('20') then take next seven ('16 3 14')
2⌽ rotate two characters, giving ' 3 1416'
make into numbers (3 1416)
reverse the list, giving 1416 3
1E¯4⊥ evaluate in base ¹⁄₁₀₀₀₀, = 1416 × 0.01¹ + 3 × 0.01⁰ = 0.1416 + 3 = 3.1416
⎕× multiply with input


How does this work?
OldBunny2800

1
@OldBunny2800 Clear?
Adám

Yes, thank you, but in UTF-8 this is 38 bytes.
OldBunny2800


1
@OldBunny2800 APL uses its own code page -- each of these characters are one byte. (This was before ASCII mind you...)
a spaghetto
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.