Felice giorno arrotondato Pi


25

Per celebrare il Rounded Pi Day, è necessario sfruttare la data odierna per creare un programma che comprenda il diametro di un cerchio e produca la sua circonferenza moltiplicando il diametro per 3,1416, dove 3,1416 devono essere ottenuti utilizzando la data odierna.

Input 3
Output 9.4248
etc.

Non accetta la data come input. Non è necessario utilizzare tutti i componenti della data, ma le cifre di pi devono provenire dalla formattazione di un oggetto Date o dall'uso di un oggetto Date per ottenerlo. Le risposte finora sembrano buone.

Non sono sicuro di cos'altro specificare. Tutte le risposte finora soddisfano ciò che mi aspettavo.

Il mio vincolo era che devi usare i componenti della data per trovare Pi. Puoi ovviamente usare i componenti, moltiplicare per 0 quindi aggiungere 3.1416, ma questo è noioso e spreca preziosi caratteri!

Vince il codice più corto!


61
Cosa c'è di così speciale in 14/3/16?
Neil

5
definire utilizzando la data odierna . Potrei ottenere la data come un numero, dividere per sé e moltiplicare per una costante predefinita perpi
Luis Mendo

7
@Neil: perché il 14/03/16 e il 31/4/16 non sono date effettive valide in formato D / M / Y. Non ci sono 14 mesi e aprile ha solo 30 giorni. Personalmente penso che dovremmo aspettare fino al 28/06/32 (M / D / Y) o forse 6/06/83 (D / M / Y), ma questa è tutta un'altra guerra santa.
Darrel Hoffman,

8
@DarrelHoffman Sei un uomo Tau che vedo.
jmasterx,

16
Purtroppo, è l'unico giorno PI nell'area culturale degli Stati Uniti. Gli europei, con il loro sciocco ordine di date lexigraficamente sensibile, non riescono ad avere giorni PI annuali. Risparmia un pensiero triste per loro, mentre stai mangiando il tuo pi (e) oggi.
TED

Risposte:


8

05AB1E, 16 13 byte

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

Provalo online.

Sfortunatamente un bug con float rende questo byte più lungo: /

Grazie ad Adnan per il golf di 3 byte.

Spiegazione

ž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

¦¦invece di 2000-tre byte più corto;)
Adnan

11
+1 žfžežgsuona come una bella parola ceca :)
yo'

In UTF-8, questo ammonta a 19 byte.
OldBunny2800

3
@ OldBunny2800 05AB1E utilizza CP1252 per la codifica.
uno spaghetto il

Bug con galleggianti?
Calcolatrice

19

C, 32 byte

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

Se perdere un po 'più di accuratezza va bene, posso arrivare a circa 29 byte, essendo ancora preciso a 4 cifre oltre il decimale (al momento di questo post):

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

#include<time.h>?
gatto

Inoltre, dov'è il codice eseguibile? questo è solo qualcosa che il preprocessore deve copiare / incollare; uno snippet. Ci piacciono le implementazioni eseguibili qui.
gatto

3
@tac la maggior parte dei compilatori C non richiede #includele intestazioni di libreria standard. Includerli manualmente è quasi sempre una buona idea, ma ometterli rende il golf in codice C molto più semplice.
Josh

12
@tac la risposta si comporta principalmente come una funzione. Diverse risposte qui sono anche funzioni autonome. Non vedo il punto nel fornire una mainfunzione di esempio per dimostrare come chiamare questa macro argomento singolo.
Josh

1
@tac Penso che le regole standard [code-golf] siano che a meno che le funzioni proibite siano 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)

Variabile a

La variabile a è un oggetto data. Richiamo tutte le informazioni sulla mia data.

Mese, giorno e anno

Le chiamate di mese, giorno e anno restituiscono effettivamente un oggetto che normalmente restituisce una stringa. Per usarlo correttamente come numero, l'ho circondato su entrambi i lati con operazioni matematiche per lanciarlo automaticamente su un numero.

