π Rompecabezas para el 14/3


62

xkcd π comic

Feliz día π. El objetivo de esta pregunta es calcular el área para un círculo de radio 3, donde A = πr².

El problema es que debe usar la constante π definida en un lenguaje diferente al que está programando. Por ejemplo, puede escribir un programa en C que use Fortran MATH::PIo un programa en Python que use Java java.lang.Math.PI.

Reglas:

  • Su código debe usar un valor almacenado de π de un idioma diferente para el cálculo. (es decir, debe almacenarse en una biblioteca constante o matemática).
  • Todo el código para su programa debe caber en un solo archivo. Por ejemplo, no puede escribir un programa en C para imprimir π, luego otro en Java para ejecutar el programa C. (Sin embargo, puede escribir un programa Java que escriba y compile un programa C por sí mismo).
  • No puede descargar π desde una página web y afirmar que su constante proviene de PHP / ASP / HTML.

Aquí hay un ejemplo que se ejecuta en Bash y usa el math.pivalor almacenado de Python :

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

Salida:

28.27433388231

Este es un concurso de popularidad, por lo que gana la entrada con más votos después de una semana.

Editar: después de una semana, el premio va para DigitalTrauma con 93 puntos. Gracias por la increíble sugerencia de ensamblador: no sabía que la FPU almacenaba la constante en el hardware. Esperaba que este concurso se tratara de encontrar formas divertidas de tirar los ciclos del reloj, pero eso realmente podría ahorrar algunos.

* Imagen cortesía de: http://xkcd.com/10/


38
¿Es el 3er día del 14to mes? Mi calendario debe estar roto.
Gareth

30
El próximo año: 14/03/15 a las 9:26 y 53 segundos, publicaré un desafío
TheDoctor

55
Ugh Tau es mejor. Y esto.
bjb568

3
@bjb Estoy de acuerdo, Tau tiene más sentido, pero eso no significa que no podamos divertirnos un poco a mediados de marzo. :)
undergroundmonorail

99
Que intrigante. El día π, mi reputación era 314.
tbodt

Respuestas:


128

Conjunto C + x86

¿No está satisfecho con una constante definida en el software de su idioma? ¿Por qué no utilizar un lenguaje que puede acceder a un valor constante de PI directamente desde el hardware de su 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
Santo cielo, hay una instrucción solo para cargar el valor de pi.
user2357112

21
x86 tiene instrucciones para TODO.
esponjoso


77
¡Buenas opciones para las 7 constantes también! Siempre estoy usando log_e (2), pero no, digamos, 2.
Tim S.

3
@fluffy mi núcleo x86 está roto: probé MOV AX, c0ffe; AGREGAR LECHE; AÑADE AZUCAR; AÑADE AZUCAR; MOV ecx, c0ffe; MOV ebx, 1; MOV eax, 4 y mi bios orador se rió de mí .....
GMasucci

77

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

Solo para estar seguro, este programa recupera pi de algunos idiomas diferentes, tomando el valor más acordado. Se pueden agregar más idiomas para mayor confiabilidad.


27
Solo vomité un poco en mi boca.
Dan Esparza

¿Qué es J y por qué está ejecutando su programa C con él?
NoBugs

@NoBugs J es otro idioma, y ​​lo estoy ejecutando ( jces la consola J de mi computadora) con salida de mi programa C ( o. 1) para obtener otro valor de pi. Los argumentos no son importantes.
grc

1
echo $long_string > gcc -o pi? No puedo creer que nadie haya captado esto. Además, ¿has oído hablar de here-docs | here-strings?
Blacklight Shining

Este es uno de los mejores códigos que he visto. Voy a enmarcar esto y ponerlo en mi pared. Posiblemente con una advertencia.
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'];

44
Muy inteligente. Usando una forma muy estándar de interconectar diferentes tiempos de ejecución. =) +1
jpmc26

34

Perl / Tk con C, Pascal, Java, JavaScript, LaTeX3, Prolog, Perl, Scheme, Lua, Python, TeX / PGF

El siguiente script de Perl muestra una ventana que enumera los valores de π y el área calculada. El valor de π se toma de diferentes idiomas como se muestra a continuación.

Resultado

El script de un archivo:

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

Idiomas

