π jour puzzle pour 3/14


62

xkcd π comic

Bonne journée π. Le but de cette question est de calculer l'aire pour un cercle de rayon 3, où A = πr².

Le problème, c'est que vous devez utiliser la constante π définie dans un langage différent de celui dans lequel vous programmez. Par exemple, vous pouvez écrire un programme en C utilisant Fortran MATH::PIou un programme Python en utilisant Java java.lang.Math.PI.

Règles:

  • Votre code doit utiliser une valeur stockée de π d'une autre langue pour le calcul. (c’est-à-dire qu’il doit être stocké dans une bibliothèque de constantes ou de mathématiques.)
  • Tout le code de votre programme doit tenir dans un seul fichier. Par exemple, vous ne pouvez pas écrire un programme en C pour imprimer π, puis un autre en Java pour exécuter le programme C. (Cependant, vous pouvez écrire un programme Java qui écrit et compile un programme C lui-même.)
  • Vous ne pouvez pas télécharger π depuis une page Web et prétendre que votre constante provient de PHP / ASP / HTML.

Voici un exemple exécuté dans Bash et utilisant la math.pivaleur stockée de Python :

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

Sortie:

28.27433388231

Il s’agit d’un concours de popularité. Ainsi, l’entrée ayant obtenu le plus grand nombre de votes après une semaine gagne.

Edit: Après une semaine, le prix revient à DigitalTrauma avec 93 points. Merci pour l’incroyable astuce d’assemblage - je ne savais pas que le FPU stockait la constante dans le matériel. Je m'attendais à ce que ce concours consiste à trouver des moyens amusants de supprimer les cycles d'horloge, mais celui-ci pourrait en économiser quelques-uns.

* Image reproduite avec l'aimable autorisation de: http://xkcd.com/10/


38
C'est le 3ème jour du 14ème mois ?? Mon calendrier doit être brisé.
Gareth

30
L'année prochaine: 14/03/15 à 9h26 et 53sec, je vais poster un défi
TheDoctor

5
Pouah. Tau est meilleur. Et ça.
bjb568

3
@bjb Je suis d'accord, Tau a plus de sens, mais cela ne signifie pas que nous ne pouvons pas nous amuser un peu à la mi-mars. :)
undergroundmonorail

9
C'est intriguant. Le π jour, ma réputation était de 314.
tbodt

Réponses:


128

Assemblage C + x86

Pas satisfait d'une constante définie dans le logiciel de votre langue? Pourquoi ne pas utiliser un langage pouvant accéder à une valeur constante de PI directement à partir de votre matériel 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
Bon sang, il y a une instruction juste pour charger la valeur de pi.
user2357112

21
x86 a des instructions pour TOUT.
moelleux


7
Bon choix pour les 7 constantes aussi! J'utilise toujours log_e (2), mais pas, disons 2.
Tim S.

3
@ Fluffy mon noyau x86 est cassé: j'ai essayé MOV AX, c0ffe; AJOUTER DU LAIT; AJOUTEZ DU SUCRE; AJOUTEZ DU SUCRE; MOV ecx, c0ffe; MOV ebx, 1; MOV eax, 4 et mon haut-parleur de bios se sont moqués de moi .....
GMasucci

77

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

Juste pour être sûr, ce programme récupère le pi de plusieurs langues différentes, en prenant la valeur la plus convenue. Plus de langues peuvent facilement être ajoutées pour une plus grande fiabilité.


27
Je viens de vomir un peu dans ma bouche.
Dan Esparza

Qu'est-ce que J et pourquoi utilisez-vous votre programme C avec?
NoBugs

@NoBugs J est un autre langage, et je l'exécute ( jcc'est la console J de mon ordinateur) avec la sortie de mon programme C ( o. 1) pour obtenir une autre valeur de pi. Les arguments ne sont pas importants.
grc

1
echo $long_string > gcc -o pi? Je ne peux pas croire que personne ne l’ait pris. Aussi, avez-vous entendu parler de here-docs | here-strings?
Blacklight Shining

C'est l'un des morceaux de code les plus cool que j'ai jamais vus. Je vais encadrer ceci et le mettre sur mon mur. Éventuellement avec un avertissement.
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
Très intelligent. En utilisant un moyen très standard d'interfacer différentes exécutions. =) +1
jpmc26

34

Perl / Tk avec C, Pascal, Java, JavaScript, LaTeX3, Prolog, Perl, Schéma, Lua, Python, TeX / PGF

Le script Perl suivant affiche une fenêtre qui répertorie les valeurs de π et la surface calculée. La valeur de π provient de différentes langues, comme indiqué ci-dessous.

Résultat

Le script d'un fichier:

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

Les langues

