ปี่ธรรมชาติ # 0 - ร็อค


39

เป้าหมาย

สร้างโปรแกรม / ฟังก์ชั่นที่รับอินพุตNตรวจสอบว่าNคู่ของจำนวนเต็มแบบสุ่มนั้นค่อนข้างดีและส่งคืนsqrt(6 * N / #coprime)หรือไม่

TL; DR

ความท้าทายเหล่านี้เป็นการจำลองอัลกอริธึมที่ต้องการเพียงแค่ธรรมชาติและสมองของคุณ หากคุณต้องการ Pi ในระหว่างการเปิดเผยซอมบี้วิธีการเหล่านี้จะไม่เปลืองกระสุน ! มีอีกแปดความท้าทายที่จะมา ชำระเงินโพสต์แซนด์บ็อกซ์เพื่อให้คำแนะนำ

การจำลอง

เรากำลังจำลองอะไร ความน่าจะเป็นที่สองจำนวนเต็มแบบสุ่มนั้นค่อนข้างไพเราะ (เช่น coprime หรือ gcd == 1) 6/Pi/Piดังนั้นวิธีธรรมชาติในการคำนวณ Pi ก็คือการตักก้อนหินขึ้นสองถัง (หรือกำมือ) นับพวกเขา; ดูว่าgcdของพวกเขาคือ 1; ทำซ้ำ หลังจากที่ทำเช่นนี้คู่หลายครั้งจะมีแนวโน้มต่อsqrt(6.0 * total / num_coprimes) Piหากการคำนวณสแควร์รูทในโลกหลังวิกฤติทำให้คุณกังวลไม่ต้องกังวล! มีวิธีการของนิวตันสำหรับสิ่งนั้น

เราจำลองสิ่งนี้ได้อย่างไร

  • รับอินพุต N
  • ทำตามNเวลาต่อไปนี้:
    • สร้างเลขจำนวนเต็มบวกแบบสุ่มiและj
    • กับ 1 <= i , j <= 10^6
    • ถ้าgcd(i , j) == 1:result = 1
    • อื่น: result = 0
  • รับผลรวมของNผลลัพธ์S
  • กลับ sqrt(6 * N / S)

ป้อนคำอธิบายรูปภาพที่นี่

สเปค

  • อินพุต
    • ยืดหยุ่นรับอินพุตด้วยวิธีมาตรฐานใด ๆ (เช่นพารามิเตอร์ฟังก์ชัน STDIN) และในรูปแบบมาตรฐานใด ๆ (เช่น String, Binary)
  • เอาท์พุต
    • ยืดหยุ่นให้ผลลัพธ์ในรูปแบบมาตรฐาน (เช่นผลตอบแทนการพิมพ์)
    • พื้นที่สีขาวพื้นที่ต่อท้ายและพื้นที่สีขาวชั้นนำเป็นที่ยอมรับ
    • ความแม่นยำโปรดระบุความแม่นยำอย่างน้อย 4 ตำแหน่ง (เช่น3.1416)
  • เกณฑ์การให้คะแนน
    • รหัสที่สั้นที่สุดชนะ!

กรณีทดสอบ

ผลลัพธ์ของคุณอาจไม่ตรงกับสิ่งเหล่านี้เนื่องจากมีโอกาสสุ่ม Nแต่โดยเฉลี่ยแล้วคุณควรจะได้รับเกี่ยวกับความถูกต้องมากขนาดนี้สำหรับค่าที่กำหนด

Input     ->  Output 
-----         ------
100       ->  3.????
10000     ->  3.1???
1000000   ->  3.14??
code-golf  math  random  pi  approximation  popularity-contest  code-golf  sequence  number-theory  binary  coding-theory  code-golf  math  3d  code-golf  code-golf  math  number  code-golf  kolmogorov-complexity  code-golf  ascii-art  graphical-output  binary-tree  code-golf  ascii-art  code-golf  ascii-art  kolmogorov-complexity  code-golf  array-manipulation  hexadecimal  code-golf  math  number  set-theory  code-golf  math  arithmetic  number-theory  integer  code-golf  string  kolmogorov-complexity  code-golf  math  sequence  arithmetic  decision-problem  code-golf  code-golf  ascii-art  code-golf  array-manipulation  parsing  code-golf  string  ascii-art  kolmogorov-complexity  code-challenge  code-golf  sequence  code-golf  number  array-manipulation  sorting  code-golf  string  function  code-golf  arithmetic  code-golf  math  sequence  number-theory  primes  restricted-source  javascript  code-challenge  polyglot  rosetta-stone  code-golf  code-golf  regular-expression  code-golf  math  code-golf  math  primes  code-golf  ascii-art  kolmogorov-complexity  binary  code-golf  math  sequence  code-golf  sequence  subsequence  code-golf  string  code-golf  parsing  music  code-golf  grid  game  path-finding  board-game  code-golf  string  binary  code-golf  array-manipulation  balanced-string  code-golf  code-golf  algorithm  code-golf  string  number  arithmetic  array-manipulation  code-golf  array-manipulation  binary-tree  tree-traversal  code-golf  code-golf  tips  code-golf  string  base-conversion  code-golf  tips  s.i.l.o.s  code-golf  string  ascii-art  code-golf  code-challenge  code-golf  game 

1
คำตอบของเราจำเป็นต้องใช้งานN = 1000000หรือไม่เป็นไรถ้าโปรแกรมส่งคืนเช่นสแต็กNมากเกินไปหากใหญ่เกินไป?
เสียชีวิต

@ สรุปว่ามันเป็นข้อ จำกัด ของภาษาแน่นอน N=10^6มิฉะนั้นคุณต้องจัดการ
NonlinearFruit


2
เป้าหมายทำให้เข้าใจผิดโดยระบุว่ามีการตรวจสอบจำนวนเต็มเพียงคู่เดียว
user253751

1
ขีด จำกัด สูงสุดของตัวเลขสุ่มที่สร้างขึ้นนั้นจำเป็นต้องเป็น 1000000 หรือไม่ ขีด จำกัด บนที่ใหญ่กว่าจะยอมรับได้หรือไม่
Sok

คำตอบ:


12

APL, 23 ไบต์

{.5*⍨6×⍵÷1+.=∨/?⍵2⍴1e6}

คำอธิบาย:

  • ?⍵2⍴1e6: สร้างเมทริกซ์ขนาด 2 คูณด้วยจำนวนสุ่มในช่วง [1..10 6 ]
  • 1+.=∨/: รับ GCD ของแต่ละคู่และดูว่ามีค่าเท่ากับ 1 ซึ่งคำนวณ S
  • .5*⍨6×⍵÷: (6 ×⍵÷ S) 0.5

11

เยลลี่ , 20 18 16 ไบต์

-2 ไบต์ขอบคุณ @ Pietu1998 (เชนและใช้นับ 1s ċ1แทนที่น้อยกว่าสองข้อ<2S)

-2 ไบต์ขอบคุณ @Dennis (ทำซ้ำ 1e6 หลายครั้งก่อนสุ่มตัวอย่างเพื่อหลีกเลี่ยงการผูกมัด)

Ḥȷ6xX€g2/ċ1÷³6÷½

(ช้ามากเนื่องจากฟังก์ชั่นแบบสุ่ม)

อย่างไร?

Ḥȷ6xX€g2/ċ1÷³6÷½ - Main link: n
 ȷ6              - 1e6
   x             - repeat
Ḥ                -     double, 2n
    X€           - random integer in [1,1e6] for each
       2/        - pairwise reduce with
      g          -     gcd
         ċ1      - count 1s
           ÷     - divide
            ³    - first input, n
             6   - literal 6
              ÷  - divide
               ½ - square root

TryItOnline


ḤRµȷ6Xµ€g2/ċ1÷³6÷½บันทึก 2 ไบต์ ( ȷ6คือ 10 ^ 6 ใน nilad เดียวċ1นับได้)
PurkkaKoodari

อาฉันไม่สามารถหาวิธีเชื่อมโยงมันได้อย่างนั้น (ฉันลองบางสิ่ง) และลืมเคล็ดลับการนับ 1 - ขอบคุณ (ฉันคิดว่าȷ²มันเร็วกว่านิดหน่อยนิดหน่อยȷ6)
Jonathan Allan

อาจจะ. ตอนนี้ฉันคิดว่ามันȷ²เป็นสองลิงค์ไม่เจ็บที่นี่ แต่จะต้องมีการเชื่อมโยงพิเศษหรือ¤สำหรับกรณีการใช้งานบางอย่าง
PurkkaKoodari

1
Ḥȷ6xX€ควรใช้การสุ่มตัวอย่าง
Dennis

9

Python 2, 143 140 132 124 122 124 122 ไบต์

มันค่อนข้างนานแล้วตั้งแต่ฉันลองเล่นกอล์ฟดังนั้นฉันอาจจะพลาดบางสิ่งที่นี่! จะอัปเดตเมื่อฉันย่อให้สั้นลง

import random as r,fractions as f
n,s=input(),0
k=lambda:r.randrange(1e6)+1
exec's+=f.gcd(k(),k())<2;'*n
print(6.*n/s)**.5

ทดสอบฉันที่นี่!

ขอบคุณ Jonathan Allan สำหรับการบันทึกสองไบต์ :)


