圆角Pi日快乐


25

为了庆祝“ Rounded Pi Day”,您必须利用今天的日期来制作一个程序,该程序将圆的直径乘以3.1416来获取圆的直径并输出其周长,其中必须使用今天的日期获得3.1416。

Input 3
Output 9.4248
etc.

不将日期作为输入。您不必使用日期的所有组成部分,但是pi的数字必须来自格式化Date对象或使用日期对象来获取它。到目前为止的答案看起来不错。

不知道还要指定什么。到目前为止,所有答案都符合我的期望。

我的约束是您必须使用日期的组成部分来提出Pi。您当然可以使用这些组件,乘以0,然后添加3.1416,但这很无聊,而且浪费了宝贵的字符!

最短的代码胜出!


61
14/3/16有什么特别之处?
尼尔

5
使用今天的日期进行定义。我可以将日期作为一个数字,除以它并乘以一个预定义的常数,用于pi
Luis Mendo

7
@Neil:因为3/14/16和31/4/16不是D / M / Y格式的有效实际日期。没有14个月,而4月只有30天。我个人认为我们应该等到6/28/32(M / D / Y)或6/2/83(D / M / Y),但这是另一场圣战。
Darrel Hoffman'3

8
@DarrelHoffman你是我认识的Tau男人。
jmasterx

16
可悲的是,这是美国文化领域唯一的PI日。欧洲人在法律上讲得很不合理,因此他们没有年度PI天。当您今天正在吃pi(e)时,请为他们保留一个悲伤的想法。
TED

Answers:


8

05AB1E,16 13字节

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

在线尝试。

不幸的是,浮点数的错误使它变长了一个字节:/

感谢Adnan打高尔夫球3个字节。

说明

ž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

¦¦而不是2000-短了三个字节;)
Adnan

11
+1 žfžežg听起来像是一个不错的捷克词:)

在UTF-8中,总计19个字节。
OldBunny2800 '16

3
@ OldBunny2800 05AB1E使用CP1252进行编码。
意大利面条

漂浮的虫子?
CalculatorFeline

19

C,32个字节

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

如果损失一点精度是可以的,那么我可以将其降低到大约29个字节,但仍可以精确到小数点后4位(截至发布之时):

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

#include<time.h>

另外,可执行代码在哪里?这只是预处理器要复制/粘贴的内容;一段。我们在这里喜欢可运行的实现。

3
@tac大多数C编译器不需要您使用#include标准库头。手动包括它们几乎总是一个好主意,但是省略它们使C语言的代码编写变得容易得多。
乔什(Josh)2013年

12
@tac的答案与函数的行为基本相同。这里的几个答案也是独立函数。我看不出提供示例main函数来演示如何调用此单个参数宏的意义。
乔什(Josh)2013年

1
@tac我认为标准的[code-golf]规则是,除非禁止的功能还可以。
Mindwin

14

AppleScript,122 120字节

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)

变量a

变量a是日期对象。我取消了所有约会信息。

月,日和年

实际上,月,日和年调用会返回通常返回字符串的对象。为了正确地将其用作数字,我在两侧都进行了数学运算以将其自动转换为数字。

1e-4

1e-4.0001。短一个字节。

模型01

.充当AppleScript自动更正的分隔符。通过使用它,我可以使用取模,并且仍然自己保留一个字节。

没有退货声明/日志

程序自动返回最后计算的值。我输出通过返回框计算出的数字。

这是它运行的一个gif图像!

pi day gif


8
忘了Java,必须是最冗长的语言
-Downgoat

@Downgoat我猜想它应该像“英语一样”可读……在我们的一项工作中我们经常使用它,我真的不喜欢每当需要对此类脚本进行更改时。
克里斯·西里菲斯

@ChrisCirefice是的,不-这种语言有些令人讨厌的地方。即音量系统的音量。
Addison Crump

13

Mathematica + coreutils,20个字节

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

幸运的是,Mathematica将外部命令的输出解释为表达式。在这种情况下,输出是有效的浮点数,因此#隐含与function参数的乘法。


这是我不知道的组合。
CalculatorFeline

12

Lua,30 27字节

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

