π Teka-teki hari untuk 3/14


62

xkcd π komik

Selamat Hari.. Tujuan dari pertanyaan ini adalah untuk menghitung luas untuk lingkaran dengan jari-jari 3, di mana A = πr².

Tangkapannya adalah Anda harus menggunakan konstanta π yang didefinisikan dalam bahasa yang berbeda dari yang Anda pemrograman. Misalnya, Anda dapat menulis program C yang menggunakan Fortran MATH::PI, atau program Python yang menggunakan Java java.lang.Math.PI.

Aturan:

  • Kode Anda harus menggunakan nilai π yang tersimpan dari bahasa yang berbeda untuk perhitungan. (Yaitu harus disimpan di perpustakaan konstan atau matematika.)
  • Semua kode untuk program Anda harus muat dalam satu file. Misalnya, Anda tidak dapat menulis satu program dalam C untuk mencetak π, kemudian yang lain di Jawa untuk menjalankan program C. (Namun, Anda dapat menulis program Java yang menulis dan mengkompilasi program C dengan sendirinya.)
  • Anda tidak dapat mengunduh π dari halaman web dan mengklaim bahwa konstanta Anda berasal dari PHP / ASP / HTML.

Berikut adalah contoh yang berjalan di Bash, dan menggunakan math.pinilai tersimpan Python :

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

Keluaran:

28.27433388231

Ini adalah Kontes Popularitas, jadi entri dengan suara terbanyak setelah seminggu menang.

Sunting: Setelah satu minggu, hadiah jatuh ke DigitalTrauma dengan 93 poin. Terima kasih atas tip assembler yang luar biasa - Saya tidak tahu bahwa FPU menyimpan konstanta pada perangkat keras. Saya berharap kontes ini untuk menemukan cara-cara lucu untuk membuang siklus jam, tetapi yang sebenarnya bisa menyelamatkan beberapa.

* Gambar milik: http://xkcd.com/10/


38
Ini hari ke-3 dari bulan ke-14 ?? Kalender saya harus rusak.
Gareth

30
Tahun depan: 3/14/15 pukul 9:26 dan 53dtk, saya akan memposting tantangan
TheDoctor

5
Ugh. Tau lebih baik. Dan ini.
bjb568

3
@ bjb Saya setuju, Tau lebih masuk akal, tapi itu tidak berarti kita tidak bisa bersenang-senang di pertengahan Maret. :)
undergroundmonorail

9
Menarik sekali. Pada hari reputation, reputasi saya adalah 314.
tbodt

Jawaban:


128

Perakitan C + x86

Tidak puas dengan konstanta yang didefinisikan dalam perangkat lunak bahasa Anda? Mengapa tidak menggunakan bahasa yang dapat mengakses nilai PI konstan konstan dari perangkat keras FPU Anda:

#include <stdio.h>

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

67
Aduh, ada instruksi hanya untuk memuat nilai pi.
user2357112

21
x86 memiliki instruksi untuk SEMUANYA.
Fluffy


7
Pilihan yang bagus untuk 7 konstanta juga! Saya selalu menggunakan log_e (2), tetapi tidak, katakanlah, 2.
Tim S.

3
@ benar-benar inti x86 saya rusak: Saya mencoba MOV AX, c0ffe; TAMBAH SUSU; TAMBAHKAN GULA; TAMBAHKAN GULA; MOV ecx, c0ffe; MOV ebx, 1; MOV eax, 4 dan pembicara bios saya menertawakan saya .....
GMasucci

77

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

Agar aman, program ini mengambil pi dari beberapa bahasa yang berbeda, mengambil nilai yang paling disepakati. Lebih banyak bahasa dapat dengan mudah ditambahkan untuk keandalan yang lebih besar.


27
Saya hanya sedikit muntah di mulut.
Dan Esparza

Apa J dan mengapa Anda menjalankan program C Anda dengan itu?
NoBugs

@NoBugs J adalah bahasa lain, dan saya menjalankannya ( jcadalah konsol J di komputer saya) dengan output dari program C saya ( o. 1) untuk mendapatkan nilai pi lainnya. Argumen tidak penting.
grc

