코드 골프-파이 데이
도전
문자를 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 가지 테스트 사례를 통과하는 모든 솔루션이 허용됩니다.
π의 근사치는 *
문자 수의 두 배를로 나누어 주어집니다 R²
.
근사값은 6 개 이상의 유효 숫자로 정확해야합니다.
선행 또는 후행 0은 그래서 예를 들어 어떤의 허용됩니다 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
DC : 88 및 93
93 94
96102105129138141 자
혹시라도 저는 OpenBSD와이 시점에서 이식 할 수없는 확장을 사용하고 있습니다.
93 자 이는 FORTRAN 솔루션과 동일한 공식을 기반으로합니다 (테스트 케이스와 약간 다른 결과). 모든 Y에 대해 X ^ 2 = R ^ 2-Y ^ 2 계산
[rdPr1-d0<p]sp1?dsMdd*sRd2%--
[dd*lRr-vddlMr-32rlpxRR42r2*lpxRRAP4*2+lN+sN2+dlM>y]
dsyx5klNlR/p
88 자 반복적 인 솔루션. 테스트 케이스와 일치합니다. 모든 X 및 Y에 대해 X ^ 2 + Y ^ 2 <= R ^ 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
C : 131 자
(Joey의 C ++ 솔루션 기반)
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-=n
홀수의 경우 지지체를 제거한다. 이것은 단지 130 문자 카운트를 감소)
원으로 :
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;}
XSLT 1.0
재미로 여기 XSLT 버전이 있습니다. 실제로 코드 골프 자료는 아니지만 이상한 기능의 XSLT 방식으로 문제를 해결합니다. :)
<?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 > @R]">
<xsl:variable name="next">
<!-- Go to next line.-->
<s R="{@R}" y="{@y+1}" x="{-@R}" area="{@area}"/>
</xsl:variable><!-- Print LF--> <xsl:apply-templates
select="msxsl:node-set($next)"/>
</xsl:template>
<!-- Are we done? -->
<xsl:template match="s[@y > @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 < @R*@R"/>
<!-- Print "*" or " "-->
<xsl:choose>
<xsl:when test="$inside">*</xsl:when>
<xsl:otherwise> </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
IE에서 다음 XML 파일을 엽니 다.
<?xml version="1.0"?>
<?xml-stylesheet href="pi.xslt" type="text/xsl" ?>
<R>
10
</R>
Perl, 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;
FORTRAN-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
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
파이썬 : 101 개
104
107
110
문자
Nicholas Riley의 다른 Python 버전을 기반으로합니다.
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에 대한 크레딧.
아, 홀수 번호는 중간이 0으로 색인되어 모든 것을 설명합니다.
보너스 Python : 115 자 (빠르게 함께 해킹 됨)
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
파워 쉘, 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
HyperTalk : 237 자
들여 쓰기가 필요하지도 계산되지도 않습니다. 명확성을 위해 추가되었습니다. 또한 HyperCard 2.2는 내가 사용한 ASCII가 아닌 관계 연산자를 허용합니다.
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
HyperCard 2.2는 stdin / stdout을 지원하지 않으므로 대신 함수가 제공됩니다.
C # :
209202201
자 :
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);
}
}
하스켈 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
홀수 처리 : 148 자 :
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 자 : (C 버전 기준)
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 자 :
main = do {r <-read`fmap`getLine; let {p = putStr; d = 2 / fromIntegral r ^ 2; lyn = let cmx = if x> r then p "\ n">> x 인 경우 m else 반환 * x + y * y <r * r then p "*">> c (m + d) (x + 1) else p "">> cm (x + 1) in if y> r then print n else cn (-r) >> = l (y + 2)}; l (1-r`mod`2-r) 0}
축소되지 않음 :
main = do r <-read`fmap` getLine let p = putStr d = 2 / fromIntegral r ^ 2 lyn =하자 cmx = if x> r 그런 다음 p "\ n">> m을 반환합니다. 그렇지 않으면 x * x + y * y <r * r 그런 다음 p "*">> c (m + d) (x + 1) 그렇지 않으면 p "">> cm (x + 1) y> r 인 경우 그런 다음 n을 인쇄하십시오. 그렇지 않으면 cn (-r) >> = l (y + 2) l (1-r`mod`2-r) 0
명령형 버전 중 일부를 이길 것으로 기대했지만이 시점에서 더 이상 압축 할 수없는 것 같습니다.
Ruby, 96 자
(Guffa의 C # 솔루션 기반) :
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('*')
PHP : 117
dev-null-dweller 기반
for($y=1-$r=$argv[1];$y<$r;$y+=2,print"\n")for($x=1-$r;$x<$r;$x++)echo$r*$r>$x*$x+$y*$y&&$s++?'*':' ';echo$s*2/$r/$r;
너희들은 너무 열심히 생각하고있다.
switch (r) {
case 1,2:
echo "*"; break;
case 3,4:
echo " ***\n*****\n ***"; break;
// etc.
}
J :
47
,
46
, 45
다른 솔루션과 동일한 기본 아이디어, 즉 r ^ 2 <= x ^ 2 + y ^ 2 이지만 J의 배열 지향 표기법은 표현식을 단순화합니다.
c=:({&' *',&":2*+/@,%#*#)@:>_2{.\|@j./~@i:@<:
당신은 다음과 같이 호출 것 c 2
또는 c 8
또는 c 10
등
보너스 : 49
예를 들어 13
, 홀수 입력을 처리하려면 단순히 출력의 다른 모든 행을 취하는 대신 홀수 값 x 좌표를 필터링해야합니다 (이제 인덱스는 짝수 또는 홀수에서 시작할 수 있기 때문입니다). 이 일반화 비용은 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
)
J Forums의 Marshall Lochbam에 의한 개선 및 일반화 .
Python : 118 자
Perl 버전의 매우 간단한 포트입니다.
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
C ++ : 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
더 적은 문자 를 사용하는 대신 std :: 사용)
여기의 출력은 원본 게시물의 테스트 케이스와 일치하지 않으므로 여기에 해당하는 것이 있습니다 (가독성을 위해 작성 됨). 참조 구현으로 간주하십시오 (Poita_가 마음에 들지 않는 경우).
#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';
}
C ++ : 168 자 (출력이 정확하다고 생각 함)
#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;}
PHP :
126132138
(Guffa C # 솔루션 기반)
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
에는 없을 수 있지만 error_reporting이 0으로 설정된 경우에만 가능합니다 (알림 출력이 원을 엉망으로 만듭니다).
루비 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
APL : 59
이 함수는 숫자를 받아 두 개의 예상 항목을 반환합니다. 보너스 케이스에서 올바르게 작동합니다.
{⍪(⊂' *'[1+m]),q÷⍨2×+/,m←(2|v)⌿(q←⍵*2)>v∘.+v←2*⍨⍵-⍳1+2×⍵-1}
Dialect는 Dyalog APL이며 기본 인덱스 출처입니다. 스킬 레벨은 단서 가 없는 초보자 이므로 APL 전문가가 10 자 이하로 낮추고 싶다면 내 손님이되어주세요!
Try APL 에서 온라인으로 시도 할 수 있습니다. 붙여넣고 그 뒤에 숫자를 입력하면됩니다.
{⍪(⊂' *'[1+m]),q÷⍨2×+/,m←(2|v)⌿(q←⍵*2)>v∘.+v←2*⍨⍵-⍳1+2×⍵-1} 13
*************
*******************
*********************
***********************
*************************
*************************
*************************
*************************
***********************
*********************
*******************
*************
2.98225
그리고 떠들썩한 항목 : 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
Python : 148 자.
원래 게시물에 대한 회신에서 언급했듯이 규칙을 악용하고 테스트 케이스를 하드 코딩하려는 시도가 실패했습니다 (즉, 충분히 짧지 않음). 좀 더 장황한 언어로 악용하는 것이 더 쉬웠을 것입니다.
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]
기원전 : 165 , 127 , 126 자
Python 버전을 기반으로합니다.
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
(마지막 줄 뒤의 새 줄은 여기서 생략 할 수 없습니다.)
JavaScript (SpiderMonkey)-118 자
이 버전은 stdin의 입력을 받아들이고 보너스 테스트 케이스를 통과합니다.
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 미리보기는 사용자가 브라우저에서보실 수 있습니다 인쇄 / readline에 별칭을 추가
자바 스크립트 :
(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))
아무도 브라우저에서 올바르게 렌더링해야한다고 말하지 않았습니다. 따라서 사전 태그를 제거하고 더 최적화했습니다. 출력을 보려면 생성 된 소스를 보거나 그에 따라 스타일 시트를 설정해야합니다. Pi는 이런 방식으로 덜 정확하지만 이제 사양에 맞습니다.
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>');
자바 : 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);
}
}
GAWK : 136 , 132 , 126 , 125 자
Python 버전을 기반으로합니다.
{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}
참고 URL : https://stackoverflow.com/questions/2440314/code-golf-%cf%80-day
'Programming' 카테고리의 다른 글
인수가있는 PHP array_filter (0) | 2020.08.25 |
---|---|
Safari 및 Chrome 데스크톱 브라우저에서 동영상 자동 재생이 작동하지 않습니다. (0) | 2020.08.25 |
포드 설치 오류 (0) | 2020.08.25 |
이 1988 C 코드의 문제점은 무엇입니까? (0) | 2020.08.25 |
Asp.NET Web API-405-이 페이지에 액세스하는 데 사용되는 HTTP 동사가 허용되지 않음-처리기 매핑 설정 방법 (0) | 2020.08.25 |