将第一个命令行参数乘以当前日期,mm.ddyy实际格式为03.1416


9

Bash + Bc,25岁 20字节

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

谢谢 manatwork节省了五个字节。

用法:

$ ./pi-round.sh 3
9.4248

这种字符串表示法太长了:date +%m.%d%y\*$1|bc
manatwork'Mar

@manatwork你是正确的!我当时正在和同一个人玩耍,但不知道如何组合。谢谢!
andlrc

6

PowerShell v2 +,46 28 25字节

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

非常简单。接受输入$args[0]并将其乘以格式为M.dyGet-暗含)的日期。请注意,这可能需要很长时间才能在v2上运行,因为它会在设置为之前迭代可能的替代项Date(例如,检查%PATH%环境变量等)Get-Date


之后您可以削减空间-f吗?
briantist

1
@briantist可悲的是,不在这里。我们正在滥用PowerShell的模式识别,因为实际标志是-Format。使用这样的标志,您只需要明确即可(例如,如果有-Debug并且-Delimiter作为潜在选项,则至少需要三个字母才能区分)。删除空格意味着PowerShell尝试解析该标志,-F"M.dy"但找不到匹配的参数,因此引发错误。
AdmBorkBork '16

啊,我现在看到了。经过漫长的一天后,这就是我在火车上阅读的内容。我将其解释为-f运算符。现在完全有意义。
briantist

6

[R 3.2.4,55 51 47字节

编辑我意识到我可以scan感谢@FryAmTheEggMan。@MickyT减少了4个字节。

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

第一次尝试打高尔夫球。祝大家pi日快乐!


1
欢迎使用PPCG :)我不是R程序员,但是您不需要提供命名函数,只需提供一个计算为函数的表达式即可。因此,我很确定您可以删除f=
FryAmTheEggman

2
您甚至可以走得更远scan()*as.numeric(format(Sys.Date(),'%m.%d%y'))
MickyT '16

2
as.double而不是as.numeric保存额外的字节
Flounderer

5

GNU Awk,23个字符

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

样品运行:

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

5

Pyth,19个字节

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

在这里尝试!
当然,仅适用于2016-03-14。

