πปริศนาตัวต่อวันที่ 3/14


62

xkcd πการ์ตูน

สุขสันต์วัน. เป้าหมายของคำถามนี้คือการคำนวณพื้นที่สำหรับวงกลมรัศมี 3 โดยที่ A = πr²

จับคือการที่คุณต้องใช้πคงที่ที่กำหนดไว้ในภาษาที่แตกต่างกันมากกว่าหนึ่งที่คุณจะเขียนโปรแกรม. ตัวอย่างเช่นคุณสามารถเขียนโปรแกรม C ที่ใช้ Fortran ของMATH::PIหรือโปรแกรมหลามที่ใช้ของ java.lang.Math.PIJava

กฎ:

  • รหัสของคุณจะต้องใช้ค่าที่เก็บไว้เป็นπจากภาษาอื่นสำหรับการคำนวณ (เช่นจะต้องเก็บไว้ในห้องสมุดคงที่หรือคณิตศาสตร์)
  • รหัสทั้งหมดสำหรับโปรแกรมของคุณจะต้องอยู่ในไฟล์เดียว ตัวอย่างเช่นคุณไม่สามารถเขียนหนึ่งโปรแกรมใน C เพื่อพิมพ์πและอีกโปรแกรมใน Java เพื่อเรียกใช้โปรแกรม C (อย่างไรก็ตามคุณสามารถเขียนโปรแกรม Java ที่เขียนและคอมไพล์โปรแกรม C ได้ด้วยตัวเอง)
  • คุณไม่สามารถดาวน์โหลดπจากหน้าเว็บและอ้างว่าค่าคงที่มาจาก PHP / ASP / HTML

นี่คือตัวอย่างที่ทำงานใน Bash และใช้math.piค่าที่เก็บไว้ของ Python :

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

เอาท์พุท:

28.27433388231

นี่คือการประกวดความนิยมดังนั้นรายการที่มีคะแนนโหวตมากที่สุดหลังจากผ่านไปหนึ่งสัปดาห์จะชนะ

แก้ไข:หลังจากผ่านไปหนึ่งสัปดาห์รางวัลจะตกเป็นของ DigitalTrauma ด้วย 93 คะแนน ขอบคุณสำหรับเคล็ดลับแอสเซมเบลอร์ที่ยอดเยี่ยม - ฉันไม่รู้ว่า FPU เก็บค่าคงที่ไว้ในฮาร์ดแวร์ ฉันคาดหวังว่าการประกวดครั้งนี้จะเกี่ยวกับการหาวิธีที่ตลกขบขันที่จะทิ้งรอบนาฬิกา แต่อันที่จริงสามารถบันทึกไม่กี่

* เอื้อเฟื้อภาพจาก: http://xkcd.com/10/


38
มันเป็นวันที่ 3 ของเดือนที่ 14 ?? ปฏิทินของฉันต้องพัง
Gareth

30
ปีหน้า: 3/14/15 เวลา 9:26 และ 53 วินาทีฉันจะโพสต์การท้าทาย
TheDoctor

5
ฮึ. เอกภาพดีกว่า และนี่.
bjb568

3
@bjb ฉันเห็นด้วยใจเอกภาพมากขึ้น แต่นั่นไม่ได้หมายความว่าเราไม่สามารถมีความสนุกสนานเล็กน้อยในกลางเดือนมีนาคม :)
undergroundmonorail

9
น่าสนใจแค่ไหน ในวันπชื่อเสียงของฉันคือ 314
tbodt

คำตอบ:


128

ชุดประกอบ C + x86

ไม่พอใจกับค่าคงที่ที่กำหนดไว้ในซอฟต์แวร์ภาษาของคุณหรือไม่? ทำไมไม่ใช้ภาษาที่สามารถเข้าถึงค่าคงที่ของ PI ได้จากฮาร์ดแวร์ FPU ของคุณ:

#include <stdio.h>

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

67
อึศักดิ์สิทธิ์มีคำแนะนำเพียงเพื่อโหลดค่า pi
user2357112

21
x86 มีคำแนะนำสำหรับทุกสิ่ง
ปุย


7
ทางเลือกที่ดีสำหรับค่าคงที่ 7 ด้วย! ฉันมักจะใช้ log_e (2) แต่ไม่ใช่พูด 2
ทิม S.

3
@ เปิดตัว core 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

เพื่อความปลอดภัยโปรแกรมนี้จะดึงไพจากภาษาที่ต่างกันสองสามภาษา สามารถเพิ่มภาษาเพิ่มเติมได้อย่างง่ายดายเพื่อความน่าเชื่อถือที่มากขึ้น


27
ฉันเพิ่งโยนเข้าไปในปากของฉันเล็กน้อย
Dan Esparza

J คืออะไรและเหตุใดคุณจึงใช้งานโปรแกรม C ร่วมกับโปรแกรมนี้
NoBugs