ตาม OP, ดังนั้นคุณจำเป็นต้องใช้1 <= i , j <= 10^6 randrange(1,1e6+1)
mbomb007

1
นอกจากนี้ยังเป็นเรื่องแปลกที่จะมีลิงค์ repl.it ภายในชื่อภาษา ลิงก์ในชื่อ lang ควรเป็นหน้าแรกของภาษาหากมีสิ่งใด ใส่ลิงค์ repl.it ของคุณเป็นลิงค์แยกต่างหากด้านล่างรหัสของคุณ
mbomb007

@ mbomb007 จุดที่ดีฉันได้แก้ไขแล้ว :) เคยไปซักพัก!
Kade

1
k=lambda:r.randrange(1e6)+1ประหยัดสองไบต์
Jonathan Allan

1
@ Jonathanathan จับได้ดีมากขอบคุณ!
Kade

8

Mathematica, 49 48 51 ไบต์

ที่บันทึกไว้หนึ่งไบต์และคงเป็นหนึ่งในข้อผิดพลาดไปขอบคุณ@ LegionMammal978

(6#/Count[GCD@@{1,1*^6}~RandomInteger~{2,#},1])^.5&

1
คุณสามารถบันทึกไบต์:(6#/Count[GCD@@1*^6~RandomInteger~{2,#},1])^.5&
LegionMammal978

1
นอกจากนี้1*^6ควรแทนที่ด้วย{1,1*^6}เพื่อให้แน่ใจว่าi , j ≠ 0
LegionMammal978

8

R, 103 99 95 99 98 94 ไบต์

มีโอกาสที่จะตีกอล์ฟได้เล็กน้อย ลดลง 4 ไบต์เนื่องจาก @ Antoine-Sac และอีก 4 ไบต์โดยกำหนดนามแฝงสำหรับsampleใช้^.5แทนsqrtและแทน1e6 10^6เพิ่ม 4 ไบต์เพื่อให้แน่ใจว่าการสุ่มตัวอย่างiและjสม่ำเสมอกันอย่างแท้จริง ที่ถูกนำออกหนึ่งไบต์หลังจากที่ฉันตระหนักว่าเป็นเช่นเดียวกับ6*N/sum(x) 6/mean(x)ใช้pryr::fแทนfunction(x,y)การบันทึก 4 ไบต์

N=scan()
s=sample
g=pryr::f(ifelse(o<-x%%y,g(y,o),y))
(6/mean(g(s(1e6,N,1),s(1e6,N,1))==1))^.5

ตัวอย่างผลลัพธ์:

N=100     -> 3.333333
N=10000   -> 3.137794
N=1000000 -> 3.141709

1
sample(10^6,N)คุณก็สามารถใช้ ไม่เพียง แต่จะสั้นกว่าเท่านั้น แต่ยังมีประสิทธิภาพมากกว่าอีกด้วย
asac - Reinstate Monica

ฉันอาจจะผิด แต่ไม่ควรใช้ตัวอย่างกับ replace = T สำหรับจำนวนเต็มแบบสุ่มที่ถูกต้อง ตัวอย่างเช่นsample(10,10)รับประกันว่าจะส่งคืนตัวเลขทั้งหมดใน 1:10 ในขณะที่sample(10,10,T)จะสร้างการเลือกแบบสุ่มที่สามารถทำซ้ำตัวเลขได้
MickyT

@MickyT คุณถูกต้องจริงๆฉันเพิ่งรู้ตัวเองไม่กี่นาทีที่ผ่านมานี้เอง ฉันไม่แน่ใจทั้งหมดว่าวิธีนี้เล่นในเชิงคณิตศาสตร์ในกรณีนี้เท่าที่ฉันสามารถบอกได้ว่าทั้งสองวิธีนั้นมีความแม่นยำเท่า ๆ กัน ฉันจะแก้ไขโพสต์ของฉันเพื่อเพิ่มข้อมูลนี้
rturnbull

ทั้งสองวิธีมีความแม่นยำเท่ากันเมื่อ N << 10 ^ 6 ในการจัดการกับ N ขนาดใหญ่โดยพลการคุณต้องสุ่มตัวอย่างด้วยการเปลี่ยนที่จับได้ดี
asac - Reinstate Monica

7

ที่จริงแล้ว 19 ไบต์

`6╤;Ju@Ju┤`nkΣß6*/√

ลองออนไลน์!

คำอธิบาย:

`6╤;Ju@Ju┤`nkΣß6*/√
`6╤;Ju@Ju┤`n         do this N times:
 6╤;                   two copies of 10**6
    Ju                 random integer in [0, 10**6), increment
      @Ju              another random integer in [0, 10**6), increment
         ┤             1 if coprime else 0
            kΣ       sum the results
              ß      first input again
               6*    multiply by 6
                 /   divide by sum
                  √  square root

i, j ไม่ได้รับอนุญาตให้เป็น 0
isaacg

1
@isaacg พวกเขาไม่ได้ หากคุณจะอ่านคำอธิบายจะกล่าวว่ามีการสุ่มเลือกค่าจาก [0, 10 ** 6) จากนั้นเพิ่มขึ้น
Mego

7

MATL , 22 ไบต์

1e6Hi3$YrZ}Zd1=Ym6w/X^

ลองออนไลน์!

1e6      % Push 1e6
H        % Push 2
i        % Push input, N
3$Yr     % 2×N matrix of uniformly random integer values between 1 and 1e6
Z}       % Split into its two rows. Gives two 1×N arrays
Zd       % GCD, element-wise. Gives a 1×N array
1=       % Compare each entry with 1. Sets 1 to 0, and other values to 0
Ym       % Mean of the array
6w/      % 6 divided by that
X^       % Square root. Implicitly display

