Câu đố ngày π cho 3/14


62

truyện tranh xkcd π

Chúc mừng ngày π. Mục tiêu của câu hỏi này là tính diện tích cho một vòng tròn bán kính 3, trong đó A = πr².

Điều hấp dẫn là bạn phải sử dụng hằng số π được xác định bằng ngôn ngữ khác với ngôn ngữ bạn đang lập trình. Ví dụ: bạn có thể viết chương trình C sử dụng Fortran MATH::PIhoặc chương trình Python sử dụng Java java.lang.Math.PI.

Quy tắc:

  • Mã của bạn phải sử dụng giá trị được lưu trữ là π từ một ngôn ngữ khác để tính toán. (tức là nó phải được lưu trữ trong một thư viện toán học hoặc hằng số.)
  • Tất cả các mã cho chương trình của bạn phải nằm trong một tệp duy nhất. Ví dụ: Bạn không thể viết một chương trình trong C để in π, sau đó một chương trình khác trong Java để chạy chương trình C. (Tuy nhiên, bạn có thể viết chương trình Java tự viết và biên dịch chương trình C.)
  • Bạn không thể tải xuống π từ một trang web và tuyên bố rằng hằng số của bạn đến từ PHP / ASP / HTML.

Dưới đây là một ví dụ chạy trong Bash và sử dụng math.pigiá trị được lưu trữ của Python :

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

Đầu ra:

28.27433388231

Đây là một cuộc thi phổ biến, vì vậy, mục có nhiều phiếu bầu nhất sau một tuần sẽ giành chiến thắng.

Chỉnh sửa: Sau một tuần, giải thưởng thuộc về DigitalTrauma với 93 điểm. Cảm ơn về mẹo biên dịch tuyệt vời - Tôi không biết rằng FPU lưu trữ hằng số trong phần cứng. Tôi đã dự đoán cuộc thi này là về việc tìm ra những cách thú vị để loại bỏ chu kỳ đồng hồ, nhưng người ta thực sự có thể cứu được một vài người.

* Hình ảnh lịch sự của: http://xkcd.com/10/


38
Đó là ngày thứ 3 của tháng thứ 14 ?? Lịch của tôi phải bị hỏng.
Gareth

30
Năm tới: 14/03/15 lúc 9:26 và 53 giây, tôi sẽ đăng một thử thách
TheDoctor

5
Ừ Tàu thì tốt hơn. Và cái này.
bjb568

3
@bjb Tôi đồng ý, Tau có ý nghĩa hơn, nhưng điều đó không có nghĩa là chúng ta không thể có một chút niềm vui vào giữa tháng ba. :)
undergroundmonorail

9
Thật hấp dẫn làm sao. Vào ngày π, danh tiếng của tôi là 314.
tbodt

Câu trả lời:


128

Lắp ráp C + x86

Không hài lòng với một hằng số được xác định trong phần mềm ngôn ngữ của bạn? Tại sao không sử dụng ngôn ngữ có thể truy cập giá trị PI không đổi ngay từ phần cứng FPU của bạn:

#include <stdio.h>

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

67
Holy crap, có một chỉ dẫn để tải giá trị của pi.
dùng2357112

21
x86 có hướng dẫn cho MỌI THỨ.
lông mịn


7
Lựa chọn tốt cho 7 hằng số, quá! Tôi luôn sử dụng log_e (2), nhưng không, giả sử, 2.
Tim S.

3
@fluffy lõi x86 của tôi bị hỏng: Tôi đã thử MOV AX, c0ffe; THÊM SỮA; THÊM ĐƯỜNG; THÊM ĐƯỜNG; MOV ecx, c0ffe; MOV ebx, 1; MOV eax, 4 và người phát ngôn bios của tôi đã cười nhạo tôi .....
GMasucci

77

Python, bash, C, J, PHP và 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

Để đảm bảo an toàn, chương trình này lấy pi từ một vài ngôn ngữ khác nhau, lấy giá trị được thống nhất nhất. Nhiều ngôn ngữ có thể dễ dàng được thêm vào để có độ tin cậy cao hơn.


27
Tôi vừa nôn một ít từ miệng tôi.
Dan Esparza

J là gì và tại sao bạn chạy chương trình C của bạn với nó?
NoBugs

@NoBugs J là một ngôn ngữ khác và tôi đang chạy nó ( jclà bảng điều khiển J trên máy tính của tôi) với đầu ra từ chương trình C của tôi ( o. 1) để lấy giá trị khác của pi. Các đối số không quan trọng.
grc

