Feliz dia do Pi arredondado


25

Para comemorar o Dia do Pi Arredondado, você deve aproveitar a data de hoje para criar um programa que absorva o diâmetro de um círculo e produza sua circunferência multiplicando o diâmetro por 3,1416, onde 3,1416 deve ser obtido usando a data de hoje.

Input 3
Output 9.4248
etc.

Não leva a data como entrada. Você não precisa usar todos os componentes da data, mas os dígitos de pi devem vir da formatação de um objeto Date ou do uso de um objeto date para obtê-lo. As respostas até agora parecem boas.

Não tenho certeza do que mais especificar. Todas as respostas até agora atendem ao que eu estava esperando.

Minha restrição foi que você deve usar componentes da data para criar o Pi. Obviamente, você pode usar os componentes, multiplicar por 0 e adicionar 3,1416, mas isso é chato e desperdiça caracteres preciosos!

O menor código vence!


61
O que há de tão especial em 14/3/16?
Neil

5
defina usando a data de hoje . Eu poderia obter a data como um número, divida por si e multiplicar por uma constante predefinida parapi
Luis Mendo

7
@ Neil: porque 14/3/16 e 31/4/16 não são datas reais válidas no formato D / M / A. Não há 14 meses e abril tem apenas 30 dias. Pessoalmente, acho que devemos esperar até 28/6/32 (M / D / A) ou talvez 2/3/83 (D / M / A), mas essa é outra guerra santa.
Darrel Hoffman

8
@DarrelHoffman Você é um homem de Tau.
jmasterx

16
Infelizmente, é o seu único dia de PI na área cultural dos EUA. Os europeus, com seu pedido tolo de data lexigraficamente sensata, não conseguem ter dias de PI anuais. Poupe um pensamento triste para eles, como você está comendo seu pi (e) hoje.
TED

Respostas:


8

05AB1E, 16 13 bytes

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

Experimente online.

Infelizmente, um bug com flutuadores torna esse byte mais longo: /

Agradecimentos a Adnan por jogar fora 3 bytes.

Explicação

ž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

¦¦em vez de 2000-se três bytes mais curto;)
Adnan

11
+1 žfžežgsoa como uma boa palavra em tcheco :)
yo

No UTF-8, isso totaliza 19 bytes.
OldBunny2800

3
@ OldBunny2800 05AB1E usa CP1252 para codificação.
a spaghetto

Bug com carros alegóricos?
CalculatorFeline

19

C, 32 bytes

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

Se perder um pouco mais de precisão é bom, eu posso reduzi-lo para cerca de 29 bytes, sendo ainda preciso até 4 dígitos após o decimal (no momento da publicação):

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

#include<time.h>?
cat

Além disso, onde está o código executável? isso é apenas algo para o pré-processador copiar / colar; um trecho. Gostamos de implementações executáveis ​​aqui.
cat

3
@tac A maioria dos compiladores C não exige #includecabeçalhos de biblioteca padrão. Incluí-los manualmente é quase sempre uma boa idéia, mas omití-los facilita muito o código de golfe em C.
Josh

12
@tac a resposta se comporta basicamente da mesma forma que uma função. Várias respostas aqui também são funções independentes. Não vejo sentido em fornecer uma mainfunção de exemplo para demonstrar como chamar essa macro de argumento único.
Josh

1
@ tac Acho que as regras padrão do [code-golf] são que, a menos que funções proibidas sejam aceitáveis.
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)

Variável a

A variável a é um objeto de data. Eu chamo todas as minhas informações de data.

Mês, dia e ano

As chamadas de mês, dia e ano realmente retornam um objeto que normalmente retorna uma string. Para usá-lo adequadamente como um número, eu o envolvi dos dois lados com operações matemáticas para convertê-lo automaticamente em um número.

1e-4

1e-4é um byte menor que .0001.

mod.01

.atua como um separador para a correção automática AppleScript. Ao usar isso, posso usar o módulo e ainda manter um byte para mim.

Nenhuma declaração de retorno / log

O último valor calculado automaticamente é retornado pelo programa. Eu produzo o número calculado através da caixa de retorno.

E aqui está um gif dele correndo!

gif dia pi


8
Esqueça Java, este tem de ser a língua detalhado mais
Downgoat

@Downgoat Eu acho que deveria ser "legível como o inglês" ou algo assim ... usamos um pouco em um dos meus trabalhos e eu realmente não gosto sempre que preciso fazer alterações nesses scripts.
Chris Cirefice

@ChrisCirefice Sim, não - esta linguagem tem algumas partes irritantes. ou seja, volume do sistema de volume.
Addison Crump

13

Mathematica + coreutils, 20 bytes

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

Felizmente, o Mathematica interpreta a saída de um comando externo como uma expressão. Nesse caso, a saída é um valor flutuante válido, de modo que a multiplicação com o argumento da função #é implícita.


Essa é uma combinação que eu não sabia que existia.
CalculatorFeline

12

Lua, 30 27 bytes

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

