π Tagesrätsel für 3/14


62

xkcd π comic

Glücklicher π Tag. Ziel dieser Frage ist es, die Fläche für einen Kreis mit Radius 3 zu berechnen, wobei A = πr² ist.

Der Haken ist, dass Sie die Konstante π verwenden müssen, die in einer anderen Sprache definiert ist als die, in der Sie programmieren. Sie können beispielsweise ein C-Programm schreiben, das Fortrans verwendet MATH::PI, oder ein Python-Programm, das Java verwendet java.lang.Math.PI.

Regeln:

  • Ihr Code muss einen gespeicherten Wert von π aus einer anderen Sprache für die Berechnung verwenden. (dh es muss in einer Konstanten- oder Mathematikbibliothek gespeichert werden.)
  • Der gesamte Code für Ihr Programm muss in eine einzige Datei passen. Beispielsweise können Sie nicht ein Programm in C schreiben, um π zu drucken, sondern ein anderes in Java, um das C-Programm auszuführen. (Sie können jedoch ein Java-Programm schreiben, das ein C-Programm selbst schreibt und kompiliert.)
  • Sie können π nicht von einer Webseite herunterladen und behaupten, dass Ihre Konstante von PHP / ASP / HTML stammt.

Hier ist ein Beispiel, das in Bash ausgeführt wird und den von Python gespeicherten math.piWert verwendet:

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

Ausgabe:

28.27433388231

Dies ist ein Beliebtheitswettbewerb, daher gewinnt der Eintrag mit den meisten Stimmen nach einer Woche.

Edit: Nach einer Woche geht der Preis mit 93 Punkten an DigitalTrauma. Danke für den tollen Assembler-Tipp - ich wusste nicht, dass die FPU die Konstante in Hardware gespeichert hat. Ich hatte erwartet, dass es bei diesem Wettbewerb darum geht, witzige Wege zu finden, um Taktzyklen wegzuwerfen, aber das könnte man tatsächlich sparen.

* Mit freundlicher Genehmigung von: http://xkcd.com/10/


38
Es ist der 3. Tag des 14. Monats? Mein Kalender muss kaputt sein.
Gareth

30
Nächstes Jahr: 14.03.15 um 9:26 Uhr und 53 Sekunden, ich werde eine Herausforderung
posten

5
Pfui. Tau ist besser. Und das.
Bjb568

3
@bjb Ich stimme zu, Tau macht mehr Sinn, aber das bedeutet nicht, dass wir Mitte März kein bisschen Spaß haben können. :)
undergroundmonorail

9
Wie faszinierend. An π Tag war mein Ruf 314.
bis

Antworten:


128

C + x86-Assembly

Nicht zufrieden mit einer Konstante, die in der Software Ihrer Sprache definiert ist? Verwenden Sie eine Sprache, die direkt von Ihrer FPU-Hardware aus auf einen konstanten PI-Wert zugreifen kann:

#include <stdio.h>

int main (int argc, char **argv) {
    double pi;
    __asm__("fldpi" : "=t" (pi));
    printf("%g\n", 3 * 3 * pi);
    return (0);
}

67
Heiliger Mist, es gibt eine Anweisung, nur den Wert von pi zu laden.
user2357112

21
x86 hat Anweisungen für ALLES.
Flauschige


7
Gute Wahl auch für die 7 Konstanten! Ich verwende immer log_e (2), aber nicht etwa 2.
Tim S.

3
@fluffy mein x86 core ist kaputt: ich habe MOV AX ausprobiert, c0ffe; Milch hinzufügen; ZUCKER HINZUFÜGEN; ZUCKER HINZUFÜGEN; MOV ecx, c0ffe; MOV ebx, 1; MOV eax, 4 und mein BIOS-Sprecher lachten mich aus .....
GMasucci

77

Python, Bash, C, J, PHP und 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

Aus Sicherheitsgründen ruft dieses Programm pi aus einigen verschiedenen Sprachen ab, wobei der am meisten vereinbarte Wert verwendet wird. Für eine höhere Zuverlässigkeit können problemlos weitere Sprachen hinzugefügt werden.


27
Ich habe mich nur ein wenig in meinen Mund übergeben.
Dan Esparza

Was ist J und warum führen Sie Ihr C-Programm damit aus?
NoBugs

