3/14의 π 데이 퍼즐


62

xkcd π 만화

행복한 π Day. 이 질문의 목표는 반지름 3의 원에 대한 면적을 계산하는 것입니다. 여기서 A = πr²입니다.

잡는 것은 프로그래밍하고있는 언어와 다른 언어로 정의 된 상수 π를 사용해야한다는 것입니다. 예를 들어, Fortran을 사용하는 C 프로그램 MATH::PI이나 Java를 사용하는 Python 프로그램을 작성할 수 있습니다 java.lang.Math.PI.

규칙 :

  • 코드는 계산을 위해 다른 언어에서 저장된 π 값을 사용해야합니다. (즉, 상수 또는 수학 라이브러리에 저장해야합니다.)
  • 프로그램의 모든 코드는 단일 파일에 맞아야합니다. 예를 들어, C에서 한 프로그램을 작성하여 π를 인쇄 한 다음 Java에서 다른 프로그램을 작성하여 C 프로그램을 실행할 수 없습니다. 그러나 C 프로그램 자체를 작성하고 컴파일하는 Java 프로그램을 작성할 수 있습니다 .
  • 웹 페이지에서 π를 다운로드 할 수 없으며 상수가 PHP / ASP / HTML에서 왔다고 주장 할 수 있습니다.

다음은 Bash에서 실행되고 Python의 저장된 math.pi값을 사용하는 예입니다 .

#!/bin/bash
PI=`python -c 'import math; print math.pi'`
bc -l <<< "3 * 3 * $PI"

산출:

28.27433388231

이것은 인기 콘테스트이므로 1 주일 후에 가장 많은 표를 얻은 항목이 승리합니다.

편집 : 일주일 후,상은 93 포인트와 함께 DigitalTrauma에 간다. 멋진 어셈블러 팁에 감사드립니다-FPU가 상수를 하드웨어에 저장했다는 것을 몰랐습니다. 이 콘테스트는 클럭 사이클을 버리는 재미있는 방법을 찾는 것이었지만 실제로는 몇 가지를 절약 할 수있었습니다.

* 이미지 제공 : http://xkcd.com/10/


38
14 개월 3 일째 ?? 내 달력이 깨져 있어야합니다.
Gareth

30
내년 : 9 월 26 일과 53 초에 3/14/15, 난 도전을 게시합니다
TheDoctor

5
어. 타우가 더 좋습니다. 이.
bjb568

3
@bjb 동의합니다. Tau가 더 이해가되지만 3 월 중순에는 재미를 누릴 수는 없습니다. :)
undergroundmonorail

9
정말 흥미 롭습니다. π 날에, 나의 명성은 314였습니다.
tbodt

답변:


128

C + x86 어셈블리

사용하는 언어의 소프트웨어에 정의 된 상수에 만족하지 않습니까? FPU 하드웨어에서 바로 일정한 PI 값에 액세스 할 수있는 언어를 사용하지 마십시오.

#include <stdio.h>

int main (int argc, char **argv) {
    double pi;
    __asm__("fldpi" : "=t" (pi));
    printf("%g\n", 3 * 3 * pi);
    return (0);
}

67
거룩한 쓰레기, 파이의 가치를로드하라는 지시가 있습니다.
user2357112

21
x86에는 모든 것에 대한 지침이 있습니다.
솜털 같은


7
7 가지 상수를위한 좋은 선택! 저는 항상 log_e (2)를 사용하고 있지만 2는 아닙니다.
Tim S.

3
@fluffy 내 x86 코어가 손상되었습니다. MOV AX, c0ffe를 사용해 보았습니다. 우유 추가; 설탕 추가; 설탕 추가; MOV ecx, c0ffe; MOV ebx, 1; MOV의 EAX, 4, 내 바이오스 스피커 ..... 나를 비웃었다
GMasucci

77

Python, bash, C, J, PHP 및 Python3

import subprocess

p = subprocess.Popen("""
echo '
#define _USE_MATH_DEFINES
#include <stdio.h>
#include <math.h>

int main(int pi) {
    if (pi == 1) printf("%.5f", M_PI);
    if (pi == 2) printf("o. 1");
    if (pi == 3) printf("<?php printf(\\"%%.5f\\", pi()); ?>");
    if (pi == 4) printf("import math; print(\\" %%.5f\\" %% math.pi)");
    return 0;
}
' > gcc -o pi
./pi
./pi J | jc
./pi and PHP | php
./pi and Python 3 | python3
""", shell=True, stdout=subprocess.PIPE)

values_of_pi = map(float, map(str.strip, p.stdout.read().split()))
pi = max(values_of_pi, key=values_of_pi.count)

print pi * 3 * 3

안전을 위해이 프로그램은 몇 가지 다른 언어에서 pi를 검색하여 가장 합의 된 값을 취합니다. 더 많은 언어를 쉽게 추가하여 안정성을 높일 수 있습니다.