1
echo $long_string > gcc -o pi? Saya tidak percaya tidak ada yang menangkap ini. Juga, pernahkah Anda mendengar tentang dokumen di sini?
Blacklight Shining

Ini adalah salah satu bagian kode paling keren yang pernah saya lihat. Saya akan membingkai ini dan meletakkannya di dinding saya. Mungkin dengan peringatan.
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
Sangat pintar. Menggunakan cara yang sangat standar untuk menghubungkan runtimes yang berbeda. =) +1
jpmc26

34

Perl / Tk dengan C, Pascal, Java, JavaScript, LaTeX3, Prolog, Perl, Skema, Lua, Python, TeX / PGF

Skrip Perl berikut menampilkan jendela yang mencantumkan nilai π dan area terhitung. Nilai π diambil dari berbagai bahasa seperti yang ditunjukkan di bawah ini.

Hasil

Skrip satu file:

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

Bahasa

Daftar berikut menunjukkan bahasa dan kode yang digunakan untuk mendapatkan π.

  • GNU C: Ekstensi GNU digunakan untuk mendapatkan ketepatan π yang lebih tinggi.

    #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: Disusun dengan Free Pascal .

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

    public class PiDayJava {
        public static void main(String args[]) {
            System.out.println(Math.PI);
        }
    }
    
  • JavaScript: Badak digunakan untuk menjalankan JavaScript.

    print(Math.PI)
  • LaTeX3:

    \documentclass{article}
    \usepackage{expl3}
    \ExplSyntaxOn
    \msg_term:n { pi=\fp_eval:n { pi } }
    \ExplSyntaxOff
    \stop
  • Prolog: SWI Prolog digunakan sebagai kompiler Prolog.

    :- format('~15f~n', [pi]).
  • Perl: Untuk kesenangan dan kelengkapan.

    use Math::Complex;
    print pi;
  • Skema: Skema penggunaan adalah GNU Guile .

    (display (* 2 (acos 0)))
  • Lua: texlua digunakan sebagai juru bahasa Lua.

    print(math.pi)
  • Python:

    import math
    print math.pi
  • TeX / PGF: π diambil dari definisi paket pgf dan TeX biasa digunakan sebagai format TeX:

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

16

dg

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

Bagaimana itu bekerja:

dg adalah bahasa yang mengkompilasi bytecode CPython. Nyaman, ini kompatibel dengan perpustakaan python. importpernyataan dalam dg mengembalikan objek yang mereka impor, jadi program ini pada dasarnya melakukan ini:

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

 

 

Tidak, saya tidak berharap ada perbaikan. :)


4
Oopsy daisy, kurasa aku terbalik;)
Anonim Pi

1
Ngomong-ngomong, ini adalah hal pertama yang pernah saya lakukan di dg. Orang lain menggunakannya untuk pertanyaan golf dan ditautkan ke tempat yang sama dengan yang saya tautkan dalam jawaban ini. Saya membacanya dan berpikir bahasanya terlihat rapi (terlepas dari kenyataan bahwa saya membenci meme doge) tetapi tidak berencana menggunakannya sampai sekitar satu jam setelah mempelajarinya, ketika saya membaca pertanyaan ini dan menyadari bahwa saya dapat menyalahgunakannya.
undergroundmonorail

5 jam yang lalu, ketika saya memposting komentar pertama saya, ini hanya memiliki 1 suara positif. Saya pikir orang-orang menanggapi komentar saya dengan serius;) Atau mereka hanya menggunakan Anda.
Anonim Pi

"Semua kode harus pas dalam satu baris". Setidaknya beberapa orang dapat membaca!
Floris

<PYTHON'S MATH.PI>repr()String - string yang Anda dapatkan untuk fungsi dan objek lain yang tidak dapat mendefinisikan __repr__()s mereka untuk menjadi rekonstruksi yang valid dari diri mereka sebenarnya tidak ... well ... valid. Coba __import__('math').pi.
Blacklight Shining

15

C ++ & Lua 5.2

Tidak ada yang mengatakan terlalu banyak seperti menanamkan seluruh juru bahasa untuk mengakses pi konstan.

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