6

Pyth, 21 ไบต์

@*6cQ/iMcmhO^T6yQ2lN2

ลองออนไลน์

คำอธิบาย

                Q          input number
               y           twice that
         m                 map numbers 0 to n-1:
             T                 10
            ^ 6                to the 6th power
           O                   random number from 0 to n-1
          h                    add one
        c        2         split into pairs
      iM                   gcd of each pair
     /            lN       count ones
   cQ                      divide input number by the result
 *6                        multiply by 6
@                   2      square root

6

สกาลา, 149 126 ไบต์

val& =BigInt
def f(n: Int)={math.sqrt(6f*n/Seq.fill(n){val i,j=(math.random*99999+1).toInt
if(&(i).gcd(&(j))>1)0 else 1}.sum)}

คำอธิบาย:

val& =BigInt                //define & as an alias to the object BigInt, because it has a gcd method
def f(n:Int)={              //define a method
  math.sqrt(                //take the sqrt of...
    6f * n /                //6 * n (6f is a floating-point literal to prevent integer division)
    Seq.fill(n){            //Build a sequence with n elements, where each element is..
      val i,j=(math.random*99999+1).toInt //take 2 random integers
      if(&(i).gcd(&(j))>1)0 else 1        //put 0 or 1 in the list by calling
                                          //the apply method of & to convert the numbers to
                                          //BigInt and calling its bcd method
    }.sum                   //calculate the sum
  )
}