27
방금 입에 조금 던졌습니다.
Dan Esparza

J 란 무엇이며 왜 C 프로그램을 사용합니까?
NoBugs

@NoBugs J 는 다른 언어이며 다른 jcC o. 1값 (pi)을 얻기 위해 C 프로그램 ( )의 출력으로 언어 (컴퓨터의 J 콘솔)를 실행하고 있습니다. 논쟁은 중요하지 않습니다.
grc

1
echo $long_string > gcc -o pi? 나는 아무도 이것을 붙잡을 수 없었다. 또한 here-docs | here-strings에 대해 들어 보셨습니까?
Blacklight Shining

이것은 내가 본 것 중 가장 멋진 코드 중 하나입니다. 이 틀을 짜서 내 벽에 올려 놓겠습니다. 아마도 경고와 함께.
Kevin

41

PHP / MYSQL

$link = mysqli_connect("localhost", "user", "password", "dbname");
$query = mysqli_query($link, 'SELECT PI() AS pi');
$row = mysqli_fetch_assoc($query);
echo 3*3*$row['pi'];

4
매우 영리한. 서로 다른 런타임을 인터페이스하는 매우 표준적인 방법을 사용합니다. =) +1
jpmc26

34

C, Pascal, Java, JavaScript, LaTeX3, Prolog, Perl, Scheme, Lua, Python, TeX / PGF가 포함 된 Perl / Tk

다음 Perl 스크립트는 π 값과 계산 된 영역을 나열하는 창을 표시합니다. π의 값은 아래와 같이 다른 언어에서 가져옵니다.

결과

단일 파일 스크립트 :

#!/usr/bin/env perl
use strict;
$^W=1;

use Tk;
use Tk::Font;
use Tk::HList;
use Tk::ItemStyle;
use Tk::PNG;

# Function to calculate the area of the circle with radius 3
sub A ($) {
    use bignum;
    return 9*$_[0];
}

my $title = 'Pi Day';

# Configuration of external program names
my %prg = qw[
    Pascal fpc
    Perl perl
    Prolog swipl
    Scheme guile1
    TeX  tex
    LaTeX latex
];
sub prg ($) {
    my $prg = shift;
    return $prg{$prg} // $prg;
}

# Column headers
my @header = (
    '',
    'Language',
    "\N{U+03C0}",
    "A(3) = A(r) = \N{U+03C0}\N{U+2009}r\N{U+00B2}",
);

my $mw = MainWindow->new(
    -title => $title,
);

# Font setup (larger font)
my $font_size = '22';
my $font = $mw->Font();
$font->configure(-size => $font_size);

# ---------
# Utilities
# ---------

# Run program in backticks, quote arguments if needed and some error checking
sub backticks_pi (@) {
    my @cmd = map{/[ ()$;<>|\x22]/ && length > 1 ? "'$_'" : $_} @_;
    print "[@cmd]\n";
    my $catch = `@cmd`;
    if ($? == -1) {
        warn "Failed to execute: $!\n";
    }
    elsif ($? & 127) {
        warn sprintf "Child died with signal %d!\n", $? & 127;
    }
    elsif ($?) {
        warn sprintf "Child exited with value %d!\n", $? >> 8;
    }
    else {
        return $1 if $catch =~ /^\s*(\d+\.\d+)\s*$/
                  or $catch =~ /\bpi\s*=\s*(\d+\.\d+)/;
    }
    warn "Could not find pi in the output of \"@cmd\"!\n";
    return 0;
}

# Run a program with error checking
sub run_cmd (@) {
    print "[@_]\n";
    system @_;
    if ($? == -1) {
        warn "Failed to execute: $!\n";
    }
    elsif ($? & 127) {
        warn sprintf "Child died with signal %d!\n", $? & 127;
    }
    elsif ($?) {
        warn sprintf "Child exited with value %d!\n", $? >> 8;
    }
    else {
        return $1;
    }
    return undef;
}

# Create a bitmap logo
sub make_logo ($$$@) {
    my $name = shift;
    my $logo = shift;
    my $contents = shift;
    my $file = "piday-logo-$name.tmp";
    if ($contents) {
        open(OUT, '>', $file) or die "!!! Error: Cannot write `$file': $!";
        print OUT $contents;
        close(OUT);
    }
    foreach (@_) {
        run_cmd @$_;
    }
    return $mw->Photo(
        -file => $logo,
    ) if -f $logo;
    return undef;
}

# Call foreign language to calculate pi
sub make_pi ($$@) {
    my $file = shift;
    my $source = shift;
    if ($source) {
        open(OUT, '>', $file) or die "!!! Error: Cannot write `$file': $!";
        print OUT $source;
        close(OUT);
    }
    my $cmd_last = pop;
    foreach (@_) {
        run_cmd @$_;
    }
    return backticks_pi @$cmd_last;
}

