Bonne journée de Pi arrondie


25

Pour célébrer le Rounded Pi Day, vous devez profiter de la date d'aujourd'hui pour créer un programme qui prend le diamètre d'un cercle et génère sa circonférence en multipliant le diamètre par 3,1416, où 3,1416 doit être obtenu en utilisant la date d'aujourd'hui.

Input 3
Output 9.4248
etc.

Ne prend pas la date en entrée. Vous n'êtes pas obligé d'utiliser tous les composants de la date, mais les chiffres de pi doivent provenir du formatage d'un objet Date ou de l'utilisation d'un objet date pour l'obtenir. Jusqu'à présent, les réponses semblent bonnes.

Je ne sais pas quoi d'autre à spécifier. Jusqu'à présent, toutes les réponses correspondent à ce que j'attendais.

Ma contrainte était que vous devez utiliser des composants de la date pour arriver à Pi. Vous pouvez bien sûr utiliser les composants, multiplier par 0 puis ajouter 3,1416, mais c'est ennuyeux et gaspille de précieux caractères!

Le code le plus court gagne!


61
Quelle est la particularité du 14/3/16?
Neil

5
définir en utilisant la date du jour . Je pourrais obtenir la date sous forme de nombre, diviser par lui-même et multiplier par une constante prédéfinie pourpi
Luis Mendo

7
@Neil: Parce que les 14/03/16 et 31/4/16 ne sont pas des dates réelles valides au format D / M / Y. Il n'y a pas 14 mois et avril n'a que 30 jours. Personnellement, je pense que nous devrions attendre le 28/06/32 (M / D / Y) ou peut-être le 6/2/83 (D / M / Y), mais c'est une toute autre guerre sainte.
Darrel Hoffman

8
@DarrelHoffman Vous êtes un homme Tau, je vois.
jmasterx

16
Malheureusement, c'est son seul jour PI dans le domaine culturel américain. Les Européens, avec leur ordre de date lexigraphiquement sensé, n'ont pas droit à des journées PI annuelles. Épargnez-leur une triste pensée, car vous mangez votre pi (e) aujourd'hui.
TED

Réponses:


8

05AB1E, 16 13 octets

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

Essayez-le en ligne.

Malheureusement, un bogue avec des flottants rend cet octet plus long: /

Merci à Adnan d'avoir joué au golf sur 3 octets.

Explication

ž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

¦¦au lieu de 2000-trois octets plus court;)
Adnan

11
+1 žfžežgsonne comme un joli mot tchèque :)
yo '15

En UTF-8, cela totalise 19 octets.
OldBunny2800

3
@ OldBunny2800 05AB1E utilise CP1252 pour l'encodage.
un spaghetto du

Bug avec flotteurs?
CalculatorFeline

19

C, 32 octets

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

Si perdre un peu plus de précision est bien, je peux le ramener à environ 29 octets en étant toujours précis à 4 chiffres après la décimale (au moment de cette publication):

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

#include<time.h>?
cat

Aussi, où est le code exécutable? c'est juste quelque chose que le préprocesseur doit copier / coller; un extrait. Nous aimons les implémentations exécutables ici.
cat

3
@tac la plupart des compilateurs C ne nécessitent pas d'en #include-têtes de bibliothèque standard. Les inclure manuellement est presque toujours une bonne idée, mais les omettre rend le golf de code en C beaucoup plus facile.
Josh

12
@tac la réponse se comporte essentiellement comme une fonction. Plusieurs réponses ici sont également des fonctions autonomes. Je ne vois pas l'intérêt de fournir un exemple de mainfonction pour montrer comment appeler cette macro à argument unique.
Josh

1
@tac Je pense que les règles [code-golf] standard sont que sauf si les fonctions interdites sont ok.
Mindwin

14

AppleScript, 122 120 octets

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)

Variable a

La variable a est un objet date. J'appelle toutes mes informations de date hors d'elle.

Mois, jour et année

