행복한 π 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/
답변
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);
}
답변
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를 검색하여 가장 합의 된 값을 취합니다. 더 많은 언어를 쉽게 추가하여 안정성을 높일 수 있습니다.
답변
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'];
답변
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
답변
dg
print ((import '/math/pi')*3**2)
작동 방식 :
dg는 CPython 바이트 코드로 컴파일되는 언어입니다. 편리하게는 파이썬 라이브러리와 호환됩니다. import
dg의 명령문은 가져 오는 객체를 반환하므로이 프로그램은 기본적으로 다음을 수행합니다.
print (<PYTHON'S MATH.PI>*3**2)
아니요, 난 공언을 기대하지 않습니다. 🙂
답변
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;
}
답변
bash + PHP + bc
상당히 간단한 원 라이너 :
echo "scale=14;3*3*`php -r 'echo pi();'`"|bc
산출:
28.274333882308