ฉัน <3 สกาล่า! โดยเฉพาะอย่างยิ่งเพราะบางครั้งมันต้องการคำอธิบายจริงๆ
Roman Gräf

@ RomanGräfจะซื่อสัตย์สิ่งเดียวที่ผมคิดว่าอาจจะมีความชัดเจนมี6f, และSeq.fill math.random
corvus_192

5

แร็กเก็ต 92 ไบต์

(λ(N)(sqrt(/(* 6 N)(for/sum((c N))(if(= 1(gcd(random 1 1000000)(random 1 1000000)))1 0)))))

Ungolfed:

(define f
  (λ (N)
    (sqrt(/ (* 6 N) 
            (for/sum ((c N))
              (if (= 1
                     (gcd (random 1 1000000)
                          (random 1 1000000)))
                  1 0)
              )))))

การทดสอบ:

(f 100)
(f 1000)
(f 100000)

เอาท์พุท:

2.970442628930023
3.188964020716403
3.144483068444827

5

JavaScript (ES7), 107 95 94 ไบต์

n=>(n*6/(r=_=>Math.random()*1e6+1|0,g=(a,b)=>b?g(b,a%b):a<2,q=n=>n&&g(r(),r())+q(n-1))(n))**.5

รุ่น ES6 ตรง 99 ไบต์ แต่ผู้ประกอบการ ES7 ยกกำลัง**ช่วยประหยัด 5 Math.sqrtไบต์มากกว่า

