3/14 puzzle Gün yapboz


62

xkcd π çizgi roman

Π günün kutlu olsun. Bu sorunun amacı, A = ²r² olan yarıçapı 3 dairenin alanını hesaplamaktır.

Buradaki bağlantı, programladığınızdan farklı bir dilde tanımlanmış olan constant sabitini kullanmanız gerektiğidir. Örneğin, Fortran'ları kullanan bir C programı MATH::PIveya Java'ları kullanan bir Python programı yazabilirsiniz java.lang.Math.PI.

Kurallar:

  • Kodunuz, hesaplama için farklı bir dilden saklanmış bir π değeri kullanmalıdır. (yani sabit veya matematik kütüphanesinde saklanmalıdır.)
  • Programınızın kodunun tamamı tek bir dosyaya sığmalıdır. Örneğin, yazdırmak için C'ye bir program yazamazsınız π, daha sonra C programını çalıştırmak için bir tane daha Java ile yazamazsınız. (Ancak, olabilir yazıyor ve kendi başına bir C programı derleyen bir Java programı yazmak.)
  • Bir web sayfasından π indiremezsiniz ve sabitinizin PHP / ASP / HTML'den geldiğini iddia edemezsiniz.

Bash'de çalışan ve Python'un kayıtlı math.pideğerini kullanan bir örnek :

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

Çıktı:

28.27433388231

Bu bir Popülerlik Yarışması, bu yüzden bir hafta sonra en çok oy alan giriş kazanıyor.

Düzenleme: Bir hafta sonra, ödül 93 puanla DigitalTrauma'ya gider. Müthiş montajcı ipucu için teşekkürler - FPU’nun sabit donanımı donanımda sakladığını bilmiyordum. Bu yarışmanın, saat döngülerini atmanın komik yollarını bulma konusunda olacağını umuyordum, ancak bu aslında birkaçını kurtarabilir.

* Resim izniyle: http://xkcd.com/10/


38
14. ayın 3. günü ?? Takvimim bozuk olmalı.
Gareth

30
Gelecek yıl: 3/14/15 9:26 ve 53sec de, ben bir meydan okuma yayınlayacağız
TheDoctor

5
Ugh. Tau daha iyi. Ve bu.
bjb568

3
@bjb Katılıyorum, Tau daha mantıklı, ama bu orta marşta biraz eğlenemeyeceğimiz anlamına gelmiyor. :)
undergroundmonorail

9
Ne kadar ilgi çekici. Π gün,
ünüm

Yanıtlar:


128

C + x86 derlemesi

Dilinizin yazılımında tanımlanan bir sabitten memnun değil misiniz? Neden doğrudan FPU donanımınızdan sabit bir PI değerine erişebilen bir dil kullanmıyorsunuz:

#include <stdio.h>

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

67
Vay canına, sadece pi değerini yüklemek için bir talimat var.
user2357112

21
x86 HER ŞEY için talimatlara sahiptir.
kabarık


7
7 sabit için de iyi seçenekler! Ben her zaman log_e (2) kullanıyorum, ama söylemiyorum, 2.
Tim S.

3
@fluffy x86 çekirdeğim kırıldı: MOV AX, c0ffe; SÜT EKLE; ŞEKER EKLE; ŞEKER EKLE; MOV ecx, c0ffe; MOV ebx, 1; MOV eax, 4 ve bios hoparlörüm bana güldü .....
GMasucci

77

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

Sadece güvende olmak için, bu program pi'yi farklı dillerden alır ve en çok rağbet gören değeri alır. Daha fazla güvenilirlik için daha fazla dil kolayca eklenebilir.


27
Sadece ağzımda biraz kustum.
Dan Esparza

J nedir ve neden C programınızı çalıştırıyorsunuz?
NoBugs

@ NoBugs J başka bir dil ve pi'yi başka bir değer elde etmek için jcC programımdan ( o. 1) çıkarıp ( bilgisayarımdaki J konsolu) çalıştırıyorum . Argümanlar önemli değil.
grc

