π Day puzzle per 3/14


62

xkcd π fumetto

Buon giorno π. L'obiettivo di questa domanda è calcolare l'area per un cerchio di raggio 3, dove A = πr².

Il problema è che devi usare la costante π definita in un linguaggio diverso da quello in cui stai programmando. Ad esempio, puoi scrivere un programma C che utilizza Fortran MATH::PIo un programma Python che utilizza Java java.lang.Math.PI.

Regole:

  • Il codice deve utilizzare un valore memorizzato di π da una lingua diversa per il calcolo. (ovvero deve essere memorizzato in una libreria di matematica o costante).
  • Tutto il codice per il tuo programma deve essere contenuto in un singolo file. Ad esempio, non è possibile scrivere un programma in C per stampare π, quindi un altro in Java per eseguire il programma C. (Tuttavia, è possibile scrivere un programma Java che scrive e compila un programma C da solo.)
  • Non puoi scaricare π da una pagina web e affermare che la tua costante proviene da PHP / ASP / HTML.

Ecco un esempio che viene eseguito in Bash e utilizza il math.pivalore memorizzato di Python :

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

Produzione:

28.27433388231

Questo è un concorso di popolarità, quindi vince l'iscrizione con il maggior numero di voti dopo una settimana.

Modifica: dopo una settimana, il premio va a DigitalTrauma con 93 punti. Grazie per il fantastico suggerimento dell'assemblatore: non sapevo che la FPU memorizzava la costante nell'hardware. Mi aspettavo che questo concorso riguardasse la ricerca di modi divertenti per buttare via i cicli di clock, ma che si potrebbe effettivamente salvare alcuni.

* Immagine per gentile concessione di: http://xkcd.com/10/


38
È il 3 ° giorno del 14 ° mese ?? Il mio calendario deve essere rotto.
Gareth,

30
L'anno prossimo: 14/03/15 alle 9:26 e 53sec, posterò una sfida
TheDoctor

5
Ugh. Tau sta meglio. E questo.
bjb568,

3
@bjb Sono d'accordo, Tau ha più senso, ma ciò non significa che non ci possiamo divertire un po 'a metà marzo. :)
undergroundmonorail

9
Che intrigante. Il giorno π la mia reputazione era 314.
martedì

Risposte:


128

C + x86 assembly

Non sei soddisfatto di una costante definita nel software della tua lingua? Perché non usare un linguaggio in grado di accedere a un valore costante di PI direttamente dall'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
Merda, c'è un'istruzione solo per caricare il valore di pi.
user2357112

21
x86 ha le istruzioni per TUTTO.
soffice


7
Buone scelte anche per le 7 costanti! Uso sempre log_e (2), ma non, diciamo, 2.
Tim S.

3
@fluffy il mio core x86 è rotto: ho provato MOV AX, c0ffe; AGGIUNGI LATTE; AGGIUNGI LO ZUCCHERO; AGGIUNGI LO ZUCCHERO; MOV ecx, c0ffe; MOV ebx, 1; MOV eax, 4 e il mio oratore del bios mi hanno riso .....
GMasucci il

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

Giusto per sicurezza, questo programma recupera pi da poche lingue diverse, prendendo il valore più concordato. Più lingue possono essere facilmente aggiunte per una maggiore affidabilità.


27
Ho appena vomitato un po 'in bocca.
Dan Esparza,

Che cos'è J e perché stai eseguendo il tuo programma C con esso?
NoBugs

@NoBugs J è un'altra lingua e la sto eseguendo ( jcè la console J sul mio computer) con l'output del mio programma C ( o. 1) per ottenere un altro valore di pi. Gli argomenti non sono importanti.
GRC

1
echo $long_string > gcc -o pi? Non riesco a credere che nessuno l'abbia scoperto. Inoltre, hai sentito parlare di here-docs | here-stringhe?
Blacklight Shining

Questo è uno dei pezzi di codice più interessanti che abbia mai visto. Ho intenzione di inquadrare questo e metterlo sul mio muro. Forse con un avvertimento.
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
Molto intelligente. Utilizzando un modo molto standard di interfacciare diversi runtime. =) +1
jpmc26