1
echo $long_string > gcc -o pi? Tôi không thể tin rằng không ai bắt được điều này. Ngoài ra, bạn đã nghe nói về các tài liệu ở đây-đây chưa?
Blacklight Shining

Đây là một trong những đoạn mã thú vị nhất tôi từng thấy. Tôi sẽ đóng khung này và đặt nó trên tường của tôi. Có thể với một cảnh báo.
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
Rất thông minh. Sử dụng một cách rất chuẩn để giao thoa các thời gian chạy khác nhau. =) +1
jpmc26

34

Perl / Tk với C, Pascal, Java, JavaScript, LaTeX3, Prolog, Perl, Scheme, Lua, Python, TeX / PGF

Kịch bản Perl sau đây hiển thị một cửa sổ liệt kê các giá trị của π và vùng được tính toán. Giá trị của π được lấy từ các ngôn ngữ khác nhau như được hiển thị bên dưới.

Kết quả

Kịch bản một tệp:

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

Ngôn ngữ

Danh sách sau đây cho thấy các ngôn ngữ và mã được sử dụng để lấy π.

  • GNU C: Các phần mở rộng GNU được sử dụng để có độ chính xác cao hơn là π.

    #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: Được biên dịch với Pascal miễn phí .

    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 được sử dụng để thực thi JavaScript.

    print(Math.PI)
  • LaTeX3:

    \documentclass{article}
    \usepackage{expl3}
    \ExplSyntaxOn
    \msg_term:n { pi=\fp_eval:n { pi } }
    \ExplSyntaxOff
    \stop
  • Prolog: SWI Prolog được sử dụng làm trình biên dịch Prolog.

    :- format('~15f~n', [pi]).
  • Perl: Để vui vẻ và trọn vẹn.

    use Math::Complex;
    print pi;
  • Lược đồ: Việc sử dụng triển khai Đề án là GNU Guile .

    (display (* 2 (acos 0)))
  • Lua: texlua được sử dụng làm thông dịch viên Lua.

    print(math.pi)
  • Con trăn

    import math
    print math.pi
  • TeX / PGF: π được lấy từ định nghĩa của gói pgf và TeX đơn giản được sử dụng làm định dạng TeX:

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

16

đg

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

Làm thế nào nó hoạt động:

dg là ngôn ngữ biên dịch thành mã byte CPython. Thuận tiện, nó tương thích với các thư viện python. importcác câu lệnh trong dg trả về đối tượng mà chúng đang nhập, vì vậy chương trình này về cơ bản thực hiện điều này:

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

 

 

Không, tôi không mong đợi bất kỳ sự ủng hộ nào. :)


4
Oopsy daisy, tôi nghĩ rằng tôi đã nâng cấp;)
Ẩn danh Pi

1
Nhân tiện, đây là điều đầu tiên tôi từng làm trong dg. Một số người khác đã sử dụng nó cho một câu hỏi golf và liên kết đến cùng một nơi tôi liên kết đến trong câu trả lời này. Tôi đọc nó và nghĩ rằng ngôn ngữ trông gọn gàng (mặc dù thực tế là tôi coi thường meme doge) nhưng không có kế hoạch sử dụng nó cho đến khoảng một giờ sau khi biết về nó, khi tôi đọc câu hỏi này và nhận ra tôi có thể lạm dụng nó.
undergroundmonorail

5 giờ trước, khi tôi đăng bình luận đầu tiên của mình, cái này có nhưng 1 upvote. Tôi nghĩ mọi người đã nghiêm túc nhận xét của tôi;) Hoặc họ chỉ sử dụng của bạn.
Ẩn danh Pi

"Tất cả các mã phải phù hợp trong một dòng duy nhất". Ít nhất một số người có thể đọc!
Floris

<PYTHON'S MATH.PI>Những repr()chuỗi bạn nhận được cho các hàm và các đối tượng khác không thể xác định chúng __repr__()là bản dựng lại hợp lệ của chính chúng không thực sự tốt. Hãy thử __import__('math').pi.
Blacklight Shining

15

C ++ và Lua 5.2

Không có gì nói quá mức khá giống như nhúng toàn bộ trình thông dịch ngôn ngữ để truy cập vào hằng số 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;
}

chỉ có thể ...lua_getglobal("math");lua_getfield(-1,"pi");
mniip

