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!

jmasterx
fonte
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
um spaghetto
fonte
¦¦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
Josh
fonte
#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

Addison Crump
fonte
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.

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

Katenkyo
fonte
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
andlrc
fonte
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.

AdmBorkBork
fonte
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!

bouncyball
fonte
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
homem a trabalhar
fonte
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
Denker
fonte
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.
aross
fonte
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
Loovjo
fonte
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.

homem a trabalhar
fonte
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
3

Ruby, 40 bytes

->n{n*Time.new.strftime('%m.%d%y').to_f}
Maçaneta da porta
fonte
2

Mathematica, 54

.0001FromDigits[Now@{"Month","Day","YearShort"},100]#&
shrx
fonte
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.

Addison Crump
fonte
2

SpecBAS , 39 bytes

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

Nada fora do comum. Formata a data como uma sequência e multiplica a entrada pelo VAL(valor) dessa sequência.

Brian
fonte
Link para intérprete / compilador?
cat
Eu editei o link na sua resposta #
cat
2

Oracle 11g, 50 49 bytes

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

menos um byte, graças a @MickyT

Argenis García
fonte
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'))
Erwan
fonte
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>.

OldBunny2800
fonte
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))
Azul
fonte
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
Conor O'Brien
fonte
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]}
Dúthomhas
fonte
1

Java 114 bytes

public double p(double d){
  return (d*Double.parseDouble(new SimpleDateFormat("MM.ddyy").format(new Date())));
}
Jeff I
fonte
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.

Winny
fonte
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
Timtech
fonte
1

R 48 bytes

d*as.double(format(Sys.Date(),format="%m.%d%y"))
Jeff I
fonte
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 
Luis Mendo
fonte
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.

lirtosiast
fonte
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

Adão
fonte
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