首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >皮尔保龄球10比10

皮尔保龄球10比10
EN

Code Golf用户
提问于 2015-07-22 13:39:25
回答 3查看 763关注 0票数 3

你的目标:估计圆周率至少小数点10位。格式是您的选择-它可以输出为一个数字,作为一个字符串,作为一个输出到STDOUT,等等。

看起来很简单,对吧?但等等,事情并不像看上去那么简单.

规则:您完全可以得到10个函数调用(这包括操作符)。这些函数不能是自然诱导或定义pi的函数,例如弧形trig函数或将度转换为弧度的函数(这还包括任何作为“求解器”运行的函数,例如可以找到sin(x)根的函数)。如果您的语言具有复数功能,则无法使用此功能。所有函数都必须是语言内置函数的一部分,或者在标准库中(加载库不算操作,但它必须是标准库,而不仅仅是流行的库)。

所有函数调用都必须是代码的关键--这意味着您不能使用除法或除法。您也不能使用任何文字(除了三个数字的形式为一个、两个或三个整数)*,读取任何类型的文件,或代码将自身转换为值的能力(例如,将变量的名称作为字符串的函数)。

*注意:对于需要输出格式字符串的语言,格式字符串是一个例外。但是,在格式字符串中只能找到格式,而不是实际的内容,因此可以使用printf("%f%f",x,y),而不能使用printf("%f.%f",x,y)

循环可能会被使用,但是会消耗掉你的函数调用--10个函数调用是调用,而不是使用的全部函数。赋值不算作操作,但数组切片(包括从数组中获取单个值)等操作计数,在这种情况下,1将计算为两个字节(对于[])。

如果你认为你发现了规则的漏洞,那么它也违反了规则。这不是寻找规则最佳弯曲的挑战,也不是在质疑问题中滥用小疏忽的最佳方式.如果你的本能是把它称为“漏洞”,那就把它作为一个评论来帮助关闭它。

得分:这是代码保龄球,所以你在追求最高的分数。但计算的并不是代码中的总字节数。

相反,它是使用的函数中的字节之和。也就是说,如果您使用4*cos(2/3) (碰巧约为3.14355),那么您就有三个函数-- *cos/,总共是5个字节。例如,如果要使用(使用朱莉娅)、sum(map(n->1/n,1:4)),则操作为summap/:,长度为8字节.但是,由于1/n被调用了四次,它使用了7个函数调用(summap、4个/实例和:)。用户创建的函数不计算函数调用允许数或字节计数(注意:在这些用户创建的函数中使用的函数确实计数)。

附加强调:这里的重点是在计算pi的上下文中找到滥用语言最长内置/标准函数名的最佳方法。更多的数字圆周率是不必要的,但我个人将更有可能投票的答案,得到更多的数字超过必要。

请记住,由于您使用的是长函数名,所以您可能应该避免使用一元和二进制运算符,因为这些运算符中的大多数都具有完全的等效函数(例如,在Julia中,*可以被prod替换)。

快速摘要:您有10个内置函数调用(包括操作符/子程序/等)。你必须估计π到小数点10位。对于整数文本,您可以总共使用3个字符(因此,您可以有1和36,或1,2,3,或328,但不能有22和49)。得分是内建函数名字节的计数(如果用户定义了名称,则不计数)。没有直接计算或使用pi的函数。没有复杂的数字。这不是寻找漏洞的挑战。

EN

回答 3

Code Golf用户

发布于 2015-07-23 15:06:47

C

正好有10个函数调用和3个数字文本。

代码语言:javascript
复制
using System;
using System.Linq;

namespace ConsoleApplication2
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            /*3:*/
            int a = 3; //0 calls: 0
            /*14->15:*/
            int b = 14; //0 calls: 0 + 0 = 0
            /*14:*/
            int c = (b)++; //1 call: 0 + 1 = 1
            /*926:*/
            int d = 926; //0 calls: 1 + 0 = 1
            /*53:*/
            int e = (a*c) + (a*a); //3 calls: 1+3 = 4
            //3*14 + 3*3 = 42+9 = 51
            e++; //1 call: 4 + 1 = 5
            e++; //1 call: 5 + 1 = 6
            /*5:*/
            char f = e.ToString().ToCharArray().First(); //3 call: 6 + 3 = 9

            Console.WriteLine("{0}.{1}{2}{3}{4}{5}", a, c, b, d, e, f); //1 call: 9 + 1 = 10
        }
    }
}

产出: 3.1415926535

票数 2
EN

Code Golf用户

发布于 2015-07-23 13:55:20

C,23字节

我认为这现在是正确的..。

代码语言:javascript
复制
#include <stdio.h>
#include <math.h>

main()
{
    double pi= (double)22 / 7; /* 1 */
    pi+=sin(pi); /* 1 + 3 bytes = 4 */
    pi+=sin(pi); /* 1 + 3 bytes = 4 */
    pi+=sin(pi); /* 1 + 3 bytes = 4 */
    pi+=sin(pi); /* 1 + 3 bytes = 4 */

    printf("%.10f", pi); /* 6 bytes = 6 */
    return 0;
}
票数 1
EN

Code Golf用户

发布于 2016-07-14 23:02:37

球拍,72字节

一定要喜欢那些冗长的内置名字!

代码语言:javascript
复制
((lambda() ; lambda is a Racket-defined function too, 6 bytes
  (define-values (a b) (integer-sqrt/remainder 491)) ; 13 (define-values) + 22 (integer-sqrt/remainder) = 35 (on this line alone).  a and b are 22 and 7 respectively
  (define-values (q) (/ a b)) ; 13 (define-values) + 1 (/) = 14
  (define-values (c) (+ (sin q) q)) ; 13 + 1 + 3  = 17
  (+ (sin c) c) ; 1 + 3 = 4
  )) ; total: 6 + 35 + 14 + 17 + 4 = 72

有了球拍中in-exact数的精度,这实际上等于pi,因此(- pi (lambda...)输出0.0

而且,我知道这是一个非常古老的挑战。但是与这个碗相比,目前所有的挑战答案都是可怕的,所以我不得不这样做。

票数 0
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/53547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档