Ungolfed

function pi(n) {
  function random() {
    return Math.floor(Math.random() * 1e6) + 1;
  }
  function gcd(a, b) {
    if (b == 0)
      return a;
    return gcd(b, a % b);
  }
  function q(n) {
    if (n == 0)
      return 0;
    return (gcd(random(), random()) == 1 ? 1 : 0) + q(n - 1));
  }
  return Math.sqrt(n * 6 / q(n));
}

ในเวอร์ชัน Ungolfed gcdเรียกใช้ฟังก์ชันg
Roman Gräf

r=_=>คือรหัสหรือรูปวาด
aross

n=>(n*6/(r=_=>Math.random()*1e6,g=(a,b)=>b?g(b,a%b):a>-2,q=n=>n&&g(~r(),~r())+q(n-1))(n))**.51B สั้นกว่า
l4m2

n=>(n*6/(q=_=>n--&&q(r=_=>Math.random()*1e6)+g(~r(),~r()))(g=(a,b)=>b?g(b,a%b):a>-2))**.5
l4m2

5

PHP, 82 77 74 ไบต์

for(;$i++<$argn;)$s+=2>gmp_gcd(rand(1,1e6),rand(1,1e6));echo(6*$i/$s)**.5;

ทำงานแบบนี้:

echo 10000 | php -R 'for(;$i++<$argn;)$s+=2>gmp_gcd(rand(1,1e6),rand(1,1e6));echo(6*$i/$s)**.5;' 2>/dev/null;echo

คำอธิบาย

ทำในสิ่งที่พูดบนกระป๋องหรือไม่ ต้อง PHP_GMP gcdสำหรับ

การปรับแต่ง

  • บันทึก 3 ไบต์โดยใช้ $argn

4

Perl, 64 ไบต์

sub r{1+~~rand 9x6}$_=sqrt$_*6/grep{2>gcd r,r}1..$_