1e-4

1e-4è un byte più corto di .0001.

mod.01

.funge da separatore della correzione automatica di AppleScript. Usando questo, posso usare il modulo e ancora mantenerlo un byte per me stesso.

Nessuna dichiarazione / registro di ritorno

L'ultimo valore calcolato automaticamente viene restituito dal programma. Ho emesso il numero calcolato tramite la casella di ritorno.

Ed eccone una gif in esecuzione!

pi day gif


8
Dimentica Java, questa deve essere la lingua più dettagliata
Downgoat,

@Downgoat Immagino che dovrebbe essere "leggibile come l'inglese" o qualcosa del genere ... lo usiamo un po 'in uno dei miei lavori e non mi piace molto ogni volta che devo apportare modifiche a tali script.
Chris Cirefice,

@ChrisCirefice Sì, no - questa lingua ha alcuni pezzi fastidiosi. cioè volume volume del sistema.
Addison Crump,

13

Mathematica + coreutils, 20 byte

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

Fortunatamente, Mathematica interpreta l'output di un comando esterno come espressione. In questo caso l'output è un float valido, quindi #è implicita la moltiplicazione con l'argomento della funzione .


È una combinazione che non sapevo esistesse.
Calcolatrice

12

Lua, 30 27 byte

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

Moltiplica il primo argomento della riga di comando per la data corrente nel formato mm.ddyy, che in realtà è 03.1416.


9

Bash + bc, 25 20 byte

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

Grazie a manatwork per il salvataggio di cinque byte.

Uso:

$ ./pi-round.sh 3
9.4248

La notazione qui-stringa è così lunga:date +%m.%d%y\*$1|bc
arte

@manatwork hai ragione! Stavo giocando con lo stesso, ma non riuscivo a capire come combinarlo. Grazie!
Andlrc

6

PowerShell v2 +, 46 28 25 byte

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

Abbastanza diretto. Prende l'input $args[0]e lo moltiplica per la data formattata comeM.dy ( Get-è implicito). Si noti che ciò potrebbe richiedere molto tempo per essere eseguito su v2 poiché itera possibili sostituzioni Date(ad esempio, controllo della %PATH%variabile di ambiente, ecc.) Prima di accontentarsi Get-Date.


Puoi tagliare lo spazio dopo -f?
Briantist

1
@briantist Purtroppo, non qui. Stiamo abusando del riconoscimento dei modelli di PowerShell, dal momento che la bandiera reale è -Format. Con flag come questo, devi solo essere inequivocabile (ad esempio, se avessi -Debuge -Delimitercome potenziali opzioni, avresti bisogno di almeno tre lettere per differenziare). La rimozione dello spazio significa che PowerShell tenta di analizzare il flag -F"M.dy"ma non riesce a trovare un argomento corrispondente e quindi genera un errore.
AdmBorkBork,

ahhh lo vedo adesso. Questo è quello che ottengo leggendo questo su un treno dopo una lunga giornata. Lo stavo interpretando come -foperatore. Ha un senso totale ora.
fiorente

6

R 3.2.4, 55 51 47 byte

modifica Mi sono reso conto che avrei potuto usare scangrazie @FryAmTheEggMan. Ridotto 4 byte grazie a @MickyT.

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

Primo tentativo di golf. Buona giornata!


1
Benvenuti in PPCG :) Non sono un programmatore R, ma non è necessario fornire una funzione con nome, ma solo un'espressione che restituisce una funzione. Quindi sono abbastanza sicuro che puoi lasciar perdere f=.
FryAmTheEggman

2
Puoi andare ancora oltre e farescan()*as.numeric(format(Sys.Date(),'%m.%d%y'))
MickyT

2
as.doubleinvece di as.numericsalvare un byte aggiuntivo
Flounderer

5

GNU Awk, 23 caratteri

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

Esecuzione di esempio:

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

5

Pyth, 19 byte

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