@NoBugs J ist eine andere Sprache, und ich führe sie ( jcist die J-Konsole auf meinem Computer) mit der Ausgabe meines C-Programms ( o. 1) aus, um einen anderen Wert von pi zu erhalten. Die Argumente sind nicht wichtig.
Grc

1
echo $long_string > gcc -o pi? Ich kann nicht glauben, dass das niemand mitbekommen hat. Haben Sie auch schon von here-docs | here-strings gehört?
Blacklight Shining

Dies ist einer der coolsten Code, den ich je gesehen habe. Ich werde es einrahmen und an meine Wand hängen. Möglicherweise mit einer Warnung.
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
Sehr schlau. Verwenden einer Standardmethode zum Verbinden verschiedener Laufzeiten. =) +1
jpmc26

34

Perl / Tk mit C, Pascal, Java, JavaScript, LaTeX3, Prolog, Perl, Schema, Lua, Python, TeX / PGF

Das folgende Perl-Skript zeigt ein Fenster mit den Werten von π und der berechneten Fläche an. Der Wert von π stammt aus verschiedenen Sprachen (siehe unten).

Ergebnis

Das One-File-Skript:

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

Sprachen

Die folgende Liste zeigt die Sprachen und den Code, der zum Abrufen von π verwendet wird.

  • GNU C: GNU-Erweiterungen werden verwendet, um eine höhere Genauigkeit von π zu erhalten.

    #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: Kompiliert mit 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 wird zum Ausführen von JavaScript verwendet.

    print(Math.PI)
  • LaTeX3:

    \documentclass{article}
    \usepackage{expl3}
    \ExplSyntaxOn
    \msg_term:n { pi=\fp_eval:n { pi } }
    \ExplSyntaxOff
    \stop
  • Prolog: SWI Prolog wird als Prolog-Compiler verwendet.

    :- format('~15f~n', [pi]).
  • Perl: Zum Spaß und zur Vollständigkeit.

    use Math::Complex;
    print pi;
  • Schema: Die Implementierung von uses Scheme ist GNU Guile .

    (display (* 2 (acos 0)))
  • Lua: texlua wird als Lua-Interpreter verwendet.

    print(math.pi)
  • Python:

    import math
    print math.pi
  • TeX / PGF: π wird aus der Definition des Pakets pgf entnommen und TeX wird als TeX-Format verwendet:

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

16

dg

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

Wie es funktioniert:

dg ist eine Sprache, die zu CPython-Bytecode kompiliert wird. Praktischerweise ist es mit Python-Bibliotheken kompatibel. importAnweisungen in dg geben das Objekt zurück, das sie importieren. Dieses Programm führt also im Grunde Folgendes aus:

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

 

 

Nein, ich erwarte keine Gegenstimmen. :)


4
Oopsy Gänseblümchen, ich glaube, ich habe aufgestimmt;)
Anonym Pi

1
Dies ist übrigens das erste, was ich jemals in dg gemacht habe. Jemand anderes benutzte es für eine Golffrage und verknüpfte es mit derselben Stelle, mit der ich in dieser Antwort verknüpft war. Ich las es und fand, dass die Sprache ordentlich aussah (trotz der Tatsache, dass ich das Dogenmem verachte), plante aber erst ungefähr eine Stunde nach dem Erlernen, als ich diese Frage las und feststellte, dass ich sie missbrauchen könnte.
Undergroundmonorail

Als ich vor 5 Stunden meinen ersten Kommentar gepostet habe, hatte dies nur 1 positive Bewertung. Ich denke, die Leute haben meinen Kommentar ernst genommen;) Oder sie haben nur deinen benutzt.
Anonymous

Msgstr "Der gesamte Code muss in eine einzelne Zeile passen". Zumindest können einige Leute lesen!
Floris

<PYTHON'S MATH.PI>Die repr()Zeichenfolgen, die Sie für Funktionen und andere Objekte erhalten, die ihre __repr__()s nicht als gültige Rekonstruktionen von sich selbst definieren können, sind nicht wirklich ... nun ... gültig. Versuchen Sie es __import__('math').pi.
Blacklight Shining

15

C ++ & Lua 5.2

Nichts sagt mehr als die Einbettung eines ganzen Sprachinterpreters, um auf die pi-Konstante zuzugreifen.

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