# Add result list table
my $h = $mw->HList(
    -header  => 1,
    -columns => scalar @header,
    -width   => 100,
    -height  => 20,
    -font    => $font,
)->pack(
  -expand => 1,
  -fill => 'both',
);

# Add header for the result list table
for (0 .. @header-1) {
    $h->header('create', $_,
        -text => $header[$_],
    );
}

# Exit button
my $quit = $mw->Button(
    -text => 'Quit',
    -command => sub {exit},
    -font => $font,
)->pack;


my @list;
my @cmd;
my $pi;
my $source;
my $img;

# GNU C
# -----

$img = make_logo(
    'C',
    'piday-logo-c.png',
    '',
    [
        prg('wget'),
        '-O', 'piday-logo-c-gccegg.png',
        'http://gcc.gnu.org/img/gccegg-65.png',
    ],
    [
        prg('convert'),
        '-scale', '54x64',
        'piday-logo-c-gccegg.png',
        'piday-logo-c.png',
    ],
);

$source = <<'END_SOURCE';
#define _GNU_SOURCE
#include <math.h>
#include <stdio.h>

#define xstr(s) str(s)
#define str(s) #s

int main() {
  long double pi = M_PI;
  printf("pi=%s", xstr(M_PIl));
  return 0;
}
END_SOURCE

$pi = make_pi(
    'piday-c.c',
    $source,
    [
        prg('gcc'),
        '-o', 'piday-c',
        'piday-c.c',
    ],
    [
        prg('./piday-c')
    ],
);

push @list, {
    language => 'GNU C',
    pi       => $pi,
    image    => $img,
};

# Java
# ----

$img = make_logo(
    'Java',
    'piday-java.png',
    '',
    [
        prg('wget'),
        '-O', 'piday-java.svg',
        'https://upload.wikimedia.org/wikipedia/commons/a/a4/Java_logo_and_wordmark.svg',
    ],
    [
        prg('convert'),
        '-scale', '35x64',
        'piday-java.svg',
        'piday-java.png',
    ],
);

$source = <<'END_SOURCE';
public class PiDayJava {
    public static void main(String args[]) {
        System.out.println(Math.PI);
    }
}
END_SOURCE

$pi = make_pi(
    'PiDayJava.java',
    $source,
    [
        prg('javac'),
        'PiDayJava.java',
    ],
    [
        prg('java'),
        'PiDayJava',
    ],
);
push @list, {
    language => 'Java',
    pi       => $pi,
    image    => $img,
};

# Perl
# ----

# Math/Complex.pm: sub pi () { 4 * CORE::atan2(1, 1) }
@cmd = (prg('Perl'), '-e', 'use Math::Complex; print pi');
$pi = backticks_pi @cmd;

my $img = Tk->findINC('Camel.xpm');
$img = $mw->Photo(
    -file => $img,
);

push @list, {
    language => 'Perl',
    pi => $pi,
    image => $img,
};

# Python
# ------

@cmd = (
    prg('echo'),
    'import math;print math.pi',
    '|',
    prg('python'),
);
$pi = backticks_pi @cmd;

$img = make_logo(
    'python',
    'piday-logo-python.png',
    '',
    [
        prg('wget'),
        '-O',
        'piday-logo-python-master.png',
        'http://www.python.org/static/community_logos/python-logo-master-v3-TM.png',
    ],
    [
        prg('convert'),
        '-crop', '111x111+79+33',
        'piday-logo-python-master.png',
        'piday-logo-python-crop.png'
    ],
    [
        prg('convert'),
        '-scale', '64x64',
        'piday-logo-python-crop.png',
        'piday-logo-python.png',
    ],
);

push @list, {
    language => 'Python',
    pi => $pi,
    image => $img,
};

# TeX
# ---

@cmd = (
    prg('TeX'),
    '\input pgf \pgfmathparse{pi}\message{pi=\pgfmathresult}\end',
);
$pi = backticks_pi @cmd;
my $img = make_logo(
    'tex',
    'piday-logo-tex.png',
    '',
    [
        prg('pdftex'),
        '\mag=4000 \nopagenumbers\font\sc=cmcsc10 \sc pgf\bye'
    ],
    [
        prg('pdfcrop'),
        'texput.pdf',
        'piday-logo-tex.pdf',
    ],
    [
        prg('convert'),
        'piday-logo-tex.pdf',
        'piday-logo-tex.png',
    ]
);
push @list, {
    language => 'TeX/PGF',
    pi => $pi,
    image => $img,
};

# LaTeX3
# ------

