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!


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

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

#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


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 .


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.


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

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.


¿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!


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

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

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.

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

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.


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


2

Mathematica, 54

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

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.



2

Oracle 11g, 50 49 bytes

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

un byte menos, gracias a @MickyT


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

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


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

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

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]}

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

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.


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

1

R 48 bytes

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

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 

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.


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


¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.