Les appels de mois, jour et année renvoient en fait un objet qui renvoie normalement une chaîne. Pour l'utiliser correctement comme un nombre, je l'ai entouré des deux côtés d'opérations mathématiques pour le convertir automatiquement en un nombre.

1e-4

1e-4est un octet plus court que .0001.

mod.01

.agit comme un séparateur de la correction automatique AppleScript. En utilisant cela, je peux utiliser modulo et toujours garder un octet pour moi - même.

Aucune déclaration / journal de retour

La dernière valeur calculée automatiquement est retournée par le programme. Je fournis le nombre calculé via la boîte de retour.

Et voici un gif en cours d'exécution!

pi day gif


8
Oubliez Java, cela doit être la langue la plus verbeuse
Downgoat

@Downgoat Je suppose que c'est censé être "lisible comme l'anglais" ou quelque chose ... nous l'utilisons un peu dans l'un de mes emplois et je n'aime vraiment pas chaque fois que je dois apporter des modifications à de tels scripts.
Chris Cirefice

@ChrisCirefice Ouais, non - cette langue a quelques morceaux ennuyeux. c'est-à-dire le volume du système de volume.
Addison Crump

13

Mathematica + coreutils, 20 octets

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

Heureusement, Mathematica interprète la sortie d'une commande externe comme une expression. Dans ce cas, la sortie est un flottant valide, de sorte que la multiplication avec l'argument de fonction #est implicite.


C'est une combinaison que je ne connaissais pas.
CalculatorFeline

12

Lua, 30 27 octets

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

Multipliez le premier argument de ligne de commande par la date actuelle au format mm.ddyy, qui est en fait 03.1416.


9

Bash + bc, 25 20 octets

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

Merci à manatwork pour avoir économisé cinq octets.

Usage:

$ ./pi-round.sh 3
9.4248

Cette notation ici-chaîne est si longue:date +%m.%d%y\*$1|bc
manatwork

@manatwork vous avez raison! Je jouais avec le même moi-même, mais je ne savais pas comment le combiner. Merci!
andlrc

6

PowerShell v2 +, 46 28 25 octets

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

Assez simple. Prend l'entrée $args[0]et la multiplie par la date formatée commeM.dy (le Get-est implicite). Notez que cela peut prendre beaucoup de temps pour s'exécuter sur v2 car il itère les substitutions possibles Date(par exemple, vérifier votre %PATH%variable d'environnement, etc.) avant de s'installer Get-Date.


Pouvez-vous réduire l'espace après -f?
briantist

1
@briantist Malheureusement, pas ici. Nous abusons de la reconnaissance de modèle de PowerShell, car le drapeau réel est -Format. Avec des indicateurs comme celui-ci, il vous suffit d'être sans ambiguïté (par exemple, si vous en aviez -Debuget -Delimitercomme options potentielles, vous auriez besoin d'au moins trois lettres pour les différencier). La suppression de l'espace signifie que PowerShell essaie d'analyser l'indicateur -F"M.dy"mais ne peut pas trouver d'argument correspondant et génère donc une erreur.
AdmBorkBork

ahhh je le vois maintenant. C'est ce que j'obtiens en lisant ceci dans un train après une longue journée. Je l'interprétais comme l' -fopérateur. Est tout à fait logique maintenant.
briantist

6

R 3.2.4, 55 51 47 octets

edit J'ai réalisé que je pouvais utiliser scanmerci @FryAmTheEggMan. Réduction de 4 octets grâce à @MickyT.

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

Première tentative de golf. Bonne journée pi!


1
Bienvenue dans PPCG :) Je ne suis pas un programmeur R, mais vous n'avez pas besoin de fournir une fonction nommée, juste une expression qui évalue une fonction. Je suis donc presque sûr que vous pouvez laisser tomber f=.
FryAmTheEggman

2
Vous pouvez aller encore plus loin et fairescan()*as.numeric(format(Sys.Date(),'%m.%d%y'))
MickyT

2
as.doubleau lieu d' as.numericenregistrer un octet supplémentaire
Flounderer

5

GNU Awk, 23 caractères

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

Exemple d'exécution:

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