Provalo qui!
Ovviamente funziona solo al 14-03-2016.

Spiegazione

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

     .d4 # mese corrente
        \. # punto tra mese e giorno
          .d5 # giorno corrente del mese
             > 2`.d3 # ultime 2 cifre dell'anno
   s [# concatena tutto in una stringa
  v # eval -> converti in float
* Q # si moltiplica con l'input per ottenere la circonferenza

5

PHP, 45 26 25 24 byte

Utilizza la codifica Windows-1252

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

Esegui in questo modo:

echo '<?=$argv[1]*date(~‘Ñ•†);' | php -- 3
  • Salvato 19 byte utilizzando date()invece diDateTime::format
  • Salvato un byte utilizzando il tag echo
  • Ho salvato un byte utilizzando la codifica ISO-8859 e negando la stringa di formato, quindi non è necessario inserire virgolette doppie. Potrebbe rovinare un po 'il tuo terminale quando lo esegui dalla CLI, ma funziona.

Se si assume register_globals su true, è possibile utilizzare $nvia /?n=3nell'URL.
Martijn,

@Martijn Questo richiede PHP 4.1 o impostarlo usando il php.inifile. prima ha detto che vuole allontanarsi da tale metodo.
Ismael Miguel,

4

Python 2, 58 caratteri

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

Provalo!

Spiegazione:

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 caratteri

Questo utilizza un metodo proprietario solo per Firefox .

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

Grazie a:

  • Ismael Miguel per il suggerimento stringa modello (-2 caratteri).

Esempio di esecuzione (Firefox Web Console):

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

Nota: questo non funzionerà in Firebug Console. Sembra che Firebug esegua qualche espansione sulla stringa del modello, trasformandosi `%m.%d%y`in `%__fb_scopedVars(m).d%y`prima di passarlo al codice.


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

Oh. [facepalm] Non ho idea del perché, di solito dimentico quel trucco. Anche se uso regolarmente le stringhe del modello.
arte

Lo so. Neanche io capisco. Quello che sto cercando di ottenere è un modo per rimuoverlo newda lì.
Ismael Miguel,

L'ho provato su Firefox e ha funzionato bene. Ho copiato e incollato dalla console. Da quando ho sostituito ('...')con 2 backtick, sono 2 byte.
Ismael Miguel,


2

Mathematica, 54

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

2

Vitsy + coreutils, 19 byte

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

Spiegazione:

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

Non può essere eseguito in modalità provvisoria, poiché utilizza il metodo exec di Runtime.


2

SpecBAS , 39 byte

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

Niente di straordinario. La formattazione della data come stringa quindi moltiplica l'input per il VAL(valore) di quella stringa.


Collegamento interprete / compilatore?
gatto


Ho modificato il link nella tua risposta
cat

2

Oracle 11g, 50 49 byte

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

un byte in meno, grazie a @MickyT


puoi lasciare spazio prima delFROM
MickyT

2

Python 3, 74 54 byte

usando il modulo temporale anziché datetime come la risposta di Loovjo

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

soluzione precedente

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

2
@Zenadix Il meta consenso è che le funzioni senza nome sono OK.
FryAmTheEggman

2

Fogli Google, 13 byte

I byte vengono calcolati con un byte per carattere, zero byte per cella ad eccezione della cella di input designata, due byte. Il segno di uguale per iniziare una formula non viene conteggiato. (Non so se questo è standard, per favore correggimi se sbaglio.)

Esegui lo snippet per visualizzare il codice.

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>

Funziona perché puoi definire i tuoi formati di data in Fogli Google. L'ho fatto così <month>.<day><year>.


Potresti chiedere a meta su questo sistema di punteggio. ; P
Addison Crump

Lo farò quando avrò tempo (forse stasera nel Maryland)
OldBunny2800,

2

Pyke , 16 15 byte, codifica ASCII

C867wä%J"bT4^/*

Spiegazione:

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

o 11 byte (non competitivo), (aggiunge singoli stringa, anno a 2 cifre, sommabili stringa)

C856\.R3sb*

Spiegazione:

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

Immagino che questo sia un Pyke diverso da pyke.sourceforge.net ? Puoi pubblicare un link alle specifiche della lingua?
Robert Fraser,


Mi chiedo solo, quale codifica usa Pyke? Se è UTF-8, si tratta di 16 byte.
OldBunny2800

1
@ OldBunny2800 Non importa; in questo caso utilizza buoni vecchi ascii poiché tutti i punti di codice sono inferiori a 255. Secondo meta.codegolf.stackexchange.com/a/5879/32686 , la risposta può definire la propria codifica a costo zero
Blue

1

JavaScript ES6, 68 66 byte

Salvato 2 byte grazie a dev-null!

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

Funzione anonima. Alcuni usi:

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

1
Dovresti provare a usarewith
Ismael Miguel

1

Tcl / Tk, 58 byte

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

(Questo è un programma completo. Se vuoi imbrogliare e rimuovere l' putsistruzione esplicita , allora è solo 51 byte - dovresti avviare tclsh e digitare / incollare direttamente quanto segue, però :)

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

Racchetta, 112 caratteri

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

Legge il numero dall'input nella sintassi del lettore standard.


1

TI-84 Basic, 30 byte

Funziona su calcolatori TI-83/84; E è il token della notazione scientifica e ~ è il token negativo.

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

Test Case

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*

Provalo 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

Arrotondiamo πa un numero di cifre decimali pari al minimo di {month,day,year}, quindi lo moltiplichiamo per l'input.

Questa è una funzione che accetta input tramite X. Memorizzalo in una delle variabili Y, ad esempio Y1, e quindi chiama come Y1([number])nella schermata iniziale.


Sembra esserci un certo disaccordo sul fatto che Ansè consentito prendere input tramite .
AdmBorkBork,

Come sono solo 13 byte? Senza contare l'ingresso A, conto 22 caratteri.
OldBunny2800

1
@ OldBunny2800 TI-BASIC è basato su token, ogni atomo è rappresentato come uno o due byte.
Adám,

@ OldBunny2800 La code page è qui .
lirtosiast,

1

APL , 19 byte

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

⎕TSè 2016 3 14 12 34 56 789cioè 14 marzo rd 2016 proprio prima 12:35
make nella stringa, cioè '2016 3 14 12 34 56 789'
8↑2↓cadere primi due ( '20') poi prendere il prossimo otto ( '16 3 14 ')
2⌽ruotare due personaggi, dando ' 3 14 16'
make in numeri ( 3 14 16)
invertire la lista, dando 16 14 3
0.01⊥valutare in base di ¹/₁₀₀ , = 16 × 0,01² + 15 × 0,01¹ + 3 × 0,01⁰ = 0,0016 + 0,15 + 3 = 3,1416
⎕×moltiplicare per l'ingresso

o

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

⎕TSè 2016 3 14 12 34 56 789, vale a dire 14 marzo rd 2016 proprio prima 12:35
make nella stringa, cioè '2016 3 14 12 34 56 789'
7↑2↓cadere primi due ( '20') poi prendere il prossimo sette ( '16 3 14')
2⌽ruotare due personaggi, dando ' 3 1416'
make in numeri ( 3 1416)
invertire la lista, dando 1416 3
1E¯4⊥valutare in base di ¹/ ₁₀₀₀₀, = 1416 × 0,01¹ + 3 × 0,01⁰ = 0,1416 + 3 = 3,1416
⎕×moltiplicare per l'ingresso


Come funziona?
OldBunny2800,

1
@ OldBunny2800 Clear?
Adám,

Sì, grazie, ma in UTF-8 sono 38 byte.
OldBunny2800


1
@ OldBunny2800 APL utilizza una propria tabella codici: ognuno di questi caratteri ha un byte. (Questo è stato prima che ASCII ti dispiaccia ...)
uno spaghetto il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.