34

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

Il seguente script Perl mostra una finestra che elenca i valori di π e l'area calcolata. Il valore di π è preso da diverse lingue come mostrato di seguito.

Risultato

Lo script a un file:

#!/usr/bin/env perl
use strict;
$^W=1;

use Tk;
use Tk::Font;
use Tk::HList;
use Tk::ItemStyle;
use Tk::PNG;

# Function to calculate the area of the circle with radius 3
sub A ($) {
    use bignum;
    return 9*$_[0];
}

my $title = 'Pi Day';

# Configuration of external program names
my %prg = qw[
    Pascal fpc
    Perl perl
    Prolog swipl
    Scheme guile1
    TeX  tex
    LaTeX latex
];
sub prg ($) {
    my $prg = shift;
    return $prg{$prg} // $prg;
}

# Column headers
my @header = (
    '',
    'Language',
    "\N{U+03C0}",
    "A(3) = A(r) = \N{U+03C0}\N{U+2009}r\N{U+00B2}",
);

my $mw = MainWindow->new(
    -title => $title,
);

# Font setup (larger font)
my $font_size = '22';
my $font = $mw->Font();
$font->configure(-size => $font_size);

# ---------
# Utilities
# ---------

# Run program in backticks, quote arguments if needed and some error checking
sub backticks_pi (@) {
    my @cmd = map{/[ ()$;<>|\x22]/ && length > 1 ? "'$_'" : $_} @_;
    print "[@cmd]\n";
    my $catch = `@cmd`;
    if ($? == -1) {
        warn "Failed to execute: $!\n";
    }
    elsif ($? & 127) {
        warn sprintf "Child died with signal %d!\n", $? & 127;
    }
    elsif ($?) {
        warn sprintf "Child exited with value %d!\n", $? >> 8;
    }
    else {
        return $1 if $catch =~ /^\s*(\d+\.\d+)\s*$/
                  or $catch =~ /\bpi\s*=\s*(\d+\.\d+)/;
    }
    warn "Could not find pi in the output of \"@cmd\"!\n";
    return 0;
}

# Run a program with error checking
sub run_cmd (@) {
    print "[@_]\n";
    system @_;
    if ($? == -1) {
        warn "Failed to execute: $!\n";
    }
    elsif ($? & 127) {
        warn sprintf "Child died with signal %d!\n", $? & 127;
    }
    elsif ($?) {
        warn sprintf "Child exited with value %d!\n", $? >> 8;
    }
    else {
        return $1;
    }
    return undef;
}

# Create a bitmap logo
sub make_logo ($$$@) {
    my $name = shift;
    my $logo = shift;
    my $contents = shift;
    my $file = "piday-logo-$name.tmp";
    if ($contents) {
        open(OUT, '>', $file) or die "!!! Error: Cannot write `$file': $!";
        print OUT $contents;
        close(OUT);
    }
    foreach (@_) {
        run_cmd @$_;
    }
    return $mw->Photo(
        -file => $logo,
    ) if -f $logo;
    return undef;
}

# Call foreign language to calculate pi
sub make_pi ($$@) {
    my $file = shift;
    my $source = shift;
    if ($source) {
        open(OUT, '>', $file) or die "!!! Error: Cannot write `$file': $!";
        print OUT $source;
        close(OUT);
    }
    my $cmd_last = pop;
    foreach (@_) {
        run_cmd @$_;
    }
    return backticks_pi @$cmd_last;
}

# Add result list table
my $h = $mw->HList(
    -header  => 1,
    -columns => scalar @header,
    -width   => 100,
    -height  => 20,
    -font    => $font,
)->pack(
  -expand => 1,
  -fill => 'both',
);

# Add header for the result list table
for (0 .. @header-1) {
    $h->header('create', $_,
        -text => $header[$_],
    );
}

# Exit button
my $quit = $mw->Button(
    -text => 'Quit',
    -command => sub {exit},
    -font => $font,
)->pack;


my @list;
my @cmd;
my $pi;
my $source;
my $img;

# GNU C
# -----

