π День головоломки на 3/14


62

xkcd π комикс

С Днем Рождения. Цель этого вопроса - вычислить площадь для круга радиуса 3, где A = πr².

Суть в том, что вы должны использовать константу π, которая определена на языке, отличном от того, на котором вы программируете. Например, вы можете написать программу на C, которая использует Fortran MATH::PI, или программу на Python, которая использует Java java.lang.Math.PI.

Правила:

  • Ваш код должен использовать сохраненное значение π с другого языка для расчета. (т.е. он должен храниться в константе или математической библиотеке.)
  • Весь код вашей программы должен помещаться в одном файле. Например, вы не можете написать одну программу на 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-го месяца? Мой календарь должен быть сломан.
Гарет

30
В следующем году: 14.03.15 в 9:26 и 53сек, я опубликую вызов
TheDoctor

5
Тьфу. Тау лучше. И это.
bjb568

3
@bjb Я согласен, Тау имеет больше смысла, но это не значит, что мы не можем немного повеселиться в середине марта. :)
подземный

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
Черт возьми, есть инструкция просто загрузить значение числа Пи.
user2357112

21
В x86 есть инструкции для ВСЕГО.
пушистый


7
Хороший выбор для 7 констант тоже! Я всегда использую log_e (2), но не, скажем, 2.
Тим С.

3
@fluffy мое x86 ядро ​​сломано: я попробовал MOV AX, c0ffe; ДОБАВИТЬ МОЛОКО; ДОБАВИТЬ САХАР; ДОБАВИТЬ САХАР; MOV ecx, c0ffe; MOV ebx, 1; MOV eax, 4, и мой биограф-спикер смеялся надо мной .....
GMasucci

77

Python, Bash, C, J, PHP и Python3

import subprocess

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

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

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

print pi * 3 * 3

Просто чтобы быть в безопасности, эта программа извлекает пи из нескольких разных языков, принимая наиболее согласованное значение. Для большей надежности можно легко добавить больше языков.


27
Я просто немного рванул во рту.
Дэн Эспарза

Что такое J и почему вы запускаете на нем свою C-программу?
NoBugs

@NoBugs J - это другой язык, и я запускаю его ( jcэто консоль J на ​​моем компьютере) с выводом из моей программы на C ( o. 1), чтобы получить другое значение pi. Аргументы не важны.
grc

1
echo $long_string > gcc -o pi? Я не могу поверить, что никто не поймал это. Кроме того, вы слышали о Here-Docs | здесь-строки?
Blacklight Shining

Это один из самых крутых кусков кода, который я когда-либо видел. Я собираюсь создать это и поставить на мою стену. Возможно с предупреждением.
Кевин

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;
    }
    
  • Паскаль: Скомпилировано с 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)))
  • Lua: texlua используется как переводчик Lua.

    print(math.pi)
  • Python:

    import math
    print math.pi
  • TeX / PGF: π взято из определения пакета pgf, а обычный TeX используется в качестве формата TeX:

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

16

дециграмм

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

Как это устроено:

dg - это язык, который компилируется в байт-код CPython. Удобно, что он совместим с библиотеками Python. importоператоры в dg возвращают объект, который они импортируют, так что эта программа в основном делает это:

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

 

 

Нет, я не ожидаю никаких голосов. :)


4
Oopsy Daisy, я думаю, я проголосовал;)
Anonymous Pi

1
Кстати, это первое, что я сделал в dg. Кто-то еще использовал его для вопроса о гольфе и связался с тем же местом, на которое я ссылался в этом ответе. Я прочитал его и подумал, что язык выглядит аккуратно (несмотря на то, что я презираю мем дожа), но не планировал использовать его примерно через час после того, как узнал об этом, когда прочитал этот вопрос и понял, что могу злоупотреблять им.
подземный

5 часов назад, когда я опубликовал свой первый комментарий, у него было только 1 ответ. Я думаю, что люди восприняли мой комментарий всерьез;) Или просто использовали ваш.
Аноним Пи

«Весь код должен помещаться в одну строку». По крайней мере, некоторые люди могут читать!
Флорис

