Feliz día de Pi redondeado

25

Para celebrar el Día del Pi Redondeado, debe aprovechar la fecha de hoy para hacer un programa que tome el diámetro de un círculo y genere su circunferencia multiplicando el diámetro por 3.1416, donde 3.1416 debe obtenerse usando la fecha de hoy.

Input 3
Output 9.4248
etc.

No toma la fecha como entrada. No tiene que usar todos los componentes de la fecha, pero los dígitos de pi deben provenir de formatear un objeto Date o usar un objeto date para obtenerlo. Las respuestas hasta ahora se ven bien.

No estoy seguro de qué más especificar. Todas las respuestas hasta ahora cumplen con lo que esperaba.

Mi restricción fue que debe usar componentes de la fecha para obtener Pi. Por supuesto, puede usar los componentes, multiplicar por 0 y luego agregar 3.1416, ¡pero eso es aburrido y desperdicia caracteres preciosos!

¡El código más corto gana!

jmasterx
fuente
61
¿Qué tiene de especial el 14/3/16?
Neil
55
definir usando la fecha de hoy . Podría obtener la fecha como un número, dividir por sí mismo y multiplicar por una constante predefinida parapi
Luis Mendo
77
@Neil: Porque 14/3/16 y 31/4/16 no son fechas reales válidas en formato D / M / Y. No hay 14 meses, y abril solo tiene 30 días. Personalmente, creo que deberíamos esperar hasta el 28/06/32 (M / D / Y) o tal vez el 6/2/83 (D / M / Y), pero esa es otra guerra santa.
Darrel Hoffman
8
@DarrelHoffman Eres un hombre Tau que veo.
jmasterx
16
Lamentablemente, es el único día de PI en el área cultural de los Estados Unidos. Los europeos, con sus tontos pedidos de fechas sensibles a la lexigrafía, no tienen días PI anuales. Ahorre un pensamiento triste para ellos, ya que está comiendo su pi (e) hoy.
TED

Respuestas:

8

05AB1E, 16 13 bytes

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

Pruébalo en línea.

Desafortunadamente, un error con flotadores hace que este byte sea más largo: /

Gracias a Adnan por jugar 3 bytes.

Explicación

ž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
un espagueti
fuente
¦¦en lugar de 2000-es tres bytes más corto;)
Adnan
11
+1 žfžežgsuena como una bonita palabra checa :)
yo '
En UTF-8, esto totaliza 19 bytes.
OldBunny2800
3
@ OldBunny2800 05AB1E utiliza CP1252 para la codificación.
un spaghetto
¿Insecto con flotadores?
CalculatorFeline
19

C, 32 bytes

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

Si está bien perder un poco más de precisión, puedo reducirlo a unos 29 bytes siendo exacto a 4 dígitos más allá del decimal (en el momento de esta publicación):

#define f(d)d*time(0)/46408e4
Josh
fuente
#include<time.h>?
gato
Además, ¿dónde está el código ejecutable? esto es algo para que el preprocesador copie / pegue; un fragmento Nos gustan las implementaciones ejecutables aquí.
gato
3
@tac la mayoría de los compiladores de C no requieren #includeencabezados de biblioteca estándar. Incluirlos manualmente es casi siempre una buena idea, pero omitirlos hace que el código de golf en C sea mucho más fácil.
Josh
12
@tac la respuesta se comporta casi igual que una función. Varias respuestas aquí también son funciones independientes. No veo el punto de proporcionar una mainfunción de muestra para demostrar cómo llamar a esta macro de argumento único.
Josh
1
@tac Creo que las reglas estándar [code-golf] es que a menos que las funciones prohibidas estén bien.
Mindwin
14

AppleScript, 122 120 bytes

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 es un objeto de fecha. Llamo a toda mi información de fecha fuera de ella.

Mes, día y año

Las llamadas de mes, día y año en realidad devuelven un objeto que normalmente devuelve una cadena. Para usarlo adecuadamente como un número, lo he rodeado en ambos lados con operaciones matemáticas para convertirlo automáticamente en un número.

1e-4

1e-4es un byte más corto que .0001.

mod.01

.actúa como un separador de la autocorrección AppleScript. Al usar esto, puedo usar el módulo y aún mantenerlo en byte.

Sin declaración / registro de devolución

