모든 자릿수의 합계


38

이 과제는 1부터 주어진 숫자를 포함하여 정수 내의 모든 자릿수의 합계를 계산하는 프로그램이나 스크립트를 작성하는 것입니다.

입력, 하나의 양의 정수. 해당 숫자와 모든 작은 숫자의 자릿수 합계를 출력합니다.

예 :

Input: 5 
Integer Sequence: 1, 2, 3, 4, 5
Sum of Digits: 1 + 2 + 3 +4 + 5 = 15

Input: 12
Integer Sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 
Sum of Digits: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 1 + 0 + 1 + 1 + 1 + 2 = 51

분명히하기 위해 정수가 아닌 숫자 의 합계를 계산합니다 . 한 자리 입력의 경우에도 동일합니다. 그러나 10보다 큰 입력은 다른 응답을 갖습니다. 이것은 것입니다 잘못된 응답 :

Input: 12
Output: 78

차이점을 보여주는 또 다른 예 :

Input: 10

Integer Sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Sum of Integers (INCORRECT RESPONSE): 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55

Digit Sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0
Sum of Digits (CORRECT RESPONSE): 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 1 + 0 = 46

더 큰 테스트 사례 (CORRECT RESPONSE) :

Input: 1000000
Output: 27000001

규칙 및 지침 :

  • 제출 된 코드는 기능이 아니라 완전한 프로그램 또는 스크립트 여야합니다. 코드에 포함, 수입 등이 필요한 경우 게시 된 코드에 포함해야합니다.
  • 숫자는 하드 코딩되지 않은 사용자가 입력해야합니다. 입력은 명령 행 인수, 파일, stdin 또는 언어가 사용자 입력을 취할 수있는 다른 수단으로 수신 될 수 있습니다.
  • 코드는 적어도 입력을 올바르게 처리 할 수 ​​있어야합니다 (2^64)-1.
  • 코드는 합계 만 출력해야합니다.
  • 제출 된 프로그램 및 스크립트는 사용하기 쉽고 컴퓨터 리소스를 낭비하지 않아야합니다 (예 : 모든 문자를 담을 수있는 큰 배열을 선언해서는 안 됨). 이에 대한 엄격한 보너스 나 페널티는 없지만 훌륭한 프로그래머가 되십시오.

채점 :

기본 점수 매기기 메커니즘은 코드 길이입니다. 점수가 낮을수록 좋습니다. 다음 보너스 및 위약금도 적용됩니다 :

  • 코드가 모든 양수를 처리 할 수있는 경우 -25 보너스 :1234567891234567891234564789087414984894900000000
  • 예를 들어 코드에서 간단한 표현식을 처리 할 수있는 경우 -50 보너스55*96-12 . 이 보너스를 받으려면 코드에서 + - / *(더하기, 빼기, 나누기, 곱하기) 연산자를 처리하고 연산 순서를 시행해야합니다. 나눗셈은 정규 정수 나누기입니다.
    • 주어진 예제 ( 55*96-12)는로 평가됩니다 5268. 코드는 입력 중 하나에 대해 동일하게 반환해야합니다 81393. 정답은 입니다.
  • -10 보너스 코드에서 -50 보너스 받을 수 있고 ^(지수) 연산자를 처리 할 수 있는 경우 보너스 .
  • -100 보너스 코드의 -50 보너스 자격을 경우 사용하지 않는 eval또는 핸들 식 비슷합니다.
  • 코드가 웹 리소스에 의존하는 경우 +300 페널티

2
그리고 무엇을 55*96-12반환 해야 합니까?
ProgramFOX

1
5268 = 55 * 96-12, 5268 입력과 동일한 출력한다
ST3

3
보너스가 큰 측면에 약간있을 수 있습니다 :) 가장 큰 부정적인 점수에 경쟁이되고있는 것 같다
요아킴 이삭손

7
@ ST3 보너스없이이기는 것이 사실상 불가능하다면, 요구 사항을 충족 시키거나 가치를 낮추는 것이 거의 낫습니다.
Cruncher

3
이 도전은 "보너스"의 오래된 (그리고 끔찍한) 점수 인센티브를 사용하기 때문에 -1.
mbomb007

답변:


9

펄 6 : 108-(25 + 50 + 100) + 0 = -67 포인트

골프 솔루션 ( xfix의 훌륭한 솔루션을 기반으로 한 최종 라인 ) :

$!=get;for '*',&[*],'/',&[/],'+',&[+],'-',&[-] ->$s,&f{$!~~s:g[(\d+)$s(\d+){}]=f |@()}
say [+] (1..$!)».comb

골프 용 솔루션 :

my $expression = get;
for '*', &[*],
    '/', &[/],
    '+', &[+],
    '-', &[-]
-> $sym, &infix {
    $expression ~~ s:g[(\d+) $sym (\d+) {}] = infix($0, $1)
}
say [+] (1..$expression)».comb

평가 단계는 각각의 기호에 걸쳐 반복하는 방식으로 작동합니다 *, /, +, -, 두 정수 사이의 거짓말, 그리고 기능을 사용하여 기호가 나타내는 것을 대체 찾을 때.

더 자세하게 설명 +하자면, 각 기호 (예 :)와 표시해야 할 접두사 함수 (예 : &[+]&infix:<+>실행할 때 Perl 6에서 사용 하는 속기 및 동일한 함수 1 + 2)와 전역 대체 ( s:g[…] = …펄 5와 같은 )를 수행합니다. s/…/…/ge)는 기호 ( (\d+) $sym (\d+))로 구분 된 두 정수와 일치 하고 해당 정수 ( infix($0, $1))로 불리는 해당 infix 함수의 출력으로 대체합니다 .

마지막으로,이 평가 된 표현은에 들어가고 say [+] (1..$expression)».comb, xfix는 그의 솔루션에서 매우 잘 설명합니다 .

파티에 늦어서 미안해 ☺

편집 : 지수에 대한 지원이 제거되었습니다. 어쨌든 정확히 10 자였으며 올바르게 연관성을 나타내지 않았습니다.


대단하다. 나는 당신이 매우 간단한 파서를 만드는 방법을 좋아합니다-시도했지만 이것만큼 짧은 것을 만들지는 못했습니다. my $g당신 대신에 미리 선언 된 것을 사용하고 싶을 수도 있습니다 (나는 그것이 효과가 $!있다고 생각 하지만 테스트하지는 않았습니다).
Konrad Borowski 2014 년