$img = make_logo(
    'C',
    'piday-logo-c.png',
    '',
    [
        prg('wget'),
        '-O', 'piday-logo-c-gccegg.png',
        'http://gcc.gnu.org/img/gccegg-65.png',
    ],
    [
        prg('convert'),
        '-scale', '54x64',
        'piday-logo-c-gccegg.png',
        'piday-logo-c.png',
    ],
);

$source = <<'END_SOURCE';
#define _GNU_SOURCE
#include <math.h>
#include <stdio.h>

#define xstr(s) str(s)
#define str(s) #s

int main() {
  long double pi = M_PI;
  printf("pi=%s", xstr(M_PIl));
  return 0;
}
END_SOURCE

$pi = make_pi(
    'piday-c.c',
    $source,
    [
        prg('gcc'),
        '-o', 'piday-c',
        'piday-c.c',
    ],
    [
        prg('./piday-c')
    ],
);

push @list, {
    language => 'GNU C',
    pi       => $pi,
    image    => $img,
};

# Java
# ----

$img = make_logo(
    'Java',
    'piday-java.png',
    '',
    [
        prg('wget'),
        '-O', 'piday-java.svg',
        'https://upload.wikimedia.org/wikipedia/commons/a/a4/Java_logo_and_wordmark.svg',
    ],
    [
        prg('convert'),
        '-scale', '35x64',
        'piday-java.svg',
        'piday-java.png',
    ],
);

$source = <<'END_SOURCE';
public class PiDayJava {
    public static void main(String args[]) {
        System.out.println(Math.PI);
    }
}
END_SOURCE

$pi = make_pi(
    'PiDayJava.java',
    $source,
    [
        prg('javac'),
        'PiDayJava.java',
    ],
    [
        prg('java'),
        'PiDayJava',
    ],
);
push @list, {
    language => 'Java',
    pi       => $pi,
    image    => $img,
};

# Perl
# ----

# Math/Complex.pm: sub pi () { 4 * CORE::atan2(1, 1) }
@cmd = (prg('Perl'), '-e', 'use Math::Complex; print pi');
$pi = backticks_pi @cmd;

my $img = Tk->findINC('Camel.xpm');
$img = $mw->Photo(
    -file => $img,
);

push @list, {
    language => 'Perl',
    pi => $pi,
    image => $img,
};

# Python
# ------

@cmd = (
    prg('echo'),
    'import math;print math.pi',
    '|',
    prg('python'),
);
$pi = backticks_pi @cmd;

$img = make_logo(
    'python',
    'piday-logo-python.png',
    '',
    [
        prg('wget'),
        '-O',
        'piday-logo-python-master.png',
        'http://www.python.org/static/community_logos/python-logo-master-v3-TM.png',
    ],
    [
        prg('convert'),
        '-crop', '111x111+79+33',
        'piday-logo-python-master.png',
        'piday-logo-python-crop.png'
    ],
    [
        prg('convert'),
        '-scale', '64x64',
        'piday-logo-python-crop.png',
        'piday-logo-python.png',
    ],
);

push @list, {
    language => 'Python',
    pi => $pi,
    image => $img,
};

# TeX
# ---

@cmd = (
    prg('TeX'),
    '\input pgf \pgfmathparse{pi}\message{pi=\pgfmathresult}\end',
);
$pi = backticks_pi @cmd;
my $img = make_logo(
    'tex',
    'piday-logo-tex.png',
    '',
    [
        prg('pdftex'),
        '\mag=4000 \nopagenumbers\font\sc=cmcsc10 \sc pgf\bye'
    ],
    [
        prg('pdfcrop'),
        'texput.pdf',
        'piday-logo-tex.pdf',
    ],
    [
        prg('convert'),
        'piday-logo-tex.pdf',
        'piday-logo-tex.png',
    ]
);
push @list, {
    language => 'TeX/PGF',
    pi => $pi,
    image => $img,
};

# LaTeX3
# ------

my $logo_source = <<'END_LOGO';
\mag=4000
\documentclass{article}
\usepackage{hologo}
\pagestyle{empty}
\begin{document}
\hologo{LaTeX3}
\end{document}
END_LOGO

