কোড গল্ফ - π দিন


95

চ্যালেঞ্জ

এসও-তে কোড-গল্ফের জন্য নির্দেশিকা

অক্ষর Rব্যবহার করে ব্যাসার্ধের বৃত্তের উপস্থাপনা প্রদর্শনের জন্য অক্ষর গণনা দ্বারা সংক্ষিপ্ততম কোড এবং *তারপরে π এর প্রায় অনুমান হয় π

ইনপুট একটি একক সংখ্যা R,।

যেহেতু বেশিরভাগ কম্পিউটারের কাছে প্রায় 2: 1 অনুপাত রয়েছে বলে মনে হচ্ছে আপনার কেবলমাত্র যেখানে yবিজোড় লাইন থাকবে । এর অর্থ হ'ল যখন Rবিজোড় হয় আপনার R-1লাইনগুলি প্রিন্ট করা উচিত । R=13স্পষ্ট করার জন্য একটি নতুন টেস্টকেস রয়েছে ।

যেমন

Input
    5
Output      Correct                          Incorrect

        3    *******                    4      *******
        1   *********                   2     *********
       -1   *********                   0    ***********
       -3    *******                   -2     *********
           2.56                        -4      *******
                                            3.44

সম্পাদনা: এর বিজোড় মূল্যবোধের কারণে বিভ্রান্তির কারণে R, নীচে প্রদত্ত 4 টি পরীক্ষার ক্ষেত্রে পাস হওয়া যে কোনও সমাধান গ্রহণ করা হবে

Characters এর অনুমানটি *অক্ষরের সংখ্যাকে দ্বিগুণ দ্বারা ভাগ করে দেওয়া হয়
আনুমানিক কমপক্ষে 6 টি উল্লেখযোগ্য সংখ্যায় সঠিক হওয়া উচিত।
বিশিষ্ট বা লম্বা শূন্য অনুমতি দেওয়া হয়েছে, তাই কোন উদাহরণস্বরূপ 3, 3.000000, 003এর ইনপুট জন্য গৃহীত 2এবং 4

কোড গণনা ইনপুট / আউটপুট অন্তর্ভুক্ত (যেমন, সম্পূর্ণ প্রোগ্রাম)।

পরীক্ষার মামলা

Input
    2
Output
     *** 
     *** 
    3.0

Input
    4
Output
      *****  
     ******* 
     ******* 
      *****  
    3.0

Input
    8
Output
         *******     
      *************  
     *************** 
     *************** 
     *************** 
     *************** 
      *************  
         *******     
    3.125

Input
    10
Output
          *********      
       ***************   
      *****************  
     ******************* 
     ******************* 
     ******************* 
     ******************* 
      *****************  
       ***************   
          *********      
    3.16

বোনাস টেস্ট কেস

Input
    13
Output

           *************       
        *******************    
       *********************   
      ***********************  
     ************************* 
     ************************* 
     ************************* 
     ************************* 
      ***********************  
       *********************   
        *******************    
           *************                                          
    2.98224852071

আপনি "ইনপুট" কমান্ড লাইনে বা স্টিডিনে রয়েছে কিনা তা পরিষ্কার করতে চাইতে পারেন।
গ্রেগ হিউগিল

4
@ গ্রেগ হিউগিল, আপনি যে ভাষাটি ব্যবহার করছেন তার জন্য সবচেয়ে সহজ যেকোন ভাষা নির্দ্বিধায় মনে করুন :)
জন লা রুই

@ গ্রেগ হিউগিল, কিছু (এটি খুব কম) প্রোগ্রামিং ভাষা প্রয়োগের ক্ষেত্রে "কমান্ড লাইন" ধারণা নেই।
জোয় অ্যাডামস

4
আমি লক্ষ্য করেছি যে উত্তরগুলির মধ্যে কয়েকটি কেবলমাত্র লাইন রাখার নিয়ম অনুসরণ করে যেখানে y বিজোড়। একটি অদ্ভুত মান দেওয়া হয়েছে (পরীক্ষার ক্ষেত্রে দেখানো হয়নি), বেশিরভাগ উইল আউটপুট লাইন হবে যেখানে y সমান!
এমটিএনভিউমার্ক

6
নিয়মের অপব্যবহারের চ্যালেঞ্জ: কেবলমাত্র 4 টি প্রয়োজনীয় পরীক্ষার ক্ষেত্রে সমর্থন করে এমন কোড তৈরি করুন যা অন্য কারও কোডের চেয়ে কম ।
ব্রায়ান

উত্তর:


15

ডিসি তে: 88 এবং 93 93 94 96 102 105 129 138 141 অক্ষরে

কেবলমাত্র, আমি এই মুহুর্তে ওপেনবিএসডি এবং কিছু অনুমিত-বহনযোগ্য এক্সটেনশন ব্যবহার করছি।

93 চর। এটি ফরট্রান সমাধান হিসাবে একই সূত্রের উপর ভিত্তি করে (পরীক্ষার কেসগুলির তুলনায় কিছুটা পৃথক ফলাফল)। প্রতি Y এর জন্য এক্স ^ 2 = আর ^ 2-ওয়াই ^ 2 গণনা করে

[rdPr1-d0<p]sp1?dsMdd*sRd2%--
[dd*lRr-vddlMr-32rlpxRR42r2*lpxRRAP4*2+lN+sN2+dlM>y]
dsyx5klNlR/p

88 অক্ষর। Iterative সমাধান। ম্যাচ পরীক্ষার মামলা। প্রতিটি এক্স এবং ওয়াইয়ের জন্য এক্স ^ 2 + ওয়াই ^ 2 <= আর। 2 পরীক্ষা করে