La siguiente lista muestra los idiomas y el código que se utiliza para obtener π.

  • GNU C: las extensiones GNU se utilizan para obtener una mayor precisión 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 con Free Pascal .

    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 se usa para ejecutar JavaScript.

    print(Math.PI)
  • LaTeX3:

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

    :- format('~15f~n', [pi]).
  • Perl: por diversión e integridad.

    use Math::Complex;
    print pi;
  • Esquema: La implementación del esquema de usos es GNU Guile .

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

    print(math.pi)
  • Pitón:

    import math
    print math.pi
  • TeX / PGF: π se toma de su definición de paquete pgf y TeX simple se usa como formato TeX:

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

16

dg

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

Cómo funciona:

dg es un lenguaje que compila a bytecode CPython. Convenientemente, es compatible con las bibliotecas de Python. importlas declaraciones en dg devuelven el objeto que están importando, por lo que este programa básicamente hace esto:

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

 

 

No, no espero votos positivos. :)


44
Oopsy Daisy, creo que voté;)
Anónimo Pi

1
Por cierto, esto es lo primero que hice en dg. Alguien más lo usó para una pregunta de golf y se vinculó al mismo lugar al que me relacioné en esta respuesta. Lo leí y pensé que el idioma se veía bien (a pesar del hecho de que desprecio el meme del dux), pero no planeé usarlo hasta aproximadamente una hora después de aprenderlo, cuando leí esta pregunta y me di cuenta de que podía abusar de ella.
undergroundmonorail

Hace 5 horas, cuando publiqué mi primer comentario, solo tenía 1 voto a favor. Creo que la gente tomó mi comentario en serio;) O simplemente usaron el tuyo.
Anónimo Pi

"Todo el código debe caber en una sola línea". ¡Al menos algunas personas pueden leer!
Floris

<PYTHON'S MATH.PI>Esas repr()cadenas que obtienes para funciones y otros objetos que no pueden definir sus __repr__()s como reconstrucciones válidas de sí mismas no son realmente ... bueno ... válidas. Tratar __import__('math').pi.
Blacklight Shining

15

C ++ y Lua 5.2

Nada dice demasiado como incorporar un intérprete de lenguaje completo para acceder a la 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;
}

podría haber simplemente ...lua_getglobal("math");lua_getfield(-1,"pi");
mniip

@mniip Me di cuenta de eso después de publicar. Es temprano en la mañana y mi cerebro aún no está completamente operativo, pero de esta manera funciona igual de bien, así que lo dejé solo.
Tony Ellis

13

bash + PHP + bc

Una línea bastante simple:

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

Salida:

28.274333882308

"Todo el código debe caber en una sola línea". ¡Al menos algunas personas pueden leer!
Floris

44
@ Floris: Odio decírtelo, pero la pregunta dice archivo , no línea .
Dennis

26
@dennis - aparentemente no soy "algunas personas" ...: - /
Floris

10

MATLAB + Java (21 bytes)

No estoy seguro si MATLAB está haciendo trampa, pero aquí vamos

java.lang.Math.PI*3^2

Salida: Format Short

28.2743

Salida: Format Long

28.2743338823081

El tipo de formato no afecta el valor almacenado, solo afecta la forma en que se imprime en la consola


1
MATLAB .. - estremecimientos -
theGreenCabbage

@theGreenCabbage jaja, no estoy seguro si es un buen estremecimiento o uno malo :) En mi experiencia, ha hecho que escribir cosas simples rápidamente sea muy fácil. Por supuesto, hay mejores alternativas, pero si no hay mucho tiempo, MATLAB hace el truco.
MZimmerman6

10