<PYTHON'S MATH.PI>Те repr()строки, которые вы получаете для функций и других объектов, которые не могут | определить их __repr__()как действительные реконструкции самих себя, на самом деле… ну… допустимы. Попробуй __import__('math').pi.
Blacklight Shining

15

C ++ и Lua 5.2

Ничто не говорит об излишестве, как встраивание целого интерпретатора языка для доступа к константе pi.

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

#define R 3

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

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

    lua_Number PI_ = lua_tonumber( vm, -1 );

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

    lua_close( vm );
    return 0;
}

мог бы просто ...lua_getglobal("math");lua_getfield(-1,"pi");
Мниип

@mniip я понял это после того, как отправил. Рано утром, и мой мозг еще не полностью исправен, но этот способ работает так же хорошо, поэтому я оставил его в покое.
Тони Эллис

13

Bash + PHP + BC

Довольно простой однострочник:

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

Выход:

28.274333882308

«Весь код должен помещаться в одну строку». По крайней мере, некоторые люди могут читать!
Флорис

4
@Floris: Ненавижу ломать это тебе, но вопрос говорит файл , а не строка .
Деннис

26
@dennis - очевидно, я не "некоторые люди" ...: - /
Floris

10

MATLAB + Java (21 байт)

Не уверен, что MATLAB обманывает, но здесь мы идем

java.lang.Math.PI*3^2

Выход: Format Short

28.2743

Выход: Format Long

28.2743338823081

Тип форматирования не влияет на сохраняемое значение, он влияет только на то, как оно выводится на консоль.


1
МАТЛАБ .. - вздрагивает -
Зеленая капуста

@theGreenCabbage, ха-ха, не уверен, что это хорошо или плохо. По моему опыту, писать простые вещи быстро очень легко. Конечно, есть лучшие альтернативы, но если времени не много, MATLAB добьется цели.
MZimmerman6

10

Баш, Узел, Рубин, Питон

#!/bin/bash

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

7

Perl

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

+1, хотя на самом деле он не работает в OS X (math.h включает другие файлы в architecture/*/math.hзависимости от целевой платформы)
брезгливый оссифраж

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 или. Что бы файлы не работали, вам нужен apache или что-то в этом роде.
Аноним Пи

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 запустит lisp, который записывает компиляцию и запускает 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 Сам интерпретатор python - это (набор) функций, написанных на C (в случае CPython), поэтому этот ответ очень верен. Довольно умно я бы сказал.
Хуан Кампа

4

bc + dc + bash (30 символов для игроков в гольф)

Вот маленький гольфист:

$ dc<<<"3d*`bc -l<<<'a(1)*4'`*p"
28.27433388230813914596
$ 
  • bc -l<<<'a(1)*4' производит pi (он сохраняется как константа в bc math lib для функции a () (arctan).
  • dc<<<"3d*pi *p"помещает 3 в стек, дублирует значение в верхней части стека (3) и умножает его, затем помещает pi в стек и умножает, а затем печатает вершину стека.

4

OCaml + awk

Никто не любит OCaml?

  • Используйте OCaml для вычисления Пи
  • 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;
}

Добро пожаловать на сайт! Но я думаю, что вопрос в том, чтобы найти программу, которая на самом деле вызывает функцию или компилирует программу на другом языке, а не ту, которая просто компилирует на нескольких языках.
Джонатан Ван Матре

4
@JonathanVanMatre: Я думаю, что в данном случае он имел в виду, что он использует константу из заголовка C в C ++. std::coutникогда не был действительным синтаксисом Си.
Конрад Боровски

Ах, хороший звонок там.
Джонатан Ван Матре

4

Очень просто, использует bash для доступа к математической библиотеке C:

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


4

Поскольку у Фортрана на самом деле нет внутреннего значения для пи (которое, как представляется, OP указывает на выражение «Фортрана 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пакеты в R.

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

R + grep + awk + dc

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

Выход:

28.274337

3

Использование Lua π в Java

Эта программа использует библиотеку LuaJ для оценки Lua на Java и получения π. Это также уравнивает область с Луа. Наслаждайтесь!

    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. Я не уверен, так как у меня нет возможности проверить это банкоматом.

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

Jython может получить доступ к библиотекам Java, поэтому я могу просто импортировать класс Math из java.lang и использовать его константу PI для вычисления площади круга.

Golfed:

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.