π Quebra-cabeça do dia para 14/3


62

xkcd π comic

Feliz dia. O objetivo desta pergunta é calcular a área para um círculo de raio 3, onde A = πr².

O problema é que você precisa usar a constante π definida em uma linguagem diferente daquela em que está programando. Por exemplo, você pode escrever um programa C que usa o Fortran MATH::PIou um programa Python que usa o Java java.lang.Math.PI.

Regras:

  • Seu código deve usar um valor armazenado de π de um idioma diferente para o cálculo. (ou seja, ele deve ser armazenado em uma biblioteca constante ou matemática).
  • Todo o código do seu programa deve caber em um único arquivo. Por exemplo, você não pode escrever um programa em C para imprimir π e outro em Java para executar o programa C. (No entanto, você pode escrever um programa Java que grave e compile um programa C por si só.)
  • Você não pode baixar π de uma página da web e afirmar que sua constante veio do PHP / ASP / HTML.

Aqui está um exemplo que é executado no Bash e usa o math.pivalor armazenado do Python :

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

Resultado:

28.27433388231

Este é um concurso de popularidade, por isso vence a participação com mais votos após uma semana.

Edit: Após uma semana, o prêmio vai para o DigitalTrauma com 93 pontos. Obrigado pela dica incrível do montador - eu não sabia que o FPU armazenava a constante no hardware. Eu esperava que esse concurso visasse encontrar maneiras engraçadas de jogar fora os ciclos do relógio, mas esse poderia realmente salvar alguns.

* Imagem cortesia de: http://xkcd.com/10/


38
É o terceiro dia do 14º mês ?? Meu calendário deve estar quebrado.
Gareth

30
No próximo ano: 14/3/15 às 9:26 e 53s, eu irei postar um desafio
TheDoctor

5
Ugh. Tau é melhor. E isto.
bjb568

3
@bjb Concordo, Tau faz mais sentido, mas isso não significa que não possamos nos divertir um pouco em meados de março. :)
undergroundmonorail

9
Que intrigante. Em π dia, minha reputação foi 314.
tbodt

Respostas:


128

Montagem C + x86

Não está satisfeito com uma constante definida no software do seu idioma? Por que não usar um idioma que possa acessar um valor constante do PI diretamente do seu hardware 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
Caramba, há uma instrução apenas para carregar o valor de pi.
user2357112

21
x86 tem instruções para TUDO.
fofo


7
Boas escolhas para as 7 constantes também! Eu estou sempre usando log_e (2), mas não, digamos, 2. #
Tim S.

3
@ macio meu núcleo x86 está quebrado: tentei o MOV AX, c0ffe; ADICIONAR LEITE; ADICIONE AÇÚCAR; ADICIONE AÇÚCAR; MOV ecx, c0ffe; MOV ebx, 1; Eax MOV, 4 e meu orador bios riu de mim .....
GMasucci

77

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

Para garantir a segurança, este programa recupera o pi de alguns idiomas diferentes, levando o valor acordado. Mais idiomas podem ser facilmente adicionados para maior confiabilidade.


27
Eu vomitei um pouco na minha boca.
Dan Esparza

O que é J e por que você está executando seu programa C com ele?
NoBugs 16/03

O @NoBugs J é outro idioma, e eu o estou executando ( jcé o console J do meu computador) com a saída do meu programa C ( o. 1) para obter outro valor de pi. Os argumentos não são importantes.
grc 16/03

1
echo $long_string > gcc -o pi? Não acredito que ninguém pegou isso. Além disso, você já ouviu falar de here-docs | here-strings?
Blacklight Shining

Este é um dos melhores códigos que eu já vi. Vou enquadrar isso e colocá-lo na minha parede. Possivelmente com um aviso.
21414 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
Muito esperto. Usando uma maneira muito padrão de interface com diferentes durações. =) +1
jpmc26

34

Perl / Tk com C, Pascal, Java, JavaScript, LaTeX3, Prolog, Perl, Esquema, Lua, Python, TeX / PGF

O script Perl a seguir exibe uma janela que lista os valores de π e a área calculada. O valor de π é obtido de diferentes idiomas, como mostrado abaixo.

Resultado

O script de um arquivo:

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

línguas