$img = make_logo(
    'latex3',
    'piday-logo-latex3.png',
    $logo_source,
    [
        prg('pdflatex'),
        'piday-logo-latex3.tmp'
    ],
    [
        prg('pdfcrop'),
        'piday-logo-latex3.pdf',
        'piday-logo-latex3-crop.pdf',
    ],
    [
        prg('convert'),
        'piday-logo-latex3-crop.pdf',
        'piday-logo-latex3.png',
    ]
);
$source = <<'END_LATEX3';
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\msg_term:n { pi=\fp_eval:n { pi } }
\ExplSyntaxOff
\stop
END_LATEX3
$pi = make_pi(
    'piday-latex3.tex',
    $source,
    [
        prg('LaTeX'),
        'piday-latex3.tex',
    ],
);
push @list, {
    language => 'LaTeX3',
    pi => $pi,
    image => $img,
};

print "****************\n";

# Lua
# ---

$img = make_logo(
    'Lua',
    'piday-logo-lua.png',
    '',
    [
        prg('wget'),
        '-O', 'piday-logo-lua.gif',
        'http://www.lua.org/images/lua-logo.gif',
    ],
    [
        prg('convert'),
        '-scale', '64x64', # '50x50',
        'piday-logo-lua.gif',
        'piday-logo-lua.png',
    ],
);

$source = 'print(math.pi)';
$pi = make_pi(
    'piday-lua.lua',
    $source,
    [
        prg('texlua'),
        'piday-lua.lua',
    ]
);
push @list, {
    language => 'Lua',
    pi => $pi,
    image => $img,
};

# JavaScript
# ----------

$img = make_logo(
    'JavaScript',
    'piday-logo-javascript.png',
    '',
    [
        prg('wget'),
        '-O', 'piday-logo-rhino.jpg',
        'https://developer.mozilla.org/@api/deki/files/832/=Rhino.jpg',
    ],
    [
        prg('convert'),
        '-scale', '127x64',
        'piday-logo-rhino.jpg',
        'piday-logo-javascript.png',
    ],
);

$source = 'print(Math.PI)';
$pi = backticks_pi(
    prg('java'),
    '-cp', prg('js.jar'),
    'org.mozilla.javascript.tools.shell.Main',
    '-e', $source,
);
push @list, {
    language => 'JavaScript',
    pi => $pi,
    image => $img,
};

# Scheme
# ------

$img = make_logo(
    'Scheme',
    'piday-logo-scheme.png',
    '',
    [
        prg('wget'),
        '-O', 'piday-logo-lambda.svg',
        'https://upload.wikimedia.org/wikipedia/commons/3/39/Lambda_lc.svg',
    ],
    [
        prg('convert'),
        '-scale', '64x64',
        'piday-logo-lambda.svg',
        'piday-logo-scheme.png',
    ],
);
$source = '(display (* 2 (acos 0)))';
$pi = backticks_pi(
    prg('Scheme'),
    '-c', $source,
);
push @list, {
    language => 'Scheme',
    pi => $pi,
    image => $img,
};

# Prolog
# ------

$img = make_logo(
    'Prolog',
    'piday-logo-prolog.png',
    '',
    [
        prg('wget'),
        '-O', 'piday-logo-swipl.png',
        'http://www.swi-prolog.org/icons/swipl.png',
    ],
    [
        prg('convert'),
        '-scale', '78x64',
        'piday-logo-swipl.png',
        'piday-logo-prolog.png',
    ],
);
$source = ":- format('~15f~n', [pi]).\n";
$pi = make_pi(
    'piday-prolog.pro',
    $source,
    [
        prg('Prolog'),
        '-c', 'piday-prolog.pro',
    ]
);
push @list, {
    language => 'Prolog',
    pi => $pi,
    image => $img,
};

# Pascal
# ------

$img = make_logo(
    'Pascal',
    'piday-logo-pascal.gif',
    '',
    [
        prg('wget'),
        '-O', 'piday-logo-pascal.gif',
        'http://www.freepascal.org/pic/logo.gif',
    ]
);
$source = <<'END_PASCAL';
program piday_pascal;

