합계는 항상 15입니다


36

음수가 아닌 정수의 배열을 입력으로 취하고 입력 배열의 요소와 함께 벡터 / 배열 세트를 순서대로 출력하는 프로그램 또는 함수를 작성하고, 각 벡터의 합이 15가되도록 분할하십시오. N 요소가 "15"를 누르지 않으면 15를 통과 한 숫자는 잘 려야하며 나머지는 다음 벡터의 첫 번째 요소가됩니다. 이것은 입력 배열의 끝에 도달 할 때까지 계속됩니다. 최종 벡터의 합이 15보다 작은 경우, 합이 올라가도록 끝에 숫자를 추가해야합니다.

예제를 보면 규칙을 더 쉽게 이해할 수 있다고 생각합니다.

Input: 3 7 5 10
Output:
3 7 5           <- Sum is 15
10 5            <- 5 is added to make the sum 15

Input: 2 4 5 9 2 3 5 0 2 4 5 0 3
Output:
2 4 5 4          <- Sum 15. 9 is split in two. 
5 2 3 5          <- The first 5 is the remainder of 9
0 2 4 5 0 3 1    <- The last number is added to make the sum 15

Input: 1 1 1            
Output:
1 1 1 12         <- The number 12 is added to make the sum 15

Input: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Output:
1 2 3 4 5
6 7 2           <- 2 is the first part of 8
6 9             <- 6 is the remainder of 8
10 5            <- 5 is first part of 11
6 9             <- 6 is remainder of 11. 9 is first part of 12
3 12            <- 3 is remainder of 12. 12 is first part of 13
1 14            <- 1 is remainder of 13. 14 is 14
15
15              <- 15 is first part of 16
1 14            <- 1 is remainder of 16. 14 is first part of 17
3 12            <- 3 is remainder of 17. 12 is added to make the sum 15

Input: 20 20
Output:
15
5 10           <- 5 is remainder from the first 20
10 5           <- 10 is remainder from second 20. 5 is added to make the sum = 15.

입력 및 출력 형식은 모두 선택 사항입니다. 귀하의 언어에서 가장 좋은 것이 무엇이든.

바이트 단위의 가장 짧은 코드가 이깁니다.


리더 보드

이 게시물의 맨 아래에있는 스택 스 니펫은 답변 a) 언어 당 가장 짧은 솔루션 목록으로, b) 전체 리더 보드로 카탈로그를 생성합니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

## Language Name, N bytes

N제출물의 크기는 어디에 있습니까 ? 당신이 당신의 점수를 향상시킬 경우에, 당신은 할 수 있습니다 를 통해 눈에 띄는에 의해, 헤드 라인에 오래된 점수를 유지한다. 예를 들어 :

## Ruby, <s>104</s> <s>101</s> 96 bytes

헤더에 여러 숫자를 포함하려는 경우 (예 : 점수가 두 파일의 합계이거나 인터프리터 플래그 페널티를 별도로 나열하려는 경우) 실제 점수가 헤더 의 마지막 숫자 인지 확인하십시오 .

## Perl, 43 + 2 (-p flag) = 45 bytes

언어 이름을 링크로 만들면 스 니펫에 표시됩니다.

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


'출력 형식은 선택 사항입니다'. 그 의미 [[3, 7, 5], [10, 5]]는 첫 번째 테스트 사례에 대한 유효한 출력입니까?
Morgan Thrapp

@MorganThrapp입니다. 유효합니다.
Stewie Griffin

1
@FlagAsSpam, 나는 당신이 묻는 예제에서 더 많은 설명을 추가했습니다.
Stewie Griffin

3
좋은 테스트 사례 :Input: 100 Output: 15; 15; 15; 15; 15; 15; 10 5
randomra

3
이것은 FizzBuzz 테스트를 대체해야합니다
CSᵠ

답변:


8

Pyth, 37 바이트

K15VQ=+ZNIgZK=-ZK-NZbIZZ)).?N;I>KZ-KZ