A lista a seguir mostra os idiomas e o código usado para obter π.

  • GNU C: as extensões GNU são usadas para obter uma precisão mais alta de π.

    #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: Compilado com Pascal grátis .

    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: o Rhino é usado para executar o JavaScript.

    print(Math.PI)
  • LaTeX3:

    \documentclass{article}
    \usepackage{expl3}
    \ExplSyntaxOn
    \msg_term:n { pi=\fp_eval:n { pi } }
    \ExplSyntaxOff
    \stop
  • Prolog: SWI Prolog é usado como compilador de Prolog.

    :- format('~15f~n', [pi]).
  • Perl: Por diversão e integridade.

    use Math::Complex;
    print pi;
  • Esquema: A implementação do esquema de usos é o GNU Guile .

    (display (* 2 (acos 0)))
  • Lua: texlua é usado como intérprete de Lua.

    print(math.pi)
  • Pitão:

    import math
    print math.pi
  • TeX / PGF: π é retirado de sua definição de pacote pgf e TeX simples é usado como formato TeX:

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

16

dg

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

Como funciona:

dg é uma linguagem que é compilada no bytecode do CPython. Convenientemente, é compatível com bibliotecas python. importAs instruções em dg retornam o objeto que estão importando; portanto, este programa basicamente faz isso:

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

 

 

Não, não espero votos positivos. :)


4
Oopsy Daisy, eu acho que upvoted;)
Anonymous Pi

1
A propósito, esta é a primeira coisa que eu fiz na dg. Outra pessoa o usou para uma pergunta de golfe e o vinculou ao mesmo lugar ao qual eu vinculei nesta resposta. Eu o li e achei que o idioma parecia bom (apesar de eu desprezar o meme doge), mas não planejei usá-lo até cerca de uma hora depois de aprender sobre ele, quando li essa pergunta e percebi que poderia abusar dela.
Undergroundmonorail

5 horas atrás, quando publiquei meu primeiro comentário, este teve apenas 1 voto positivo. Acho que as pessoas levaram meu comentário a sério;) Ou apenas usaram o seu.
Anonymous Pi

"Todo o código deve caber em uma única linha". Pelo menos algumas pessoas podem ler!
Floris

<PYTHON'S MATH.PI>Aquelas repr()seqüências que você obtém para funções e outros objetos que não conseguem definir seus __repr__()s para serem reconstruções válidas de si mesmas não são realmente ... bem ... válidas. Tente __import__('math').pi.
Blacklight Shining

15

C ++ e Lua 5.2

Nada diz exagero como incorporar um intérprete de idioma inteiro para acessar a constante 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;
}

Eu poderia ter apenas ...lua_getglobal("math");lua_getfield(-1,"pi");
mniip 14/03

@ mniip eu percebi isso depois que eu postei. É de manhã cedo e meu cérebro ainda não está totalmente operacional, mas dessa maneira funciona tão bem quanto eu o deixei em paz.
Tony Ellis

13

bash + PHP + bc

Uma linha simples:

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

Resultado:

28.274333882308

"Todo o código deve caber em uma única linha". Pelo menos algumas pessoas podem ler!
Floris

4
@ Florida: Odeio quebrá-lo para você, mas a pergunta diz arquivo , não linha .
Dennis

26
@ Dennis - aparentemente eu não sou "algumas pessoas" ...: - /
Floris

10

MATLAB + Java (21 bytes)

Não tenho certeza se o MATLAB está trapaceando, mas aqui vamos nós

java.lang.Math.PI*3^2

Resultado: Format Short

28.2743

Resultado: Format Long

28.2743338823081

O tipo de formatação não afeta o valor armazenado, apenas afeta a forma como é impresso no console


1
Matla .. - estremece -
theGreenCabbage

@theGreenCabbage haha, não tenho certeza se esse é um tremor bom ou ruim :) Na minha experiência, tornou muito fácil escrever coisas simples rapidamente. É claro que existem alternativas melhores, mas se não houver muito tempo, o MATLAB faz o truque.
precisa saber é o seguinte

10