@ xfix, 골프가 어떻게 도움이 될지 잘 모르겠습니다. 실제로 골프를 치는 방법이 있지만 아직 완전히 기능하지 않는 "infix : [$ var]"구문 my$g=get;for <* / + -> {$g~~s:g[(\d+)$^s(\d+){}]=infix:[$^s] |@()};say [+] (1..$g)».comb이 필요 합니다. 이는 88 자 또는 -97 점으로 점수가 내려갑니다
Mouq

오, $! '내'를 제거하는 데 도움이 될 것입니다! 감사합니다 @xfix
Mouq

14

매스 매 티카 30- (10 + 50) = -30

ybeltukov 덕분에 4 문자가 줄었습니다.

Range@n1에서 사이의 숫자를 반환합니다 n.

Integerdigits@n 각 숫자를 숫자로 나눕니다.

Total[n,2]숫자를 합산합니다. 2는 서로 다른 레벨, 즉 목록의 목록에 걸쳐 합산을 허용하는 것입니다.

IntegerDigits@Range@#~Total~2&

테스팅

IntegerDigits@Range@#~Total~2&[12]

51

IntegerDigits@Range@#~Total~2 &[1000000]

27000001


표현

IntegerDigits@Range@#~Total~2 &[55*96 - 12]

55*96 - 12

81393
5268

IntegerDigits@Range@#~Total~2 &[5268]

81393


IntegerDigits@Range@#~Total~2 &[55*96^2 - 12]
55*96^2 - 12

12396621
506868

IntegerDigits@Range@#~Total~2 &[506868]

12396621


모든 브라우니 포인트를 얻으려면 유효한 인수에 대한 정보를 추가해야합니다. :
Yves Klett

1
eval을 사용하지 않는 것을 고려할 것인지 모르겠습니다
Cruncher

3
다시 : Mathematica의 평가. 프론트 엔드가 항상 수학을 자동으로 해결하려고 시도 하는 상징적 언어입니다 . 코드가 추가되지 않도록 추가 코드 (Hold [])를 추가해야합니다.
Michael Stern

1
Tr@Flatten로 줄일 수 있습니다 Total[...,2]: IntegerDigits@Range@#~Total~2&.
ybeltukov

1
임의로 큰 int를 처리하고 다른 -25를받을 자격이 없습니까?
aka.nice

12

C : 150 (138) - (100 + 50) = -12

a,b,c;main(d){for(scanf("%d ",&a);~scanf("%c%d ",&d,&b);a=d^43?d%5?d%2?a/b:a*b:a-b:a+b);for(;a;)for(b=a--;b;b/=10)c+=b%10;printf("%d",c);}

https://codegolf.stackexchange.com/a/11423/13877 식 평가를 수행하기 위해 @Fors의 답변을 여기에서 매우 부끄럽게 훔칩니다.

샘플 사용법 :

./a.exe <<< "5 + 7"
51

참고 : 식 구현은 연산자 우선 순위를 가정하지 않으며 값을받을 때 값을 소비합니다. 예, 1+2*3 = 9오히려 일반적인 것보다 7.


1
이것은 연산자 우선 순위를 다루지 않지만 표준 연산자 우선 순위를 적용 해야하는지 여부를 지정하지 않습니다 ... ping @ ST3, 아마도 명확해야합니다. 어쨌든, 아마도 대답에 언급되어 있어야합니다.
FireFly

@FireFly이 사실을 반영하기 위해 답변을 수정했습니다.
Josh

@Josh-2 ^ 64-5에 대한 답변을 입력하십시오
SergeyS

10

sed, 411 283-25 = 258

지금 당장 더 골프를 치고 싶지 않아요. :-) 원격으로 큰 정수로도 사용하지 않는 것이 좋지만 기술적 으로는 임의로 큰 정수를 처리 할 수 ​​있습니다. 단항).

s/$/x0123456789/
:l
/9$/H
:b
s/(.)(y*x\1)/y\2/
/(.)y*x\1/b b
s/(.)([xy].*)(.)\1/\3\2\3\1/
:c
s/y(.*(.))/\2\1/
/y/b c
/0$/b f
/^0*x.*9$/!b l
x
s/x[^\n]*\n//g
:d
s/(.)(.*x.*(.)\1)/z\3\2/
/[^z0]x/b d
s/0|x.*|\n//g
H;x
s/./0/g
s/$/x9876543210/
x
:e
x
b l
:f
x
s/.//
/./b e
x
s/^0+|x.*//g

샘플 사용

(읽기 쉽도록 입력 줄이 들여 쓰기되었습니다.)

  5
15
  12
51
  33
183

8

파이썬, 55- (50 + 25 + 10) = -30

비효율적이지만 더 짧고 식을 처리 할 수 ​​있습니다.

편집 : 트릭을 주셔서 감사합니다 WolframhlegoStormtroopr : D

s,t=0,input()
while t:s+=sum(map(int,`t`));t-=1
print s

파이썬, 149- (25 + 50 + 10) = 64

내 첫 번째 버전

def d(n):
 if n/10==0:return n*(n+1)/2
 c,t=0,n
 while t/10:c,t=c+1,t/10
 p=10**c;m=n%p
 return d(m)+t*(m+1)+p*t*(t-1)/2+p*c*t*45/10
print d(input())

입력:

1234567891234567891234564789087414984894900000000

산출:

265889343871444899381999757086453238874482500000214

xrange솔루션을 실행할 때 오버플로 오류가 발생 합니다1234567891234567891234564789087414984894900000000
Josh

1
@Josh 님을 제거했습니다 xrange: D
Wasi

2
몇 가지 힌트 : 당신은 대체 할 수 있습니다 eval(raw_input())input(). while루프는 수 while t:s+=sum(map(int,t ));t-=1.
복원 상태 Monica

2
당신은 사용하여이 단축 될 수 있습니다 input()대신 eval(raw_input())으로, input이미 eval표현이야! 이 방법은 전원 심볼에 대한 -10 binus 얻을 수 있습니다 사용하지 않는위한 -100 보너스를 eval!

규칙 말 @LegoStormtroopr eval유사한 , 그래서 -100 카운트하지 않을 생각
SztupY

8

파이썬-108 문자-85 보너스, 23 스트로크, 매우 큰 입력 처리