说明

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

     .d4#当前月份
        \。#月与日之间的点
          .d5#每月的当前日期
             > 2`.d3#年份的后两位数字
   s [#将所有内容合并为一个字符串
  v#eval->转换为float
* Q#与输入相乘得到周长

5

PHP,45 26 25 24字节

使用Windows-1252编码

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

像这样运行:

echo '<?=$argv[1]*date(~‘Ñ•†);' | php -- 3
  • 使用date()代替节省了19个字节DateTime::format
  • 通过使用echo标签保存了一个字节
  • 通过使用ISO-8859编码并否定格式字符串来保存字节,因此不需要双引号。从CLI运行终端时,可能会使您的终端有些混乱,但可以。

如果您假设register_globals为true,则可以在URL中使用$nvia /?n=3
Martijn

@Martijn需要PHP 4.1或使用该php.ini文件进行设置。Aross之前说过要避免这种方法。
Ismael Miguel

4

Python 2,58个字符

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

试试吧!

说明:

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个字符

这使用专有的仅限Firefox的方法。

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

谢谢:

运行示例(Firefox Web控制台):

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

注意:这将在Firebug控制台中失败。看来,萤火虫执行对模板字符串一些扩展,转化`%m.%d%y``%__fb_scopedVars(m).d%y`它传递给代码之前。


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

哦。[facepalm]不知道为什么,我通常忘记了这个把戏。虽然我经常使用模板字符串。
manatwork'Mar 15'16

我知道。我也真的不懂 我想要得到的是new从那里删除它的方法。
伊斯梅尔·米格尔

I tried it on Firefox and it worked fine. I copy-pasted from the console. Since I've replaced ('...') with 2 backticks, that's 2 bytes.
Ismael Miguel


2

Mathematica, 54

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

2

Vitsy + coreutils, 19 bytes

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

Explanation:

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

Cannot be run in safe mode, as this uses the Runtime's exec method.



2

Oracle 11g, 50 49 bytes

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

one less byte, thanks to @MickyT


you can drop the space before the FROM
MickyT

2

Python 3, 74 54 bytes

using the time module instead of datetime like Loovjo's Answer

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

previous solution

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

2
@Zenadix The meta consensus is that unnamed functions are OK.
FryAmTheEggman

2

Google Sheets, 13 bytes

Bytes are calculated with one byte per character, zero bytes per cell except for the designated input cell, two bytes. The equals sign to start a formula is not counted. (I don't know if this is standard, please correct me if I am wrong.)

Run snippet to see the code.

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>

This works because you can define your own date formats in Google Sheets. I made it so that it is <month>.<day><year>.


You might want to ask on meta about this scoring system. ;P
Addison Crump

Will do when I have time (maybe tonight in Maryland)
OldBunny2800

2

Pyke, 16 15 bytes, ASCII encoding

C867wä%J"bT4^/*

Explanation:

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

or 11 bytes (non-competitive), (adds string singles, 2 digit year, string sumables)

C856\.R3sb*

Explanation:

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

I'm guessing this is a different Pyke than pyke.sourceforge.net ? Can you post a link to the language spec?
Robert Fraser


Just wondering, what encoding does Pyke use? If it's UTF-8, this is 16 bytes.
OldBunny2800

1
@OldBunny2800 It doesn't matter; in this case it uses good old ascii as all code points are below 255. According to meta.codegolf.stackexchange.com/a/5879/32686, the answer can define it's own encoding at no cost
Blue

1

JavaScript ES6, 68 66 bytes

Saved 2 bytes thanks to dev-null!

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

Anonymous function. Some uses:

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

1
You should try using with
Ismael Miguel

1

Tcl/Tk, 58 bytes

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

(That's a complete program. If you want to cheat and remove the explicit puts statement then it's only 51 bytes -- you'd have to start tclsh and type/paste the following in directly, though:)

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

Racket, 112 characters

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

Reads the number from input in standard reader syntax.


1

TI-84 Basic, 30 bytes

Works on TI-83/84 calculators; E is the scientific notation token and ~ is the negative token.

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

Test Case

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*

Try it 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

We round π to a number of decimal places equal to the minimum of {month,day,year}, and then multiply it by the input.

This is a function that takes input through X. Store it to one of the Y-variables, for example Y1, and then call like Y1([number]) on the homescreen.


There seems to be some disagreement that taking input via Ans is allowed.
AdmBorkBork

How is this only 13 bytes? Not counting Input A, I count 22 characters.
OldBunny2800

1
@OldBunny2800 TI-BASIC is token based, each atom is represented as one or two bytes.
Adám

@OldBunny2800 The code page is here.
lirtosiast

1

APL, 19 bytes

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

⎕TS is 2016 3 14 12 34 56 789 i.e. March 14rd, 2016 right before 12:35 pm
make into string, i.e. '2016 3 14 12 34 56 789'
8↑2↓ drop first two ('20') then take next eight ('16 3 14 ')
2⌽ rotate two characters, giving ' 3 14 16'
make into numbers (3 14 16)
reverse the list, giving 16 14 3
0.01⊥ evaluate in base ¹⁄₁₀₀, = 16 × 0.01² + 15 × 0.01¹ + 3 × 0.01⁰ = 0.0016 + 0.15 + 3 = 3.1416
⎕× multiply with input

or

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

⎕TS is 2016 3 14 12 34 56 789, i.e. March 14rd, 2016 right before 12:35 pm
make into string, i.e. '2016 3 14 12 34 56 789'
7↑2↓ drop first two ('20') then take next seven ('16 3 14')
2⌽ rotate two characters, giving ' 3 1416'
make into numbers (3 1416)
reverse the list, giving 1416 3
1E¯4⊥ evaluate in base ¹⁄₁₀₀₀₀, = 1416 × 0.01¹ + 3 × 0.01⁰ = 0.1416 + 3 = 3.1416
⎕× multiply with input


How does this work?
OldBunny2800

1
@OldBunny2800 Clear?
Adám

Yes, thank you, but in UTF-8 this is 38 bytes.
OldBunny2800


1
@OldBunny2800 APL uses its own code page -- each of these characters are one byte. (This was before ASCII mind you...)
a spaghetto
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.