Bash, Nodo, 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, a pesar de que en realidad no funciona en OS X (math.h incluye otros archivos desde architecture/*/math.hdependiendo de la plataforma de destino)
quebrantahuesos aprensivos

1
Bueno, tampoco funciona en Windows, pero no voy por la portabilidad aquí :)
orion

7

Powershell + MS SQL Server

Aquí hay uno para Powershell y SQL Server (desde 2005 en adelante)

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

y aquí como un solo revestimiento:

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

Publicaré más más tarde :)


7

JavaScript / PHP

Tiene que guardarse como un archivo * .php y llamarse en un navegador desde algún servidor que interprete PHP.

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

Podría jugar golf usando etiquetas cortas y sustituyendo 3 * 3 con 9 (¿está permitido?):

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

pi () tiene la misma longitud que M_PI, por lo que no hay ganador.


2
"esto está permitido" - claro, no es código golf sino concurso de popularidad.
CompuChip

1
Sin embargo, esto no se ejecutará ni en php ni javascript.
Cthulhu

Sí, necesita algunas <script>etiquetas y una extensión .php.
CompuChip

3
Lo edité, aunque creo que fue lo suficientemente comprensible ...
Reeno

@Cthulhu "Tiene que guardarse como un archivo * .php y llamarse en un navegador desde algún servidor que interprete PHP". Usando .html o .php o. Lo que sea que los archivos no funcionen, necesita apache o algo así.
Anónimo Pi

6

Emacs Lisp: escribir, compilar y ejecutar 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)))

sin golf

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

prima:

Puede triplicar este idioma ejecutando emacs en lote usando -eval y rodeando la expresión en (print). Esto daría como resultado que Bash ejecute lisp, que escribe compilaciones y ejecuta C, lee la salida y la imprime en su shell en bash.


5

Para esta pregunta, creé mi propio idioma, llamado Dígitos. La sintaxis consiste en p, una constante que representa pi, y dígitos. Cuando se ejecuta, devuelve todos los dígitos (yp) multiplicados juntos. Aquí está mi intérprete y mi código, escrito en 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
Me parece más una función en Python que un lenguaje, pero funciona.
Hosch250

2
@ hosch250 El intérprete de Python en sí es una función (conjunto de) escrita en C (en el caso de CPython), por lo que esta respuesta es muy válida. Muy inteligente, diría yo.
Juan Campa

4

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

Aquí hay un pequeño golfista:

$ dc<<<"3d*`bc -l<<<'a(1)*4'`*p"
28.27433388230813914596
$ 
  • bc -l<<<'a(1)*4' produce pi (se almacena como una constante en bc math lib para la función a () (arctan).
  • dc<<<"3d*pi *p"empuja 3 a la pila, duplica el valor en la parte superior de la pila (3) y se multiplica, luego empuja pi a la pila y se multiplica, luego imprime la parte superior de la pila.

4

OCaml + awk

¿A nadie le gusta OCaml?

  • Use OCaml para calcular Pi
  • awkpara calcular Pi * r 2

Aquí está:

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

La respuesta es:

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

Bienvenido al sitio! Pero creo que la pregunta es buscar un programa que realmente llame a una función o compile un programa en otro idioma, no uno que simplemente compile en más de un idioma.
Jonathan Van Matre

44
@ JonathanVanMatre: Creo que en este caso quiso decir que usa constante del encabezado C en C ++. std::coutnunca fue una sintaxis válida de C.
Konrad Borowski

Ah, buena llamada allí.
Jonathan Van Matre

4

Muy simple, usa bash para acceder a la 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

Dado que Fortran en realidad no tiene un valor intrínseco para pi (que es OP parece indicarlo con la declaración "Fortran's MATH::PI"), tuve que escribir uno para C. Opté, en lugar de definirlo realmente, que simplemente determinaría usando algún 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);
}

(guardado como pi_calc.c) que luego se utiliza en 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

Esto genera lo requerido

 area=   28.2743338823081

Uno compila esto usando

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

3

R y C ++

Requiere los paquetes inliney Rcppen R.

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

get.pi() * 3 ^ 2

cxxfunctioncrea, compila y vincula una función C ++ detrás de escena. Sí, está sucediendo bastante generación de código, y return wrap(M_PI);es código C ++ (junto con la #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

Me ganaste a eso. :(
SuperJedi224

3

Julia usando Python

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

Eso fue divertido, nunca había usado PyCall antes. La interfaz es muy 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'

Salida:

28.274337

3

Usando π de Lua en Java

Este programa utiliza la biblioteca LuaJ para evaluar Lua en Java y obtener π. También cuadra el área con Lua. ¡Disfrutar!

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

La salida:

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


2

Jython + Java

Esto debería funcionar en Jython. No estoy seguro, ya que no tengo forma de probarlo en cajero automático.

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

Jython puede acceder a las bibliotecas de Java, así que solo puedo importar la clase Math de java.lang y usar su constante PI para calcular el área del círculo.

Golfizado:

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

O, si se me permite codificar en 3 ^ 2:

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

2

bash (PI de perl, python, c)

¿Quizás si combinamos todo lo que tenemos, obtenemos un resultado más 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>

Confundido si cumple la tercera regla. pero como M_PI ya se usa, debería contar.


2

ACTIONSCRIPT3 + javascript (usando parse.com)

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

analizar el enlace de clase https://github.com/camdagr8/AS3-Parse-Class/blob/master/com/illumifi/Parse.as

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

analizar main.js:

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

resultado:

28.274333882308138
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.