이러한 솔루션의 대부분은 입력보다 적은 모든 정수를 루핑하고 모든 숫자 합계를 합산하는 것처럼 보입니다. 이것은 효과가 있지만 우아하지 않다고 생각하며 1234567891234567891234564789087414984894900000000평생 입력을 처리 할 수 ​​없다고 생각하기 때문에 25 포인트 보너스를받을 수 있는지 여부에 의문을 제기합니다 . 실제로 n숫자를 입력 할 O(10^n)때 이러한 솔루션은 시간 이 걸립니다. 대신이 문제에 수학을 던지기로했습니다.

#Returns the sum of all digits in all x-digit numbers
def f(x):
    return x*(10**(x-1))*45

#Returns the sum of all numbers up to x
def g(x):
    return x*(x+1)/2

#Solves the problem quickly
def magic(x):
    digits = [int(y) for y in list(str(x))]
    digits.reverse()
    total = 0

    for (sig, val) in enumerate(digits):
        total += (10**sig)*g(val-1) + val*f(sig) + val + (val*10**sig)*sum(digits[sig+1:])
    return int(total)

모든 x자릿수 세트는 세트와 동형입니다 {0,1,2,3,4,5,6,7,8,9}^x. A는 고정을 위해 (n,sig)거기에 x다른 값 sig, 10^x-1요점 sig행 번째 인덱스 세트는 n모든 숫자의 합 0-9이 모두에 의해 처리된다 (45)이다 f.

g 우리 모두에게 친숙 할 것입니다

magic입력 번호의 모든 자릿수를 취하여 최소에서 최대로 반복합니다. 예제 입력으로이를 추적하는 것이 가장 쉽습니다 (예 :) 1,234,567.

범위를 처리하기 위해 1,234,567-1,234,560, 우리는 모든 숫자를 추가해야 1하는 7, 그리고에 추가 7시간보다 큰 모든 숫자를 다루는 다른 숫자의 합을, 1,234,560. 이제 나머지를 처리해야합니다.

범위를 처리하기 위해 ( )를 1,234,560-1,234,500더하고 상한을로 떨어 뜨립니다 . 드롭의 나머지 부분을 만들 때 모든 한 자리 숫자가 6 번 표시됩니다 ( ). 우리는 모든 숫자 를 정확히 각 시간 ( ) 까지 볼 수 있습니다 . 이 숫자의 다른 모든 숫자는 정확히 60 번 ( ) 표시됩니다. 우리는 이제보다 큰 모든 숫자를 다루었습니다 . 모든 의미에 동일한 논리가 귀납적으로 적용됩니다.6val1,234,559val*f(sig)0510(10**sig)*g(val-1)(val*10**sig)*sum(digits[sig+1:])1,234,500

WolframH 덕분에 이것을 골프화하면이 솔루션을

d=map(int,str(input()))
print sum(v*(10**s*((v-1)/2+sum(d[:~s]))-~s*9*10**s/2)for s,v in enumerate(d[::-1]))

그리고 모든 정수의 자릿수 합계의 합 1234567891234567891234564789087414984894900000000265889343871444927857379407666265810009829069029376

골프 버전에서 던질 수 있었던 가장 큰 숫자는 10 ^ 300입니다.이 시점에서 수레가 넘치기 시작하고 숫자 불안정으로 인해 문제가 발생하기 시작합니다. 빠른 제곱 및 곱셈 지수 함수를 사용하면이 문제가 사라집니다.

그리고 LaTeX 지원은 정말 유용 할 것입니다 ...


좋은. 나는 얼마 전에 수학 으로이 문제를 공격하려고했지만 멈췄습니다. 나중에 신중하게 살펴보고 작동 방식에 대해 생각해야합니다.
FireFly

좋은 대답입니다! 입력 한 값이 1000000 인 경우와 비슷합니다.
ST3

1
수학 사용시 +1 그러나 2.65889343871e+50실제 솔루션의 부동 소수점 근사치 인을 얻습니다 . 당신이 준 코드가 int(t)아닌 인쇄 된 것 같습니다 t. 그건 틀렸어. 실제 솔루션은 265889343871444899381999757086453238874482500000214입니다. 플로트를 사용하지 마십시오 . 즉 **(x-1)더 짧은 것으로 교체하십시오 **x/10.
복구 상태 Monica

1
조금 더 골프를칩니다. 필요한 유일한 글로벌은 d(두 번 사용되기 때문에) 분명합니다 . 다른 사람을 제거하고 일부 트릭을 사용하면 d=map(int,str(input()))\nprint sum(v*(10**s*((v-1)/2+sum(d[:~s]))-~s*9*10**s/2)for s,v in enumerate(d[::-1]))(108 자)에 도달합니다 . 모든 크기의 입력 (예 :)에서 잘 작동합니다 int("1"*1000).
복원 상태 Monica

1
@ymbritt 10**-10.1이고 거기서부터 모든 것이 수레로 변합니다. 1/10이다 0(정수 부문), 모든 것이있을 수 int들.
복원 상태 Monica

8

TI-BASIC, 137-(50 + 10 + 100) = -23

Input A:Disp cumSum(randIntNoRep(1,A))→L₁:"?:For(A,1,dim(L₁:Ans+sub("ABCDEFGHIJKLMNOPQRSTUVWXYZ",L₁(A),1:End:Disp sub(Ans,2,length(Ans)-1

입력은 숫자를 처리 1E100하고 자동으로 평가합니다. 식을 처리 할 수 ​​있습니다.

그것은 엄청나게 큰 배열이지만 컴퓨터 리소스를 낭비하지 않습니다 (이것은 계산기 에서 실행 됩니다 ).


1
이 질문에 대한 가장 좋은 대답은 생각합니다. 계산기 언어를 사용하여 숫자를 더하기위한 코드 골프 답변을 작성합니다. 너무 멋져요!
Malachi

1
@Malachi 항상 말했듯이, 코드 골프 = 수학 일 때 계산기를 꺼내야 할 때입니다.
Timtech

2
9E99까지의 숫자를 허용 한 내 버전은 분명히 충분하지 않으므로 그 보너스를 셀 수 있다고 생각하지 않습니다. 또한 Carraher의 Mathematica 답변에 따라 입력을 "eval 포함"으로 계산해야합니다.
FireFly

1
FireFly에 동의하지 않으면 보너스를 사용 eval하지 않아야합니다.
ST3

3
계산기는 어떻게 컴퓨터가 아닌가?
David Conrad

6

스칼라 66