1
echo $long_string > gcc -o pi? Bunu kimsenin yakalamadığına inanamıyorum. Ayrıca burada-docs'ları duydunuz mu?
Blacklight'ta

Bu şimdiye kadar gördüğüm en havalı kod parçalarından biri. Bunu çerçeveleyip duvarıma koyacağım. Muhtemelen bir uyarı ile.
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
Çok zeki. Farklı çalışma zamanları için çok standart bir yöntem kullanmak. =) +1
jpmc26 19

34

Perl / Tk, C, Pascal, Java, JavaScript, LaTeX3, Prolog, Perl, Şema, Lua, Python, TeX / PGF ile birlikte

Aşağıdaki Perl betiği, π ve hesaplanan alanın değerlerini listeleyen bir pencere görüntüler. Π değeri aşağıda gösterildiği gibi farklı dillerden alınmıştır.

Sonuç

Tek dosyalı komut dosyası:

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

Diller

Aşağıdaki liste dilleri ve π almak için kullanılan kodu gösterir.

  • GNU C: GNU uzantıları precision'nın daha yüksek hassasiyetini elde etmek için kullanılır.

    #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: Free Pascal ile derlendi .

    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 , JavaScript yürütmek için kullanılır.

    print(Math.PI)
  • LaTeX3:

    \documentclass{article}
    \usepackage{expl3}
    \ExplSyntaxOn
    \msg_term:n { pi=\fp_eval:n { pi } }
    \ExplSyntaxOff
    \stop
  • Prolog: SWI Prolog Prolog derleyicisi olarak kullanılır.

    :- format('~15f~n', [pi]).
  • Perl: Eğlence ve bütünlük için.

    use Math::Complex;
    print pi;
  • Şema: Şema uygulamasını kullanan GNU Guile'dir .

    (display (* 2 (acos 0)))
  • Lua: texlua Lua yorumlayıcısı olarak kullanılır.

    print(math.pi)
  • Python:

    import math
    print math.pi
  • TeX / PGF: pg pgf paketi tanımından alınmıştır ve TeX formatı olarak düz TeX kullanılmıştır:

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

16

dg

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

Nasıl çalışır:

dg, CPython bayt kodunu derleyen bir dildir. Uygun olarak, python kütüphaneleri ile uyumludur. importdg'deki ifadeler, içe aktardıkları nesneyi döndürür, bu nedenle bu program temel olarak şunu yapar:

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

 

 

Hayır, herhangi bir büyütme beklemiyorum. :)


4
Oopsy daisy, sanırım ben upvot;)
Anonymous Pi

1
Bu arada, bu şimdiye kadar yaptığım ilk şey dg. Bir başkası bunu golf sorusu için kullandı ve bu cevapta bağladığım aynı yere bağladı. Okudum ve dilin düzgün göründüğünü düşündüm (doge meme'yi küçümsememe rağmen), ancak öğrendikten yaklaşık bir saat kadar kullanmayı planlamıyordum, bu soruyu okuduğumda ve kötüye kullanabileceğimi fark ettiğimde.
undergroundmonorail

5 saat önce ilk yorumumu yayınladığımda, bu 1 oy vermedi. Bence insanlar yorumumu ciddiye aldılar;) Ya da sadece seninkini kullandılar.
Anonim Pi

Msgstr "Tüm kod tek bir satıra sığmalıdır". En azından bazı insanlar okuyabilir!
Floris

<PYTHON'S MATH.PI>repr()İşlevler ve onların | onların __repr__()geçerli bir rekonstrüksiyon olduğunu tanımlayamayan diğer nesneler için elde edeceğiniz bu dizgeler aslında… iyi… geçerli değil. Dene __import__('math').pi.
Blacklight Shining

15

C ++ ve Lua 5.2

Hiçbir şey, fazladan bir kişinin pi sabitine erişmek için bütün bir dil tercümanını yerleştirmekten hoşlanacağını söyleyemez.

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

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