@mniip Tôi nhận ra rằng sau khi tôi đăng. Đó là vào sáng sớm và bộ não của tôi chưa hoạt động đầy đủ, nhưng cách này cũng hoạt động tốt nên tôi để nó một mình.
Tony Ellis

13

bash + PHP + bc

Một lớp lót khá đơn giản:

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

Đầu ra:

28.274333882308

"Tất cả các mã phải phù hợp trong một dòng duy nhất". Ít nhất một số người có thể đọc!
Floris

4
@Floris: Ghét phải chia nó cho bạn, nhưng câu hỏi nói rằng tập tin , không phải dòng .
Dennis

26
@dennis - hình như tôi không phải là "một số người" ...: - /
Floris

10

MATLAB + Java (21 byte)

Không chắc chắn nếu MATLAB gian lận, nhưng ở đây chúng tôi đi

java.lang.Math.PI*3^2

Đầu ra: Format Short

28.2743

Đầu ra: Format Long

28.2743338823081

Kiểu định dạng không ảnh hưởng đến giá trị được lưu trữ, nó chỉ ảnh hưởng đến cách in ra vào bảng điều khiển


1
MATLAB .. - rùng mình -
theGreenCabbage

@theGreenCabbage haha, không chắc đó là một shudder tốt hay xấu :) Theo kinh nghiệm của tôi, nó đã làm cho việc viết những điều đơn giản nhanh chóng rất dễ dàng. Tất nhiên có những lựa chọn thay thế tốt hơn, nhưng nếu không có nhiều thời gian, MATLAB thực hiện thủ thuật này.
MZimmerman6 18/03/14

10

Bash, Nút, Ruby, Python

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

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