println((1 to readLine().toInt).flatMap(x=>(x+"").map(_-'0')).sum)

6

C, 77 74

n,v,i;main(){scanf("%d",&n);for(;i||(i=n--);i/=10)v+=i%10;printf("%d",v);}

C, 150 = 99

다음은 기술적으로 "임의"양의 정수에 대해 25 보너스를 받을 수있는 대체 버전 이지만 알고리즘이 입력에서 선형 시간이므로 비현실적으로 느립니다. 어쨌든, 쓰는 것은 재미있었습니다. ASCII 문자로 읽은 숫자를 수동으로 뺍니다. 이 버전은 150 자입니다. (이제 끔찍하고 논쟁을 불러 일으키는 루프 코드로!)

n,v;main(int n,char**a){char*p;do{for(p=a[1];*p>47;p++)v+=*p-48;for(;*--p==48;)*p=57;
p[0]--;}while(p>=a[1]);printf("%d",v);}

씨, 229224- (50 + 100) = 74

표현 처리 변형. 일반적인 규칙에 따라 연산자 우선 순위를 구현합니다 / * - +. 97 개의 토큰 = 48 개의 용어로 제한됩니다.

#define F(X,Y)for(q=n+1;q+1!=p;)*q-X?q+=2:(q[-1]Y##=q[1],memmove(q,q+2,(p-q)*4))
n[99],*p,*q,v,i;main(){for(p=n;~scanf("%d%c",p,p+1);)p+=2;F('/',/);F('*',*);
F('-',-);F('+',+);for(;i||(i=n[0]--);i/=10)v+=i%10;printf("%d",v);}

모든 양의 정수는 99 자리 숫자보다 더 길게 처리해야 함을 의미합니다.
ST3

내장 숫자보다 큰 숫자에서 작동하는 @Firefly cool 알고리즘!
Josh

5

GolfScript 18-50 = -32

~),{`+}*' '*~]{+}*

입력이 "12"라고 가정하십시오.

~), # turn input into integer, increment, and then turn into an array of all numbers less than or equal to input.  

스택은 [0,1,2,3,...,12]입니다.

{`+}* # fold string concatenation across the array

스택은 "01234...9101112"입니다.

' '* # join a space between all characters

스택은 "0 1 2 ... 1 0 1 1 1 2"입니다.

~] # evaluate the stack into an array.  No `[` is necessary since the stack is otherwise empty.

스택은 [0,1,2,...,9,1,0,1,1,1,2]입니다.

{+}* # fold addition across the new array

원하는대로 스택은 51입니다.

여기에 입력은 지수를 포함 할 수있는 유효한 GolfScript 표현식 일 수 있습니다. 예를 들면 다음과 같습니다.

echo "5 5 + 2 * 8 -" | ruby golfscript.rb h.gs
-> 51

이후 2(5 + 5) - 8 = 12. 나는 이것이 보너스를받을 자격이 있다고 생각하지만 아마도 GolfScript의 역 폴란드 표기법이 아닌 정상적인 형태 일 경우에만 예상되었을 것입니다.


^또한 지원합니까 ?
SztupY

이것은 GolfScript 구문에서의 지수화를 지원합니다.?
Ben Reich

프로그램을 지원해야하기 때문에 당신은 보너스 (10)를 얻을하지 않습니다 ^,하지 ?또는 pow등을
ST3

@ ST3 당신이 원하는대로!
Ben Reich

4

루비, 37-50 = -13

하늘을 가로 질러 두 배의 평가! 다른 Ruby 솔루션과 마찬가지로 이론적으로는 임의로 많은 수의 작업을 수행 할 수 있어야하지만 실행 시간은 ... 심할 것입니다.

p eval [*1..eval(gets)].join.chars*?+

구버전 (49-50 점수)

p"#{[*1..eval(gets)]}".chars.map(&:to_i).inject:+

10 개의 문자 보너스가 실제로는 지수에 대한 문자가 캐럿이어야한다고 가정하면, 내가 추가 할 수있는 가장 짧은 방법은 다음과 같습니다.

.gsub ?^,'**'

보너스보다 많은 캐릭터가 필요합니다.


몇 개의 문자를 제거 할 수 있습니다.p"#{[*1..eval(gets)]}".chars.map(&:to_i).inject :+
SztupY

@SztupY 좋은 전화 감사합니다! 나는 &골프에서 거의 사용하지 않습니다 . 사실, 당신은 사이의 공간이 필요하지 않습니다 inject:+중.
Paul Prestidge

4

Perl 6 (28-75 + 0 = -47 바이트)

say [+] (1..get.eval)».comb

모든 양수를 처리 할 수 ​​있습니다 (그러나 현재 Perl 6 구현은 느리지 만 Perl 6은 기본적으로 큰 정수를 지원하기 때문에 큰 숫자는 시간이 오래 걸립니다). 그것은 사용하는 eval간단한 계산기를 구현하기 위해, (쉰 개 문자 다섯 명 문자 처벌 가치가있다). 현재 구현이 느리기 때문에 속도가 느리지 만 이론적으로는 (Perl 6 구현이 개선 될 때) 충분히 빠릅니다. 또한, 놀랍게도, 나는 Mathematica와 함께 이겼습니다 (현재).