@mniip Ben gönderdikten sonra fark ettim. Sabahın erken saatlerinde ve beynim henüz tam olarak çalışmıyor, ancak bu şekilde de işe yarıyor, bu yüzden onu yalnız bıraktım.
Tony Ellis

13

bash + PHP + bc

Oldukça basit bir astar:

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

Çıktı:

28.274333882308

Msgstr "Tüm kod tek bir satıra sığmalıdır". En azından bazı insanlar okuyabilir!
Floris

4
@ Floris: Size vermekten nefret ediyorum, ama soru dosya değil, satır diyor .
Dennis,

26
@dennis - görünüşe göre ben "bazı insanlar" değilim ...: - /
Floris

10

MATLAB + Java (21 bayt)

MATLAB aldatıyor mu bilmiyorum ama işte başlıyoruz

java.lang.Math.PI*3^2

Çıktı: Format Short

28.2743

Çıktı: Format Long

28.2743338823081

Biçimlendirme türü saklanan değeri etkilemez, yalnızca konsola nasıl yazdırıldığını etkiler.


1
MATLAB .. - Ürperir -
theGreenCabbage

@theGreenCabbage haha, bunun iyi bir titreme mi yoksa kötü biri mi olduğundan emin değil :) Benim tecrübeme göre basit şeyler yazmayı çok kolay hale getirdi. Elbette daha iyi alternatifler var, ancak çok fazla zaman yoksa, MATLAB hile yapar.
MZimmerman6

10