Multiplique o primeiro argumento da linha de comandos pela data atual no formato mm.ddyy, que é realmente 03.1416.


9

Bash + bc, 25 20 bytes

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

Agradecimentos ao manatwork por salvar cinco bytes.

Uso:

$ ./pi-round.sh 3
9.4248

Essa notação de string aqui é tão longa:date +%m.%d%y\*$1|bc
manatwork 14/03

@ manatwork você está correto! Eu estava brincando com o mesmo, mas não conseguia descobrir como combiná-lo. Obrigado!
andlrc

6

PowerShell v2 +, 46 28 25 bytes

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

Bem direto. Pega a entrada $args[0]e a multiplica pela data formatada comoM.dy ( Get-está implícita). Observe que isso pode levar muito tempo para ser executado na v2, pois itera possíveis substituições Date(por exemplo, verificando sua %PATH%variável de ambiente etc.) antes de iniciar Get-Date.


Você pode cortar o espaço depois -f?
briantist

1
@ briantist Infelizmente, não aqui. Estamos abusando do reconhecimento de padrões do PowerShell, já que o sinalizador real é -Format. Com sinalizadores como esse, você só precisa ser inequívoco (por exemplo, se você tivesse -Debuge -Delimitercomo opções possíveis, precisaria de pelo menos três letras para diferenciar). Remover o espaço significa que o PowerShell tenta analisar o sinalizador, -F"M.dy"mas não consegue encontrar um argumento que corresponda e, portanto, gera um erro.
AdmBorkBork

ahhh eu vejo isso agora. É o que recebo por ler isso em um trem depois de um longo dia. Eu estava interpretando isso como o -foperador. Faz total sentido agora.
briantist

6

R 3.2.4, 55 51 47 bytes

edit Eu percebi que poderia usar scanobrigado @FryAmTheEggMan. Redução de 4 bytes graças a @MickyT.

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

Primeira tentativa de golfe. Feliz dia do pi!


1
Bem-vindo ao PPCG :) Eu não sou programador R, mas você não precisa fornecer uma função nomeada, apenas uma expressão que é avaliada como uma função. Então, eu tenho certeza que você pode largar o f=.
FryAmTheEggman 14/03

2
Você pode ir ainda mais longe e fazerscan()*as.numeric(format(Sys.Date(),'%m.%d%y'))
MickyT

2
as.doubleem vez de as.numericsalvar um byte adicional
Flounderer 15/03

5

GNU Awk, 23 caracteres

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

Exemplo de execução:

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

5

Pitão, 19 bytes

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

Experimente aqui!
Só funciona em 14/03/2016, é claro.