1?dsMdd*sRd2%--sY[0lM-[dd*lYd*+lRr(2*d5*32+PlN+sN1+dlM!<x]dsxxAPlY2+dsYlM>y]
dsyx5klNlR/p

চালাতে dc pi.dc

এখানে একটি পুরানো টিকা বর্ণিত সংস্করণ:

# Routines to print '*' or ' '. If '*', increase the counter by 2
[lN2+sN42P]s1
[32P]s2
# do 1 row
# keeping I in the stack
[
 # X in the stack
 # Calculate X^2+Y^2 (leave a copy of X)
 dd*lYd*+ 
 #Calculate X^2+Y^2-R^2...
 lR-d
 # .. if <0, execute routine 1 (print '*')
 0>1
 # .. else execute routine 2 (print ' ')
 0!>2 
 # increment X..
 1+
 # and check if done with line (if not done, recurse)
 d lM!<x
]sx
# Routine to cycle for the columns
# Y is on the stack
[
  # push -X
  0lM- 

  # Do row
  lxx 
  # Print EOL
  10P
  # Increment Y and save it, leaving 2 copies
  lY 2+ dsY 
  # Check for stop condition
  lM >y
]sy
# main loop
# Push Input value
[Input:]n?
# Initialize registers
# M=rows
d sM
# Y=1-(M-(M%2))
dd2%-1r-sY
# R=M^2
d*sR
# N=0
0sN
[Output:]p
# Main routine
lyx
# Print value of PI, N/R
5klNlR/p

4
লিনাক্স ডিসির সাথে কাজ করে না , তবে আমি নিশ্চিত করতে পারি যে এটি ওপেনএসডি-তে কাজ করে । অসাধারণ!
জন লা রুই

@ কার্লোস, হ্যাঁ (অপারেটর নিশ্চিত যে এটি কার্যকর। খুব খারাপ এটি লিনাক্সের সাথে আসা ডিসিতে অপরিবর্তিত রয়েছে
জন লা রুয়

@gnibbler - "বিএন (3) বড় সংখ্যার রুটিন ব্যবহার করে ডিসি কমান্ডের একটি সম্পূর্ণ পুনর্লিখন প্রথম ওপেনবিএসডি 3.5 তে উপস্থিত হয়েছিল।" আমি এটা জানতাম না। কিছু দুর্দান্ত নতুন অপারেটর অন্তর্ভুক্ত রয়েছে তবে সেগুলিকে "অ-বহনযোগ্য এক্সটেনশন" হিসাবে চিহ্নিত করা হয়েছে।
কার্লোস গুটিরিজ

হ্যাঁ, (অপারেটর একাই 6 টি স্ট্রোক
চালাবার

119

সি: 131 অক্ষর

(জোয়ের সি ++ সমাধানের ভিত্তিতে)

main(i,j,c,n){for(scanf("%d",&n),c=0,i|=-n;i<n;puts(""),i+=2)for(j=-n;++j<n;putchar(i*i+j*j<n*n?c++,42:32));printf("%g",2.*c/n/n);}

( বিজোড় সংখ্যার কেসের সমর্থন অপসারণ i|=-nকরতে পরিবর্তন করুন i-=nThis এটি কেবল চর গণনা হ্রাস করে ১৩০ এ পরিণত হয়েছে))

একটি বৃত্ত হিসাবে:

      main(i,j,
   c,n){for(scanf(
  "%d",&n),c=0,i=1|
 -n;i<n;puts(""),i+=
 0x2)for(j=-n;++j<n;
 putchar(i*i+j*j<n*n
 ?c++,0x02a:0x020));
  printf("%g",2.*c/
   n/n);3.1415926;
      5358979;}

4
আমি পছন্দ করি আপনি কীভাবে কোডটিকে চেনাশোনাতে যুক্ত করেছেন এটির বৃত্তে রূপান্তরিত করার জন্য। +000 পছন্দসই হবে?
পোটোসওয়টার

অভিনন্দন, জে জে ++ অনির্ধারিত আচরণ
বিক্রয়

4
এটা কি শুধু একটি চরিত্র হবে না ...?
পঙ্কডুডল

4
main()চারটি intযুক্তি কীভাবে লাগে ?
ডেভিড আর ট্রিবিবল

4
@ লোড: 5.1.2.2.1 / 1: প্রোগ্রাম স্টার্টআপে ডাকা ফাংশনটির নাম দেওয়া হয়েছে main। এটি সংজ্ঞায়িত করা হবে… বা অন্য কোনও বাস্তবায়ন-সংজ্ঞায়িত পদ্ধতিতে । সুতরাং কারণ বাস্তবায়ন এই ফর্মটি গ্রহণ করতে পারে।
কেনেটিএম

46

এক্সএসএলটি 1.0

কেবল মজাদার জন্য, এখানে একটি এক্সএসএলটি সংস্করণ। আসলে কোড-গল্ফ উপাদান নয়, তবে এটি একটি অদ্ভুত-কার্যকরী-এক্সএসএলটি-জাতীয় উপায়ে সমস্যার সমাধান করে :)

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt" >
  <xsl:output method="html"/>

  <!-- Skip even lines -->
  <xsl:template match="s[@y mod 2=0]">
    <xsl:variable name="next">
      <!-- Just go to next line.-->
      <s R="{@R}" y="{@y+1}" x="{-@R}" area="{@area}"/>
    </xsl:variable>
    <xsl:apply-templates select="msxsl:node-set($next)"/>
  </xsl:template>

  <!-- End of the line?-->
  <xsl:template match="s[@x &gt; @R]">
    <xsl:variable name="next">
      <!-- Go to next line.-->
      <s R="{@R}" y="{@y+1}" x="{-@R}" area="{@area}"/>
    </xsl:variable><!-- Print LF-->&#10;<xsl:apply-templates 
      select="msxsl:node-set($next)"/>
  </xsl:template>

  <!-- Are we done? -->
  <xsl:template match="s[@y &gt; @R]">
    <!-- Print PI approximation -->
    <xsl:value-of select="2*@area div @R div @R"/>
  </xsl:template>

  <!-- Everything not matched above -->
  <xsl:template match="s">
    <!-- Inside the circle?-->
    <xsl:variable name="inside" select="@x*@x+@y*@y &lt; @R*@R"/>
    <!-- Print "*" or " "-->
    <xsl:choose>
      <xsl:when test="$inside">*</xsl:when>
      <xsl:otherwise>&#160;</xsl:otherwise>
    </xsl:choose>

    <xsl:variable name="next">
      <!-- Add 1 to area if we're inside the circle. Go to next column.-->
      <s R="{@R}" y="{@y}" x="{@x+1}" area="{@area+number($inside)}"/>
    </xsl:variable>
    <xsl:apply-templates select="msxsl:node-set($next)"/>
  </xsl:template>

  <!-- Begin here -->
  <xsl:template match="/R">
    <xsl:variable name="initial">
      <!-- Initial state-->
      <s R="{number()}" y="{-number()}" x="{-number()}" area="0"/>
    </xsl:variable>
    <pre>
      <xsl:apply-templates select="msxsl:node-set($initial)"/>
    </pre>
  </xsl:template>
</xsl:stylesheet>

আপনি যদি এটি পরীক্ষা করতে চান তবে এটি হিসাবে সংরক্ষণ করুন pi.xsltএবং আইআই-তে নিম্নলিখিত XML ফাইলটি খুলুন:

<?xml version="1.0"?> 
<?xml-stylesheet href="pi.xslt" type="text/xsl" ?> 
<R> 
  10 
</R> 

42
আমার << চোখ </ i>> গগলস, তারা <do> কিছুই </ u> না!
জিমি

4
ডাং! আমি ভয় করি আপনি স্বতন্ত্রতার জন্য আমার হাইপারকার্ড সমাধানটি মারতে পারেন: ডি
জো অ্যাডামস

7
আপনি "ওপেন ... আইই" বলেছেন
হারপো

হেই, হ্যাঁ, আগের দিন, আমাদের কাছে কেবলমাত্র আইএস ছিল এবং এক্সএসএলটি সহ এক্সএমএল ছিল আমাদের সমস্ত সমস্যার সমাধান। শুভ পুরানো সময়! :)
ডানকো দুর্বিয়