uses sysutils, math;

begin
  writeln(format('%.16f', [pi]));
end.
END_PASCAL
$pi = make_pi(
    'piday-pascal.pas',
    $source,
    [
        prg('Pascal'),
        'piday-pascal.pas',
    ],
    [
        prg('./piday-pascal'),
    ]
);
push @list, {
    language => 'Pascal',
    pi => $pi,
    image => $img,
};

# Sort and fill the table rows
@list = sort {
    my $diff = (length $b->{'pi'} <=> length $a->{'pi'});
    return $diff if $diff;
    return "\L$a->{'language'}\E" cmp "\L$b->{'language'}\E";
} @list;

foreach my $x (@list) {
    my $e = $h->addchild("");
    my $col = 0;
    if ($x->{'image'}) {
        $h->itemCreate($e, $col++,
            -itemtype => 'image',
            -image => $x->{'image'},
        );
    }
    else {
        $col++;
    }
    $h->itemCreate($e, $col++,
        -itemtype => 'text',
        -text => $x->{'language'},
    );
    $h->itemCreate($e, $col++,
        -itemtype => 'text',
        -text => $x->{'pi'},
    );
    $h->itemCreate($e, $col++,
        -itemtype => 'text',
        -text => A $x->{'pi'},
    );
}

MainLoop;

__END__

Le lingue

Il seguente elenco mostra le lingue e il codice utilizzato per ottenere π.

  • GNU C: le estensioni GNU vengono utilizzate per ottenere una precisione maggiore di π.

    #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: compilato con Free Pascal .

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

    public class PiDayJava {
        public static void main(String args[]) {
            System.out.println(Math.PI);
        }
    }
    
  • JavaScript: Rhino viene utilizzato per eseguire JavaScript.

    print(Math.PI)
  • LaTeX3:

    \documentclass{article}
    \usepackage{expl3}
    \ExplSyntaxOn
    \msg_term:n { pi=\fp_eval:n { pi } }
    \ExplSyntaxOff
    \stop
  • Prolog: SWI Prolog è usato come compilatore Prolog.

    :- format('~15f~n', [pi]).
  • Perl: per divertimento e completezza.

    use Math::Complex;
    print pi;
  • Schema: l'implementazione dello schema di utilizzo è GNU Guile .

    (display (* 2 (acos 0)))
  • Lua: texlua è usato come interprete Lua.

    print(math.pi)
  • Pitone:

    import math
    print math.pi
  • TeX / PGF: π è tratto dalla sua definizione di pacchetto pgf e TeX semplice è usato come formato TeX:

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

16

dg

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

Come funziona:

dg è un linguaggio che viene compilato in bytecode CPython. Convenientemente, è compatibile con le librerie Python. importle istruzioni in dg restituiscono l'oggetto che stanno importando, quindi questo programma sostanzialmente fa questo:

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

 

 

No, non mi aspetto alcun voto. :)


4
Oopsy daisy, credo di aver votato;)
Anonimo Pi

1
A proposito, questa è la prima cosa che abbia mai fatto in dg. Qualcun altro lo ha usato per una domanda sul golf e collegato allo stesso posto a cui mi sono collegato in questa risposta. L'ho letto e ho pensato che il linguaggio fosse pulito (nonostante il fatto che disprezzo il meme doge) ma non ho intenzione di usarlo fino a circa un'ora dopo averlo appreso, quando ho letto questa domanda e ho capito che potevo abusarne.
undergroundmonorail

5 ore fa, quando ho pubblicato il mio primo commento, questo aveva solo 1 voto. Penso che le persone abbiano preso sul serio il mio commento;) O hanno semplicemente usato il tuo.
Anonimo Pi

"Tutto il codice deve rientrare in un'unica riga". Almeno alcune persone sanno leggere!
Floris,

<PYTHON'S MATH.PI>Quelle repr()stringhe che ottieni per funzioni e altri oggetti che non riescono a definire le loro __repr__()s come valide ricostruzioni di se stesse non sono in realtà ... beh ... valide. Prova __import__('math').pi.
Blacklight Shining