La liste suivante montre les langues et le code utilisé pour obtenir π.

  • GNU C: Les extensions GNU sont utilisées pour obtenir une plus grande précision 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: Compilé avec 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 est utilisé pour exécuter JavaScript.

    print(Math.PI)
  • LaTeX3:

    \documentclass{article}
    \usepackage{expl3}
    \ExplSyntaxOn
    \msg_term:n { pi=\fp_eval:n { pi } }
    \ExplSyntaxOff
    \stop
  • Prolog: SWI Prolog est utilisé comme compilateur Prolog.

    :- format('~15f~n', [pi]).
  • Perl: pour le plaisir et la complétude.

    use Math::Complex;
    print pi;
  • Scheme: GNU Guile est l'implémentation des utilisations de Scheme .

    (display (* 2 (acos 0)))
  • Lua: texlua est utilisé comme interprète Lua.

    print(math.pi)
  • Python:

    import math
    print math.pi
  • TeX / PGF: π provient de la définition du paquet pgf et TeX est utilisé au format TeX:

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

16

dg

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

Comment ça fonctionne:

dg est un langage qui compile en bytecode CPython. De manière pratique, il est compatible avec les bibliothèques Python. importles instructions dans dg renvoient l'objet qu'elles importent, donc ce programme fait essentiellement ceci:

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

 

 

Non, je ne m'attends pas à un vote positif. :)


4
Oopsy Daisy, je pense avoir voté;)
Anonyme Pi

1
Au fait, c’est la première chose que j’ai faite dans la dg. Quelqu'un d'autre l'a utilisé pour une question de golf et lié au même endroit que celui que j'ai lié à cette réponse. Je l'ai lu et j'ai pensé que la langue était soignée (malgré le fait que je méprise le doge meme), mais je ne prévoyais pas l'utiliser moins d'une heure après l'avoir appris. J'ai lu cette question et compris que je pouvais en abuser.
undergroundmonorail

Il y a 5 heures, lorsque j'ai posté mon premier commentaire, il n'y avait qu'un vote positif. Je pense que les gens ont pris mon commentaire au sérieux;) ou ils ont simplement utilisé le vôtre.
Anonyme Pi

"Tout le code doit tenir dans une seule ligne". Au moins, certaines personnes peuvent lire!
Floris

<PYTHON'S MATH.PI>Les repr()chaînes que vous obtenez pour les fonctions et les autres objets qui ne peuvent pas définir leur __repr__()s valide sont des reconstructions qui ne sont pas réellement… bien… valides. Essayez __import__('math').pi.
Blacklight Shining

15

C ++ & Lua 5.2

Rien ne dit exagérer autant que d'incorporer un interprète de langue entière pour accéder à 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;
}

aurait pu juste ...lua_getglobal("math");lua_getfield(-1,"pi");
Mniip

@mniip j'ai compris cela après avoir posté. Il est tôt le matin et mon cerveau n'est pas encore complètement opérationnel, mais cette méthode fonctionne tout aussi bien, alors je l'ai laissée seule.
Tony Ellis

13

bash + PHP + bc

Un one-liner assez simple:

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

Sortie:

28.274333882308

"Tout le code doit tenir dans une seule ligne". Au moins, certaines personnes peuvent lire!
Floris

4
@ Floris: Je déteste vous en parler, mais la question dit fichier , pas ligne .
Dennis

26
@dennis - apparemment, je ne suis pas "certaines personnes" ...: - /
Floris

10

MATLAB + Java (21 octets)

Pas sûr que MATLAB triche, mais on y va

java.lang.Math.PI*3^2

Sortie: Format Short

28.2743

Sortie: Format Long

28.2743338823081

Le type de formatage n'affecte pas la valeur stockée, il affecte uniquement la façon dont il est imprimé dans la console


1
MATLAB .. - frissonne -
theGreenCabbage

@theGreenCabbage haha, je ne sais pas si c'est un bon frisson ou un mauvais frisson :) D'après mon expérience, cela a rendu l'écriture simple de choses simples très rapidement. Bien sûr, il existe de meilleures solutions, mais s’il n’ya pas beaucoup de temps, MATLAB fait le bon choix.
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, même si cela ne fonctionne pas sous OS X (math.h inclut d'autres fichiers architecture/*/math.hdépendant de la plate-forme cible)
ossifrage délirant

1
Eh bien, cela ne fonctionne pas sous Windows non plus, mais je ne veux pas de portabilité ici :)
orion

7

Powershell + MS SQL Server

En voici un pour Powershell et SQL Server (à partir de 2005)

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

et ici comme un seul paquebot:

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

J'en posterai d'autres plus tard :)


7

JavaScript / PHP

Doit être enregistré en tant que fichier * .php et appelé dans un navigateur depuis un serveur interprétant PHP.

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

Pourrait être joué au golf en utilisant des tags courts et en substituant 3 * 3 avec 9 (est-ce autorisé?):

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

pi () a la même longueur que M_PI, donc il n'y a pas de gagnant.


2
"est-ce permis" - bien sûr, ce n'est pas du code golf, mais un concours de popularité.
CompuChip

1
Cela ne fonctionnera ni en php ni javascript cependant.
Cthulhu

Oui, il a besoin de <script>balises et d’une extension .php.
CompuChip