এক্সএসএল সংস্করণ 1.0 বাহ, আমার মনে আছে সংস্করণ 2 এর অপেক্ষায় ছিলাম তবে এটি বের হওয়ার সাথে সাথে আমি ইতিমধ্যে এগিয়ে চলেছি।
গ্রেডবোট

35

পার্ল, 95 96 99 106 109 110 119 চরিত্র:

$t+=$;=1|2*sqrt($r**2-($u-2*$_)**2),say$"x($r-$;/2).'*'x$;for 0..
($u=($r=<>)-1|1);say$t*2/$r**2

(নতুন লাইনটি সরানো যেতে পারে এবং কেবল সেখানে একটি স্ক্রোলবার এড়ানোর জন্য রয়েছে)

হ্যাঁ! সার্কেল সংস্করণ!

    $t+=$;=
 1|2*sqrt($r**
2-($u-2*$_)**2)
,say$"x($r-$;/2
).'*'x$;for 0..
($u=($r=<>)-1|1
 );$pi=~say$t*
    2/$r**2

নিরবিচ্ছিন্ন জন্য, দীর্ঘ সংস্করণ:

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

# Read the radius from STDIN
my $radius = <>;

# Since we're only printing asterisks on lines where y is odd,
# the number of lines to be printed equals the size of the radius,
# or (radius + 1) if the radius is an odd number.
# Note: we're always printing an even number of lines.
my $maxline = ($radius - 1) | 1;

my $surface = 0;

# for ($_ = 0; $_ <= $maxline; $_++), if you wish
for (0 .. $maxline) {
    # First turn 0 ... N-1 into -(N/2) ... N/2 (= Y-coordinates),
    my $y = $maxline - 2*$_;

    # then use Pythagoras to see how many stars we need to print for this line.
    # Bitwise OR "casts" to int; and: 1 | int(2 * x) == 1 + 2 * int(x)
    my $stars = 1 | 2 * sqrt($radius**2-$y**2);
    $surface += $stars;    

    # $" = $LIST_SEPARATOR: default is a space,
    # Print indentation + stars 
    # (newline is printed automatically by say)
    say $" x ($radius - $stars/2) . '*' x $stars;
}

# Approximation of Pi based on surface area of circle:
say $surface*2/$radius**2;

6
এটি আমার জীবনের পুরো
সময়টিতে

13
আমার ধারণা আপনি তখন এপিএল কখনও দেখেন নি।
পিটার উইন

5
@ ক্রিস মেরিসিক: আপনি কি অন্যান্য প্রশ্ন / বিষয় ট্যাগ ট্যাগ পরীক্ষা করেছেন code-golf? :) আমি আরও অনেক অপঠনযোগ্য উদাহরণ দেখেছি।
বালুসসি

4
@ পিটার: বেশিরভাগের বিপরীতে, আমি উভয়ই এপিএল দেখেছি এবং লিখেছি। এর বিশেষ চরিত্রগুলিতে অভ্যস্ত হতে কয়েক সপ্তাহ সময় লাগে তবে এর পরে এটি বেশ পঠনযোগ্য। অভ্যস্ত হতে কয়েক দশক পরেও পার্ল এখনও আরও খারাপ।
জেরি কফিন

4
111 টি চর,$r=<>;$t+=$n=1+2*int sqrt($r**2-($u-2*$_)**2),print$"x($r-$n/2).'*'x$n.$/for(0..($u=$r-1+$r%2));print$t*2/$r**2
হস্তুরকুন

25

ফরট্রান - 101 টি অক্ষর

$ f95 piday.f95 -o piday && echo 8 | ./piday


READ*,N
DO I=-N,N,2
M=(N*N-I*I)**.5
PRINT*,(' ',J=1,N-M),('*',J=0,M*2)
T=T+2*J
ENDDO
PRINT*,T/N/N
END


    READ*,N
  K=N/2*2;DO&
 I=1-K,N,2;M=&
(N*N-I*I)**.5;;
PRINT*,(' ',J=&
1,N-M),('*',J=&
0,M*2);T=T+2*J;
 ENDDO;PRINT*&
  ,T/N/N;END;
    !PI-DAY

অপেক্ষা করুন, আমি যদিও ফরট্রানে ফর্ম্যাট করা গুরুত্বপূর্ণ ছিল? আপনার কলাম 1 এ অক্ষর রয়েছে!
জোয়েল

আমি যা দেখেছি বেশিরভাগ লোক এখনও ফোর্টান 7777 এ আটকে রয়েছে।
জোয়েল

8
আমি পছন্দ করি বৃত্ত সংস্করণটি ডেথ স্টারের মতো দেখাচ্ছে।
এমএসকিফিশার

22

x86 মেশিন কোড: 127 বাইট

ইন্টেল এসেমব্লার: 490 টি অক্ষর

    mov si,80h
    mov cl,[si]
    jcxz ret
    mov bx,10
    xor ax,ax
    xor bp,bp
    dec cx
  a:mul bx
    mov dl,[si+2]
    sub dl,48
    cmp dl,bl
    jae ret
    add ax,dx
    inc si
    loop a
    mov dl,al
    inc dl
    mov dh,al
    add dh,dh
    mov ch,dh
    mul al
    mov di,ax
  x:mov al,ch
    sub al,dl
    imul al
    mov si,ax
    mov cl,dh
  c:mov al,cl
    sub al,dl
    imul al
    add ax,si
    cmp ax,di
    mov al,32
    ja y
    or al,bl
    add bp,2
  y:int 29h
    dec cl
    jnz c
    mov al,bl
    int 29h
    mov al,13
    int 29h
    sub ch,2
    jnc x
    mov ax,bp
    cwd
    mov cl,7
  e:div di
    cmp cl,6
    jne z
    pusha
    mov al,46
    int 29h
    popa
  z:add al,48
    int 29h
    mov ax,bx
    mul dx
    jz ret
    dec cl
    jnz e
    ret