15

C ++ e Lua 5.2

Niente dice eccessivo come incorporare un intero interprete linguistico per accedere alla costante 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;
}

avrebbe potuto ...lua_getglobal("math");lua_getfield(-1,"pi");
mniip

@mniip Mi sono reso conto che dopo aver pubblicato. È mattina presto e il mio cervello non è ancora completamente operativo, ma in questo modo funziona altrettanto bene, quindi l'ho lasciato solo.
Tony Ellis,

13

bash + PHP + bc

Un one-liner abbastanza semplice:

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

Produzione:

28.274333882308

"Tutto il codice deve rientrare in un'unica riga". Almeno alcune persone sanno leggere!
Floris,

4
@Floris: odio interromperti, ma la domanda dice file , non linea .
Dennis

26
@dennis - apparentemente non sono "alcune persone" ...: - /
Floris

10

MATLAB + Java (21 byte)

Non sono sicuro se MATLAB stia tradendo, ma eccoci qui

java.lang.Math.PI*3^2

Produzione: Format Short

28.2743

Produzione: Format Long

28.2743338823081

Il tipo di formattazione non influisce sul valore memorizzato, influisce solo sul modo in cui viene stampato nella console


1
MATLAB .. - brividi -
theGreenCabbage

@theGreenCabbage haha, non sono sicuro che sia un brivido buono o brutto :) Nella mia esperienza ha reso la scrittura di cose semplici rapidamente molto facile. Naturalmente ci sono alternative migliori, ma se non c'è molto tempo, MATLAB fa il trucco.
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, anche se in realtà non funziona in OS X (math.h include altri file a architecture/*/math.hseconda della piattaforma di destinazione)
ossifrage squeamish

1
Beh, non funziona neanche su Windows, ma qui non vado per la portabilità :)
orion

7

Powershell + MS SQL Server

Eccone uno per Powershell e SQL server (dal 2005 in poi)

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

e qui come una fodera singola:

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

Ne posterò altri più avanti :)


7

JavaScript / PHP

Deve essere salvato come file * .php e richiamato in un browser da un server che interpreta PHP.

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

Potrebbe essere giocato a golf usando i tag brevi e sostituendo 3 * 3 con 9 (è permesso?):

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

pi () ha la stessa lunghezza di M_PI, quindi non c'è vincitore.


2
"è permesso" - certo, non si tratta di code golf ma di contest di popolarità.
CompuChip

1
Questo non funzionerà né in php né in javascript.
Cthulhu,

Sì, ha bisogno di alcuni <script>tag e di un'estensione .php.
CompuChip

3
L'ho modificato anche se penso che fosse abbastanza comprensibile ...
Reeno

@Cthulhu "Deve essere salvato come file * .php e chiamato in un browser da un server che interpreta PHP." Usando i file .html o .php o .wml puri non funzionerà, hai bisogno di apache o qualcosa del genere.
Anonimo Pi

6

Emacs Lisp: scrivere, compilare ed eseguire C

(with-temp-buffer
  (with-temp-file"/#rad.c"(insert"#include<math.h>\n#include<stdio.h>\nint main(void){printf(\"%f\",M_PI*3*3);}"))
  (shell-command"gcc /#rad.c -o /#rad && /#rad"(current-buffer))(string-to-number(buffer-string)))

ungolfed

(with-temp-buffer
  (with-temp-file "/#rad.c"
    (insert"
#include<math.h>
#include<stdio.h>
int main(void){
  printf(\"%f\",M_PI*3*3);
}"))
  (shell-command "gcc /#rad.c -o /#rad && /#rad"
         (current-buffer))
  (string-to-number(buffer-string)))

bonus:

Puoi triplicare la lingua eseguendo emacs in batch usando -eval e circondando l'espressione in (print). Ciò comporterebbe che Bash esegua lisp che scrive compilazioni ed esegue C legge l'output e lo stampa sulla shell in bash.


5

Per questa domanda, ho creato la mia lingua, chiamata Digits. La sintassi è composta da p, una costante che rappresenta pi e cifre. Quando eseguito, restituisce tutte le cifre (e p) moltiplicate insieme. Ecco il mio interprete e il mio codice, scritti in 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
Mi sembra più una funzione in Python che una lingua, ma funziona.
Hosch250,

2
@ hosch250 L'interprete python stesso è una (serie di) funzioni scritte in C (nel caso di CPython), quindi questa risposta è molto valida. Abbastanza intelligente direi.
Juan Campa,

4

bc + dc + bash (30 caratteri per i golfisti)

Ecco un piccolino:

$ dc<<<"3d*`bc -l<<<'a(1)*4'`*p"
28.27433388230813914596
$ 
  • bc -l<<<'a(1)*4' produce pi (è memorizzato come costante nella libreria matematica bc per la funzione a () (arctan).
  • dc<<<"3d*pi *p"spinge 3 nella pila, duplica il valore nella parte superiore della pila (3) e multipli, quindi spinge pi nella pila e multipli, quindi stampa la parte superiore della pila.

4

OCaml + awk

A nessuno piace OCaml?

  • Usa OCaml per calcolare Pi
  • awkper calcolare Pi * r 2

Ecco qui:

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

La risposta è:

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

Benvenuti nel sito! Ma penso che la domanda stia cercando un programma che in realtà chiama una funzione o compila un programma in un'altra lingua, non uno che si limiterà a compilare in più di una lingua.
Jonathan Van Matre,

4
@JonathanVanMatre: penso che in questo caso intendesse usare la costante dall'intestazione C in C ++. std::coutnon è mai stata una sintassi C valida.
Konrad Borowski,

Ah, buona chiamata lì.
Jonathan Van Matre,

4

Molto semplice, usa bash per accedere alla libreria matematica 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

risultato:

28.274334

4

Dato che Fortran in realtà non ha un valore intrinseco per pi (che è stato OP sembra indicare con la frase "Fortran's MATH::PI"), ho dovuto scriverne uno per C. Ho optato, piuttosto che definirlo, che avrei appena determinato usando un algoritmo veloce :

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

(salvato come pi_calc.c) Che viene quindi utilizzato in 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

Questo emette il necessario

 area=   28.2743338823081

Uno compila questo usando

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

3

R & C ++

Richiede i pacchetti inlinee Rcppin R.

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

get.pi() * 3 ^ 2

cxxfunctioncrea, compila e collega una funzione C ++ dietro le quinte. Sì, si sta verificando un bel po 'di generazione del codice, ed return wrap(M_PI);è il codice C ++ (insieme alla #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

Mi hai battuto sul tempo. :(
SuperJedi224,

3

Julia usa Python

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

È stato divertente, non avevo mai usato PyCall prima. L'interfaccia è super facile da usare.


3

R + grep + awk + dc

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

Produzione:

28.274337

3

Usando π di Lua in Java

Questo programma utilizza la libreria LuaJ per valutare Lua in Java e ottenere π. Piazza anche l'area con Lua. Godere!

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

L'output:

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


2

Jython + Java

Questo dovrebbe funzionare in Jython. Non sono sicuro, in quanto non ho modo di testarlo ATM.

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

Jython può accedere alle librerie Java, quindi posso semplicemente importare la classe Math da java.lang e usare la sua costante PI per calcolare l'area del cerchio.

golfed:

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

Oppure, se mi è permesso scrivere il codice in 3 ^ 2:

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

2

bash (PI da perl, python, c)

Forse se combiniamo tutto ciò che abbiamo, otteniamo un risultato più accurato? :)

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

Rubino + 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 soddisfa la terza regola. ma poiché M_PI è già utilizzato, quindi dovrebbe contare.


2

ACTIONSCRIPT3 + javascript (usando parse.com)

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

link della classe di analisi https://github.com/camdagr8/AS3-Parse-Class/blob/master/com/illumifi/Parse.as

con codice:

public static function CFunction(className:String, params:Object = null, success:Function = null, error:Function = null) {
            var url:String = Parse.api + "functions/" + className;
            Parse.Call(url, URLRequestMethod.POST, params, null, success, error);
        }

parse main.js:

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

risultato:

28.274333882308138
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.