El programa devuelve el último valor calculado automáticamente. Saco el número calculado a través de la casilla de devolución.

¡Y aquí hay un gif que se está ejecutando!

pi día gif

Addison Crump
fuente
8
Olvídese de Java, este debe ser el lenguaje más detallado
Downgoat
@Downgoat Supongo que se supone que es "legible como el inglés" o algo así ... lo usamos un poco en uno de mis trabajos y realmente me disgusta cada vez que tengo que hacer cambios en dichos scripts.
Chris Cirefice
@ChrisCirefice Sí, no, este lenguaje tiene algunas partes molestas. es decir, volumen del sistema.
Addison Crump
13

Mathematica + coreutils, 20 bytes

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

Afortunadamente, Mathematica interpreta la salida de un comando externo como una expresión. En este caso, la salida es un flotante válido, de modo que #se implica la multiplicación con el argumento de la función .

murphy
fuente
Esa es una combinación que no sabía que existía.
CalculatorFeline
12

Lua, 30 27 bytes

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

Multiplique el primer argumento de la línea de comandos por la fecha actual en formato mm.ddyy, que en realidad es 03.1416.

Katenkyo
fuente
9

Bash + bc, 25 20 bytes

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

Gracias a manatwork por guardar cinco bytes.

Uso:

$ ./pi-round.sh 3
9.4248
andlrc
fuente
Que la notación aquí cuerdas es tan larga:date +%m.%d%y\*$1|bc
manatwork
@manatwork tienes razón! Yo también jugaba con el mismo, pero no sabía cómo combinarlo. ¡Gracias!
andlrc
6

PowerShell v2 +, 46 28 25 bytes

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

Muy claro. Toma la entrada $args[0]y la multiplica por la fecha formateada comoM.dy (la Get-está implícita). Tenga en cuenta que esto puede tardar mucho tiempo en ejecutarse en v2, ya que itera posibles sustituciones para Date(por ejemplo, verificar su %PATH%variable de entorno, etc.) antes de establecerse Get-Date.

AdmBorkBork
fuente
¿Puedes cortar el espacio después -f?
briantist
1
@briantist Lamentablemente, no aquí. Estamos abusando del reconocimiento de patrones de PowerShell, ya que la bandera real es -Format. Con indicadores como este, solo debe ser inequívoco (por ejemplo, si tuviera -Debugy -Delimitercomo posibles opciones, necesitaría al menos tres letras para diferenciar). Eliminar el espacio significa que PowerShell intenta analizar la bandera -F"M.dy"pero no puede encontrar un argumento que coincida, por lo que arroja un error.
AdmBorkBork
ahhh lo veo ahora Eso es lo que obtengo por leer esto en un tren después de un largo día. Lo estaba interpretando como el -foperador. Tiene sentido total ahora.
briantist
6

R 3.2.4, 55 51 47 bytes

editar Me di cuenta de que podía usar scangracias @FryAmTheEggMan. Reducido 4 bytes gracias a @MickyT.

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

Primer intento de golf. Feliz dia pi!

bola hinchable
fuente
1
Bienvenido a PPCG :) No soy un programador de R, pero no necesita proporcionar una función con nombre, solo una expresión que se evalúa como una función. Así que estoy bastante seguro de que puedes soltarlo f=.
FryAmTheEggman
2
Puedes ir aún más lejos y hacerloscan()*as.numeric(format(Sys.Date(),'%m.%d%y'))
MickyT
2
as.doubleen lugar de as.numericguardar un byte adicional
Flounderer
5

GNU Awk, 23 caracteres

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

Ejecución de muestra:

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

Pyth, 19 bytes

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

Pruébalo aquí!
Solo funciona en 2016-03-14, por supuesto.