এই সংস্করণটি বোনাস পরীক্ষার পাশাপাশি পরিচালনা করে এবং এটি 133 বাইট:

    mov si,80h
    mov cl,[si]
    jcxz ret
    mov bx,10
    xor ax,ax
    xor bp,bp
    dec cx
  a:mul bx
    mov dl,[si+2]
    sub dl,48
    cmp dl,bl
    jae ret
    add ax,dx
    inc si
    loop a
    mov dl,al
    rcr dl,1
    adc dl,dh
    add dl,dl
    mov dh,dl
    add dh,dh
    dec dh
    mov ch,dh
    mul al
    mov di,ax
  x:mov al,ch
    sub al,dl
    imul al
    mov si,ax
    mov cl,dh
  c:mov al,cl
    sub al,dl
    imul al
    add ax,si
    cmp ax,di
    mov al,32
    jae y
    or al,bl
    add bp,2
  y:int 29h
    dec cl
    jnz c
    mov al,bl
    int 29h
    mov al,13
    int 29h
    sub ch,2
    jnc x
    mov ax,bp
    cwd
    mov cl,7
  e:div di
    cmp cl,6
    jne z
    pusha
    mov al,46
    int 29h
    popa
  z:add al,48
    int 29h
    mov ax,bx
    mul dx
    jz ret
    dec cl
    jnz e
    ret

12
আমি স্ট্যাকওভারফ্লো ভালবাসি!
zengr

4
এটি আকর্ষণীয় যে উচ্চ স্তরের কয়েকটি ভাষার বাইনারি এটির তুলনায় সংক্ষিপ্ত চরিত্রের সংখ্যা রয়েছে।
কলিন ভ্যালিয়েন্ট

4
@ আলকারি: আপনি যদি উচ্চতর স্তরের ভাষা ব্যবহারের জন্য গ্রন্থাগারে সমস্ত কোড অন্তর্ভুক্ত করেন তবে তাদের চরিত্রের সংখ্যা উল্লেখযোগ্যভাবে উচ্চতর হবে। এসেম্বলারের ক্ষেত্রে, করা printf("%f",a/b)তুচ্ছ নয়, এটি করার কোনও একক নির্দেশ নেই, এবং আমার উপরের প্রয়োগটি ধরে নিয়েছে যে 0 <= a / b <10 এবং অপারেশনটি একটি বিভাজন এবং এটি এবং বি পূর্ণসংখ্যা।
স্কিজ

19

পাইথন: 101 104 107 110 টি অক্ষর

নিকোলাস রিলির অন্যান্য পাইথন সংস্করণের উপর ভিত্তি করে।

r=input()
t=0
i=1
exec"n=1+int((2*i*r-i*i)**.5)*2;t+=2.*n/r/r;print' '*(r-n/2)+'*'*n;i+=2;"*r
print t

কিছু গণিতের জন্য AlcariTheMad এর ক্রেডিট।


আহ, বিজোড় সংখ্যাযুক্তগুলি মধ্যম হিসাবে শূন্যের সাথে সূচিযুক্ত, সমস্ত কিছু ব্যাখ্যা করে।

বোনাস পাইথন: ১১৫ টি চর (দ্রুত একসাথে হ্যাক)

r=input()
t=0
i=1
while i<r*2:n=1+int((2*i*r-i*i)**.5)*2;t+=2.*n/r/r;print' '*(r-n/2)+'*'*n;i+=2+(r-i==2)*2
print t

বাহ, হ্যাঁ, '+' মারধর করে -1 এবং, যে কোনও দিন। তবুও অন্য কৌশলটি আমি আমার মনের বাইরে রেখেছি কারণ এটি করা ঠিক কখনই সঠিক জিনিস নয় :-)
নিকোলাস রিলে

আমি অতীতে সি ব্যবহার করেছি, এবং পাইথনের দিকে কখনও তাকাইনি। এই 104 অক্ষর উপরের সি ++ এর চেয়ে বেশি পঠনযোগ্য। বিস্ময়কর। হয়তো আমার পাইথন শিখানো উচিত ...
ডিন রথ

@ ডিয়ান: পাইথনের অন্যতম প্রধান লক্ষ্য হ'ল সহজেই পড়া এবং লেখা সহজ।
কলিন ভ্যালিয়েন্ট

আপনার 104 চরের উত্তরটি দিয়েও এক্সিকিউটিভ ব্যবহার করার বিষয়ে আপনার কি আছে? :)
জন লা রোয়

আমার নিজের সংকোচনের রোল দরকার - zlib, marshalling, ইত্যাদি সবই আসল কোডের চেয়ে বড় আকারের।
লুনিক্সবোকস

12

শক্তির উৎস, 119 113 109 টি অক্ষর

($z=-($n=$args[($s=0)])..$n)|?{$_%2}|%{$l="";$i=$_
$z|%{$l+=" *"[$i*$i+$_*$_-lt$n*$n-and++$s]};$l};2*$s/$n/$n

এবং এখানে একটি সুন্দর সংস্করণ:

( $range = -( $R = $args[ ( $area = 0 ) ] ) .. $R ) | 
  where { $_ % 2 } |
  foreach {
    $line = ""
    $i = $_
    $range | foreach {
        $line += " *"[ $i*$i + $_*$_ -lt $R*$R -and ++$area ]
    }
    $line
 }
 2 * $area / $R / $R

@ থোর: আমি আশা করি না, তবে আমি অবশ্যই লিখেছি এটি অবশ্যই
কুরুচিপূর্ণ বিষয়

4
সেই সুন্দর সংস্করণটির জন্য ধন্যবাদ =)
থোর হোভডেন

10

হাইপারটালক: 237 টি অক্ষর

ইন্ডেন্টেশন প্রয়োজন হয় না বা গণনা করা হয় না। এটি স্বচ্ছতার জন্য যুক্ত করা হয়েছে। এছাড়াও নোট করুন যে হাইপারকার্ড ২.২ আমার ব্যবহৃত AS অ্যাসিএসআইআই-র সম্পর্কিত opera

function P R
  put""into t
  put 0into c
  repeat with i=-R to R
    if i mod 2≠0then
      repeat with j=-R to R
        if i^2+j^2≤R^2then
          put"*"after t
          add 1to c
        else
          put" "after t
        end if
      end repeat
      put return after t
    end if
  end repeat
  return t&2*c/R/R
end P

যেহেতু হাইপারকার্ড 2.2 স্টিডিন / স্টডআউট সমর্থন করে না, পরিবর্তে একটি ফাংশন সরবরাহ করা হয়।


4
হাইপারকার্ড, মিঃ অ্যাডামস? সিরিয়াসলি? এটি অত্যন্ত অপ্রত্যাশিত।
কাওয়া

4
@ কাওয়া: আমি কেন পোস্ট করেছি সে কারণেই এটি :) :) এছাড়াও, যদি ভবিষ্যতে হাইপারটালক ইন্টারপ্রেটার লেখার সিদ্ধান্ত নেন তবে কোড গল্ফ একটি পরীক্ষার স্যুট তৈরির একটি ভাল উপায়।
জোয়ে অ্যাডামস