#define R 3

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

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

    lua_Number PI_ = lua_tonumber( vm, -1 );

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

    lua_close( vm );
    return 0;
}

lua_getglobal("math");lua_getfield(-1,"pi");
Hätte

@mniip Das habe ich gemerkt, nachdem ich gepostet habe. Es ist früh am Morgen und mein Gehirn ist noch nicht voll funktionsfähig, aber dieser Weg funktioniert genauso gut, also habe ich ihn in Ruhe gelassen.
Tony Ellis

13

Bash + PHP + BC

Ein ziemlich einfacher Einzeiler:

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

Ausgabe:

28.274333882308

Msgstr "Der gesamte Code muss in eine einzelne Zeile passen". Zumindest können einige Leute lesen!
Floris

4
@ Floris: Ich hasse es, es dir zu sagen, aber die Frage lautet Datei , nicht Zeile .
Dennis

26
@dennis - anscheinend bin ich nicht "einige Leute" ...: - /
Floris

10

MATLAB + Java (21 Byte)

Ich bin mir nicht sicher, ob MATLAB betrügt, aber jetzt geht es los

java.lang.Math.PI*3^2

Ausgabe: Format Short

28.2743

Ausgabe: Format Long

28.2743338823081

Der Formatierungstyp wirkt sich nicht auf den gespeicherten Wert aus, sondern nur darauf, wie er in der Konsole ausgedruckt wird


1
MATLAB .. - schaudert -
theGreenCabbage