» 이 코드에서는 실제로 필요하지 않지만 성능상의 이유로 여기에 넣습니다 (그렇지 않으면 프로그램이 전체 문자열을 할당합니다. 여기에있는 이유는 Perl 6에 무한 문자열이 없지만 무한 목록이 있기 때문입니다.

어쨌든이 코드의 작동 방식을 물어볼 수 있습니다. 글쎄, 나는 그것을 부분적으로 전달할 것입니다.

  • get.eval

    이것은 한 줄 ( get함수)을 얻고 그것을 평가합니다 ( eval방법).

  • 1..get.eval

    그 후, Perl 6은 1평가 된 값 까지 범위 객체를 준비 합니다. 이것은 범위이므로 어떤 것도 할당되지 않습니다.

  • ».comb

    .comb메소드는 문자열을 문자로 분할합니다 ( 인수와 함께 호출되지 않은 경우 ). 예를 'cat'.comb들어을 반환합니다 'c', 'a', 't'. »목록 요소를 매핑하므로 .comb목록 자체뿐만 아니라 모든 항목에서 실행됩니다 (예 : (4, 9)».sqrtgives 2, 3). Perl 6에는 무한리스트 (예 : Haskell 등)가 있기 때문에 필요 이상으로 할당되지 않습니다.

    »문자는 실제로 필요 .comb하지는 않지만 목록에서 직접 사용할 수 있지만 암시 적 문자열 강제가 필요합니다 (Perl 6에는 무한 문자열이 없으므로 메모리가 낭비됩니다). 예를 들어 1, 2, 3문자열로 변환 한 후 list는을 반환합니다 1 2 3. Perl 6의 경우 공백은 0을 의미하는 완벽하게 훌륭한 숫자이므로 이러한 변환에서도 코드가 작동합니다. 그러나 컴퓨팅 리소스를 남용 할 수 있습니다.

  • [+]

    이것은 감소 연산자입니다. 기본적으로 사이 []에 연산자를 사용할 수 있습니다 (이 경우) +. 연산자를 감소 후의리스트 정도로 감소되고 [+] 1, 2, 3있다 1 + 2 + 36. Perl 6은 숫자와 문자열에 별도의 연산자를 사용하므로 연결로 간주되지 않습니다.

  • say

    마지막으로 say결과를 출력합니다. 결국, 당신은 최종 결과를보고 싶어합니까?


흠 ... [+] 1,2,3,4,5,6,7,8,9,10입니다 1+2+3+4+5+6+7+8+9+10, 내가 맞다?
ST3

@ ST3 : 그렇습니다. Perl 6에서는 Reduce 연산자를 여러 가지 흥미로운 방식으로 사용할 수 있습니다. 예를 들어 >체인을 연결할 수 있으므로 3 > 2 > 1사실입니다. 같은 속성 때문에, 연산자를 줄이기 위해 적용 [>] 3, 2, 1뜻으로, 여전히 사실이다 3 > 2 > 1- [>]숫자 내림차순 있는지 확인하는 데 사용할 수 있습니다.
Konrad Borowski

get.Int대신 사용할 수 eval없습니까? 수학식이 필요합니까?
Ven

@ user1737909 : "코드가 간단한 표현식을 처리 할 수있는 경우 보너스 50". 또한 Perl 6은 디자인에 의한 캐스팅이 필요하지 않습니다 ( sort비교 방법 인수가없는 것처럼 드문 경우는 거의 없습니다 ).
Konrad Borowski


3

J, 22

([:+/[:"."0[:":>:@:i.)

설명

평가는 오른쪽에서 왼쪽으로 진행됩니다.

i. n -> 0 1 2...n-1

>: n -> n+1

": numbers -> 'numbers'

"."0 -> (on each scalar item) apply ". -> '123' -> 1 2 3

+/ -> sum

Downvoter는이 답변에 대한 반대 의견을 설명해야합니다. 방금 시도했지만 보너스를 얻지 못하지만 볼 수있는 한 잘 작동합니다.
Gareth

실제로, 최고의 답변을 보았을 때, 이것은 22-60 = -38의 점수로 표현과 파워 오퍼레이터 보너스를 얻는 것 같습니다.
Gareth

이것은 +/,10#.inv>:i.더 짧을 것입니다. 그러나 OP가 요청 한대로 여전히 기능이며 완전한 프로그램이 아닙니다.
swish

@Gareth Bonuss는이 답변에 적용되지 않습니다. 입력이 아닌 코드 안에 식을 작성하기 때문입니다.
swish

1
@swish 처음에 생각했지만 Mathematica의 대답은 다음과 같이 작동합니다.
Gareth

3

R, 64-(50 + 10) = 4

sum(utf8ToInt(paste(0:eval(parse(t=scan(,""))),collapse=""))-48)

이를 실행하면 사용자에게 입력을 요청합니다.


이전 버전 (표현식을 처리 할 수 ​​없음) : 46 자 :

sum(utf8ToInt(paste(0:scan(),collapse=""))-48)

codegolf는 단일 기호 기능을 가진 언어에 대해 심각하게 편향되어 있습니다. 우리가 미리 정의하면이 솔루션은 상당히 짧을 것입니다u<-function(x) utf8ToInt(x) 등 습니다.
Carl Witthoft

@CarlWitthoft 사실입니다. 그러나 사전 정의도 문자 수에 포함됩니다. 그건 그렇고 : u <- utf8ToInt없이는 충분합니다.function . 함수가 여러 번 사용되는 경우 코드 골프에 도움이 될 수 있습니다.
Sven Hohenstein

그래서 내가 Rcheatcodegolf패키지를 패키지에서 사전 정의 된 기능을 사용하는 것이 합법적입니까? :-)
Carl Witthoft

@CarlWitthoft 예, 패키지를 사용할 수 있습니다. 물론, 작업을 위해 패키지를 작성해서는 안됩니다. 그러나 함수의 짧은 이름 만 포함하면 괜찮습니다.
Sven Hohenstein

3

배치-(181-50)-131

약간의 재미.

@set/av=%1
@setLocal enableDelayedExpansion&for /L %%a in (1,1,%v%)do @set a=%%a&powershell "&{'%%a'.length-1}">f&set/pb=<f&for /L %%c in (0,1,!b!)do @set/as+=!a:~%%c,1!
@echo !s!

좀 더 읽기 쉽게 만들겠습니다.

@set /a v=%1
setLocal enableDelayedExpansion
for /L %%a in (1,1,%v%) do (
    @set a=%%a
    powershell "&{'%%a'.length-1}">f
    set /p b=<f
    for /L %%c in (0,1,!b!) do @set /a s+=!a:~%%c,1!
)
@echo !s!

이전 방법은 파일에 쓰고 읽는 것과 반대로 for 루프를 사용하여 powershell 명령의 출력을 얻습니다.

@set /a v=%1
@setLocal enableDelayedExpansion&for /L %%a in (1,1,%v%)do @set a=%%a&for /F usebackq %%b in (`powershell "&{'%%a'.length-1}"`)do @for /L %%c in (0,1,%%b)do @set /a s+=!a:~%%c,1!
@echo !s!

입력을 변수로 설정하십시오 v.-를 사용 /a하여 산술 표현식을 승인하십시오.
불행하게도 확장 지연을 가능하게해야했습니다.
for 루프를 사용하여 1부터 입력 된 값까지 계산 v합니다.
9보다 큰 숫자를 처리하려면 powershell을 사용하여 문자열의 길이를 얻은 다음 다른 for 루프를 사용하여 해당 문자열을 분할하고 - s.
당신은 의 이름을 변경 powershell.exe하는 p.exeC에서 : \ WINDOWS \ SYSTEM32는 \의 WindowsPowerShell \ V1.0 \ 그럼 그냥 그것을 호출 p "&{'%%a'.length-1}9 바이트를 저장. 그러나 그것은 실제로 그 정신에 있지 않습니다.

H:\>sumof.bat 12
51
H:\>sumOf.bat (55*96-12)
81393

점심을 먹으면서 두 번째를 떠났습니다.

속도가 느리기 때문에 이보다 너무 큰 숫자로는 실제로 테스트 할 수 없습니다 . 그러나 상당히 많은 수의 경우 작동합니다. 2147483647다음과 같은 오류가 발생하기 전에 가장 큰 수 (최대 32 비트 정수)입니다.

H:\>sumOf.bat 2147483648
Invalid number.  Numbers are limited to 32-bits of precision.

물론 이것은 도전에서 나를 실격시킵니다.


1
좋은 해결책! 골프를 치는 몇 가지 방법이 있습니다. 1. 임시 변수를 제거 v하고 %1직접 사용할 수 있습니다. 2. 긴 시간 @set /a b=%%b-1이 아닌 PowerShell 스크립트에서 1을 빼면 무리를 줄일 수 있습니다. 이러한 변경 사항으로 인해 원래 240에서 211로 줄었습니다. :-)
Mark

죄송합니다. 이제 왜 보너스 포인트에 대한 임시 변수를 유지했는지 알 수 있습니다. PowerShell 팁은 여전히 ​​유효합니다.
Mark

잘 발견되었습니다. 감사합니다. 지금 바꾸겠습니다.
unclemeat

배치가 작동하지 않습니다. (2 ^ 31) -1 (부호있는 32 비트 정수)로 제한됩니다. 이 문제를 해결하려면 최대 (2 ^ 64) -1까지의 입력 처리가 필요합니다 (부호없는 64 비트 정수이지만 해당 값의 출력이 오버플로합니다). 여기서 PowerShell은 고유 한 이점이 있습니다. [decimal]유형에 따라 (2 ^ 96) -1까지의 값이 허용됩니다.
Iszi

1
그래도 Batch는 정수 나누기를 기본값으로하는 것에 대한 좋은 신용을 줄 것입니다. 그것은 PowerShell이 ​​완전히 누락 된 것입니다.
Iszi

3

Dyalog APL , 9 – 160 * = -151

+/⍎¨∊⍕¨⍳⎕

온라인으로 사용해보십시오!

평가를 받다
 예 : "7+5"제공12

지수 1 ... n
[1,2,3,4,5,6,7,8,9,10,12]

⍕¨ 각 숫자를 문자열로 형식화
["1","2","3","4","5","6","7","8","9","10","11","12"]

입대하다
"123456789101112"

⍎¨ 각 문자를 실행합니다 (한 자릿수 숫자 목록을 나타냅니다).
[1,2,3,4,5,6,7,8,9,1,0,1,1,1,2]

+/ 합집합  51


* 득점

식을 입력으로 받아들이 기 때문에 -50 보너스. 표현식은 유효한 APL이어야하며 OP에 따라 허용됩니다. .

-10 보너스는 ^(* PLP에서) .

식 입력은 명시 적으로 사용하지 않고 eval(즉 , APL에서) 처리되므로 -100 보너스 .


여기에 -100 보너스가 추가 되었습니까? 이 상태 때문에 " -100 보너스 -50 보너스에 대한 코드의 자격 및 사용하지 않는 경우 eval 또는 유사한 핸들 식으로. "때문에 ⍎¨하나 각 문자 하나를 실행하는 것, 그것은 (좀 평가 후면과 동일합니다는 문자를 실행 제외 한 번에 하나씩 대신하는 것 eval).
Kevin Cruijssen

@KevinCruijssen 예, 식을 처리하기 위해 eval 또는 이와 유사한 것을 사용하지 않습니다 . ⍎¨식을 처리하지 않고 숫자를 정수로 변환하는 데만 사용됩니다.
Adám

아 잠깐만, 나는 당신의 설명을 잘못 보았습니다. 그러나 입력 + 평가 기가 내장되어 있지 않습니까, 아니면식이 입력 될 때 항상 평가가 암시 적으로 수행됩니까?
Kevin Cruijssen

1
@KevinCruijssen은 항상 표현식을 입력으로 받아 평가하고 결과를 반환합니다. 따라서 문자열을 입력하려면 따옴표를 묶어야합니다. 관련 내장 ( )이 입력을 원시 텍스트로 반환 한다는 사실은 중요하지 않습니다 (특히 기호 가 기본 입력 방법 임을 나타내며 특수 변형 임). 그렇지 않으면 보너스를 얻으려면 수학을 구현해야합니다 평가자-주 작업과는 완전히 다른 작업입니다. 나는 보너스를 좋아하지 않으며 -100은 어리 석거나 APL을 염두에두고 있지만 imho는 보너스에 정확히 맞는 것처럼 보입니다.
Adám

경우 실제로 입력을 얻기의 일반적인 방법이며, 자동으로 식을 처리, 난 정말 그것이 나에서 +1, 그래서뿐만 아니라 보너스에 맞게 참조하십시오. 어쨌든 보너스는 어리석지 만 점수를 최소화하기 위해 보너스를 활용하는 좋은 방법입니다.
Kevin Cruijssen

2

C # (161)

using C=System.Console;using System.Linq;class X{static void Main(){C.WriteLine(Enumerable.Range(1,int.Parse(C.ReadLine())).SelectMany(i=>i+"").Sum(c=>c-48));}}

예쁜

using C = System.Console;
using System.Linq;

class X
{
    static void Main()
    {
        C.WriteLine(
            Enumerable.Range(1, int.Parse(C.ReadLine()))
                .SelectMany(i => i + "")
                .Sum(c => c - 48)
            );
    }
}

2

Python3 + Bash (78-185 = -107)

python3 -c"print(sum(sum(map(int,str(x+1)))for x in range(int(${1//^/**}))))"
  • 모든 양수를 처리 할 수 ​​있습니다
  • +-/ * 연산으로 표현식을 처리 할 수 ​​있습니다
  • ^ (전원) 연산자를 처리 할 수 ​​있습니다.
  • eval 또는 이와 유사한 방식없이 표현식을 처리 할 수 ​​있습니다 ¹

expression의 결과가 정수가 아닌 경우 먼저 잘립니다. 표현식 결과가 음수이면 결과가 정의되지 않습니다.

다음과 같이 사용하십시오.

bash golf.sh "12 + (42 / 3 + 3^4)"

1 : Bash에서 Python을 호출하는 것을 제외하고는 그렇지 않다고 생각합니다. 실제로 있다고 생각되면 조정 점수는 -7입니다.


식 평가기를 쓰지 않았다면 eval과 동등한 것을 사용하고 있다고 말할 수 있습니다. 그러나 나는 OP가 아니므로 행운을 빕니다!
Tobia

@Tobia에 동의하십시오. 평가자에게는 보너스가 없습니다.
ST3

2

자바, 254

class T
{
    public static void main(String[] a)
    {
        long target = 10, count = 0;
        String[] digits = new String[50];
        for (long i = 1; i <= target; i++)
        {
            digits = String.valueOf(i).split("(?!^)");
            for (int j = 0; j < digits.length; j++)
                if (digits.length > j)
                    count += Integer.parseInt(digits[j]);
        }
        System.out.println(count);
    }
}

식을 처리합니다. 원하는 표현을 목표로 지정하십시오. 길이가 길어질 때까지 처리합니다. 모든 공백을 한 줄로 정리하고 인쇄 할 명령문을 정리하지 않으면 254 자로 계산됩니다 (긴 단어 기반 Java 프로그래밍을 고려할 때).

추신 : 이것은 논리뿐만 아니라 완전한 프로그램입니다. 논리뿐만 아니라 프로그램에 주어진 단어 수.


2

자바 (JDK8), 272

내 첫 도전은, 제안은 환영합니다 =)

import java.util.*;import java.util.stream.*;class C{public static void main(String[]a){System.out.print(Arrays.asList(IntStream.range(1,new Integer(a[0])).mapToObj(s->s+"").collect(Collectors.joining()).split("")).stream().map(Integer::valueOf).reduce(0,Integer::sum));}}

들여 쓰기 :

import java.util.*;
import java.util.stream.*;

class C {

   public static void main(String[] a) {
     System.out.print(Arrays.asList(IntStream.range(1,new Integer(a[0]))
            .mapToObj(s->s+"")
            .collect(Collectors.joining())
            .split(""))
            .stream()
            .map(Integer::valueOf)
            .reduce(0,Integer::sum));
  }
}

Java에서 골프 코드 도전을하는 모든 사람이 자격이 있기 때문에 +1하지만 골프를하는 동안 Stream API를 사용하면 이점을 얻지 못하는 것처럼 보입니다. 솔루션을 다시 작성하고 루프 대신 스트림을 사용하면 더 짧아집니다.
user902383

2

CJam, 9-25 = -16

CJam은이 도전보다 몇 개월 어려서 녹색 확인 표시를받을 수 없습니다. 또한, 이것은 처음부터 Perl을 꺾지 않습니다. ;) 나는 접근법을 아주 좋아했기 때문에 어쨌든 게시하고 싶었다.

l~),s:~:+