ต้องใช้ตัวเลือกบรรทัดคำสั่ง-pMntheory=gcdนับเป็น 13 อินพุตถูกนำมาจาก stdin

ตัวอย่างการใช้งาน

$ echo 1000 | perl -pMntheory=gcd pi-rock.pl
3.14140431218772

4

R, 94 ไบต์

N=scan();a=replicate(N,{x=sample(1e6,2);q=1:x[1];max(q[!x[1]%%q&!x[2]%%q])<2});(6*N/sum(a))^.5

ค่อนข้างช้า แต่ก็ยังใช้งานได้ Replicate N คูณด้วยฟังก์ชั่นที่ใช้ 2 ตัวเลขสุ่ม (จาก 1 ถึง 1e6) และตรวจสอบว่า gcd ของพวกเขาน้อยกว่า 2 (ใช้ฟังก์ชัน gcd เก่าของฉันหรือไม่ )


1
หากคุณไม่กังวลเกี่ยวกับคำเตือน1:xจะทำงาน
MickyT

4

PowerShell v2 +, 118 114 ไบต์

param($n)for(;$k-le$n;$k++){$i,$j=0,1|%{Random -mi 1};while($j){$i,$j=$j,($i%$j)}$o+=!($i-1)}[math]::Sqrt(6*$n/$o)

รับอินพุต$nเริ่มforลูปจนกว่าจะ$kเท่ากับ$n(โดยปริยาย$k=0เมื่อเข้าสู่ลูปครั้งแรก) การวนซ้ำแต่ละครั้งรับRandomตัวเลขใหม่$iและ$j( แฟ-miล็ก nimum ทำให้1แน่ใจว่าเรา>=1และไม่มีการกำหนดแฟล็กสูงสุด[int]::MaxValueที่อนุญาตโดย OP เนื่องจากมีขนาดใหญ่กว่า10e6)

จากนั้นเราจะไปเป็นGCDwhileห่วง แล้วตราบใดที่ GCD เป็น1, $oได้รับเพิ่มขึ้น ในตอนท้ายของforลูปเราทำการ[math]::Sqrt()โทรอย่างง่าย ๆซึ่งจะถูกทิ้งไว้ที่ไพพ์ไลน์และเอาท์พุทก็เป็นนัย

ใช้เวลาประมาณ 15 นาทีในการรันด้วยอินพุต10000บนแล็ปท็อป Core i5 อายุ 1 ปีของฉัน

ตัวอย่าง

PS C:\Tools\Scripts\golfing> .\natural-pi-0-rock.ps1 100
3.11085508419128

PS C:\Tools\Scripts\golfing> .\natural-pi-0-rock.ps1 1000
3.17820863081864

PS C:\Tools\Scripts\golfing> .\natural-pi-0-rock.ps1 10000
3.16756133579975

3

Java 8, 164 151 ไบต์

n->{int c=n,t=0,x,y;while(c-->0){x=1+(int)(Math.random()*10e6);y=1+(int)(Math.random()*10e6);while(y>0)y=x%(x=y);if(x<2)t++;}return Math.sqrt(6f*n/t);}

คำอธิบาย

n->{
    int c=n,t=0,x,y;
    while(c-->0){                          // Repeat n times
        x=1+(int)(Math.random()*10e6);     // Random x
        y=1+(int)(Math.random()*10e6);     // Random y
        while(y>0)y=x%(x=y);               // GCD
        if(x<2)t++;                        // Coprime?
    }
    return Math.sqrt(6f*n/t);              // Pi
}

สายรัดทดสอบ

class Main {
    public static interface F{ double f(int n); }
    public static void g(F s){
        System.out.println(s.f(100));
        System.out.println(s.f(1000));
        System.out.println(s.f(10000));
    }
    public static void main(String[] args) {
        g(
            n->{int c=n,t=0,y,x;while(c-->0){x=1+(int)(Math.random()*10e6);y=1+(int)(Math.random()*10e6);while(y>0)y=x%(x=y);if(x<2)t++;}return Math.sqrt(6f*n/t);}
        );
    }
}