bisa saja ...lua_getglobal("math");lua_getfield(-1,"pi");
mniip

@ mniip saya sadari setelah saya memposting. Ini masih pagi dan otak saya belum sepenuhnya beroperasi, tetapi cara ini berfungsi dengan baik sehingga saya meninggalkannya sendirian.
Tony Ellis

13

bash + PHP + bc

Satu kalimat sederhana:

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

Keluaran:

28.274333882308

"Semua kode harus pas dalam satu baris". Setidaknya beberapa orang dapat membaca!
Floris

4
@ Floris: Benci untuk memberikannya kepada Anda, tetapi pertanyaannya mengatakan file , bukan baris .
Dennis

26
@dennis - rupanya saya bukan "beberapa orang" ...: - /
Floris

10

MATLAB + Java (21 byte)

Tidak yakin apakah MATLAB curang, tapi di sini kita mulai

java.lang.Math.PI*3^2

Keluaran: Format Short

28.2743

Keluaran: Format Long

28.2743338823081

Jenis pemformatan tidak memengaruhi nilai yang disimpan, hanya memengaruhi cara mencetaknya ke konsol


1
MATLAB .. - shudders -
theGreenCabbage

@ theGreenCabbage haha, tidak yakin apakah itu gemetar baik atau buruk :) Dalam pengalaman saya, menulis hal-hal sederhana dengan cepat sangat mudah. Tentu saja ada alternatif yang lebih baik, tetapi jika tidak ada banyak waktu, MATLAB melakukan trik.
MZimmerman6

10