여기에서 테스트하십시오.

아이디어는 0에서 N 사이의 범위를 작성하는 것입니다.이 범위는 문자열로 변환되어 정수를 연속적으로 연결합니다. N = 12 인 경우

"0123456789101112"

그런 다음 각 문자는 :~(정수 배열을 포함하여) 정수로 변환 된 다음으로 요약됩니다 :+. CJam은 임의로 큰 정수를 처리 할 수 ​​있습니다.


2

파이썬 3 +의 애 스터 ,1017 1007 바이트-(25 + 50 + 100) = 점수 : 842 834

제거 ts하고 변경 하여 10 바이트 절약p

편집 : 엄청나게 긴 정수를 테스트 할 수 없습니다 (1234567891234567891234564789087414984894900000000) [내 컴퓨터가 멈춤] 그러나 내 지식으로는 Python 3은 임의로 긴 정수를 지원합니다.

이 구현 사용AST를 남용합니다. 나는 AST를 "평가 또는 유사한"학대하는 것을 고려하지 않을 것입니다.

from ast import*
from astor import*
nt,bo,m,d,a,s,n,p,ty=NodeTransformer,BinOp,Mult,Div,Add,Sub,Num,map,type
class M(nt):
    def visit_BinOp(t,z):
        if ty(z.left)==bo and ty(z.right)==bo:return bo(t.visit_BinOp(z.left),z.op,t.visit_BinOp(z.right))
        if ty(z.left)==bo:return bo(t.visit_BinOp(z.left),z.op,z.right)
        if ty(z.right)==bo:return bo(z.left,z.op,t.visit_BinOp(z.right))
        if ty(z.op)==m:return n(z.left.n*z.right.n)
        if ty(z.op)==d:return n(z.left.n/z.right.n);return z