Bash, Düğüm, Yakut, 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, gerçekte OS X’te çalışmasa da (math.h architecture/*/math.hhedef platforma bağlı diğer dosyaları içerir )
squishish ossifrage

1
Peki, Windows'da da çalışmıyor, ancak burada taşınabilirlik için gitmiyorum :)
orion

7

Powershell + MS SQL Sunucusu

İşte Powershell ve SQL server için bir tane (2005’ten yukarı)

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

ve burada tek bir astar olarak:

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

Daha sonra biraz daha gönderecek :)


7

JavaScript / PHP

Bir * .php dosyası olarak kaydedilmiş ve bir tarayıcıda PHP'yi yorumlayan bir sunucudan çağrılmalıdır.

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

Kısa etiketler kullanarak ve 3 * 3 yerine 9 yerine golf oynayabilir mi (buna izin verilir mi?):

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

pi (), M_PI ile aynı uzunluğa sahiptir, bu yüzden kazanan yoktur.


2
"buna izin verilir" - elbette, kod golf değil, popülerlik yarışması.
CompuChip

1
Bu ne php ne de javascript içinde çalışmayacak.
Cthulhu

Evet, bazı <script>etiketlere ve bir .php uzantısına ihtiyaç var .
CompuChip

3
Yeterince anlaşılabilir olduğunu düşünmeme rağmen değiştirdim ...
Reeno

@Cthulhu "Bir * .php dosyası olarak kaydedilmeli ve bir tarayıcıda PHP'yi yorumlayan bir sunucudan çağrılmalıdır." Saf .html veya .php veya .with dosyaları çalışmazsa, apache veya buna benzer bir şey gerekir.
Anonim Pi

6

Emacs Lisp: C yazma, derleme ve çalıştırma

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

Bu dili, -eval kullanarak toplu işlerde emacs çalıştırarak ve içindeki ifadeyi çevreleyerek üçlü dil olabilirsiniz (print). Bu, derleme yazan ve çalıştıran Bash çalışan lisp ile sonuçlanır ve C çıktıyı okur ve kabuğuna bash olarak basar.


5

Bu soru için Basamak adında kendi dilimi oluşturdum. Sözdizimi p, pi'yi temsil eden bir sabit ve rakamlardan oluşur. Çalıştırıldığında, tüm (ve p) rakamlarını birlikte çarparak döndürür. İşte Python'da yazılmış tercüman ve kod:

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
Bana Python'da bir dilden çok bir fonksiyona benziyor, ama işe yarıyor.
Hosch250,

2
@ hosch250 Python yorumlayıcısının kendisi C ile yazılmış (CPython durumunda) bir (set) fonksiyonudur, bu yüzden bu cevap çok geçerlidir. Çok zekiyim diyebilirim.
Juan Campa

4

bc + dc + bash (golfçüler için 30 karakter)

İşte küçük golf topu:

$ dc<<<"3d*`bc -l<<<'a(1)*4'`*p"
28.27433388230813914596
$ 
  • bc -l<<<'a(1)*4' pi (a () (arctan) işlevi için bc mat lib dosyasında sabit olarak depolanır.
  • dc<<<"3d*pi *p"yığına 3 iter, yığının (3) ve katlarının üstündeki değeri çoğaltır, sonra pi'yi yığına iter ve katları sonra yığının üstünü yazdırır.

4

OCaml + awk

Kimse OCaml'ı sevmiyor mu?

  • İçin OCaml kullanın hesaplamak Pi
  • awkPi * r 2 ' yi hesaplamak

İşte burada:

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

Cevap:

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

Siteye Hoşgeldiniz! Ancak, sorunun aslında bir işlevi çağıran ya da bir programı başka bir dilde derleyen, sadece birden fazla dilde derleyecek bir program aramayacağını düşünüyorum .
Jonathan Van Matre

4
@JonathanVanMatre: Bu durumda, C ++ 'dan C başlığından gelen sabiti kullandığı anlamına geliyordu. std::coutasla geçerli bir C sözdizimi olmadı.
Konrad Borowski

Ah, orada iyi arama.
Jonathan Van Matre

4

Çok basit, C matematik kütüphanesine erişmek için bash kullanır:

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

sonuç:

28.274334

4

Fortran gerçekte pi için kendine özgü bir değere sahip olmadığı için (OP, "Fortran'ın MATH::PI" ifadesinde gösterildiği gibi görünüyor ), C için bir tane yazmak zorunda kaldım. bazı hızlı algoritmalar kullanarak :

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

(olarak kaydedildi pi_calc.c) Hangisi daha sonra kullanılır 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

Bu gerekli çıktılar

 area=   28.2743338823081

Biri bunu kullanarak derler

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

3

R & C ++

Gerektirir inlineve RcppR. paketleri.

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

get.pi() * 3 ^ 2

cxxfunctionoluşturur, derler ve bir C ++ işlevi sahne arkasında bağlar. Evet, oldukça fazla sayıda kod üretimi oluyor ve return wrap(M_PI);C ++ kodu ( #includebölümle birlikte ).


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

Beni yendin. :(
SuperJedi224 16:05

3

Julia Python kullanarak

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

Eğlenceliydi, daha önce hiç PyCall kullanmamıştım. Arayüz kullanımı süper kolaydır.


3

R + grep + awk + dc

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

Çıktı:

28.274337

3

Java’da Lua π Kullanımı

Bu program, Lua'yı Java'da değerlendirmek ve get almak için LuaJ kütüphanesini kullanır. Ayrıca, alanı Lua ile kareler. Keyfini çıkarın!

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

Çıktı:

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


2

Jython + Java

Bu Jython'da çalışmalı. ATM denemek için hiçbir yolum olmadığı için emin değilim.

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

Jython, Java kütüphanelerine erişebilir, böylece Math sınıfını java.lang'dan içe aktarabilir ve dairenin alanını hesaplamak için PI sabitini kullanabilirim.

golfed:

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

Veya, 3 ^ 2 kodlamasına izin verilirse:

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

2

bash (perl'den pi, python, c)

Belki elimizdeki her şeyi birleştirirsek, daha doğru bir sonuç alırız? :)

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

Yakut + 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>

3. kuralı yerine getirip getirmediği ile karıştırıldı. ancak M_PI zaten kullanıldığından, sayılmalı.


2

ACTIONSCRIPT3 + javascript (parse.com kullanarak)

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

ayrıştırma sınıfı bağlantısı https://github.com/camdagr8/AS3-Parse-Class/blob/master/com/illumifi/Parse.as

kod ile:

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

main.js dosyasını ayrıştırın:

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

sonuç:

28.274333882308138
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.