my $logo_source = <<'END_LOGO';
\mag=4000
\documentclass{article}
\usepackage{hologo}
\pagestyle{empty}
\begin{document}
\hologo{LaTeX3}
\end{document}
END_LOGO

$img = make_logo(
    'latex3',
    'piday-logo-latex3.png',
    $logo_source,
    [
        prg('pdflatex'),
        'piday-logo-latex3.tmp'
    ],
    [
        prg('pdfcrop'),
        'piday-logo-latex3.pdf',
        'piday-logo-latex3-crop.pdf',
    ],
    [
        prg('convert'),
        'piday-logo-latex3-crop.pdf',
        'piday-logo-latex3.png',
    ]
);
$source = <<'END_LATEX3';
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\msg_term:n { pi=\fp_eval:n { pi } }
\ExplSyntaxOff
\stop
END_LATEX3
$pi = make_pi(
    'piday-latex3.tex',
    $source,
    [
        prg('LaTeX'),
        'piday-latex3.tex',
    ],
);
push @list, {
    language => 'LaTeX3',
    pi => $pi,
    image => $img,
};

print "****************\n";

# Lua
# ---

$img = make_logo(
    'Lua',
    'piday-logo-lua.png',
    '',
    [
        prg('wget'),
        '-O', 'piday-logo-lua.gif',
        'http://www.lua.org/images/lua-logo.gif',
    ],
    [
        prg('convert'),
        '-scale', '64x64', # '50x50',
        'piday-logo-lua.gif',
        'piday-logo-lua.png',
    ],
);

$source = 'print(math.pi)';
$pi = make_pi(
    'piday-lua.lua',
    $source,
    [
        prg('texlua'),
        'piday-lua.lua',
    ]
);
push @list, {
    language => 'Lua',
    pi => $pi,
    image => $img,
};

# JavaScript
# ----------

$img = make_logo(
    'JavaScript',
    'piday-logo-javascript.png',
    '',
    [
        prg('wget'),
        '-O', 'piday-logo-rhino.jpg',
        'https://developer.mozilla.org/@api/deki/files/832/=Rhino.jpg',
    ],
    [
        prg('convert'),
        '-scale', '127x64',
        'piday-logo-rhino.jpg',
        'piday-logo-javascript.png',
    ],
);

$source = 'print(Math.PI)';
$pi = backticks_pi(
    prg('java'),
    '-cp', prg('js.jar'),
    'org.mozilla.javascript.tools.shell.Main',
    '-e', $source,
);
push @list, {
    language => 'JavaScript',
    pi => $pi,
    image => $img,
};

# Scheme
# ------

$img = make_logo(
    'Scheme',
    'piday-logo-scheme.png',
    '',
    [
        prg('wget'),
        '-O', 'piday-logo-lambda.svg',
        'https://upload.wikimedia.org/wikipedia/commons/3/39/Lambda_lc.svg',
    ],
    [
        prg('convert'),
        '-scale', '64x64',
        'piday-logo-lambda.svg',
        'piday-logo-scheme.png',
    ],
);
$source = '(display (* 2 (acos 0)))';
$pi = backticks_pi(
    prg('Scheme'),
    '-c', $source,
);
push @list, {
    language => 'Scheme',
    pi => $pi,
    image => $img,
};

# Prolog
# ------

$img = make_logo(
    'Prolog',
    'piday-logo-prolog.png',
    '',
    [
        prg('wget'),
        '-O', 'piday-logo-swipl.png',
        'http://www.swi-prolog.org/icons/swipl.png',
    ],
    [
        prg('convert'),
        '-scale', '78x64',
        'piday-logo-swipl.png',
        'piday-logo-prolog.png',
    ],
);
$source = ":- format('~15f~n', [pi]).\n";
$pi = make_pi(
    'piday-prolog.pro',
    $source,
    [
        prg('Prolog'),
        '-c', 'piday-prolog.pro',
    ]
);
push @list, {
    language => 'Prolog',
    pi => $pi,
    image => $img,
};

# Pascal
# ------

$img = make_logo(
    'Pascal',
    'piday-logo-pascal.gif',
    '',
    [
        prg('wget'),
        '-O', 'piday-logo-pascal.gif',
        'http://www.freepascal.org/pic/logo.gif',
    ]
);
$source = <<'END_PASCAL';
program piday_pascal;

uses sysutils, math;

begin
  writeln(format('%.16f', [pi]));
end.
END_PASCAL
$pi = make_pi(
    'piday-pascal.pas',
    $source,
    [
        prg('Pascal'),
        'piday-pascal.pas',
    ],
    [
        prg('./piday-pascal'),
    ]
);
push @list, {
    language => 'Pascal',
    pi => $pi,
    image => $img,
};

# Sort and fill the table rows
@list = sort {
    my $diff = (length $b->{'pi'} <=> length $a->{'pi'});
    return $diff if $diff;
    return "\L$a->{'language'}\E" cmp "\L$b->{'language'}\E";
} @list;