Bash, Node, 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, meskipun sebenarnya tidak berfungsi di OS X (math.h termasuk file lain architecture/*/math.htergantung pada platform target)
ossifrage mual

1
Yah itu tidak bekerja pada Windows juga, tapi aku tidak pergi untuk portabilitas di sini :)
orion

7

Powershell + MS SQL Server

Ini adalah satu untuk Powershell dan SQL server (dari 2005 ke atas)

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

dan di sini sebagai satu liner:

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

Akan memposting lagi nanti :)


7

JavaScript / PHP

Harus disimpan sebagai file * .php dan dipanggil di browser dari beberapa server yang menafsirkan PHP.

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

Bisa bermain golf menggunakan tag pendek dan mengganti 3 * 3 dengan 9 (apakah ini diizinkan?):

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

pi () memiliki panjang yang sama dengan M_PI, jadi tidak ada pemenang.


2
"Apakah ini diizinkan" - tentu saja, ini bukan kode golf tetapi kontes popularitas.
CompuChip

1
Ini tidak akan berjalan di php maupun javascript.
Cthulhu

Ya, perlu beberapa <script>tag dan ekstensi .php.
CompuChip

3
Saya mengeditnya meskipun saya pikir itu cukup dimengerti ...
Reeno

@Cthulhu "Harus disimpan sebagai file * .php dan memanggil browser dari beberapa server yang menginterpretasikan PHP." Menggunakan file .html atau .php atau. Apa pun tidak berfungsi, Anda memerlukan apache atau sesuatu seperti itu.
Anonim Pi

6

Emacs Lisp: menulis, menyusun, dan menjalankan 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)))

bonus:

Anda bisa melipatgandakan bahasa yang satu ini dengan menjalankan emacs dalam batch menggunakan -eval dan mengelilingi ekspresi dalam (print). Ini akan menghasilkan Bash running lisp yang menulis kompilasi dan menjalankan C membaca output dan mencetaknya ke shell Anda di bash.


5

Untuk pertanyaan ini, saya membuat bahasa saya sendiri, yang disebut Digit. Sintaks terdiri dari p, konstanta yang mewakili pi, dan digit. Saat dijalankan, ia mengembalikan semua digit (dan p) dikalikan bersama. Ini juru bahasa dan kode saya, ditulis dengan 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
Menurut saya lebih seperti fungsi dalam Python daripada bahasa, tetapi berfungsi.
Hosch250

2
@ hosch250 Interpreter python itu sendiri adalah (set) fungsi yang ditulis dalam C (dalam kasus CPython) jadi jawaban ini sangat valid. Cukup pintar menurut saya.
Juan Campa

4

bc + dc + bash (30 karakter untuk pegolf)

Ini si kecil yang suka golf:

$ dc<<<"3d*`bc -l<<<'a(1)*4'`*p"
28.27433388230813914596
$ 
  • bc -l<<<'a(1)*4' menghasilkan pi (disimpan sebagai konstanta dalam bc math lib untuk fungsi a () (arctan).
  • dc<<<"3d*pi *p"mendorong 3 ke stack, menduplikasi nilai di atas stack (3) dan kelipatan, kemudian mendorong pi ke tumpukan dan kelipatan, kemudian mencetak bagian atas tumpukan.

4

OCaml + awk

Tidak ada yang suka OCaml?

  • Gunakan OCaml untuk menghitung Pi
  • awkuntuk menghitung Pi * r 2

Ini dia:

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

Jawabannya adalah:

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

Selamat datang di situs ini! Tapi saya pikir pertanyaannya adalah mencari program yang sebenarnya memanggil fungsi atau mengkompilasi program dalam bahasa lain, bukan yang hanya akan dikompilasi dalam lebih dari satu bahasa.
Jonathan Van Matre

4
@ JonathanVanMatre: Saya pikir dalam hal ini dia bermaksud menggunakan konstanta dari header C di C ++. std::couttidak pernah merupakan sintaks C yang valid.
Konrad Borowski

Ah, panggilan yang bagus di sana.
Jonathan Van Matre

4

Sangat sederhana, menggunakan bash untuk mengakses perpustakaan C matematika:

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

hasil:

28.274334

4

Karena Fortran sebenarnya tidak memiliki nilai intrinsik untuk pi (yang merupakan OP tampaknya menunjukkan dengan pernyataan "Fortran's MATH::PI"), saya harus menulis satu untuk C. Saya memilih, daripada benar-benar mendefinisikannya, bahwa saya hanya akan menentukan itu menggunakan beberapa algoritma cepat :

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

(disimpan sebagai pi_calc.c) Yang kemudian digunakan di 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

Ini menghasilkan yang dibutuhkan

 area=   28.2743338823081

Satu kompilasi ini menggunakan

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

3

R & C ++

Membutuhkan inlinedan Rcpppaket dalam R.

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

get.pi() * 3 ^ 2

cxxfunctionmembuat, mengkompilasi dan menautkan fungsi C ++ di belakang layar. Ya, ada cukup banyak pembuatan kode, dan return wrap(M_PI);merupakan kode C ++ (beserta #includebagiannya).


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

Anda mengalahkan saya untuk itu. :(
SuperJedi224

3

Julia menggunakan Python

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

Itu menyenangkan, saya belum pernah menggunakan PyCall sebelumnya. Antarmuka super mudah digunakan.


3

R + grep + awk + dc

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

Keluaran:

28.274337

3

Menggunakan ua Lua di Jawa

Program ini menggunakan perpustakaan LuaJ untuk mengevaluasi Lua di Jawa dan mendapatkan π. Itu juga persegi dengan Lua. Nikmati!

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

Hasil:

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


2

Jython + Java

Ini seharusnya bekerja di Jython. Saya tidak yakin, karena saya tidak punya cara untuk mengujinya ATM.

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

Jython dapat mengakses perpustakaan Java, jadi saya bisa mengimpor kelas Math dari java.lang dan menggunakan konstanta PI untuk menghitung luas lingkaran.

Golf:

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

Atau, jika saya diizinkan kode 3 ^ 2:

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

2

bash (PI dari perl, python, c)

Mungkin jika kita menggabungkan semua yang kita punya, kita mendapatkan hasil yang lebih akurat? :)

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

Bingung apakah memenuhi aturan ke-3. tetapi karena M_PI sudah digunakan maka itu harus dihitung.


2

ACTIONSCRIPT3 + javascript (menggunakan parse.com)

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

tautan kelas parse https://github.com/camdagr8/AS3-Parse-Class/blob/master/com/illumifi/Parse.as

dengan kode:

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

parse main.js:

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

hasil:

28.274333882308138
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.