설명

K15              Store 15 in K (the max) (K is Autoinitializing, no = needed here)
VQ              For N in the evaluated input
  =+ZN           Set Z(Which in pyth defaults to 0) to Z+N
  IgZK           If Z(row total) is greater than or equal to K (row max)
    =-ZK         Set Z to Z-K (How much the max was exceeded)
    -NZ          Implicitly print N-Z
    b            Implicitly print b (in pyth defaults to a newline)
    IZ         If Z > 0 (There was excess to carry to the next row)
      Z          Implicitly print Z (the excess)
  .?N            Else(the current row count is < the max(15)) output the current number
;                Use infinite )'s in place of )) (to save 1 character)
I>KZ             If K > Z (The max is greater than the current row count)
  -KZ           Implicitly print K-Z (The amount needed for the row to equal 15)

이것은 나의 첫 번째 pyth 였으므로, 개선을 제안 해 주시기 바랍니다.

예:

입력

[1, 3, 4, 5, 9, 8]

산출

1
3
4
5
2


7
8

참고 : 몇 바이트의 크기 축소에 대한 조언과 pyth 생성에 대해 Isaacg에게 감사드립니다! 아래에 자신의 의견을 표명하십시오 :)


2
Else가 최근 .?대신로 변경 E되었지만 문서를 업데이트하는 것을 잊었습니다. 미안합니다.
isaacg

@isaacg 감사합니다 isaacg! 나는 지금 그 일을해야합니다. else는 2 문자이므로 1 바이트 만 저장하지만.
csga5000

1
우리가 말한대로 고치십시오.
isaacg

3
다른 몇 가지 제안 : =Z+ZN그리고 =+ZN동일합니다. 파이썬과 조금 비슷 +=합니다. Likewiese, =Z-ZK-> =-ZK. 또한 )끝에는 필요하지 않습니다 . 자동으로 채워집니다. 마지막으로, FNQVQ동일합니다.
isaacg

1
- 를 대체 I>Z0하여 다른 2 바이트를 절약 할 수 있습니다 IZ- Z음수가 될 수 없으므로 실제로 Z는 0이 아닌지 확인 하고 0은 거짓이며 다른 모든 숫자는 사실입니다.
isaacg

16

자바 - 229 200 192 181 172 170 168 바이트

승리를 위해서가 아니라 재미를 위해 이미 시작했습니다 :)
어떤 제안이라도 환영합니다.

@ThomasKwa 덕분에 8 바이트 절약 @corsiKa 덕분에
20 바이트 절약 @Ypnypn
덕분에
2 바이트 절약 @ user902383 덕분에 2 바이트 절약

String p(int[]a){int c=0,j;String s="";f:for(int i:a){for(j=i;j-->0;)if(++c>14){s+=(i-j)+"\n";c=0;if(j<15){if(j>0)s+=j+" ";c+=j;continue f;}}s+=i+" ";}return s+(15-c);}

170 바이트

String p(int[]a){int c=0,j;String s="";f:for(int i:a){for(j=i;j-->0;){if(++c>14){s+=(i-j)+"\n";c=0;if(j<15){if(j>0)s+=j+" ";c+=j;continue f;}}}s+=i+" ";}return s+(15-c);}

172 바이트

String p(int[]a){int c=0,j;String s="";f:for(int i:a){for(j=i;j>0;){j--;if(++c>14){s+=(i-j)+"\n";c=0;if(j<15){if(j>0)s+=j+" ";c+=j;continue f;}}}s+=i+" ";}return s+(15-c);}

181 바이트

void p(int[]a){int c=0,j;String s="";f:for(int i:a){for(j=i;j>0;){j--;if(++c>14){s+=(i-j)+"\n";c=0;if(j<15){if(j>0)s+=j+" ";c+=j;continue f;}}}s+=i+" ";}System.out.print(s+(15-c));}

192 바이트