5

Pyth, 19 octets

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

Essayez-le ici!
Fonctionne uniquement au 14/03/2016 bien sûr.

Explication

* Qvs [.d4 \ .. d5> 2`.d3 # Q = entrée

     .d4 # mois en cours
        \. # point entre le mois et le jour
          .d5 # jour du mois en cours
             > 2`.d3 # 2 derniers chiffres de l'année
   s [# tout concaténer dans une chaîne
  v # eval -> convertir en float
* Q # multiplier avec l'entrée pour obtenir la circonférence

5

PHP, 45 26 25 24 octets

Utilise l'encodage Windows-1252

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

Courez comme ceci:

echo '<?=$argv[1]*date(~‘Ñ•†);' | php -- 3
  • 19 octets enregistrés en utilisant date()au lieu deDateTime::format
  • Enregistrement d'un octet à l'aide de la balise echo
  • Enregistrement d'un octet en utilisant le codage ISO-8859 et en annulant la chaîne de format, donc pas besoin de guillemets doubles. Pourrait gâcher un peu votre terminal lors de son exécution à partir de CLI, mais cela fonctionne.

Si vous supposez que register_globals est vrai, vous pouvez utiliser $nvia /?n=3dans l'url.
Martijn

@Martijn Cela nécessite PHP 4.1 ou le configurer en utilisant le php.inifichier. Aross a dit auparavant qu'il voulait s'éloigner d'une telle méthode.
Ismael Miguel

4

Python 2, 58 caractères

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

Essayez!

Explication:

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 caractères

Cela utilise une méthode exclusive de Firefox .

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

Grâce à:

  • Ismael Miguel pour la suggestion de chaîne de modèle (-2 caractères).

Exemple d'exécution (Firefox Web Console):

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

Remarque: cela échouera dans la console Firebug. Il semble que Firebug effectue une expansion sur la chaîne de modèle, en la transformant `%m.%d%y`en `%__fb_scopedVars(m).d%y`avant de la transmettre au code.


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

Oh. [facepalm] Je ne sais pas pourquoi, j'oublie généralement cette astuce. Bien que j'utilise régulièrement les chaînes de modèle.
manatwork

Je sais. Je ne comprends vraiment pas non plus. Ce que j'essaie d'obtenir, c'est un moyen de retirer cela newde là.
Ismael Miguel

I tried it on Firefox and it worked fine. I copy-pasted from the console. Since I've replaced ('...') with 2 backticks, that's 2 bytes.
Ismael Miguel


2

Mathematica, 54

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

2

Vitsy + coreutils, 19 bytes

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

Explanation:

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

Cannot be run in safe mode, as this uses the Runtime's exec method.



2

Oracle 11g, 50 49 bytes

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

one less byte, thanks to @MickyT


you can drop the space before the FROM
MickyT

2

Python 3, 74 54 bytes

using the time module instead of datetime like Loovjo's Answer

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

previous solution

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

2
@Zenadix The meta consensus is that unnamed functions are OK.
FryAmTheEggman

2

Google Sheets, 13 bytes

Bytes are calculated with one byte per character, zero bytes per cell except for the designated input cell, two bytes. The equals sign to start a formula is not counted. (I don't know if this is standard, please correct me if I am wrong.)

Run snippet to see the code.

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>

This works because you can define your own date formats in Google Sheets. I made it so that it is <month>.<day><year>.


You might want to ask on meta about this scoring system. ;P
Addison Crump

Will do when I have time (maybe tonight in Maryland)
OldBunny2800

2

Pyke, 16 15 bytes, ASCII encoding

C867wä%J"bT4^/*

Explanation:

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

or 11 bytes (non-competitive), (adds string singles, 2 digit year, string sumables)

C856\.R3sb*

Explanation:

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

I'm guessing this is a different Pyke than pyke.sourceforge.net ? Can you post a link to the language spec?
Robert Fraser


Just wondering, what encoding does Pyke use? If it's UTF-8, this is 16 bytes.
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

R 48 bytes

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.