হাহ! আমি এটি দেখতে চাই, এক্সডি
কাওয়া

আপনি যদি সেই দোভাষীটি লিখতে চান বা কোনও বিদ্যমানটিতে কাজ করতে চান, তবে আমাকে জানান এবং আমি হাইপারকার্ড.আরএজে এর উল্লেখটি যুক্ত করতে পারি এবং এটি কীভাবে যায় তা সম্পর্কে আমি কৌতূহল বোধ করব:
)

10

সি #: 209 202 201 টি অক্ষর:

using C=System.Console;class P{static void Main(string[]a){int r=int.Parse(a[0]),s=0,i,x,y;for(y=1-r;y<r;y+=2){for(x=1-r;x<r;s+=i)C.Write(" *"[i=x*x+++y*y<=r*r?1:0]);C.WriteLine();}C.Write(s*2d/r/r);}}

স্বাক্ষরিত:

using C = System.Console;
class P {
  static void Main(string[] arg) {
    int r = int.Parse(arg[0]), sum = 0, inside, x, y;
    for (y = 1 - r; y < r; y += 2) {
      for (x = 1 - r; x < r; sum += inside)
        C.Write(" *"[inside = x * x++ + y * y <= r * r ? 1 : 0]);
      C.WriteLine();
    }
    C.Write(sum * 2d / r / r);
  }
}

আমি সি # খুব জানি না কিন্তু আপনি সক্ষম ব্যবহার না করার উচিত string[]aএবং 1-r(পরিবর্তে -1+r)?
কেনেটিএম

@ কেনি: আপনি ঠিক বলেছেন। :) এটি তিনটি অক্ষর সংরক্ষণ করে এবং তারপরে আমি আরও পাঁচটি থেকে মুক্তি পেতে সক্ষম হয়েছি।
গুফা

প্রথম জিনিসটি স্পট করেছেন, পুরোপুরি জিনিসটি মিস করেছেন -r+1
ডাইকাম

4
এছাড়াও, দাগযুক্ত x*xx+++y*y, কিন্তু প্রথম নজরে বিচ্ছিন্ন করা একটি পাগল জিনিস।
ডাইকাম

আমি আরেকটি বাইট ;-)
জোয়ে

10

হাস্কেল 139 145 147 150 230 চর:

x True=' ';x _='*'
a n=unlines[[x$i^2+j^2>n^2|j<-[-n..n]]|i<-[1-n,3-n..n]]
b n=a n++show(sum[2|i<-a n,i=='*']/n/n)
main=readLn>>=putStrLn.b

বিজোড় সংখ্যা হ্যান্ডলিং: ১৪৮ টি অক্ষর:

main=do{n<-readLn;let{z k|k<n^2='*';z _=' ';c=[[z$i^2+j^2|j<-[-n..n]]|i<-[1,3..n]];d=unlines$reverse c++c};putStrLn$d++show(sum[2|i<-d,i=='*']/n/n)}

150 টি অক্ষর: (সি সংস্করণের উপর ভিত্তি করে))

a n=unlines[concat[if i^2+j^2>n^2then" "else"*"|j<-[-n..n]]|i<-[1-n,3-n..n]]
main=do n<-read`fmap`getLine;putStr$a n;print$2*sum[1|i<-a n,i=='*']/n/n

230 অক্ষর:

প্রধান = do {r <-read`fmap`getLine; let {p = putStr; d = 2 / fromIntegral r ^ 2; lyn = let cmx = if x> r তবে p "\ n" >> x যদি ফিরে আসে তবে x * x + y * y <r * আর এর পরে পি "*" >> সি (এম + ডি) (এক্স + 1) অন্য পি "" >> সেন্টিমিটার (x + 1) এর মধ্যে যদি y> আর তবে অন্য সিএন মুদ্রণ করুন (-আর) >> = l (y + 2)}; l (1-r`mod`2-r) 0

স্বাক্ষরিত:

main = do r <- পড়ুন `fmap` getLine
          চলুন পি = putStr
              d = 2 / fromIntegral r ^ 2
              lyn = আসুন cmx = যদি x> আর r
                                  তারপরে পি "\ n" >> রিটার্ন মি
                                  অন্যথায় যদি x * x + y * y <r * আর হয়
                                       তারপরে পি "*" >> সি (এম + ডি) (x + 1)
                                       অন্য p "" >> সেমি (x + 1)
                      মধ্যে যদি y> r
                         তারপরে প্রিন্ট করা n
                         অন্যথায় সিএন (-আর) >> = l (y + 2)
          l (1-r`mod`2-r) 0

আমি আশাবাদী ছিলাম যে এটি কিছু প্রয়োজনীয় সংস্করণকে পরাজিত করবে, তবে আমি এ মুহূর্তে এটিকে আর সংকোচনের বলে মনে করতে পারি না।


"D" পরিত্রাণ এবং এটি পরিবর্তে 1 যোগ এবং তারপর মুদ্রণ "* N / fromIntegral R ^ 2 2" দ্বারা আরো 2 কাটা বন্ধ
স্টিভ

কয়েকটি হাস্কেল ট্রিকের মাধ্যমে 3 টি অক্ষর বন্ধ করা হয়েছে। আমি পছন্দ করি যে হাস্কেলগুলিতে প্রায়শই একাধিক লাইনের (নিউ লাইন বনাম সেমিকোলন) কোনও খরচ হয় না এবং তাই আমাদের কোড-গল্ফটি সাধারণত পাঠযোগ্য!
এমটিএনভিউমার্ক

কড়া কথায় বলতে গেলে, 145-চর সংস্করণটি কেবল তখনই কাজ করে যদি ইনপুটটি সমান হয়। তবে খুব সুন্দর।
স্টিভ

I / O লাইনটি সংক্ষিপ্ত করে। ফাংশন ডিফেসকে একটি প্রধান = কর। ... {...} ...} অবরুদ্ধ করে ধাক্কা দিয়ে আরও কয়েকটি অক্ষর সংরক্ষণ করা সম্ভব হওয়া উচিত বলে আমি মনে করি।
আসন্ন ঝড় 8

@ আসন্ন ঝড়: দুর্দান্ত! আমি রিডলন সম্পর্কে জানতাম না। এটি অনেকগুলি হাস্কেল কোড-গল্ফকে সহায়তা করবে। @ স্টিভ: হ্যাঁ, আমি এখনও এটি ঠিক করার সবচেয়ে কার্যকর উপায়টি বের করার চেষ্টা করছি।
এমটিএনভিউমার্ক

10

রুবি, 96 টি অক্ষর