void p(int[]a){int c=0,j;String s="";f:for(int i:a){for(j=i;j>0;){j--;c++;if(c==15){s+=(i-j)+"\n";c=0;if(j>=15)continue;if(j>0)s+=j+" ";c+=j;continue f;}}s+=i+" ";}System.out.print(s+(15-c));}

200 바이트

void p(int[]a){int c=0,j;String s="";f:for(int i:a){j=i;while(j>0){j--;c++;if(c==15){s+=(i-j)+"\n";c=0;if(j>=15)continue;else{if(j!=0)s+=j+" ";c+=j;continue f;}}}s+=i+" ";}System.out.print(s+(15-c));}

229 바이트

void p(int[]a){int c=0,j;f:for(int i:a){j=i;while(j>0){j--;c++;if(c==15){System.out.print(i-j+"\n");c=0;if(j>=15){continue;}else{if(j!=0)System.out.print(j+" ");c+=j;continue f;}}}System.out.print(i+" ");}System.out.print(15-c);}

String p(int[] a) {
    int c = 0, j;
    String s = "";
    f: for (int i: a) {
        for (j = i; j-- > 0;)
            if (++c > 14) {
                s += (i - j) + "\n";
                c = 0;
                if (j < 15) {
                    if (j > 0) s += j + " ";
                    c += j;
                    continue f;
                }
            }
        s += i + " ";
    }
    return s + (15 - c);
}

1
와우, 지금까지 Java 프로그램에서 실제로 계속 사용되는 것을 보지 못했습니다.
Magic Octopus Urn

7

Python 3-1̶7̶7̶ 1̶3̶8̶ 1̶6̶6̶ 1̶3̶3̶ 113

s=0
i=15
p=print
for e in eval(input()):
 if s>=i:p()
 s=s%i+e
 if s>i:s-=i;p(e-s);p();e=s
 p(e)
if s!=i:p(i-s%i)

편집 5는 정말 * 제거 줄 바꿈 등을 @poke 감사는 golfed

4 별칭 인쇄를 편집 하고 바이트를 저장하려면 a =를-=로 바꿉니다. @poke와 @elzell에게 감사합니다. 또한 할당에서 2 바이트를 절약하기 위해 입력 평가를 for 루프로 옮겼습니다.

다음과 같은 경우 초 안에 다른 OO에서 3 찾은 비용 절감

2 버그 수정

편집 1 입력을 '[1,2,3,4,5 ...]'형식으로 변경하고 @Morgan Thrapp 덕분에 처음 두 개의 주석을 구현했습니다.

처음으로 여기 포스터. 입력은 공백으로 구분 된 항목이있는 명령 행이고, 출력은 그룹당 줄 바꿈이있는 행당 항목입니다.


3
변수에 15를 할당하고 들여 쓰기를 위해 하나의 공백 만 사용하면 122로 줄일 수 있습니다.
Morgan Thrapp

또한 두 번째 테스트 사례를 통과하지 못하면 2 3 5를 얻지 만 5 2 3 5가되어야합니다.
Morgan Thrapp

1
@AdamMartin 당신은 당신의 코드의 내 Pyth 버전에 관심이있을 것입니다
csga5000

1
print너무 자주 사용 하므로 변수로 저장해야합니다 p=print. 또 다른 14자를 저장합니다.
poke

2
현재 카운트는 132이지만 줄 바꿈을 제거하면 113으로 줄일 수 있습니다. 예 if s>i:s-=i;p(e-s);p();e=s를 들어 두 번째 줄과 같이 모든 if를 한 줄로 결합 할 수 있습니다 . 그러면 줄 바꿈과 들여 쓰기 문자가 절약됩니다.
찌를

7

하스켈 126 107 102 100 바이트

