PowerShell, 420 바이트 (ayyyyyyyy) 378 바이트
param($n);[int[]]$p="03141592653589793238462643383279502884197169399375"-Split'';$a=@(0,3,4);for($i=3;$i-lt50;$i++){$a+=$a[$i-1]+$a[$i-2]};$c=[char[]]"00001010111010111010111011111010111110111010111011111011111010111110111";$b=@(0);for($i=4;$i-le70;$i++){if($c[$i]-eq'1'){$b+=$i}};[double]$r=$a[$n]/$b[$n];$q=$p[$n+1];$s="";(0..($q-1))|%{$s+="0"};([math]::Round($r,$q,[MidpointRounding]::AwayFromZero)).ToString("0.$s")
질문이 반올림되는 방식을 계산해 준 41 바이트를 절약 해 준 isaacg 에게 감사드립니다 . 내가 끔찍한 말을 포함 할 [MidpointRounding]::AwayFromZero
필요가없고으로 명시 적으로 캐스트 할 필요가 없었 음을 의미합니다 [double]
.
이것은 큰 재미이었다!
넓히는:
# Take input N
param($n)
# First digits of pi, stored as integer array
[int[]]$p="03141592653589793238462643383279502884197169399375"-Split''
# Fibonacci sequence A(N)
$a=@(0,3,4)
for($i=3;$i-lt50;$i++){
$a+=$a[$i-1]+$a[$i-2]
}
# Zero-indexed bitmask for if the n-th integer is composite (1) or not (0)
$c=[char[]]"00001010111010111010111011111010111110111010111011111011111010111110111"
# Populate B(N) as an array using the $c mask
$b=@(0)
for($i=4;$i-le70;$i++){
if($c[$i]-eq'1'){
$b+=$i
}
}
# Calculation Time!
$r=(a($n))/$b[$n]
# A small golf, as $p[$n+1] gets used a couple times
$q=$p[$n+1]
# Need to generate a string of zeroes for padding
$s=""
(0..($q-1))|%{$s+="0"}
# Round the number, then send it to a string so we get the necessary number of zeroes
([math]::Round($r,$q)).ToString("0.$s")
PowerShell의 재귀는 느리다. 우리는 말할 것이기 때문에 A(N)
다른 방향 을 만들어서 배열에 저장 한 다음 색인해야합니다.
낡은
또한 성스러운 소는 출력 요구 사항으로 인해 이것을 죽였습니다. PowerShell은 기본적으로 반올림-가장 가까운 a / k / 뱅커의 반올림 [MidpointRounding]::AwayFromZero
으로 설정 됩니다 . 이렇게 하면 장황한 스타일 을 전환하기 위해 매우 자세한 정보 를 사용해야합니다 . 게다가 우리는 후행 0을 채울 필요가 있습니다. 그 두 가지 요구 사항에서 라인의 마지막 몇 차례 결합하여 20 바이트 [math]::Round($r,$q)
에 102 바이트 (으로부터 $s=""
로 +$s)
와우 ...).
C(n)
숫자 를 말할 때 뒤에 0을 포함시켜야합니까?