Explicación

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

     .d4 # mes actual
        \. # punto entre mes y día
          .d5 # día actual del mes
             > 2`.d3 # últimos 2 dígitos del año
   s [# concat todo en una cadena
  v # eval -> convertir a flotante
* Q # se multiplica con la entrada para obtener la circunferencia
Denker
fuente
5

PHP, 45 26 25 24 bytes

Utiliza la codificación de Windows-1252

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

Corre así:

echo '<?=$argv[1]*date(~‘Ñ•†);' | php -- 3
  • Guardado 19 bytes usando en date()lugar deDateTime::format
  • Guardado un byte usando la etiqueta echo
  • Guarde un byte utilizando la codificación ISO-8859 y negando la cadena de formato, por lo que no es necesario utilizar comillas dobles. Puede estropear un poco su terminal cuando lo ejecuta desde la CLI, pero funciona.
aross
fuente
Si asume register_globals como verdadero, puede usar $nvia /?n=3en la url.
Martijn
@Martijn Eso requiere PHP 4.1 o configurarlo usando el php.iniarchivo. Aross dijo antes que eso quiere alejarse de tal método.
Ismael Miguel
4

Python 2, 58 caracteres

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

¡Intentalo!

Explicación:

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
fuente
4

JavaScript, 41 39 caracteres

Esto utiliza un método exclusivo de Firefox .

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

Gracias a:

  • Ismael Miguel por la sugerencia de cadena de plantilla (-2 caracteres).

Ejecución de muestra (Firefox Web Console):

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

Nota: esto fallará en Firebug Console. Parece que Firebug realiza alguna expansión en la cadena de plantilla, transformando`%m.%d%y` en `%__fb_scopedVars(m).d%y`antes de pasarlo al código.

hombre trabajando
fuente
1
-2 bytes:d=>new Date().toLocaleFormat`%m.%d%y`*d
Ismael Miguel
Oh. [facepalm] No tengo idea de por qué, generalmente olvido ese truco. Aunque uso las cadenas de plantillas regularmente.
manatwork
Lo sé. Realmente tampoco entiendo. Lo que intento obtener es una forma de eliminar eso newdesde allí.
Ismael Miguel
Lo probé en Firefox y funcionó bien. Copié y pegué desde la consola. Como he reemplazado ('...')con 2 backticks, eso es 2 bytes.
Ismael Miguel
3

Rubí, 40 bytes.

->n{n*Time.new.strftime('%m.%d%y').to_f}
Pomo de la puerta
fuente
2

Mathematica, 54

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

Vitsy + coreutils, 19 bytes

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

Explicación:

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

No se puede ejecutar en modo seguro, ya que esto utiliza el método exec de Runtime.

Addison Crump
fuente
2

SpecBAS , 39 bytes

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

Nada fuera de lo común. La fecha de los formatos como una cadena multiplica la entrada por el VAL(valor) de esa cadena.

Brian
fuente
Enlace intérprete / compilador?
gato
He editado el enlace en su respuesta
gato
2

Oracle 11g, 50 49 bytes

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

un byte menos, gracias a @MickyT

Argenis García
fuente
puedes dejar caer el espacio antes delFROM
MickyT
2

Python 3, 74 54 bytes

usando el módulo de tiempo en lugar de fecha y hora como la Respuesta de Loovjo

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

solución previa

from datetime import*
lambda n:n*float(datetime.now().strftime('%m.%d%y'))
Erwan
fuente
2
@Zenadix El meta consenso es que las funciones sin nombre están bien.
FryAmTheEggman
2

Hojas de cálculo de Google, 13 bytes

Los bytes se calculan con un byte por carácter, cero bytes por celda, excepto la celda de entrada designada, dos bytes. El signo igual para comenzar una fórmula no se cuenta. (No sé si esto es estándar, corrígeme si me equivoco).

Ejecute el fragmento para ver el código.

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>

Esto funciona porque puede definir sus propios formatos de fecha en Hojas de cálculo de Google. Lo hice para que así sea <month>.<day><year>.

OldBunny2800
fuente
Es posible que desee preguntar sobre meta sobre este sistema de puntuación. ; P
Addison Crump
Lo haré cuando tenga tiempo (tal vez esta noche en Maryland)
OldBunny2800
2

Pyke , 16 15 bytes, codificación ASCII

C867wä%J"bT4^/*

Explicación:

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 bytes (no competitivo), (agrega cadenas individuales, año de 2 dígitos, sumables de cadenas)

C856\.R3sb*

Explicación:

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))
Azul
fuente
Supongo que este es un Pyke diferente que pyke.sourceforge.net ? ¿Puedes publicar un enlace a la especificación del idioma?
Robert Fraser
Me pregunto, ¿qué codificación usa Pyke? Si es UTF-8, esto es 16 bytes.
OldBunny2800
1
@ OldBunny2800 No importa; en este caso, utiliza un ascii antiguo, ya que todos los puntos de código están por debajo de 255. De acuerdo con meta.codegolf.stackexchange.com/a/5879/32686 , la respuesta puede definir su propia codificación sin costo
Azul
1

JavaScript ES6, 68 66 bytes

¡Guardado 2 bytes gracias a dev-null!

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

Función anónima. Algunos usos:

f(1)    == 3.1416
f(5)    == 15.708
f(f(2)) == 19.73930112
Conor O'Brien
fuente
1
Deberías intentar usarwith
Ismael Miguel
1

Tcl / Tk, 58 bytes

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

(Es un programa completo. Si desea hacer trampa y eliminar la putsdeclaración explícita , entonces solo tiene 51 bytes; sin embargo, tendría que iniciar tclsh y escribir / pegar lo siguiente :)

expr {[gets stdin]*[clock f [clock se] -f %N.%d%g]}
Dúthomhas
fuente
1

Java 114 bytes

public double p(double d){
  return (d*Double.parseDouble(new SimpleDateFormat("MM.ddyy").format(new Date())));
}
Jeff I
fuente
96 bytes:float p(float d){return d*Float.parseFloat(new SimpleDateFormat("MM.ddyy").format(new Date()));}
Addison Crump
1

Raqueta, 112 caracteres.

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

Lee el número de entrada en la sintaxis estándar del lector.

Winny
fuente
1

TI-84 Basic, 30 bytes

Funciona en calculadoras TI-83/84; E es el token de notación científica y ~ es el token negativo.

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

Caso de prueba

D=?3
          9.4248
Timtech
fuente
1

R 48 bytes

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

MATL , 17 bytes

Z'2$'mm.ddyy'XOU*

Pruébalo en línea!

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
fuente
1

TI-BASIC, 16 13 9 bytes

Xround(π,1+min(getDate

Redondeamos πa un número de decimales igual al mínimo de{month,day,year} , y luego lo multiplicamos por la entrada.

Esta es una función que toma información a través de X. Almacénela en una de las variables Y, por ejemplo Y1, y luego llame como Y1([number])en la pantalla de inicio.

lirtosiast
fuente
Parece haber cierto desacuerdo en cuanto a que Ansse permite recibir información a través de
AdmBorkBork
¿Cómo es esto solo 13 bytes? Sin contar la entrada A, cuento 22 caracteres.
OldBunny2800
1
@ OldBunny2800 TI-BASIC está basado en token, cada átomo se representa como uno o dos bytes.
Adám
@ OldBunny2800 La página de códigos está aquí .
lirtosiast
1

APL , 19 bytes

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

⎕TSes 2016 3 14 12 34 56 789decir, en marzo 14 rd , 2016 justo antes de 24:35
convertir en cadena, es decir, '2016 3 14 12 34 56 789'
8↑2↓soltar dos primeros ( '20') y luego tomar el próximo ocho ( '16 3 14 ')
2⌽gire dos personajes, dando ' 3 14 16'
maquillaje en números ( 3 14 16)
revertir la lista, dando a 16 14 3
0.01⊥evaluar en la base ¹/₁₀₀ , = 16 × 0.01² + 15 × 0.01¹ + 3 × 0.01⁰ = 0.0016 + 0.15 + 3 = 3.1416
⎕×multiplicar con entrada

o

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

⎕TSes 2016 3 14 12 34 56 789, decir, en marzo 14 rd , 2016 justo antes de 24:35
convertir en cadena, es decir, '2016 3 14 12 34 56 789'
7↑2↓soltar dos primeros ( '20') y luego tomar el próximo siete ( '16 3 14')
2⌽gire dos personajes, dando ' 3 1416'
maquillaje en números ( 3 1416)
revertir la lista, dando a 1416 3
1E¯4⊥evaluar en la base ¹/ ₁₀₀₀₀, = 1416 × 0.01¹ + 3 × 0.01⁰ = 0.1416 + 3 = 3.1416
⎕×multiplica con entrada

Adán
fuente
¿Como funciona esto?
OldBunny2800
1
@ OldBunny2800 ¿Claro?
Adám
Sí, gracias, pero en UTF-8 son 38 bytes.
OldBunny2800
1
@ OldBunny2800 APL usa su propia página de códigos: cada uno de estos caracteres es un byte. (Esto fue antes de que ASCII te importara ...)
un spaghetto