Bash, Nó, 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, mesmo que na verdade não funciona no OS X (math.h inclui outros arquivos a partir de architecture/*/math.h, dependendo da plataforma de destino)
ossifrage escrúpulos

1
Bem ele não funciona no Windows também, mas eu não estou indo para a portabilidade aqui :)
orion

7

PowerShell + MS SQL Server

Aqui está um para Powershell e SQL Server (de 2005 em diante)

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

e aqui como um único revestimento:

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

Irá postar um pouco mais tarde :)


7

JavaScript / PHP

Tem que ser salvo como um arquivo * .php e chamado em um navegador de algum servidor que interpreta o PHP.

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

Poderia jogar golfe usando tags curtas e substituindo 3 * 3 por 9 (isso é permitido?):

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

pi () tem o mesmo comprimento que M_PI, então não há vencedor.


2
"isso é permitido" - com certeza, não é um código de golfe, mas um concurso de popularidade.
CompuChip

1
Isso não será executado nem em php nem javascript.
Cthulhu

Sim, ele precisa de algumas <script>tags e uma extensão .php.
CompuChip

3
Eu editei embora eu acho que era compreensível o suficiente ...
Reeno

@Cthulhu "Tem que ser salvo como um arquivo * .php e chamado em um navegador de algum servidor que interpreta o PHP." Usando arquivos .html ou .php ou .what que não funcionem, você precisa do apache ou algo assim.
Anônimo Pi

6

Emacs Lisp: escrevendo, compilando e executando 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)))

destroçado

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

bônus:

Você pode triplicar o idioma deste executando o emacs em lote usando -eval e envolvendo a expressão em (print). Isso resultaria no Bash executando o lisp, que escreve compila e executa C lê a saída e a imprime no seu shell no bash.


5

Para esta pergunta, criei meu próprio idioma, chamado Digits. A sintaxe consiste em p, uma constante que representa pi e dígitos. Quando executado, ele retorna todos os dígitos (ep) multiplicados juntos. Aqui está o meu intérprete e código, escrito em 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
Parece-me mais uma função em Python do que uma linguagem, mas funciona.
Hosch250

2
@ hosch250 O interpretador python em si é uma (conjunto de) funções escritas em C (no caso do CPython), portanto, esta resposta é muito válida. Bastante inteligente, eu diria.
Juan Campa 15/03

4

bc + dc + bash (30 caracteres para os golfistas)

Aqui está um pequeno golfista:

$ dc<<<"3d*`bc -l<<<'a(1)*4'`*p"
28.27433388230813914596
$ 
  • bc -l<<<'a(1)*4' produz pi (é armazenado como uma constante na lib math bc para a função a () (arctan).
  • dc<<<"3d*pi *p"empurra 3 para a pilha, duplica o valor na parte superior da pilha (3) e múltiplos, em seguida, empurra pi para a pilha e múltiplos e depois imprime a parte superior da pilha.

4

OCaml + awk

Ninguém gosta de OCaml?

  • Use o OCaml para calcular o Pi
  • awkcalcular Pi * r 2

Aqui está:

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

A resposta é:

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

Bem vindo ao site! Mas acho que a questão é procurar um programa que realmente chame uma função ou compile um programa em outro idioma, não um que apenas compile em mais de um idioma.
Jonathan Van Matre

4
@ JonathanVanMatre: Eu acho que, neste caso, ele quis dizer que ele usa constante do cabeçalho C em C ++. std::coutnunca foi uma sintaxe C válida.
Konrad Borowski

Ah, boa ligação lá.
Jonathan Van Matre

4

Muito simples, usa o bash para acessar a biblioteca matemática 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

resultado:

28.274334

4

Como o Fortran na verdade não possui um valor intrínseco para pi (ou seja, OP parece indicar com a declaração "Fortran's MATH::PI "), eu tive que escrever um para C. Optei, em vez de defini-lo, que acabaria de determinar usando algum algoritmo rápido :

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

(salvo como pi_calc.c ) Que é então usado em 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

Isso gera o requerido

 area=   28.2743338823081

Um compila isso usando

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

3

R & C ++

Requer os pacotes inlinee Rcppem R.

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

get.pi() * 3 ^ 2

cxxfunctioncria, compila e vincula uma função C ++ nos bastidores. Sim, há muita geração de código acontecendo e return wrap(M_PI);é código C ++ (junto com a #includeparte).


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

Você chegou antes de mim. :(
SuperJedi224

3

Julia usando Python

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

Isso foi divertido, eu nunca tinha usado o PyCall antes. A interface é super fácil de usar.


3

R + grep + awk + dc

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

Resultado:

28.274337

3

Usando π de Lua em Java

Este programa usa a biblioteca LuaJ para avaliar Lua em Java e obter π. Também quadratura a área com Lua. Desfrutar!

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

A saída:

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


2

Jython + Java

Isso deve funcionar em Jython. Não tenho certeza, pois não tenho como testá-lo em caixas eletrônicos.

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

O Jython pode acessar as bibliotecas Java, para que eu possa importar a classe Math do java.lang e usar sua constante PI para calcular a área do círculo.

Golfe:

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

Ou, se eu puder codificar em 3 ^ 2:

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

2

bash (PI de perl, python, c)

Talvez se combinarmos tudo o que temos, obtemos um resultado mais preciso? :)

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

Confuso se satisfaz a 3ª regra. mas como o M_PI já está sendo usado, ele deve contar.


2

ACTIONSCRIPT3 + javascript (usando parse.com)

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

link da classe de análise https://github.com/camdagr8/AS3-Parse-Class/blob/master/com/illumifi/Parse.as

com o código:

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

analise main.js:

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

resultado:

28.274333882308138
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.