foreach my $x (@list) {
    my $e = $h->addchild("");
    my $col = 0;
    if ($x->{'image'}) {
        $h->itemCreate($e, $col++,
            -itemtype => 'image',
            -image => $x->{'image'},
        );
    }
    else {
        $col++;
    }
    $h->itemCreate($e, $col++,
        -itemtype => 'text',
        -text => $x->{'language'},
    );
    $h->itemCreate($e, $col++,
        -itemtype => 'text',
        -text => $x->{'pi'},
    );
    $h->itemCreate($e, $col++,
        -itemtype => 'text',
        -text => A $x->{'pi'},
    );
}

MainLoop;

__END__

언어

다음 목록은 π를 얻는 데 사용되는 언어와 코드를 보여줍니다.

  • GNU C : GNU 확장은 π의 정밀도를 높이는 데 사용됩니다.

    #define _GNU_SOURCE
    #include <math.h>
    #include <stdio.h>
    
    #define xstr(s) str(s)
    #define str(s) #s
    
    int main() {
        long double pi = M_PI;
        printf("pi=%s", xstr(M_PIl));
        return 0;
    }
  • Pascal : Free Pascal로 컴파일되었습니다 .

    program piday_pascal;
    
    uses sysutils, math;
    
    begin
      writeln(format('%.16f', [pi]));
    end.
  • 자바:

    public class PiDayJava {
        public static void main(String args[]) {
            System.out.println(Math.PI);
        }
    }
    
  • JavaScript : Rhino 는 JavaScript를 실행하는 데 사용됩니다.

    print(Math.PI)
  • LaTeX3 :

    \documentclass{article}
    \usepackage{expl3}
    \ExplSyntaxOn
    \msg_term:n { pi=\fp_eval:n { pi } }
    \ExplSyntaxOff
    \stop
  • 프롤로그 : SWI 프롤로그 는 프롤로그 컴파일러로 사용됩니다.

    :- format('~15f~n', [pi]).
  • Perl : 재미 있고 완벽합니다.

    use Math::Complex;
    print pi;
  • 구성표 : 사용 구성표 구현은 GNU Guile 입니다.

    (display (* 2 (acos 0)))
  • 루아 : texlua 루아 통역사로 사용됩니다.

    print(math.pi)
  • 파이썬 :

    import math
    print math.pi
  • TeX / PGF : π는 패키지 pgf 의 정의에서 가져 오며 일반 TeX는 TeX 형식으로 사용됩니다.

    \input pgf
    \pgfmathparse{pi}
    \message{pi=\pgfmathresult}
    \end

16

dg

print ((import '/math/pi')*3**2)

작동 방식 :

dg는 CPython 바이트 코드로 컴파일되는 언어입니다. 편리하게는 파이썬 라이브러리와 호환됩니다. importdg의 명령문은 가져 오는 객체를 반환하므로이 프로그램은 기본적으로 다음을 수행합니다.

print (<PYTHON'S MATH.PI>*3**2)

 

 

아니요, 난 공언을 기대하지 않습니다. :)


4
Oopsy 데이지, 나는 생각했다;)
Anonymous Pi

1
그건 그렇고, 이것은 내가 dg에서 처음으로 한 일입니다. 다른 사람이 골프 질문에이 질문을 사용하고이 답변에서 내가 연결 한 곳과 연결되었습니다. 나는 그것을 읽고 언어가 깔끔해 보인다고 생각했지만 (내가 doge meme를 멸시한다는 사실에도 불구하고)이 질문을 읽고 그것을 남용 할 수 있음을 알게 된 후 약 1 시간이 지나면 그것을 사용하지 않을 것이라고 생각했습니다.
undergroundmonorail

5 시간 전, 첫 코멘트를 올렸을 때, 이것은 1 개의 투표일뿐이었습니다. 나는 사람들이 내 의견을 진지하게 받아 들였다고 생각합니다.) 또는 그들은 단지 당신의 의견을 사용했습니다.
Anonymous Pi

"모든 코드는 한 줄에 맞아야합니다". 적어도 일부 사람들은 읽을 수 있습니다!
Floris

<PYTHON'S MATH.PI>repr()하지 않습니다 당신이 기능을 얻을 문자열 및 기타 개체가 | 그들의 정의 할 수 없습니다 __repr__()자신의 유효 재구성은 ... 음 ... 실제로 유효로들. 시도하십시오 __import__('math').pi.
Blacklight Shining

15

C ++ 및 루아 5.2

pi 상수에 액세스하기 위해 전체 언어 통역사를 포함시키는 것과 같은 과잉 행위는 없습니다.

#include <lua.hpp>
#include <cmath>
#include <iostream>

#define R 3