@Nobugs Jเป็นภาษาอื่นและฉันใช้มัน ( jcเป็นคอนโซล J บนคอมพิวเตอร์ของฉัน) ที่มีเอาต์พุตจากโปรแกรม C ของฉัน ( o. 1) เพื่อรับค่า pi อื่น ข้อโต้แย้งไม่สำคัญ
grc

1
echo $long_string > gcc -o pi? ฉันไม่อยากจะเชื่อเลยว่าไม่มีใครจับได้ นอกจากนี้คุณเคยได้ยิน here-docs | here-strings หรือไม่
แบล็กไลท์ส่องแสง

นี่เป็นหนึ่งในโค้ดที่เยี่ยมที่สุดที่ฉันเคยเห็น ฉันจะใส่กรอบลงไปบนผนังของฉัน อาจมีคำเตือน
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

Perl / Tk กับ C, Pascal, Java, JavaScript, LaTeX3, Prolog, Perl, Scheme, Lua, Python, TeX / PGF

สคริปต์ 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;
    }
  • ปาสคาล:รวบรวมกับฟรีปาสกาล

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

    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
  • Prolog: SWI Prologใช้เป็นคอมไพเลอร์ Prolog

    :- format('~15f~n', [pi]).
  • Perl:เพื่อความสนุกสนานและครบถ้วน

    use Math::Complex;
    print pi;
  • โครงการ:การดำเนินงานโครงการการใช้ประโยชน์เป็นGNU Guile

    (display (* 2 (acos 0)))
  • Lua: texluaใช้เป็นล่าม Lua

    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 bytecode สะดวกเข้ากันได้กับห้องสมุดหลาม importคำสั่งใน dg ส่งคืนวัตถุที่พวกเขากำลังนำเข้าดังนั้นโปรแกรมนี้ทำสิ่งนี้โดยทั่วไป:

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

 

 

ไม่ฉันไม่คาดหวัง upvotes :)


4
โอ๊ะโอเดซี่ฉันคิดว่าฉัน upvoted;)
ไม่ระบุตัวตน Pi

1
โดยวิธีนี้เป็นสิ่งแรกที่ฉันเคยทำใน dg มีคนอื่นใช้คำถามกอล์ฟและเชื่อมโยงกับสถานที่เดียวกันกับที่ฉันเชื่อมโยงกับคำตอบนี้ ฉันอ่านและคิดว่าภาษาดูเรียบร้อย (แม้ว่าฉันจะดูถูก doge meme) แต่ก็ไม่ได้วางแผนที่จะใช้จนกระทั่งประมาณหนึ่งชั่วโมงหลังจากเรียนรู้เกี่ยวกับมันเมื่อฉันอ่านคำถามนี้และรู้ว่าฉันสามารถใช้มันในทางที่ผิด
undergroundmonorail

5 ชั่วโมงที่ผ่านมาเมื่อฉันโพสต์ความคิดเห็นแรกของฉันนี้มี แต่ 1 upvote ฉันคิดว่าผู้คนใช้ความคิดเห็นของฉันอย่างจริงจัง;) หรือพวกเขาแค่ใช้ความคิดเห็นของคุณ
ไม่ระบุชื่อ Pi

"รหัสทั้งหมดจะต้องอยู่ในบรรทัดเดียว" อย่างน้อยบางคนก็สามารถอ่านได้!
Floris

<PYTHON'S MATH.PI>ผู้repr()สตริงที่คุณได้รับฟังก์ชั่นและวัตถุอื่น ๆ ที่ไม่ | ไม่สามารถกำหนดของพวกเขา__repr__()ที่จะเป็นไทปันถูกต้องของตัวเองไม่ได้จริง ... ดี ... ที่ถูกต้อง ลอง__import__('math').piดู
Blacklight Shining

15

C ++ และ Lua 5.2

ไม่มีอะไรบอกว่า overkill ค่อนข้างเหมือนกับการฝังล่ามภาษาทั้งหมดเพื่อเข้าถึงค่าคงที่ของ 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 ฮ่า ๆ ไม่แน่ใจว่ามันเป็นตัวสั่นที่ดีหรือไม่ดี :) จากประสบการณ์ของฉันมันทำให้การเขียนสิ่งต่าง ๆ ง่าย ๆ อย่างรวดเร็วง่ายมาก ๆ แน่นอนว่ามีทางเลือกที่ดีกว่า แต่ถ้าไม่มีเวลามาก MATLAB ก็ใช้กลอุบาย
MZimmerman6


7

Perl

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