class A(nt):
    def visit_BinOp(t,z):
        if ty(z.left)==bo and ty(z.right)==bo:return bo(t.visit_BinOp(z.left),z.op,t.visit_BinOp(z.right))
        if ty(z.left)==bo:return bo(t.visit_BinOp(z.left),z.op,z.right)
        if ty(z.right)==bo:return bo(z.left,z.op,t.visit_BinOp(z.right))
        if ty(z.op)==a:return n(z.left.n+z.right.n)
        if ty(z.op)==s:return n(z.left.n-z.right.n);return z
class S(nt):
    def visit_Num(t,z):return n(sum(p(int,list("".join(p(str,range(1,z.n+1)))))))
print(to_source(S().visit(A().visit(M().visit(parse(input()))))))

ungolfed를 쓰기에는 너무 게 으르므로 클래스에 대한 설명을 드리겠습니다.

M(NodeTransformer|nt) - converts multiplication and division into their results.
A(NodeTransformer|nt) - converts addition and subtraction into their results.
S(NodeTransformer|nt) - converts numbers into their sum of digits via the Pythonic (naïve) way.

마지막 행은 입력에서 적절한 순서로 이러한 클래스를 실행하여 작업 순서를 유지하고 원치 않는 동작을 방지합니다.

사용법 예 ($ 또는>는 사용자 입력을 의미) 및 실제 프로그램은 한 번만 입력을받습니다.

$ python3 summer.py
> 5
15
> 10
46
> 12
51
> 1000000
27000001
> 55*96-12
81393

이것은 놀랍지 만 끔찍합니다. 그것이 의도적으로 긴 솔루션을 사용하도록 허용되었는지 확실하지 않지만 10/10입니다.
Rɪᴋᴇʀ