[]#c=[]
(h:t)#c|s<0=t#u|s<1=u:t#[]|1<2=(c++[h-s]):(s:t)#[]where s=sum c+h-15;u=c++[h]
(#[]).(++[14])

사용 예 : (#[]).(++[14]) $ [1..17]->[[1,2,3,4,5],[6,7,2],[6,9],[10,5],[6,9],[3,12],[1,14],[15],[15],[1,14],[3,12]]

편집 : @Stewie Griffin은 19 바이트를 절약하는 데 도움이되었습니다. 감사!



4

Python2 정규식 탑재 : 158 155 바이트

사랑과 거의 수학없이 파이썬으로 만들어졌습니다.
또는 정규식 수학이라면 단항 수학입니다.
'실제'수학은 마지막 요구 사항을 '수정'하는 데만 사용되었습니다.

최종 벡터의 합이 15보다 작은 경우, 합이 올라가도록 끝에 숫자를 추가해야합니다.

코드 골프 :

import re
def f(i):o=[map(len,p.split())for p in re.findall('((?:x *){15}|.+)',' '.join(['x'*c for c in i]))];l=sum(o[-1]);o[-1]+=([],[15-l])[l<15];print o

이것이 작동하는 방식은 각 숫자 N을 길이 N 의 문자열 (문자열을 채우기 위해 문자로 선택된 x )로 변환하고 모두 분리 된 공백으로 결합하는 것 string입니다. 결과 문자열은 RegEx BLACK MAGIC 을 통해 다음과 같이 나뉩니다 .

['x xx xxx xxxx xxxxx ', 'xxxxxx xxxxxxx xx', 'xxxxxx xxxxxxxxx', 'x']

f([1, 2, 3, 4, 5, 6, 7, 8, 10])
다음 과 같은 입력 의 경우 : 그것은 다시 분할되고 연속 xes 의 길이 는 숫자를 다시 만드는 데 사용됩니다. 모든 것이 목록 이해에 멋지게 포장되었습니다.

언 골프 드 :

import re
o = [map(len, p.split()) for p in re.findall('((?:x *){15}|.+)', ' '.join(['x'*c for c in i]))]
l = sum(o[-1])
o[-1] += ([], [15-l])[l<15]
print o

산출:

>>> f([30, 1, 2, 3, 4, 5, 6, 7, 8, 9, 16])
[[15], [15], [1, 2, 3, 4, 5], [6, 7, 2], [6, 9], [15], [1, 14]]

참고 : 0에 대한 마법이 충분하지 않으므로이 항목은 실격됩니다.

0이 포함되어야합니다. 두 번째 예를보십시오


모든 함수 이름은 다소 비쌉니다. 코드 골프에서는 정규식과 같은 것을 거의 사용할 수 없습니다. 아직도, 당신의 바이트 크기는 나쁘지 않습니다
csga5000

4

정말 88 바이트

,`'!*'0`M' j0╗`;;;'|ε35*('!=╜+;╗%(' =|('0=|I)`Mεj'|@s`ôl`╝`ö'0@s╛M`Md;Σ35*-;`X``@q`Iƒ@q.

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

그것은 나의 첫번째 진지한 대답이다! 이제 나는 모든 언어의 단점에 대해 친숙합니다!

육각 덤프 :

2c6027212a2730604d27206a30bb603b3b3b277cee33352a2827213dbd2b3bbb252827203d7c2827303d7c49
29604dee6a277c407360936c60bc609427304073be4d604d643be433352a2d3b60586060407160499f40712e

설명:

,`'!*'0`M' j         Replace all the numbers by "0"+"!"*n, separated by " "
0╗                   Initialize an accumulator in register 0
` ... `M             Map the string with the following function:
   ;;;'|ε                Put three extra copies of the character, a pipe, an empty string
   35*                   and a 15 on the stack.
   ('!=                  Move one copy of the character to the top and push 1 if it's a !
   ╜+                    Load the accumulator, add the 1 or 0 from the preceding test
   ;╗                    Make a copy, and save it back to register 0
   %                     Modulo the sum by 15
   (' =|                 Or the result with whether the dug-up character is " "
   ('0=|                 Or the result with whether the dug-up character is "0"
   I                     If we're at " " or "0" or the current sum is not divisible by 15,
                         push empty string, else push "|"
   )                     Bury the new character under the original character.
εj                   Join the list that resulted from the map into a single string.
'|@s                 Resplit the string on occurrences of "|" (after every 15 "!"s)
`ôl`╝                Store a function in register 1 which trims whitespace
                     and returns the length of the remaining string
` ... `M             Map the list with the following function:
   ö                     Trim leading spaces.
   '0@s                  Split the string on occurrence of "0"
   ╛M                    Map the resulting list with the function stored in register 1
d;                   Push the last sublist from the resulting list and make a copy.
Σ                    Find the sum of the list.
35*-                 Subtract it from 15
;`X``@q`Iƒ           Duplicate it, drop it if it's zero, put it in the list otherwise.
@q.                  Put the list back in the big list and print it.

유니 코드 코드 포인트가 사용되는 경우 해당 문자는 각각 2 바이트로 계산됩니까? : P
Dan

나는 묘사 된 소스에서 유니 코드를 사용하고있어서 의도 한대로 읽을 수 있습니다. 그렇지 않으면 인쇄 할 수없는 가득한 임의의 쓰레기처럼 보일 것입니다. 공식 소스는 16 진 덤프입니다.
quintopia

유머러스 한 질문이었습니다
Dan

1
또한 다른 독자가 궁금해할만한 합리적인 질문이었습니다. 그래서 나는 유머러스하게 대답했습니다.
quintopia

@quintopia +1 새로운 골프 언어를 시도해 주셔서 감사합니다! 새로운 언어는 재미있다;) 나는이 질문에 대해 처음으로 pyth를 시도했다.
csga5000

3

자바 스크립트, 138128 바이트

i=>eval("for(o=z=n='',m=15,t=q=0;q<i.length;q++)(t+=c=+i[q])>=m?(t-=m,z+=c-t,o+=z+`\n`,z=t>0?t+' ':n):z+=c+' ';t<m?o+z+(m-t):o")

공백으로 :

i => eval("
  for(o=z=n='', m=15, t=q=0; q < i.length; q++)
    (t+=c=+i[q])>=m
      ?(
        t-=m,
        z+=c-t,
        o+=z+`\n`,
        z=t>0?t+' ':n)
      :
        z+=c+' '
    ;
  t<m ? o+z+(m-t) : o
")

예:

함수를 변수에 할당

sumFifteen=i=>eval("for(o=z=n='',m=15,t=q=0;q<i.length;q++)(t+=c=+i[q])>=m?(t-=m,z+=c-t,o+=z+`\n`,z=t>0?t+' ':n):z+=c+' ';t<m?o+z+(m-t):o")

그런 다음 다음과 같이 평가하십시오.

console.log(sumFifteen([1,4,11,4,5]))

1 4 10
1 4 5 5

개정 이력 :

2015 년 12 월 3 일 00:02-10 바이트 개선을위한 user81655 (댓글에 +1)에게 감사

12/2/2015 21:44-크기를 줄이기 위해 기능적 스타일을 순서대로 사용하도록 전환되었습니다.


3
: 당신이이를 개선 할 수있는 f=사이트 규칙에 따라 필요하지 않습니다에서 괄호를 제거 (i)와 서라운드, eval당신은 필요가 없다 할 수 있도록 return하거나 괄호를하고, 대체 if그 있도록 삼항로 o반환 변경됩니다 '\n'`\n`, 병합 t+=...t>=m대한 제거하는을 루프 브래킷. 다음은 이러한 개선 사항을 모두 갖춘 127 바이트 솔루션입니다.i=>eval("for(o=z=n='',m=15,t=q=0;q<i.length;q++)(t+=c=+i[q])>=m?(t-=m,z+=c-t,o+=z+`\n`,z=t>0?t+' ':n):z+=c+' ';t<m?o+z+(m-t):o")
user81655

@ user81655 이러한 변경 사항 중 일부를 구현하겠습니다! 내가 당신을 시도 할 때 SytaxError : 예기치 않은 토큰 ILLEGAL (...)이 나타납니다. 참고로, 기능을 테스트하기 위해 f =
csga5000

1
SO는 o+줄 끝에서 몇 가지 기호를 추가합니다 . 삭제 o+=z하고 다시 쓰면 작동합니다. : P
user81655

@ user81655 어떻게 \n차이가
나는지 모르겠습니다

1
당신은 의미 `\n`합니까? 코드가 내부에 "..."있기 때문에 코드가 없으면 작동하지 않습니다 eval.
user81655

2

파이썬 3 : 139 바이트

다른 답변과 약간 다른 접근 방식. 처음에 그것이 요구 사항이라고 가정했기 때문에 질문의 실제 결과를 생성합니다.

def f(l):
 m=15;r,s=sum(l)%m,0
 if r:l+=[m-r]
 while l:
  x=l.pop(0)
  if s+x>m:y=m-s;l[0:0]=[x-y];x=y
  s+=x;print(x,end=' \n'[s==m]);s%=m

사용법 예 :

>>> f([2, 4, 5, 9, 2, 3, 5, 0, 2, 4, 5, 0, 3])
2 4 5 4
5 2 3 5
0 2 4 5 0 3 1

2

펄, 86 바이트

#!perl -p
s|\d+( ?)|($i+=$&)<15?$&:($a=$&-($i%=15)).$/.($&>$a&&$&-$a.$1)|ge;$\=$".(15-$i)if$i

shebang을 3으로 계산하면 입력이 stdin에서 분리되어 공간이 분리됩니다.


샘플 사용법

$ echo -n 2 4 5 9 2 3 5 0 2 4 5 0 3 | perl sum15.pl
2 4 5 4
5 2 3 5
0 2 4 5 0 3 1

2

R, 155 바이트

n=scan();while(S<-sum(n)){C=cumsum(n);if(S>14){w=which(C>14)[1];N=n[1:w];n=n[-(1:w)];r=C[w]-15;N[w]=N[w]-r;if(r)n=c(r,n);cat(N,"\n")}else{cat(n,15-S);n=0}}

들여 쓰기 및 줄 바꿈 :

n=scan()
while(S<-sum(n)){
     C=cumsum(n)
     if(S>14){
         w=which(C>14)[1]
         N=n[1:w]
         n=n[-(1:w)]
         r=C[w]-15
         N[w]=N[w]-r
         if(r) n=c(r,n)
         cat(N,"\n")
         }else{
            cat(n,15-S)
             n=0
             }
      }

용법:

> n=scan();while(S<-sum(n)){C=cumsum(n);if(S>14){w=which(C>14)[1];N=n[1:w];n=n[-(1:w)];r=C[w]-15;N[w]=N[w]-r;if(r)n=c(r,n);cat(N,"\n")}else{cat(n,15-S);n=0}}
1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
18: 
Read 17 items
1 2 3 4 5 
6 7 2 
6 9 
10 5 
6 9 
3 12 
1 14 
15 
15 
1 14 
3 12
> n=scan();while(S<-sum(n)){C=cumsum(n);if(S>14){w=which(C>14)[1];N=n[1:w];n=n[-(1:w)];r=C[w]-15;N[w]=N[w]-r;if(r)n=c(r,n);cat(N,"\n")}else{cat(n,15-S);n=0}}
1: 20 20
3: 
Read 2 items
15 
5 10 
10 5
> n=scan();while(S<-sum(n)){C=cumsum(n);if(S>14){w=which(C>14)[1];N=n[1:w];n=n[-(1:w)];r=C[w]-15;N[w]=N[w]-r;if(r)n=c(r,n);cat(N,"\n")}else{cat(n,15-S);n=0}}
1: 10 5
3: 
Read 2 items
10 5 
> n=scan();while(S<-sum(n)){C=cumsum(n);if(S>14){w=which(C>14)[1];N=n[1:w];n=n[-(1:w)];r=C[w]-15;N[w]=N[w]-r;if(r)n=c(r,n);cat(N,"\n")}else{cat(n,15-S);n=0}}
1: 2 4 5 9 2 3 5 0 2 4 5 0 3
14: 
Read 13 items
2 4 5 4 
5 2 3 5 
0 2 4 5 0 3 1

2

파이썬 2, 117 바이트

i=input()
while i:
 s=15;r=[]
 while s>0:n=i.pop(0)if i else s;s-=n;r+=[n]if s>=0 else[n+s]
 if s<0:i=[-s]+i
 print r

목록으로 입력을받습니다.

>>[2,4,5,9,2,3,5,0,2,4,5,0,3]
[2, 4, 5, 4]
[5, 2, 3, 5]
[0, 2, 4, 5, 0, 3, 1]

1

펄, 76 바이트

에 +3 포함 -p(일반적으로 +1, 다른 펄 솔루션과 공정하게 재생하려면 +3)

STDIN의 입력과 실행 (입력에 마지막 개행은 선택 사항이지만 반드시 빈 입력 결석)

sum15.pl <<< "1 2 3"

sum15.pl:

#!/usr/bin/perl -p
s/$/ 15/;s/\d+/1x$&/eg;s/( *1){15}\K ?/
/g;s/
1*
*$//;s/1+|\B/length$&/eg

엄마 봐요, 계산이 전혀 없습니다 ...


안하는 것보다 늦게하는 것이 낫다! 아주 좋은 해결책이지만 :)
Dada

0s는이 솔루션에서 다소 까다 롭고 (추가 공간으로 표시) 공간 수를 올바르게 처리하여 0s 수를 올바르게 유지해야합니다 . 특히 부분 합이 정확히 15 인 입력을 고려하십시오 1 14 2 13. `?`없이 그들을 시도하고 무슨 일이 일어나는지보십시오
Ton Hospel

예, 나는 그것을 시도하고 당신과 같은 몇 줄의 시작 부분에 0이 추가 된 것을 보았습니다 (그래서 댓글을 게시 한 후 30 초 동안 댓글을 삭제했습니다). 감사합니다
Dada

0

자바 - 158 155 바이트

의 람다 버전 https://codegolf.stackexchange.com/a/65590/46866 에 의해 야신-hajaj은 유효한 제출하지만, 그나마 링크 된 답변에 댓글을 추가 할 수있는 충분한 담당자가 확실하지합니다. http://meta.codegolf.stackexchange.com/questions/4944/byte-counter-snippet을 사용하여 계산

a->{int c=0,j;String s="";f:for(int i:a){for(j=i;j-->0;)if(++c>14){s+=(i-j)+"\n";c=0;if(j<15){if(j>0)s+=j+" ";c+=j;continue f;}}s+=i+" ";}return s+(15-c);}

158 바이트

a->{int c=0,j;String s="";f:for(int i:a){for (j=i;j-->0;)if(++c>14){s+=(i-j)+ "\n";c=0;if(j<15){if(j>0)s+=j+" ";c+=j;continue f;}}s+=i+ " ";}return s+(15-c);}

언 골프

a ->
    {
        int c=0, j;
        String s = "";
        f:
        for (int i : a) {
            for (j = i; j-- > 0; )
                if (++c > 14) {
                    s += (i - j) + "\n";
                    c = 0;
                    if (j < 15) {
                        if (j > 0) s += j + " ";
                        c += j;
                        continue f;
                    }
                }
            s += i + " ";
        }
        return s + (15 - c);
    }

처럼 사용할 수 있습니다

Function<int[], String> func =a->{int c=0,j;String s="";f:for(int i:a){for (j=i;j-->0;)if(++c>14){s+=(i-j)+ "\n";c=0;if(j<15){if(j>0)s+=j+" ";c+=j;continue f;}}s+=i+ " ";}return s+(15-c);};
System.out.println(func.apply(new int[]{2, 4, 5, 9, 2, 3, 5, 0, 2, 4, 5 ,0 ,3}));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.