int main( void )
{
    lua_State* vm = luaL_newstate();

    luaL_openlibs( vm );
    luaL_dostring( vm, "function get_pi() return math.pi end" );
    lua_getglobal( vm, "get_pi" );
    lua_call( vm, 0, 1 );

    lua_Number PI_ = lua_tonumber( vm, -1 );

    std::cout << PI_ * pow( R, 2 ) << std::endl;

    lua_close( vm );
    return 0;
}

그냥 ...lua_getglobal("math");lua_getfield(-1,"pi");
mniip

@ mniip 나는 게시 한 후 깨달았습니다. 이른 아침이고 뇌는 아직 완전히 작동하지 않지만이 방법은 잘 작동하므로 혼자 두었습니다.
Tony Ellis

13

bash + PHP + bc

상당히 간단한 원 라이너 :

echo "scale=14;3*3*`php -r 'echo pi();'`"|bc

산출:

28.274333882308

"모든 코드는 한 줄에 맞아야합니다". 적어도 일부 사람들은 읽을 수 있습니다!
Floris

4
@ Floris : 당신에게 그것을 나누기 싫어하지만 질문은 줄이 아니라 파일 이라고 말합니다 .
Dennis

26
@dennis-분명히 나는 ​​"일부 사람들"이 아니다 ... :-/
Floris

10

MATLAB + Java (21 바이트)

MATLAB이 부정 행위인지 확실하지 않지만 여기서갑니다

java.lang.Math.PI*3^2

산출: Format Short

28.2743

산출: Format Long

28.2743338823081

형식화 유형은 저장된 값에 영향을 미치지 않으며 콘솔에 인쇄되는 방식에만 영향을줍니다.


1
MATLAB .. - 떤다 -
theGreenCabbage

@theGreenCabbage haha, 그것이 좋은 shudder인지 나쁜 것인지 확실하지 않습니다 :) 내 경험상 그것은 간단한 것들을 매우 쉽게 쓰는 것을 만들었습니다. 물론 더 나은 대안이 있지만 시간이 많지 않으면 MATLAB이 트릭을 수행합니다.
MZimmerman6

10

배쉬, 노드, 루비, 파이썬

#!/bin/bash

node -pe 'Math.PI' \
| ruby -e 'puts ARGF.read.to_f * 3' \
| python -c 'import sys; print(float(sys.stdin.read()) * 3)'

7

perl -ne '/M_PI\s*([\d.]*)/&&print $1*3*3' < /usr/include/math.h