+1, mặc dù nó không thực sự hoạt động trong OS X (math.h bao gồm các tệp khác architecture/*/math.htùy thuộc vào nền tảng đích)
squossish ossifrage

1
Chà, nó cũng không hoạt động trên Windows, nhưng tôi sẽ không tìm kiếm tính di động ở đây :)
orion

7

Máy chủ Powershell + MS SQL

Đây là một cái cho máy chủ Powershell và SQL (từ năm 2005 trở lên)

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

và ở đây là một lớp lót duy nhất:

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

Sẽ đăng thêm một số chi tiết sau :)


7

JavaScript / PHP

Phải được lưu dưới dạng tệp * .php và được gọi trong trình duyệt từ một số máy chủ giải thích PHP.

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

Có thể chơi gôn bằng cách sử dụng các thẻ ngắn và thay thế 3 * 3 bằng 9 (điều này có được phép không?):

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

pi () có cùng độ dài với M_PI, vì vậy không có người chiến thắng.


2
"Điều này được cho phép" - chắc chắn, đó không phải là mã golf mà là cuộc thi phổ biến.
CompuChip

1
Điều này sẽ không chạy trong php hay javascript.
Cthulhu

Vâng, nó cần một số <script>thẻ và phần mở rộng .php.
CompuChip

3
Tôi đã chỉnh sửa nó mặc dù tôi nghĩ nó đủ dễ hiểu ...
Reeno

@Cthulhu "Phải được lưu dưới dạng tệp * .php và được gọi trong trình duyệt từ một số máy chủ giải thích PHP." Sử dụng các tệp .html hoặc .php hoặc .wh tinh khiết sẽ không hoạt động, bạn cần apache hoặc đại loại như thế.
Ẩn danh Pi

6

Emacs Lisp: viết, biên dịch và chạy 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)))

vô dụng

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

Thêm:

Bạn có thể nhân ba ngôn ngữ này bằng cách chạy emacs theo đợt bằng cách sử dụng -eval và bao quanh biểu thức trong (print). Điều này sẽ dẫn đến việc Bash chạy lisp, nó sẽ biên dịch và chạy C đọc kết quả đầu ra và in ra vỏ của bạn trong bash.


5

Đối với câu hỏi này, tôi đã tạo ra ngôn ngữ của riêng mình, được gọi là Chữ số. Cú pháp bao gồm p, hằng số đại diện cho pi và chữ số. Khi chạy, nó trả về tất cả các chữ số (và p) nhân với nhau. Đây là trình thông dịch và mã của tôi, được viết bằng 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
Trông tôi giống như một hàm trong Python hơn là ngôn ngữ, nhưng nó hoạt động.
Hosch250

2
@ hosch250 Bản thân trình thông dịch python là một hàm (bộ) được viết bằng C (trong trường hợp của CPython) nên câu trả lời này rất hợp lệ. Khá thông minh tôi sẽ nói.
Juan Campa

4

bc + dc + bash (30 ký tự cho người chơi gôn)

Đây là một ít golfy:

$ dc<<<"3d*`bc -l<<<'a(1)*4'`*p"
28.27433388230813914596
$ 
  • bc -l<<<'a(1)*4' tạo pi (nó được lưu dưới dạng hằng số trong lib bc math cho hàm a () (arctan).
  • dc<<<"3d*pi *p"đẩy 3 vào ngăn xếp, nhân đôi giá trị trên đỉnh của ngăn xếp (3) và bội số, sau đó đẩy pi vào ngăn xếp và bội số, sau đó in đỉnh của ngăn xếp.

4

OCaml + awk

Không ai thích OCaml?

  • Sử dụng OCaml để tính Pi
  • awkđể tính Pi * r 2

Đây là:

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

Câu trả lời là:

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;
}

Chào mừng đến với trang web! Nhưng tôi nghĩ rằng câu hỏi đang tìm kiếm một chương trình thực sự gọi một hàm hoặc biên dịch một chương trình bằng ngôn ngữ khác, không phải là một chương trình đơn thuần sẽ biên dịch bằng nhiều ngôn ngữ.
Jonathan Van Matre

4
@JonathanVanMatre: Tôi nghĩ trong trường hợp này anh ta có nghĩa là anh ta sử dụng hằng số từ tiêu đề C trong C ++. std::coutchưa bao giờ là một cú pháp C hợp lệ.
Konrad Borowski

À, gọi tốt đấy.
Jonathan Van Matre

4

Rất đơn giản, sử dụng bash để truy cập thư viện toán học 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

kết quả:

28.274334

4

Vì Fortran thực sự không có giá trị nội tại cho pi (mà OP dường như biểu thị bằng tuyên bố "Fortran's MATH::PI"), tôi đã phải viết một cho C. Tôi đã chọn, thay vì thực sự xác định nó, mà tôi chỉ xác định nó sử dụng một số thuật toán nhanh :

#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);
}

(được lưu dưới dạng pi_calc.c) Sau đó được sử dụng trong 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

Điều này đưa ra yêu cầu

 area=   28.2743338823081

Một biên dịch này bằng cách sử dụng

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

3

R & C ++

Yêu cầu inlineRcppcác gói trong R.

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

get.pi() * 3 ^ 2

cxxfunctiontạo, biên dịch và liên kết một hàm C ++ đằng sau hậu trường. Vâng, có khá nhiều việc tạo mã xảy ra, và return wrap(M_PI);là mã C ++ (cùng với #includemột phần).


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

Bạn đánh bại tôi vào nó. :(
SuperJedi224

3

Julia sử dụng Python

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

Điều đó thật thú vị, tôi chưa bao giờ sử dụng PyCall trước đây. Giao diện siêu dễ sử dụng.


3

R + grep + awk + dc

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

Đầu ra:

28.274337

3

Sử dụng Lua's π trong Java

Chương trình này sử dụng thư viện LuaJ để đánh giá Lua trong Java và nhận được π. Nó cũng bình phương diện tích với Lua. Thưởng thức!

    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+".");

Đầu ra:

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


2

Jython + Java

Điều này sẽ làm việc trong Jython. Tôi không chắc lắm, vì tôi không có cách nào để kiểm tra ATM.

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

Jython có thể truy cập các thư viện Java, vì vậy tôi chỉ có thể nhập lớp Math từ java.lang và sử dụng hằng số PI của nó để tính diện tích của vòng tròn.

Chơi gôn

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

Hoặc, nếu tôi được phép viết mã trong 3 ^ 2:

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

2

bash (PI từ perl, python, c)

Có lẽ nếu chúng ta kết hợp mọi thứ chúng ta có, chúng ta sẽ có được kết quả chính xác hơn? :)

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

Ruby + Python

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>

Bối rối cho dù nó đáp ứng quy tắc thứ 3. nhưng vì M_PI đã được sử dụng nên nó sẽ được tính.


2

ACTIONSCRIPT3 + javascript (sử dụng parse.com)

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

liên kết lớp phân tích https://github.com/camdagr8/AS3-Pude-Class/blob/master/com/illumifi/Pude.as

với mã:

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

phân tích cú pháp main.js:

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

kết quả:

28.274333882308138
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.