+1 แม้ว่ามันจะไม่ได้ทำงานจริงใน OS X (math.h รวมถึงไฟล์อื่น ๆ จากarchitecture/*/math.hขึ้นอยู่กับแพลตฟอร์มเป้าหมาย)
ossifrage คลื่นไส้

1
ดีมันไม่ทำงานบน Windows ทั้ง แต่ผมไม่ได้ไปสำหรับการพกพาที่นี่ :)
Orion

7

Powershell + MS SQL Server

นี่คือหนึ่งสำหรับ 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

JavaScript / 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 และ javascript
คธูลู

ใช่มันต้องมี<script>แท็กและนามสกุล. php
CompuChip

3
ฉันแก้ไขมัน แต่ฉันคิดว่ามันเป็นที่เข้าใจพอ ...
Reeno

@Cthulhu "ต้องบันทึกเป็นไฟล์ * .php และเรียกใช้ในเบราว์เซอร์จากเซิร์ฟเวอร์บางตัวที่ตีความ PHP" การใช้ไฟล์. html หรือ. php หรือ. pure ไม่ได้ผลคุณจะต้องมี apache หรือไฟล์แบบนั้น
ไม่ระบุชื่อ Pi

6

Emacs Lisp: เขียนรวบรวมและเรียกใช้ 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)))

ungolfed

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

โบนัส:

คุณอาจจะสามภาษาหนึ่งนี้โดยการทำงานในชุด emacs ใช้ -EVAL (print)และพื้นที่โดยรอบในการแสดงออก สิ่งนี้จะส่งผลให้ Bash ทำงานเสียงกระเพื่อมที่เขียนคอมไพล์และรัน C อ่านเอาต์พุตและพิมพ์ไปยังเชลล์ของคุณใน bash


5

สำหรับคำถามนี้ฉันสร้างภาษาของตัวเองเรียกว่าดิจิท ไวยากรณ์ประกอบด้วย p, ค่าคงที่แทน pi และดิจิต เมื่อรันจะส่งคืนตัวเลขทั้งหมด (และ p) คูณด้วยกัน นี่คือล่ามและรหัสของฉันเขียนด้วย Python:

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
ดูเหมือนว่าฉันจะชอบฟังก์ชั่นใน Python มากกว่าภาษา แต่มันใช้งานได้
Hosch250

2
@ hosch250 ตัวแปลภาษาไพ ธ อนเองเป็นฟังก์ชั่น (ชุดของ) ที่เขียนด้วยภาษา C (ในกรณีของ CPython) ดังนั้นคำตอบนี้จึงถูกต้องมาก ฉันค่อนข้างจะฉลาด
Juan Campa

4

bc + dc + bash (30 chars สำหรับนักกอล์ฟ)

นี่คือลูกกอล์ฟตัวเล็ก:

$ dc<<<"3d*`bc -l<<<'a(1)*4'`*p"
28.27433388230813914596
$ 
  • bc -l<<<'a(1)*4' สร้าง pi (มันถูกเก็บไว้เป็นค่าคงที่ใน lib คณิตศาสตร์ bc สำหรับฟังก์ชัน () (arctan)
  • dc<<<"3d*pi *p"ดัน 3 ไปที่สแต็กทำซ้ำค่าที่ด้านบนของสแต็ก (3) และทวีคูณจากนั้นกด pi ไปยังสแต็กและทวีคูณแล้วพิมพ์ที่ด้านบนของสแต็ก

4

OCaml + awk

ไม่มีใครชอบ OCaml หรือ

  • ใช้ OCaml เพื่อคำนวณ Pi
  • awkเพื่อคำนวณ Pi * 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

อ่าดีโทรไปที่นั่น
Jonathan Van Matre

4

ง่ายมากใช้ bash เพื่อเข้าถึงไลบรารีคณิตศาสตร์ C:

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


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

ต้องการinlineและRcppแพคเกจในอาร์

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

Java + JavaScript

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

จูเลียใช้ Python

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

สนุกมากฉันไม่เคยใช้ PyCall มาก่อน อินเทอร์เฟซใช้งานง่ายสุด ๆ



3

การใช้ Lua's πใน Java

โปรแกรมนี้ใช้ไลบรารี LuaJ เพื่อประเมิน Lua ใน Java และรับπ นอกจากนี้ยังยกกำลังสองกับพื้นที่ 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

Jython + Java

สิ่งนี้ควรใช้ได้ใน Jython ฉันไม่แน่ใจเพราะฉันไม่มีวิธีทดสอบ ATM

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

Jython สามารถเข้าถึงไลบรารี Java ดังนั้นฉันสามารถนำเข้า Math class จาก java.lang และใช้ค่าคงที่ PI เพื่อคำนวณพื้นที่ของวงกลม

แข็งแรงเล่นกอล์ฟ:

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

หรือถ้าฉันอนุญาตให้ใช้รหัสใน 3 ^ 2:

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

2

ทุบตี (PI จาก perl, python, c)

บางทีถ้าเรารวมทุกอย่างที่เรามีเข้าด้วยกันเราจะได้ผลลัพธ์ที่แม่นยำยิ่งขึ้น? :)

#!/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

HTML + PHP

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

สับสนไม่ว่าจะเป็นไปตามกฎข้อที่ 3 แต่เนื่องจาก M_PI ถูกใช้ไปแล้วดังนั้นจึงควรนับ


2

ACTIONSCRIPT3 + javascript (โดยใช้ 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.