@ EᴀsᴛᴇʀʟʏIʀᴋ 왜 긴 솔루션을 고의로 사용할 수 없습니까? 문제 없어요 적어도 842+ 점수로 솔루션을 이길 것입니다.)

그들은 노력 노력을 의미하는 경쟁력있는 답변 이어야 합니다. 또한 그 의견을 삭제하십시오. 연령 제한은 13 세입니다 !!! 법적으로 허용 될 때까지 기다려야합니다. COPPA (google it)로 인해 인터넷을 사용하려면 13 세가되어야합니다.
Rɪᴋᴇʀ

@ EᴀsᴛᴇʀʟʏIʀᴋ 이제 나는 그 사용자가 누구인지 궁금합니다.
고양이

1
@cat 발음 할 수없는 아랍어 이름? 아마 멍청한 계정.
Rɪᴋᴇʀ

1

C # (108)

int c(int n){return string.Join("",Enumerable.Range(1,n).Select(i=>i+"")).ToArray().Select(c=>c-'0').Sum();}

예쁜

int c(int n)
{
    return string.Join("", Enumerable.Range(1, n).Select(i => i + "")).ToArray().Select(c => c - '0').Sum();
}

3
함수이고 문자 수가 많기 때문에 올바른 답변이 아닙니다
ST3

1
ints 가 필요하지 않습니다 . C에서는 모든 것이 기본적으로 int... 오, C #입니다.
wizzwizz4

1

루비-> 83-50 = 33

p (1..eval(gets.chomp)).each.inject{|c,e|c+e.to_s.chars.map{|x|x.to_i}.inject(:+)}                     

"테스트"버전 :

module Math
  class CountSum
    def sum(number)
      (1..number).each.inject do |c, e|
        c + e.to_s.chars.map{ |x| x.to_i }.inject(:+)                                                  
      end
    end
  end
end 

테스트 결과

$ rspec sum_spec.rb  --format doc --color

Math::CountSum
  #sum
    single digit number
      when 5, should return 15
    double digit number
      when 12, should return 51
    arbitrary number
      when 1000000 should return 27000001

Finished in 5.34 seconds
3 examples, 0 failures

1

C # (80)

그것은 또 다른 시도입니다.

double c(int n){double s=0;while(n>0)foreach(var c in n--+"")s+=c-48;return s;}

예쁜

double c(int n)
{
    double s = 0;
     while (n > 0)
        foreach(var c in n--+"") 
            s += c - 48;
    return s;
}

사이의 공백인가 n--+필요? 다른 C 스타일 언어로 생각하지 않습니다.
FireFly

1
주어진 범위에서 작동합니까? 에 대한 결과 2^64-1가 64 비트에 맞지 않습니다.
marinus

2
함수이고 문자 수가 많기 때문에 올바른 대답이 아닙니다.
ST3

@marinus 2 ^ 64-1의 결과를 알려 주시면 어떤 범위를 작업해야하는지 알 수 있습니까? 처리 시간이 엄청날 것이므로 내 언어 (PowerShell)로 테스트하지 마십시오.
Iszi

@ Iszi : 실제로 실행하지는 않지만 몇 가지 수학을 수행 할 수 있습니다. 1) 숫자의 평균 값은 4.5; 2) 20 자리의 평균 합계는 90( 2^64) 20 개 자리를 갖는다; 따라서 예상 값은 약 90 * 2^64 ≈ 1.66*10^21입니다. 따라서 최소한 71비트 가 필요합니다 72.
marinus

1

루비 69-50 = 19 (또는 -4)

이것은 확실히 함께 골프를 칠 수 있지만 여기에 번째 다섯 번째 시도입니다

p (1..eval(gets)).inject{|i,s|i+=s.to_s.chars.map(&:to_i).inject :+}

또한 모든 숫자에서 작동하지만 O (n)보다 느리게 실행되므로 매우 느리므로 -25를 추가하지 않습니다. 속도 저하가 양호하면 -4가됩니다 .

루비 133-50-25 = 58

이것은 O (n)보다 적은 시간에 실행되고 실제 수학을 사용하는 더 빠른 버전이므로 큰 정수에 대한 결과를 빠르게 제공 할 수 있으므로 -25를 추가했습니다.

n=eval(gets);p (d=->n,l{k=10**l;c,r=n.to_s[0].to_i,n%k;n<10?n*(n+1)/2:c*45*l*k/10+k*(c*(c-1)/2)+(r+1)*c+d[r,l-1]})[n,n.to_s.length-1]

우리는 정확히 같은 코드를 작성합니다 (약간 더 골프를 쳤습니다)!
Beterraba

@Beterraba yup, 거의 같은 시간이지만 조금 더 빠르므로 다른 것을 알아 내야합니다. :)
SztupY

1

하스켈, 74-25 = 49

main=getLine>>=print.sum.map(\c->read[c]).concatMap show.(\x->[0..x]).read


를 사용 interact하고 >>=목록의 경우와 동일 하다는 사실 은 다음과 같이 flip concatMap63 자까지 골프화 할 수 있습니다.main=interact$show.sum.map(\c->read[c]). \x->[0..read x]>>=show
Flonk

더 많은 바이트 저장 : \c->read[c]isread.(:[])
nimi

1

ECMAScript 6, 86-50 = 36

for(s="",i=eval(prompt());i;s+=i--)alert(s.replace(/\d/g,c=>Array(-~c).join()).length)

한 글자 이하 : for(i=eval(prompt(s=""));i;s+=i--)alert(s.replace(/\d/g,c=>Array(-~c).join()).length).
칫솔

상당히 작습니다 (필요하지 않음 .join()) : for(i=eval(prompt(s=""));i;s+=i--)alert(s.replace(/\d/g,c=>Array(-~c)).length). 78-50 = 28 !
칫솔

1

R (72 점)

f=function(n) sum(as.integer(strsplit(paste0(1:n,collapse=""),"")[[1]]))

산출:

> f(5)
[1] 15
> f(12)
[1] 51
> f(1000000)
[1] 27000001

이러한 과제에서 "f = function (n)"을 명시 적으로 작성하거나 n을 사용하여 함수를 명시 적으로 작성해야합니까?
스칸

@ skan은 요구 사항에 따라 다릅니다. 일반적으로 명시적인 기능이 필요하지 않습니다.
djhurio
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.