+1. OS X에서는 실제로 작동하지 않지만 (math.h는 architecture/*/math.h대상 플랫폼에 따라 다른 파일을 포함 합니다)
squeamish ossifrage

1
글쎄, 그것은 Windows에서도 작동하지 않지만, 나는 이식성을 위해 가지 않을 것이다 :)
orion

7

Powershell + MS SQL 서버

다음은 Powershell 및 SQL 서버를위한 것입니다 (2005 년부터)

add-pssnapin sqlserverprovidersnapin100
add-pssnapin sqlservercmdletsnapin100
$pi=Invoke-Sqlcmd -query "select PI() as sql"
$pi.sql *3*3

그리고 여기에 단일 라이너로 :

add-pssnapin sqlserverprovidersnapin100;add-pssnapin sqlservercmdletsnapin100;(Invoke-Sqlcmd -query "select PI() as sql").sql*3*3

나중에 더 게시 할 것입니다 :)


7

자바 스크립트 / PHP

* .php 파일로 저장하고 PHP를 해석하는 일부 서버의 브라우저에서 호출해야합니다.

<script type="text/javascript">
    alert(3*3*<?php echo M_PI;?>);
</script>

짧은 태그를 사용하고 3 * 3을 9로 대체하여 골프를 칠 수 있습니다 (허용됩니까?).

<script type="text/javascript">
    alert(9*<?=M_PI?>);
</script>

pi ()는 M_PI와 길이가 같으므로 당첨자가 없습니다.


2
"허용 되는가?"-코드 골프가 아니라 인기 콘테스트입니다.
CompuChip

1
PHP 나 자바 스크립트에서는 실행되지 않습니다.
Cthulhu

예, <script>태그와 .php 확장자가 필요 합니다.
CompuChip

3
충분히 이해할
만하다고

@Cthulhu "* .php 파일로 저장되어 PHP를 해석하는 일부 서버의 브라우저에서 호출됩니다." 순수한 .html 또는 .php 또는 .what 파일을 사용하면 작동하지 않지만 아파치 또는 이와 유사한 것이 필요합니다.
익명 Pi

6

이맥스 리스프 : C 작성, 컴파일 및 실행

(with-temp-buffer
  (with-temp-file"/#rad.c"(insert"#include<math.h>\n#include<stdio.h>\nint main(void){printf(\"%f\",M_PI*3*3);}"))
  (shell-command"gcc /#rad.c -o /#rad && /#rad"(current-buffer))(string-to-number(buffer-string)))

언 골프

(with-temp-buffer
  (with-temp-file "/#rad.c"
    (insert"
#include<math.h>
#include<stdio.h>
int main(void){
  printf(\"%f\",M_PI*3*3);
}"))
  (shell-command "gcc /#rad.c -o /#rad && /#rad"
         (current-buffer))
  (string-to-number(buffer-string)))

보너스:

-eval을 사용하여 배치에서 emacs를 실행하고의 표현식을 둘러싸면이 언어를 3 배 언어화할 수 (print)있습니다. 결과적으로 컴파일을 작성하고 C를 실행하는 Bash 실행 lisp가 출력을 읽고 bash의 쉘로 출력합니다.


5

이 질문을 위해 Digits라는 고유의 언어를 만들었습니다. 구문은 p, pi를 나타내는 상수 및 숫자로 구성됩니다. 실행될 때 모든 숫자 (및 p)를 곱한 값을 반환합니다. 다음은 파이썬으로 작성된 인터프리터와 코드입니다.

def interpret(kode):
    out=1.0
    for i in kode:
        if(i=='p'):
            out*=3.14159265
        else:
            out*=int(i)
    return out
print(interpret("p33"))

3
파이썬보다 언어보다 함수처럼 보이지만 작동합니다.
Hosch250

2
@ hosch250 파이썬 인터프리터 자체는 C (CPython의 경우)로 작성된 함수 집합이므로이 답변은 매우 유효합니다. 내가 말할 영리한.
Juan Campa

4

bc + dc + bash (골퍼는 30 자)

여기 골치 아픈 작은 것이 있습니다.

$ dc<<<"3d*`bc -l<<<'a(1)*4'`*p"
28.27433388230813914596
$ 
  • bc -l<<<'a(1)*4' pi를 생성합니다 (a () (arctan) 함수를 위해 bc math lib에 상수로 저장됩니다.
  • dc<<<"3d*pi *p"는 3을 스택으로 푸시하고 스택 맨 위의 값 (3)과 배수를 복제 한 다음 pi를 스택 및 배수로 푸시 한 다음 스택의 상단을 인쇄합니다.

4

OCaml + awk

아무도 OCaml을 좋아하지 않습니까?

  • OCaml을 사용하여 Pi 계산
  • awkPi * r 2 를 계산하기 위해

여기있어:

ocaml <<< "4.0 *. atan 1.0;;" | awk '/float/{printf("%.12f", 3*3*$NF)}'

정답은:

28.274333882308

4

C ++ / C

#include <math.h>
#include <iostream>

int main(int argc, char** argv) {
    std::cout << 3*3*M_PI << std::endl;
    return 0;
}

사이트에 오신 것을 환영합니다! 그러나 문제는 실제로 하나 이상의 언어로 컴파일 되는 것이 아니라 함수를 호출하거나 다른 언어로 프로그램을 컴파일하는 프로그램을 찾고 있다고 생각합니다 .
Jonathan Van Matre

4
@JonathanVanMatre :이 경우 그는 C ++에서 C 헤더의 상수를 사용한다는 것을 의미한다고 생각합니다. std::cout유효한 C 구문이 아닙니다.
Konrad Borowski 2016 년

아, 잘가요
Jonathan Van Matre

4

bash를 사용하여 C 수학 라이브러리에 액세스하는 것은 매우 간단합니다.

bc -l <<< "3 * 3 * `grep -w M_PI /usr/include/math.h | awk '{ print $4 }'`"

4

VimScript + Python

:py import math
:ec pyeval("math.py")*3*3

결과:

28.274334

4

Fortran에는 실제로 pi에 대한 본질적인 값이 없기 때문에 (OP는 "Fortran 's MATH::PI" 문으로 표시되는 것 같습니다 ) C에 대해 하나를 작성해야했습니다. 실제로 정의하기보다는 선택했습니다. 빠른 알고리즘을 사용 합니다 .

#include <math.h>
double pi_eval(){
    double a = 1.0;
    double b = 1.0/sqrt(2.0);
    double t = 0.25;
    double x = 1.0;
    double y;
    int i;

    for(i=0; i<4; i++){
        y = a;
        a = 0.5*(a+b);
        b = sqrt(b*y);
        t -= x*(y-a)*(y-a);
        x *= 2.0;
    }
    return (a+b)*(a+b)/(4.0*t);
}

(로 저장 됨 pi_calc.c) 다음에 사용됩니다 area_calc.f90:

program area_calc
   use, intrinsic :: iso_c_binding
   implicit none

   interface
     function pi_eval() bind(c)
       use, intrinsic :: iso_c_binding
       real(c_double) :: pi_eval
     end function pi_eval
   end interface
   real(c_double) :: pi, area

   pi = pi_eval()
   print *,"area=",3.0*3.0*pi

end program area_calc

필요한 출력

 area=   28.2743338823081

하나는 이것을 사용하여 컴파일합니다.

gcc -c pi_calc.c
gfortran -o area pi_calc.o area_calc.f90

3

R & C ++

R 의 inlineRcpp패키지가 필요합니다 .

get.pi <- inline::cxxfunction(plugin="Rcpp", includes="#include <cmath>", body="return wrap(M_PI);")

get.pi() * 3 ^ 2

cxxfunction이면에서 C ++ 함수를 작성, 컴파일 및 링크합니다. 예, 많은 코드 생성이 이루어지며 return wrap(M_PI);C ++ 코드입니다 ( #include부분 과 함께 ).


3

자바 + 자바 스크립트

class Pi {
    public static void main(String... args) throws Throwable {
        System.out.println((double) new javax.script.ScriptEngineManager()
                .getEngineByName("JavaScript").eval("Math.PI")
                * Math.pow(3, 2));
    }
}
28.274333882308138

넌 날 이겼어 :(
SuperJedi224

3

줄리아 파이썬 사용

julia> using PyCall
julia> @pyimport math
julia> math.pi*3^2
28.274333882308138

재미있었습니다. 전에는 PyCall을 사용한 적이 없었습니다. 인터페이스는 사용하기 매우 쉽습니다.


3

R + grep + awk + dc

echo pi | R --no-save --quiet | grep -v '^>' | awk '{print $2}' | dc -e '?3 3 **p'

산출:

28.274337

3

Java에서 Lua의 π 사용

이 프로그램은 LuaJ 라이브러리를 사용하여 Java에서 Lua를 평가하고 π를 얻습니다. 또한 Lua로 영역을 제곱합니다. 즐겨!

    ScriptEngineManager sem = new ScriptEngineManager();
    ScriptEngine se = sem.getEngineByName("luaj");
    se.eval("pi = math.pi");
    double pi = (double) se.get("pi");

    int r = 3;

    se.eval("radius = "+r);
    se.eval("rsquared = math.pow(radius, 2)");
    int rsquared = (int) se.get("rsquared");

    double area = pi * rsquared;
    System.out.println("For a circle with a diameter of "+r+", the area is "+area+".");

출력 :

For a circle with a diameter of 3, the area is 28.274333882308138.


2

자이 썬 + 자바

자이 썬에서 작동한다. ATM을 테스트 할 방법이 없으므로 확실하지 않습니다.

from java.lang import Math
print Math.PI * 3 ** 2

Jython은 Java 라이브러리에 액세스 할 수 있으므로 java.lang에서 Math 클래스를 가져 와서 PI 상수를 사용하여 원의 면적을 계산할 수 있습니다.

골프 :

import java.lang.Math.PI;print PI*3*3

또는 3 ^ 2로 코딩 할 수 있다면 :

import java.lang.Math.PI;print PI*9

2

bash (perl, python, c의 PI)

우리가 가진 모든 것을 결합하면 더 정확한 결과를 얻을 수 있습니까? :)

#!/bin/bash
exec >&>(bc -l|tail -n1)
perl <<EOF
use Math::Trig;
print pi
EOF
echo -n +
python <<EOF
import sys
from math import pi
sys.stdout.write(str(pi))
EOF
echo -n +
cat > pi.c <<EOF
#include <math.h>
main(){printf("%.16f",M_PI);}
EOF
gcc pi.c -o pi &>/dev/null
./pi
rm -f pi pi.c
echo ";"
echo "(last/3)*3.^2"

2

루비 + 파이썬

puts `python -c "from math import pi; print pi"`.to_f * 3**2

2

HTML + PHP

<html><body>
value of area of circle is <br>
<?php echo 3*3*M_PI; ?>
</body></html>

그것이 세 번째 규칙을 만족시키는 지 혼란스러워합니다. 그러나 M_PI가 이미 사용되었으므로 계산해야합니다.


2

ACTIONSCRIPT3 + 자바 스크립트 (parse.com 사용)

Parse.CFunction('getPi',{},function(returned){trace(3*3*returned.result)});

클래스 링크 구문 분석 https://github.com/camdagr8/AS3-Parse-Class/blob/master/com/illumifi/Parse.as

코드와 함께 :

public static function CFunction(className:String, params:Object = null, success:Function = null, error:Function = null) {
            var url:String = Parse.api + "functions/" + className;
            Parse.Call(url, URLRequestMethod.POST, params, null, success, error);
        }

main.js를 구문 분석하십시오.

Parse.Cloud.define("getPi", function(request, response) {
  response.success(Math.PI);
});

결과:

28.274333882308138
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.