ปรับปรุง

  • -13 [16-10-05] ขอบคุณ@TNTและเพิ่มชุดทดสอบ

1
คุณไม่จำเป็นต้องวงเล็บรอบแรกn, t+=1สามารถกลายเป็นt++คุณสามารถรวมตัวของคุณintประกาศเป็นหนึ่งในสายคือint c=n,t=0,x,y;และ!=0(ฉันคิด) >0จะกลายเป็น ที่ควรประหยัดโดยรวม 12 ไบต์ แม้ว่าจะเป็นวิธีที่เรียบร้อยในการค้นหา GCD ของ x และ y
TNT


1

Frink, 84 89

r[]:=random[10^6]+1
g=n=eval[input[1]]
for a=1to n
g=g-1%gcd[r[],r[]]
println[(6*n/g)^.5]

ฉันโชคดี: g = n = ...บันทึกไบต์ไว้เหนือg = 0 n = ... ; และ1% gcd ()ให้ (0,1) vs (1,0) ดังนั้นฉันจึงสามารถลบได้ และโชคร้าย: nเป็นแลนด์โรเวอร์และใช้เพราะตัวแปรห่วงและขอบเขตของพวกเขาจะไม่ได้กำหนดในท้องถิ่นและนอกวง

ละเอียด

r[] := random[10^6] + 1     // function. Frink parses Unicode superscript!
g = n = eval[input[""]]     // input number, [1] works too
for a = 1 to n              // repeat n times
   g = g - 1%gcd[r[], r[]]  // subtract 1 if gcd(i, j) > 1
println[(6*n/g)^.5]         // ^.5 is shorter than sqrt[x], but no super ".", no ½

นั่นคือ 90 ไบต์และ 88 ตัวอักษร ... ?
CalculatorFeline

ขอบคุณสำหรับการจับที่ ฉันไม่ได้นับบรรทัดใหม่และในขณะที่², ³มีเพียง 1 ไบต์ by ก็ยิ่งมากกว่านี้ ฉันแก้ไขเป็น 89 ไบต์โดยไม่มีการขึ้นบรรทัดใหม่
maybeso

คุณยังไม่ได้แก้ไขรหัส verbose
CalculatorFeline

มันไม่ใช่การแข่งขันแบบหนึ่งต่อหนึ่งอย่างไรก็ตามการเว้นวรรคคำพูดและตัวเลขเป็นต้น
maybeso


1

Pyt , 37 35 bytes

←Đ0⇹`25*⁶⁺Đ1⇹ɾ⇹1⇹ɾǤ1=⇹3Ș+⇹⁻łŕ⇹6*⇹/√

คำอธิบาย:

←Đ                                              Push input onto stack twice
  0                                             Push 0
   ⇹                                            Swap top two elements of stack
    `                      ł                    Repeat until top of stack is 0
     25*⁶⁺Đ1⇹ɾ⇹1⇹ɾ                              Randomly generate two integers in the range [1,10^6]
                  Ǥ1=                           Is their GCD 1?
                     ⇹3Ș                        Reposition top three elements of stack
                        +                       Add the top 2 on the stack
                         ⇹⁻                     Swap the top two and subtract one from the new top of the stack
                            ŕ                   Remove the counter from the stack
                             ⇹                  Swap the top two on the stack
                              6*                Multiply top by 6
                                ⇹               Swap top two
                                 /              Divide the second on the stack by the first
                                  √             Get the square root

1

J, 27 ไบต์

3 :'%:6*y%+/(1:=?+.?)y#1e6'

คำอธิบาย:

3 :'                      '  | Explicit verb definition
                     y#1e6   | List of y copies of 1e6 = 1000000
            (1:=?+.?)        | for each item, generate i and j, and test whether their gcd is 1
          +/                 | Sum the resulting list
      6*y%                   | Divide y by it and multiply by six
    %:                       | Square root

มีโชคดีสวยด้วย3.14157สำหรับN = 10000000ที่เอา2.44วินาที


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.