(গুফার সি # সমাধানের ভিত্তিতে):

r=gets.to_f
s=2*t=r*r
g=1-r..r
g.step(2){|y|g.step{|x|putc' * '[i=t<=>x*x+y*y];s+=i}
puts}
p s/t

109 অক্ষর (বোনাস):

r=gets.to_i
g=-r..r
s=g.map{|i|(g.map{|j|i*i+j*j<r*r ?'*':' '}*''+"\n")*(i%2)}*''
puts s,2.0/r/r*s.count('*')

ধন্যবাদ! রুবি কীভাবে অপঠনযোগ্য হতে পারে তা দেখে আমি বিব্রত বোধ করি ... :)
ম্লাদেন জাবলানোভিć

আপনি :) এর p sপরিবর্তেও ব্যবহার করতে পারেনputs s
জন লা রুই

4
সেখানে নতুন নতুন ধারণা - আমি চাই যে আপনি 2 টি ভিন্ন ধাপের মাপ এবং <=> কোডটিকে যৌক্তিক থেকে রূপান্তর করার জন্য এড়ানোর জন্য ব্যবহার করছেন
জন লা রুই


8

আপনি ছেলেরা উপায় খুব কঠিন চিন্তা।

switch (r) {
   case 1,2:
      echo "*"; break;
   case 3,4:
      echo " ***\n*****\n ***"; break;
   // etc.
}

8
চরিত্রের গণনা কিছুটা হাতছাড়া হয়ে যায়, আপনি কি ভাবেন না? :)
জন লা রোয়

7
স্কেল করে না। অকল্পনীয়!
সোলসন

আমি যতটা সম্ভব পরীক্ষার কেস ঠকানোর চেষ্টা করেছি এবং এটি এখনও আমার আসল সমাধানের চেয়ে কিছুটা বড় হয়ে গেছে: পি
লুনিক্সবোকস

5
+1, সর্বদা সবচেয়ে সুস্পষ্ট কাজটি প্রথমে করুন ... যদি কেউ এটি পছন্দ না করে তবে উচ্চস্বরে অভিযোগ করুন যে
অনুমানটি

পরীক্ষাগুলির কেসগুলি বিশেষ কেস করার জন্য ব্রায়ানের একটি আধা-গুরুতর প্রচেষ্টা ছিল, আপনি যদি এই উত্তরটি পছন্দ করেন তবে আপনারও উচিৎ উচিত;) স্ট্যাকওভারফ্লো
জন লা রুই

7

জে: 47 , 46 , 45

অন্যান্য সমাধান হিসাবে একই বুনিয়াদি ধারণা, যেমন r ^ 2 <= x y 2 + y ^ 2 , তবে জে এর অ্যারে-ভিত্তিক স্বীকৃতি অভিব্যক্তিটিকে সহজ করে তোলে:

c=:({&' *',&":2*+/@,%#*#)@:>_2{.\|@j./~@i:@<:

আপনি এটির মতো কল চাই c 2বা c 8বা c 10ইত্যাদি

বোনাস: 49

বিজোড় ইনপুট হ্যান্ডেল করতে, উদাহরণস্বরূপ 13, প্রতি আউটপুটটির প্রতিটি সারিটি গ্রহণের পরিবর্তে আমাদেরকে বিজোড়-মূল্যবান এক্স স্থানাঙ্কগুলিতে ফিল্টার করতে হবে (কারণ এখন সূচকগুলি একটি বা বিচিত্র সংখ্যায় শুরু হতে পারে)। এই সাধারণীকরণের জন্য আমাদের 4 টি অক্ষর ব্যয় হয়:

c=:*:({&' *'@],&":2%(%+/@,))]>(|@j./~2&|#])@i:@<:

নির্ধারিত সংস্করণ:

c =: verb define
  pythag   =. y > | j./~ i:y-1    NB.  r^2 > x^2 + y^2
  squished =. _2 {.\ pythag       NB.  Odd rows only
  piApx    =. (2 * +/ , squished) %  y*y
  (squished { ' *') , ": piApx
)

জে ফোরামে মার্শাল লচবামের কারণে উন্নতি এবং সাধারণীকরণ ।


5

পাইথন: 118 টি অক্ষর

পার্ল সংস্করণের খুব সোজা সোজা বন্দর।

r=input()
u=r+r%2
t=0
for i in range(u):n=1+2*int((r*r-(u-1-2*i)**2)**.5);t+=n;print' '*(r-n/2-1),'*'*n
print 2.*t/r/r

পাইথন 2 এর জন্য আপনি কেবল ব্যবহার করতে পারেনr=input()
জন লা রোয়

আপনার মাঝে printএবং' '
জন লা রুই

ঠিক আছে, এটি ভয়ঙ্কর, এটি এখন পার্ল সংস্করণের চেয়ে কম। (আমি পুরোপুরি আমার মনের বাইরে "ইনপুট" রেখেছি কারণ এটি সাধারণভাবে এতটা অনিরাপদ ...)
নিকোলাস রিলে

4

সি ++: 169 টি অক্ষর

#include <iostream>
int main(){int i,j,c=0,n;std::cin>>n;for(i=-n;i<=n;i+=2,std::cout<<'\n')for(j=-n;j<=n;j++)std::cout<<(i*i+j*j<=n*n?c++,'*':' ');std::cout<<2.*c/n/n;}

স্বাক্ষরিত:

#include <iostream>
int main()
{
    int i,j,c=0,n;
    std::cin>>n;
    for(i=-n;i<=n;i+=2,std::cout<<'\n')
        for(j=-n;j<=n;j++)
            std::cout<<(i*i+j*j<=n*n?c++,'*':' ');
    std::cout<<2.*c/n/n;
}

(হ্যাঁ, using namespace stdকম অক্ষরের ব্যবহারের পরিবর্তে স্ট্যান্ড :: ব্যবহার করা)

এখানে আউটপুট মূল পোস্টে পরীক্ষার কেসের সাথে মেলে না, সুতরাং এখানে যা রয়েছে (পাঠযোগ্যতার জন্য লিখিত)। এটিকে একটি রেফারেন্স বাস্তবায়ন বিবেচনা করুন (যদি পোয়েটা_ কিছু মনে করেন না):

#include <iostream>
using namespace std;

int main()
{
    int i, j, c=0, n;
    cin >> n;
    for(i=-n; i<=n; i++) {
        if (i & 1) {
            for(j=-n; j<=n; j++) {
                if (i*i + j*j <= n*n) {
                    cout << '*';
                    c++;
                } else {
                    cout << ' ';
                }
            }
            cout << '\n';
        }
    }
    cout << 2.0 * c / n / n << '\n';
}

সি ++: ১8৮ টি অক্ষর (আউটপুট সহ আমি বিশ্বাস করি যে সঠিক)

#include <iostream>
int main(){int i,j,c=0,n;std::cin>>n;for(i=-n|1;i<=n;i+=2,std::cout<<"\n")for(j=-n;j<=n;j++)std::cout<<" *"[i*i+j*j<=n*n&&++c];std::cout<<2.*c/n/n;}

কোডটি এন-এন থেকে লুপ করে, সুতরাং উদাহরণস্বরূপ 4 এর ইনপুটটির জন্য এটি 9 টি ব্যাস প্রদর্শন করে, পরীক্ষার ক্ষেত্রে প্রদর্শিত নয়।
গুফা

আপনার চেনাশোনাটি ওপি'র সাথে ঠিক মেলে এমনটি কি প্রয়োজনীয় ?
পিটার আলেকজান্ডার

4
আপনি পুরানো সি ++ কম্পাইলারগুলির সাথে সামঞ্জস্যের জন্য #include <iostream.h>যা মূলত এটিতে পরিবর্তন করতে পারেন #include <iostream> -- using namespace std;
আর্লজ

4
@ কার্লোস, আমি সেই বিশেষ বিটটি লিখিনি, তবে এটি একটি বাইনারি এবং অপারেটর। এটি পরীক্ষা করে যে শেষ বিট সেট করা হয়েছে যা করার সমান i%2, তবে "দ্রুত"। এটি সত্যই দ্রুত নয় কারণ সংকলক যেভাবেই এটি করতে পারে।
পিটার আলেকজান্ডার

4
@ পোইটা_: আসলে, আমি% 2 এবং আমি এবং 1 টি নেতিবাচক সংখ্যার সাথে আলাদা আচরণ করে। (-1) এবং 1 হল 1, যা আমরা এখানে চাই। (-1)% 2 আমার সিস্টেমে -1, এবং এটি C99 অনুসারে। সুতরাং, যদিও (i & 1) এবং যদি (i% 2) একই কাজ করে, তবে অবশ্যই (i% 2 == 1) যদি সতর্কতা অবলম্বন করা আবশ্যক, যা আমি নেতিবাচক হলে কাজ করবে না।
জোয় অ্যাডামস

3

পিএইচপি: 126 132 138

(গুফা সি # সমাধানের ভিত্তিতে)

126:

for($y=1-($r=$argv[1]);$y<$r;$y+=2,print"\n")for($x=1-$r;$x<$r;$s+=$i,++$x)echo($i=$x*$x+$y*$y<=$r*$r)?'*':' ';echo$s*2/$r/$r;

132:

for($y=1-($r=$argv[1]);$y<$r;$y+=2){for($x=1-$r;$x<$r;@$s+=$i,++$x)echo($i=$x*$x+$y*$y<=$r*$r?1:0)?'*':' ';echo"\n";}echo$s*2/$r/$r;

138:

for($y=1-($r=$argv[1]);$y<$r;$y+=2){for($x=1-$r;$x<$r;@$s+=$i){$t=$x;echo($i=$t*$x++ +$y*$y<=$r*$r?1:0)?'*':' ';}echo"\n";}echo$s*2/$r/$r;

বর্তমান পূর্ণ:

for( $y = 1 - ( $r = $argv[1]); $y < $r; $y += 2, print "\n")
    for( $x = 1-$r; $x < $r; $s += $i, ++$x)
        echo( $i = $x*$x + $y*$y <= $r*$r) ? '*' : ' ';
echo $s*2 /$r /$r;

@প্রথমটি ছাড়া আগে হতে পারে $sতবে কেবল ত্রুটি_সামগ্রী 0 তে সেট করা থাকে (নোটিশ আউটপুটগুলি বৃত্তটি গোলমাল করছে)


প্রতিধ্বনিতে 2 / $ r / $ r এ / $ r কী করবে;
ডেভিডোসোমথিং

ওএইচএইচ বিভাগ ... ব্যবধান আমাকে ফেলে দিয়েছে, ভেবেছিল এটি এমন কোনও অপারেটর শর্টহ্যান্ড যা আমি কখনও দেখিনি
ডেভিডোসমোথিং

3

রুবি 1.8.x, 93

r=$_.to_f
q=0
e=r-1
(p(('*'*(n=1|2*(r*r-e*e)**0.5)).center r+r)
q+=n+n
e-=2)while-r<e
p q/r/r

সাথে চালাও $ ruby -p piday


খুব ভাল, তবে এটি পাই অনুমানের
কথাটি

এটি 1.9.1 এ কাজ করে না এবং বৃত্তের চারপাশে ডাবল উদ্ধৃতি মুদ্রণ করে।
ম্লাদেন জাবলানোভি

গল্ফ প্রোগ্রামগুলির পক্ষে বন্যভাবে ভিন্ন ভাষার স্তরে কাজ না করা স্বাভাবিক। ভাষার প্রতিটি সংস্করণে কত পার্ল বা পাইথন সিজি-র কাজ? এটি আকর্ষণীয়, যদিও, এর কারণটি দেখা যাচ্ছে কারণ Integer|Float১.৯-তে ভাসাটি আর জোর করে না।
ডিজিটালরোস

3

এপিএল: 59

এই ফাংশনটি একটি সংখ্যা গ্রহণ করে এবং দুটি প্রত্যাশিত আইটেম ফেরত দেয়। বোনাস ক্ষেত্রে সঠিকভাবে কাজ করে।

{⍪(⊂' *'[1+m]),q÷⍨2×+/,m←(2|v)⌿(q←⍵*2)>v∘.+v←2*⍨⍵-⍳1+2×⍵-1}

ডায়ালেক্ট হ'ল ডায়ালগ এপিএল, ডিফল্ট সূচক উত্স সহ। দক্ষতার স্তরটি নিখুঁত নবাগত , সুতরাং কোনও এপিএল গুরু যদি এটি 10 ​​টি অক্ষরে নামিয়ে আনতে চান, তবে আমার অতিথি হোন!


আপনি এটি এপিএলে অনলাইনে চেষ্টা করতে পারেন , কেবল এটি পেস্ট করুন এবং এর পরে একটি নম্বর রাখুন:

   {⍪(⊂' *'[1+m]),q÷⍨2×+/,m←(2|v)⌿(q←⍵*2)>v∘.+v←2*⍨⍵-⍳1+2×⍵-1} 13
      *************
   *******************
  *********************
 ***********************
*************************
*************************
*************************
*************************
 ***********************
  *********************
   *******************
      *************
2.98225

যদিও আমি এপিএলকে জানি না, এটি জে সংস্করণের চেয়ে সুন্দর দেখাচ্ছে।
আহলা

নিঃসন্দেহে এপিএল ধারণাগত এবং নান্দনিকভাবে উভয়ই সুন্দর। আমি জে শিখতে শুরু করেছিলাম, তবে এএসসিআইআই এলোমেলোভাবে বন্ধ হয়ে গেছে। একটি ভাল আত্মা নোড.জেএস (এনপিএম ইনস্টল এপিএল) এর জন্য একটি ওপেন সোর্স এপিএল ইন্টারপ্রেটার লিখেছিলেন এটি বেশ ভাল। এটি উপরের কোডটি কেবলমাত্র একটি ছোটখাটো পরিবর্তনের সাথে গণনা করে (কোনও monadic , ২ য় চর নয়।) আপনি ডায়ালগের মতো সমস্ত বিক্রেতার সাইটগুলিতে ভাল এপিএল ডকুমেন্টেশন পেতে পারেন।
টোবিয়া

2

এবং একটি বাশ এন্ট্রি: 181 186 190 অক্ষর

for((y=-(r=$1,r/2*2);y<=r;y+=2));do for((x=-r;x<=r;++x));do((x*x+y*y<r*r))&&{((++n));echo -n '*';}||echo -n " ";((x<r))||echo;done;done;((s=1000,p=n*2*s/r/r,a=p/s,b=p%s));echo $a.$b

যেমন চালানো bash py.sh 13


2

পাইথন: 148 টি অক্ষর।

মূল পোস্টের জবাবে আমি যেমন উল্লেখ করেছি তেমনি নিয়মগুলির অপব্যবহার এবং পরীক্ষার কেসগুলিকে হার্ডকোড দেওয়ার ব্যর্থ (অর্থাত্ সংক্ষিপ্ত নয়) attempt আরও ভার্চুজের সাথে এটিকে গালি দেওয়া সহজ হতে পারে:

a=3.0,3.125,3.16
b="1","23","3677","47899"
r=input()
for i in b[r/3]+b[r/3][::-1]:q=1+2*int(i);print ' '*(int(b[r/3][-1])-int(i))+'*'*q
print a[r/5]

2

বিসি: 165 , 127 , 126 অক্ষর

পাইথন সংস্করণের উপর ভিত্তি করে।

r=read()
for(i=-1;r*2>i+=2;scale=6){n=sqrt(2*i*r-i*i)
scale=0
n=1+n/1*2
j=r-n/2
t+=2*n
while(j--)" "
while(n--)"*"
"
"}
t/r/r

(শেষ লাইনের পরে নতুন লাইন বাদ দেওয়া যায় না))


4
127 অক্ষর: আর = পঠন (); এর জন্য (i = 1; i <r * 2; স্কেল = 6) {n = স্কয়ার্ট (2 * আমি আর- আমি); স্কেল = 0; এন = 1 + এন / 1 * 2 ; i + = 2; জে = আরএন / 2; টি + = 2 * এন; যখন (জে) ""; যখন (এন -) "*"; ""}; টি / আর / আর
কার্লোস গুটিরিজ

এখানে একমাত্র সমস্যা হ'ল এটি এখন 0 এর জন্য ব্যর্থ হয় তবে বর্তমান নিয়ম অনুসারে এটি ঠিক আছে।
przemoc

2

জাভাস্ক্রিপ্ট (স্পাইডারমনকি) - ১১৮ টি অক্ষর

এই সংস্করণটি স্টিনের কাছ থেকে ইনপুট গ্রহণ করে এবং বোনাস পরীক্ষার ক্ষেত্রে পাস করে

r=readline()
for(t=0,i=-r;i<r;i++)if(i%2){for(s='',j=-r;j<r;j++){t+=q=i*i+j*j<r*r
s+=q?'*':' '}print(s)}print(t*2/r/r)

ব্যবহার: cat 10 | js thisfile.js - jsbin পূর্বরূপ মুদ্রণ / পঠনের জন্য একটি উপন্যাস যুক্ত করে যাতে আপনি ব্রাউজারে দেখতে পারেন

জাভাস্ক্রিপ্ট: 213 163


আপডেট হয়েছে

r=10;m=Math;a=Array;t=0;l=document;for(i=-r;i<r;i+=2){w=m.floor(m.sqrt(r*r-i*i)*2);t+=w*2;l.writeln(a(m.round(r-w/2)).join(' ')+a(w).join('*'));}l.writeln(t/(r*r))

কেউই বলেনি যে এটি ব্রাউজারে সঠিকভাবে রেন্ডার করতে হবে - কেবল আউটপুট। যেমন আমি প্রাক ট্যাগগুলি মুছে ফেলেছি এবং এটি আরও অনুকূলিত করেছি। আউটপুটটি দেখতে আপনাকে উত্পন্ন উত্সটি দেখতে হবে বা সে অনুযায়ী আপনার স্টাইলশীট সেট করতে হবে। পাই এইভাবে কম নির্ভুল, তবে এটি এখন অনুমান করা যায়।


r=10;m=Math;a=Array;t=0;s='';for(i=-r;i<r;i++){w=m.floor((m.sqrt(m.pow(r,2)-m.pow(i,2)))*2);t+=w;if(i%2){z=a(m.round(r-w/2)).join(' ')+a(w).join('*');s+=z+'\n';}}document.write('<pre>'+(s+(t/m.pow(r,2)))+'</pre>')

স্বাক্ষরিত:

r=10;
m=Math;
a=Array;
t=0;
s='';
for(i=-r;i<r;i++){
    w=m.floor((m.sqrt(m.pow(r,2)-m.pow(i,2)))*2);
    t+=w;
    if(i%2){
    z=a(m.round(r-w/2)).join(' ')+a(w).join('*');
    s+=z+'\n';
    }
}
document.write('<pre>'+(s+(t/m.pow(r,2)))+'</pre>');

1

জাভা: 234

class C{public static void main(String[] a){int x,y,s=0,r=Integer.parseInt(a[0]);for(y=1-r;y<r;y+=2){for(x=1-r;x<r;++x){boolean b=x*x+y*y<=r*r;s+=b?1:0;System.out.print(b?'*':' ');}System.out.println();}System.out.println(s*2d/r/r);}}

স্বাক্ষরিত:

class C{
    public static void main(String[] a){
        int x,y,s=0,r=Integer.parseInt(a[0]); 
        for(y=1-r;y<r;y+=2){
            for(x=1-r;x<r;++x) {
                boolean b=x*x+y*y<=r*r;
                s+=b?1:0;
                System.out.print(b?'*':' ');
            }
            System.out.println();
        }
        System.out.println(s*2d/r/r);
    }
}


1

GAWK: 136 , 132 , 126 , 125 অক্ষর

পাইথন সংস্করণের উপর ভিত্তি করে।

{r=$1
for(i=-1;r*2>i+=2;print""){n=1+int((2*i*r-i*i)**.5)*2
t+=2*n/r/r
printf"%*s",r-n/2,""
while(n--)printf"%c","*"}print t}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.