3
Je l'ai édité bien que je pense que c'était assez compréhensible ...
Reeno

@Cthulhu "Doit être enregistré en tant que fichier * .php et appelé dans un navigateur depuis un serveur interprétant PHP." Utiliser des fichiers .html, .php ou .whats purs ne fonctionne pas, vous avez besoin d’apache ou quelque chose comme ça.
Anonyme Pi

6

Emacs Lisp: écriture, compilation et exécution de 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)))

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

prime:

Vous pourriez tripler le langage en exécutant emacs en batch en utilisant -eval et en entourant l'expression dans (print). Cela aurait pour résultat que Bash lancer lisp qui écrit compile et exécute C lit la sortie et l’imprime sur votre shell en bash.


5

Pour cette question, j'ai créé mon propre langage, appelé Digits. La syntaxe consiste en p, une constante représentant pi et des chiffres. Lorsqu'il est exécuté, il renvoie tous les chiffres (et p) multipliés ensemble. Voici mon interprète et mon code, écrit 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
Cela me ressemble plus à une fonction en Python qu’à un langage, mais cela fonctionne.
Hosch250

2
@ hosch250 L'interpréteur python lui-même est une fonction (ensemble de) écrite en C (dans le cas de CPython), donc cette réponse est très valide. Assez intelligent je dirais.
Juan Campa

4

bc + dc + bash (30 caractères pour les golfeurs)

Voici un petit golfy:

$ dc<<<"3d*`bc -l<<<'a(1)*4'`*p"
28.27433388230813914596
$ 
  • bc -l<<<'a(1)*4' produit pi (il est stocké comme une constante dans la librairie mathématique bc pour la fonction a () (arctan).
  • dc<<<"3d*pi *p"pousse 3 dans la pile, duplique la valeur au sommet de la pile (3) et les multiples, puis pousse pi dans la pile et les multiples, puis imprime le haut de la pile.

4

OCaml + awk

Personne n'aime OCaml?

  • Utiliser OCaml pour calculer Pi
  • awkcalculer Pi * r 2

C'est ici:

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

La réponse est:

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

Bienvenue sur le site! Mais je pense que la question est de rechercher un programme qui appelle réellement une fonction ou compile un programme dans une autre langue, pas un programme qui compilera simplement dans plus d’une langue.
Jonathan Van Matre

4
@ JonathanVanMatre: Je pense que dans ce cas, il voulait dire qu'il utilise la constante de l'en-tête C en C ++. std::coutn'a jamais été une syntaxe C valide.
Konrad Borowski

Ah, bon appel là-bas.
Jonathan Van Matre

4

Très simple, utilise bash pour accéder à la bibliothèque de mathématiques 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

résultat:

28.274334

4

Puisque Fortran n’a pas réellement de valeur intrinsèque pour pi (ce qui était OP semble indiquer avec la déclaration "Fortran MATH::PI"), j’ai dû en écrire une pour C. J’ai opté, plutôt que de la définir, que je voulais simplement déterminer en utilisant un algorithme rapide :

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

(enregistré sous pi_calc.c) qui est ensuite utilisé dans 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

Cette sortie les requis

 area=   28.2743338823081

On compile cela en utilisant

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

3

R & C ++

Nécessite le inlineet Rcpppackages dans R.

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

get.pi() * 3 ^ 2

cxxfunctioncrée, compile et lie une fonction C ++ en coulisse. Oui, il y a beaucoup de génération de code, et du return wrap(M_PI);code C ++ (avec la #includepartie).


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

Tu m'as battu à ça. :(
SuperJedi224 le

3

Julia utilisant Python

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

C'était amusant, je n'avais jamais utilisé PyCall auparavant. L'interface est super facile à utiliser.


3

R + grep + awk + dc

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

Sortie:

28.274337

3

Utiliser le π de Lua en Java

Ce programme utilise la bibliothèque LuaJ pour évaluer Lua en Java et obtenir π. Il place également la région avec Lua. Prendre plaisir!

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

Le résultat:

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


2

Jython + Java

Cela devrait fonctionner dans Jython. Je ne suis pas sûr, car je n'ai aucun moyen de le tester en ATM.

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

Jython peut accéder aux bibliothèques Java, je peux donc simplement importer la classe Math depuis java.lang et utiliser sa constante PI pour calculer l'aire du cercle.

Golfé:

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

Ou, si je suis autorisé à coder en 3 ^ 2:

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

2

bash (PI de perl, python, c)

Peut-être que si nous combinons tout ce que nous avons, nous obtenons un résultat plus précis? :)

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

Confus s'il satisfait à la 3ème règle. mais comme M_PI est déjà utilisé, il devrait compter.


2

ACTIONSCRIPT3 + javascript (utilisation de parse.com)

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

lien de classe d'analyse https://github.com/camdagr8/AS3-Parse-Class/blob/master/com/illumifi/Parse.as

avec code:

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

analyser main.js:

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

résultat:

28.274333882308138
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.