@theGreenCabbage haha, ich bin mir nicht sicher, ob das ein guter oder ein schlechter Schauer ist :) Nach meiner Erfahrung hat es das Schreiben einfacher Dinge schnell sehr einfach gemacht. Natürlich gibt es bessere Alternativen, aber wenn es nicht viel Zeit gibt, macht MATLAB den Trick.
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, obwohl es eigentlich nicht in OS X funktioniert (math.h enthält andere Dateien von architecture/*/math.hje nach Zielplattform)
zimperlich ossifrage

1
Nun, es funktioniert auch nicht unter Windows, aber ich werde hier keine Portabilität anstreben :)
orion

7

PowerShell + MS SQL Server

Hier ist eine für Powershell und SQL Server (ab 2005)

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

und hier als single liner:

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

Werde später noch mehr posten :)


7

JavaScript / PHP

Muss als * .php-Datei gespeichert und in einem Browser von einem Server aufgerufen werden, der PHP interpretiert.

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

Könnte man Golf spielen, indem man kurze Tags verwendet und 3 * 3 durch 9 ersetzt (ist das erlaubt?):

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

pi () hat die gleiche Länge wie M_PI, es gibt also keinen Gewinner.


2
"Ist das erlaubt?" - sicher, es ist kein Code-Golf, sondern ein Beliebtheitswettbewerb.
CompuChip

1
Dies wird jedoch weder in PHP noch in Javascript ausgeführt.
Cthulhu

Ja, es braucht ein paar <script>Tags und eine .php-Erweiterung.
CompuChip

3
Ich habe es bearbeitet, obwohl ich denke, dass es verständlich genug war ...
Reeno

@Cthulhu "Muss als * .php-Datei gespeichert und in einem Browser von einem Server aufgerufen werden, der PHP interpretiert." Wenn Sie reine .html- oder .php-Dateien verwenden oder welche Dateien auch immer nicht funktionieren, benötigen Sie Apache oder ähnliches.
Anonymous

6

Emacs Lisp: Schreiben, Kompilieren und Ausführen von 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:

Sie könnten diese Sprache verdreifachen, indem Sie Emacs im Batch mit -eval ausführen und den Ausdruck in umgeben (print). Dies würde dazu führen, dass Bash lisp ausführt, das kompiliert und ausführt. C liest die Ausgabe und druckt sie in bash auf Ihre Shell aus.


5

Für diese Frage habe ich meine eigene Sprache namens Digits erstellt. Die Syntax besteht aus p, einer Konstante, die pi darstellt, und Ziffern. Beim Ausführen werden alle Ziffern (und p) multipliziert zurückgegeben. Hier ist mein in Python geschriebener Interpreter und Code:

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
Sieht für mich eher nach einer Funktion in Python als nach einer Sprache aus, funktioniert aber.
Hosch250

2
@ hosch250 Der Python-Interpreter selbst ist eine (Satz von) Funktion, die in C geschrieben ist (im Fall von CPython), daher ist diese Antwort sehr gültig. Ganz schlau würde ich sagen.
Juan Campa

4

bc + dc + bash (30 Zeichen für die Golfer)

Hier ist eine golfige Kleine:

$ dc<<<"3d*`bc -l<<<'a(1)*4'`*p"
28.27433388230813914596
$ 
  • bc -l<<<'a(1)*4' erzeugt pi (es wird als Konstante in der bc math lib für die Funktion a () (arctan) gespeichert.
  • dc<<<"3d*pi *p"drückt 3 auf den Stapel, dupliziert den Wert oben auf dem Stapel (3) und multipliziert ihn, drückt dann pi auf den Stapel und multipliziert ihn und druckt den oberen Teil des Stapels.

4

OCaml + awk

Niemand mag OCaml?

  • Verwenden Sie OCaml, um Pi zu berechnen
  • awkum Pi * r 2 zu berechnen

Hier ist es:

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

Die Antwort ist:

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

Willkommen auf der Seite! Aber ich denke , die Frage nach einem Programm sucht , die tatsächlich eine Funktion aufruft oder erstellt ein Programm in einer anderen Sprache, nicht eine , die nur kompiliert in mehr als eine Sprache.
Jonathan Van Matre

4
@ JonathanVanMatre: Ich denke in diesem Fall meinte er, dass er Konstante aus C-Header in C ++ verwendet. std::coutwar nie eine gültige C-Syntax.
Konrad Borowski

Ah, gut dort anrufen.
Jonathan Van Matre

4

Sehr einfach, greift mit bash auf die C-Mathematikbibliothek zu:

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

Ergebnis:

28.274334

4

Da Fortran eigentlich keinen inneren Wert für pi hat (was OP anscheinend mit der Aussage "Fortran's MATH::PI" anzeigt ), musste ich einen für C schreiben. Ich entschied mich dafür, anstatt ihn tatsächlich zu definieren, den ich gerade bestimmen würde es mit einem schnellen Algorithmus :

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

(gespeichert als pi_calc.c) Was dann verwendet wird 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

Dies gibt den erforderlichen Wert aus

 area=   28.2743338823081

Man kompiliert dies mit

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

3

R & C ++

Benötigt die inlineund RcppPakete in R.

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

get.pi() * 3 ^ 2

cxxfunctionerstellt, kompiliert und verknüpft eine C ++ - Funktion hinter den Kulissen. Ja, es findet eine Menge Code-Generierung statt, undreturn wrap(M_PI); handelt sich um C ++ - Code (zusammen mit dem #includeTeil).


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

Du warst schneller als ich. :(
SuperJedi224

3

Julia benutzt Python

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

Das hat Spaß gemacht, ich hatte PyCall noch nie benutzt. Die Benutzeroberfläche ist sehr einfach zu bedienen.


3

R + grep + awk + dc

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

Ausgabe:

28.274337

3

Verwenden von Lua's π in Java

Dieses Programm verwendet die Bibliothek LuaJ, um Lua in Java auszuwerten und π zu erhalten. Es quadriert auch das Gebiet mit Lua. Genießen!

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

Die Ausgabe:

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


2

Jython + Java

Dies sollte in Jython funktionieren. Ich bin mir nicht sicher, da ich keine Möglichkeit habe, es am Geldautomaten zu testen.

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

Jython kann auf die Java-Bibliotheken zugreifen, sodass ich einfach die Math-Klasse aus java.lang importieren und ihre PI-Konstante verwenden kann, um die Fläche des Kreises zu berechnen.

Golf gespielt:

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

Oder, wenn ich in 3 ^ 2 codieren darf:

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

2

Bash (PI aus Perl, Python, C)

Vielleicht erhalten wir ein genaueres Ergebnis, wenn wir alles kombinieren, was wir haben? :)

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

Verwirrt, ob es die 3. Regel erfüllt. aber da M_PI bereits verwendet wird, sollte es zählen.


2

ACTIONSCRIPT3 + Javascript (über parse.com)

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

Analyseklassenlink https://github.com/camdagr8/AS3-Parse-Class/blob/master/com/illumifi/Parse.as

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

parse main.js:

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

Ergebnis:

28.274333882308138
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.