Explicação

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

     .d4 # mês atual
        \. # ponto entre mês e dia
          .d5 # dia atual do mês
             > 2`.d3 # últimos 2 dígitos do ano
   s [# concat tudo em uma string
  v # eval -> converter para flutuar
* Q # multiplique com entrada para obter a circunferência

5

PHP, 45 26 25 24 bytes

Usa a codificação Windows-1252

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

Execute assim:

echo '<?=$argv[1]*date(~‘Ñ•†);' | php -- 3
  • Economizou 19 bytes usando em date()vez deDateTime::format
  • Salvou um byte usando a tag echo
  • Salva um byte usando a codificação ISO-8859 e negando a sequência de formatação, para que não haja aspas duplas. Pode atrapalhar um pouco o seu terminal ao executá-lo na CLI, mas funciona.

Se você assumir register_globals como true, poderá usá $n-lo /?n=3no URL.
Martijn

@ Martijn Isso requer PHP 4.1 ou define-o usando o php.iniarquivo. Aross disse antes que quer se afastar de tal método.
Ismael Miguel

4

Python 2, 58 caracteres

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

Tente!

Explicação:

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

Isso usa um método exclusivo do Firefox .

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

Graças a:

  • Ismael Miguel para a sugestão de sequência de modelo (-2 caracteres).

Exemplo de execução (Firefox Web Console):

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

Nota: isso falhará no Firebug Console. Parece que o Firebug realiza alguma expansão na cadeia de modelo, transformando-a `%m.%d%y`em `%__fb_scopedVars(m).d%y`antes de passá-la para o código.


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

Oh. [facepalm] Não faço ideia do porquê, geralmente esqueço esse truque. Embora eu use as seqüências de caracteres de modelo regularmente.
manatwork

Eu sei. Eu também não entendo. O que estou tentando conseguir é uma maneira de remover isso newde lá.
Ismael Miguel

Eu tentei no Firefox e funcionou bem. Copiei e colei do console. Desde que substituí ('...')por 2 backticks, são 2 bytes.
Ismael Miguel


2

Mathematica, 54

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

2

Vitsy + coreutils, 19 bytes

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

Explicação:

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

Não pode ser executado no modo de segurança, pois ele usa o método exec do Runtime.



2

Oracle 11g, 50 49 bytes

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

menos um byte, graças a @MickyT


você pode largar o espaço antes deFROM
MickyT 14/03

2

Python 3, 74 54 bytes

usando o módulo de hora em vez de data e hora como a resposta de Loovjo

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

solução anterior

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

2
@Zenadix O meta consenso é que funções não nomeadas estão OK.
FryAmTheEggman 14/03

2

Planilhas Google, 13 bytes

Os bytes são calculados com um byte por caractere, zero bytes por célula, exceto para a célula de entrada designada, dois bytes. O sinal de igual para iniciar uma fórmula não é contado. (Não sei se isso é padrão, corrija-me se estiver errado.)

Execute o snippet para ver o 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>

Isso funciona porque você pode definir seus próprios formatos de data no Planilhas Google. Eu fiz para que seja <month>.<day><year>.


Você pode perguntar sobre meta sobre esse sistema de pontuação. ; P
Addison Crump

Vai fazer quando eu tiver tempo (talvez hoje à noite em Maryland)
OldBunny2800

2

Pyke , 16 15 bytes, codificação ASCII

C867wä%J"bT4^/*

Explicação:

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

ou 11 bytes (não competitivo), (adiciona singles de string, ano com 2 dígitos, sumables de string)

C856\.R3sb*

Explicação:

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

Eu estou supondo que este é um Pyke diferente do pyke.sourceforge.net ? Você pode postar um link para a especificação do idioma?
Robert Fraser


Imaginando, que codificação o Pyke usa? Se for UTF-8, são 16 bytes.
OldBunny2800

1
@ OldBunny2800 Não importa; nesse caso, ele usa ascii antigo e bom, já que todos os pontos de código estão abaixo de 255. De acordo com meta.codegolf.stackexchange.com/a/5879/32686 , a resposta pode definir sua própria codificação sem nenhum custo
Blue

1

JavaScript ES6, 68 66 bytes

Economizou 2 bytes graças a dev-null!

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

Função anônima. Alguns usos:

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

1
Você deve tentar usarwith
Ismael Miguel

1

Tcl / Tk, 58 bytes

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

(Esse é um programa completo. Se você deseja trapacear e remover a putsinstrução explícita , são apenas 51 bytes - você deve iniciar o tclsh e digitar / colar o seguinte diretamente, no entanto :)

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

Raquete, 112 caracteres

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

Lê o número da entrada na sintaxe padrão do leitor.


1

TI-84 Basic, 30 bytes

Funciona em calculadoras TI-83/84; E é o token de notação científica e ~ é o token negativo.

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

Caso de teste

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*

Experimente 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

Arredondamos πpara um número de casas decimais igual ao mínimo de {month,day,year}e depois multiplicamos pela entrada.

Essa é uma função que recebe a entrada por meio do X. Armazene-a em uma das variáveis ​​Y, por exemplo Y1, e depois chame como Y1([number])na tela inicial.


Parece haver alguma discordância de que Ansé permitida a entrada de informações .
AdmBorkBork

Como isso é apenas 13 bytes? Sem contar a entrada A, conto 22 caracteres.
OldBunny2800

1
@ OldBunny2800 O TI-BASIC é baseado em token, cada átomo é representado como um ou dois bytes.
Adám 16/03/16

@ OldBunny2800 A página de código está aqui .
lirtosiast

1

APL , 19 bytes

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

⎕TSé 2016 3 14 12 34 56 789isto março 14 rd de 2016 logo antes 12:35
transformar em seqüência, ou seja, '2016 3 14 12 34 56 789'
8↑2↓deixar cair dois primeiros ( '20'), em seguida, tomar em seguida oito ( '16 3 14 ')
2⌽gire dois personagens, dando ' 3 14 16'
make em números ( 3 14 16)
inverter a lista, dando 16 14 3
0.01⊥avaliar em base de ¹/₁₀₀ , = 16 × 0,01² + 15 × 0,01¹ + 3 × 0,01⁰ = 0,0016 + 0,15 + 3 = 3,1416
⎕×multiplique pela entrada

ou

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

⎕TSé 2016 3 14 12 34 56 789, ou seja, 14 março rd de 2016 logo antes 12:35
transformar em seqüência, ou seja, '2016 3 14 12 34 56 789'
7↑2↓deixar cair dois primeiros ( '20'), em seguida, tomar em seguida sete ( '16 3 14')
2⌽gire dois personagens, dando ' 3 1416'
make em números ( 3 1416)
inverter a lista, dando 1416 3
1E¯4⊥avaliar em base de ¹/ ₁₀₀₀₀, = 1416 × 0,01¹ + 3 × 0,01⁰ = 0,1416 + 3 = 3,1416
⎕×multiplique pela entrada


Como é que isso funciona?
OldBunny2800

1
@ OldBunny2800 Limpar?
Adám 16/03/16

Sim, obrigado, mas em UTF-8 são 38 bytes.
OldBunny2800


1
@ OldBunny2800 O APL usa sua própria página de código - cada um desses caracteres tem um byte. (Isso foi antes da ASCII, lembre-se ...)
a spaghetto
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.