합계가 해당 숫자와 동일한 값 목록에 숫자를 가능한 한 분배하십시오.


15

아마도 단순한 코드 골프 도전입니다. 2 개의 양의 정수가 주어 m지고 n, n합이 숫자와 같은 양의 정수인 값 목록 을 작성하십시오 m. 출력의 모든 값이 동일한 값이거나 차이가 정확히 1입니다.

예를 들어

  • m=6그리고 n=3될 것이다2, 2, 2
  • m=7n=3될 것 2, 2, 3또는 2, 3, 23, 2, 2
  • m=7n=2될 것 3, 4또는4, 3
  • m=7그리고 n=1될 것이다7
  • m=7n=88 개 개의 양의 정수의 합이 7이 될 수 없기 때문에 오류가 발생한다.
  • m=10그리고 다른 순열 n=4이 될 것입니다.3, 3, 2, 2

규칙

  • 입력과 출력은 모두 양의 정수에 불과합니다.
  • 출력의 모든 값이 동일한 값이거나 차이가 정확히 1입니다.
  • 목록의 값 순서는 중요하지 않습니다.
  • 목록에있는 값의 합은 m입니다.
  • 해결할 수 없으면 오류 또는 잘못된 값을 생성하십시오 (예 : m = 7 및 n = 8의 경우).
  • 다른 규칙의 결과 m=8n=3의 순열 중 하나를 생성하는 것 3, 3, 2(안 2, 2, 4)

승자

이것은 코드 골프이므로 바이트 단위로 측정 된 가장 짧은 유효한 답변이 이깁니다.


나는 0이 양수가 아니라고 가정하고 있습니까?
TheLethalCoder


1
@aras 나는 수학자가 아니지만 읽은 내용은 일반적으로 상황에 달려 있습니다. 어떤 사람들은 그것이 서명되지
않았다고

1
@TheLethalCoder 한편, 자바 (그리고 일반적으로 부동 소수점)에, float a = -0f, b = 0f; System.out.println(a == b); System.out.println(a + "," + b);... 생산 true-0.0,0.0. 양수 0과 음수 0은 분명히 두 개의 별개의 숫자입니다 ... 구현은 그렇게 말합니다!
Socratic Phoenix

답변:


2

가이아 , 4 바이트

…÷l¦

거의 내장되어 있습니다 ...

설명

…     Get the range [0 .. m-1].
 ÷    Split into n roughly even length chunks. Throws an error if the number of chunks if 
       more than the list's length.
  l¦  Get the length of each chunk.

05AB1E에는 4 바이트 솔루션도 있다고 생각했습니다. 이제 사라 졌으므로 결정하기가 더 쉬워졌습니다. 축하와 감사합니다!
Christiaan Westerbeek


5

수학, 33 바이트

#>#2&&Last@IntegerPartitions@##1&

입력

[63, 11]

산출

{6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5}

해결할 수 없을 때 False를 출력합니다


5

MATL , 7 바이트

:gie!Xs

솔루션이 없으면 출력은 하나 이상의 0을 포함하는 배열입니다. 이며 MATL 거짓 입니다.

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

설명

입력 m = 10과를 고려하십시오 n = 4.

:      % Implicitly input m. Push [1 2 ... m]
       % STACK: [1 2 3 4 5 6 7 8 9 10]
g      % Logical: convert nonzeros to 1
       % STACK: [1 1 1 1 1 1 1 1 1 1]
i      % Input n
       % STACK: [1 1 1 1 1 1 1 1 1 1], 4
e      % Reshape into matrix with n rows, padding with zeros
       % STACK: [1 1 1;
                 1 1 1;
                 1 1 0;
                 1 1 0]
!      % Transpose
       % STACK: [1 1 1 1;
                 1 1 1 1;
                 1 1 0 0]
Xs     % Sum of each column. Implicitly display
       % STACK: [3 3 2 2]


4

, NDD 1 을 적용한 후 15 바이트

¿÷NNIEIη÷⁺IθιIη

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

솔루션이 없으면 아무것도 출력하지 않습니다. 자세한 버전으로 연결합니다 .

1 NDD = 닐 주도 개발.

내 이전 답변 :

, 32 27 24 20 바이트

NμNν¿÷μνIEν⁺÷μν‹ι﹪μν

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

솔루션이 없으면 아무것도 출력하지 않습니다. 자세한 버전으로 연결합니다 .

물론 닐의 도움 없이는 골프를 타지 못했습니다.


Cast연산자를 제거하면 어떤 이유로 작동하지만 이것은 이상적인 알고리즘이 아닙니다 ... 16 바이트 솔루션이 있습니다.
Neil

@ 닐 챌린지 허용!
Charlie

나는 미리 정의 된 변수를 좋아하지만 이제는 Cast목록 에서 작동 한다는 것을 알고 있습니다. 11 바이트로 줄었습니다.
Neil

@ Neil 그리고 난 여전히 사용할 수 없습니다 Map, 지구상에서 어떻게 작동합니까 ??
Charlie

Mapfor같은 루프 변수를 사용 하는 식 버전과 같습니다. 따라서 예제에서 매번 표현식을 목록으로 푸시하지 않고 Map자동으로 표현식을 수집하여 결과 목록으로 평가합니다.
Neil

3

R , 33 바이트

function(m,n)diff(trunc(0:n*m/n))

Luis Mendo의 Octave 답변 포트 . 이것이 이전 답변보다 거의 50 % 짧다는 것은 매우 슬픈 일입니다.

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

이전 답변, 63 바이트 :

function(m,n,o=rep(m%/%n,n),d=m-sum(o))o+c(rep(0,n-d),rep(1,d))

두 개의 (필수) 인수 mn골프를 목적으로하는 두 개의 선택적 인수를 취하는 익명 함수입니다 . 증가하는 순서로 벡터를 반환합니다. 실패의 경우 첫 번째 값은 0이며 이는 R에서 거짓입니다.if 이며, 벡터의 첫 번째 값만 사용하므로 (경고 포함).

기본적으로 다음 기능과 같습니다.

function(m,n){o=rep(m%/%n,n)
d=m-sum(o)
o+c(rep(0,n-d),rep(1,d))}

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


pryr::f(diff(trunc(0:n*m/n)))작동하고 더 짧습니다!
JAD

2

젤리 , 7 6 바이트

:ȧœsL€

온라인으로 사용해보십시오!거짓에 대해서는 아무것도 출력하지 않습니다.

작동 원리

:ȧœsL€    Main link. Arguments: m (integer), n (integer)
:         Integer division. Yields 0 if m < n; a positive integer otherwise.
 ȧ        Logical AND. Yields 0 if m < n; m otherwise.
  œs      Split into n roughly equal groups. Since the left argument is an integer,
          this implicitly converts it to [1..m] (or [] for 0) before splitting.
    L€    Length of €ach. If the inputs were 7 and 3, the previous result would be
          [[1,2,3],[4,5],[6,7]], so this would give [3,2,2].

2

TI 기본, 23 바이트

:Prompt M,N
:N(M≥N
:int(Ans⁻¹randIntNoRep(M,M+N-1

오류 발생시 ERR : DIVIDE BY 0을 반환


2

옥타브 , 24 바이트

@(m,n)diff(fix(0:m/n:m))

이 코드는 익명 함수를 정의합니다. 출력은 숫자 형 배열 (행 벡터)입니다. 이 배열이 없으면 하나 이상의 0을 포함하며 옥타브 에서는 거짓 입니다.

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

설명

0:m/n:m배열 생성 n+1로부터 값 0m단계와 m/n. fix각 항목을쪽으로 반올림 0하고diff 연속적인 차이를 계산합니다.

예를 들어,에 대한 모든 중간 결과는 다음 m = 7n = 3같습니다.

>> 0:m/n:m
ans =
         0    2.3333    4.6667    7.0000

>> fix(0:m/n:m)
ans =
     0     2     4     7

>> diff(fix(0:m/n:m))
ans =
     2     2     3

0을 포함하는 배열은 거짓입니다. 그것은 스트레칭처럼 보이지만 옥타브도 모른다. 강제로 자바 스크립트에서 나오는 이유는 무엇입니까? 나에게서 +1
Christiaan Westerbeek

트윗 담아 가기 그것은 당신이 다른 언어에서 오는 경우 소리가 이상하지,하지만의 그것이 얼마나 MATLAB / 옥타브에
루이스 Mendo

2

하스켈 , 93 89 88 87 86 71 바이트

m!n|n<=m=e$m:(0<$[2..n])
e(a:b:x)|b<a=e$a-1:e(b+1:x)
e(a:x)=a:e x
e x=x

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

설명

여기서 주요 기능은 e입니다. e목록을 가져와 본질적으로 왼쪽에서 오른쪽으로 롤링 핀을 실행합니다. 리스트에 이웃보다 오른쪽에있는 요소가있는 동안 오른쪽에서 오른쪽으로 이동합니다.

이제 우리가해야 할 일은이 함수에 충분히 일방적 인 목록을주고 마법을 할 수있게하는 것입니다. 우리가 선택합니다 목록은 그냥 m다음에 n-1제로. 그렇게하기가 쉽습니다.

마지막으로해야 할 일은 오류가 처리되었는지 확인하는 것입니다. 이를 위해 우리는 Non-exhaustive patterns in function만큼 오류를 던집니다 m>n.


error[]비 포괄적 인 패턴으로 실패 하면 제거 할 수 있다고 생각합니다 m!n|m>n=e$m:replicate(n-1)0.
Laikoni

또한 (0<$[1..n-1])보다 짧습니다 replicate(n-1)0.
Laikoni

2

C # (. NET 코어) , 86 82 71 바이트

using System.Linq;a=>b=>new int[b].Select((x,i)=>(i<a%b?1:0/(a/b))+a/b)

유효하지 않은 입력에 대해 오류를 발생시킵니다.

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

TheLethalCoder 덕분에 -4 바이트

OlivierGrégoire 덕분에 -11 바이트


1
이것은 현재 코드 스 니펫입니다. 당신은 그것을 익명 함수로 또는 a=>b=>시작시 에 포장해야합니다 .
TheLethalCoder

@TheLethalCoder 흠 확실합니까? ?를 using System.Collections.Generic반환하면 추가하지 않아도 IEnumerable<int>됩니까?
LiefdeWen

어쨌든 배열을 반환하기 때문에 잘못되었습니다 (삼항의 첫 부분을 잘못 읽었습니다). 그러나 그것이 코드에 표시되고 IEnumerable<int>함수 정의에있는 것처럼 보일 경우 에만를 포함 할 필요가 없습니다 using.
TheLethalCoder

아니요, .ToArray ()가없는 코드는 여전히 컴파일되므로 팁이 여전히 좋습니다.
LiefdeWen

1
@ OlivierGrégoire 당신은 옳고, 죄송합니다. 감사합니다.
LiefdeWen

2

하스켈, 48 바이트

m#n|m>=n=iterate(\(a:b)->b++[a+1])(0<$[1..n])!!m

n0 의 목록으로 시작하십시오 . 반복m 시간 : 첫 번째 요소를 가져 와서 하나를 추가하고 목록의 끝에 놓습니다.

의 경우 패턴 일치 오류로 실패합니다 n < m.

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



1

배치, 71 바이트

@if %1 geq %2 for /l %%i in (1,1,%2)do @cmd/cset/an=(%1+%%i-1)/%2&echo(

cmd/cset/a구분 기호를 출력하지 않으므로 사용해야합니다 echo(( (인쇄 하지 마십시오 ECHO is on.).


1

PHP> = 7.1, 62 바이트

for([,$s,$n]=$argv;$n;)$s-=$r[]=$s/$n--^0;$r[0]?print_r($r):0;

PHP 샌드 박스 온라인


샌드 박스 링크를 클릭하고 코드 실행을 클릭했는데 구문 분석 오류가 발생했습니다.
Christiaan Westerbeek

@ChristiaanWesterbeek 샌드 박스의 기본값은 PHP 7.0.3입니다.
Neil

1
Octave 및 MATL과 같은 다른 언어에서는 배열의 0이 허위로 간주되지만 PHP의 경우는 아닙니다. 나는 프로그램이 쓰여진 언어의 규칙 내에서 결과가 틀렸다고 가정한다.
Christiaan Westerbeek

1
@ChristiaanWesterbeek 고정
Jörg Hülsermann


1

자바 스크립트 (ES6), 57 56 53 41 바이트

m=>n=>m>=n&&[...Array(n)].map(_=>m++/n|0)

답은 이제 더 현명한 가치 창출 방법을 포함합니다. 감사합니다 @ Neil

용법

f=m=>n=>m>=n&&[...Array(n)].map(_=>m++/n|0)

f(6)(3) // [2, 2, 2]
f(7)(3) // [3, 2, 2]
f(7)(2) // [4, 3]
f(7)(1) // [7]
f(7)(8) // false
f(8)(3) // [3, 3, 2]

역사

첫 번째 광산

(m,n)=>m>=n&&Array(n).fill(~~(m/n)).map((v,i)=>v+(i<m%n))

(m,n)=>m>=n&&Array(n).fill().map((v,i)=>~~(m/n)+(i<m%n))

그런 다음 @Arnauld가 제공하는 스프레드 연산자와 카레 구문을 추가했습니다.

m=>n=>m>=n&&[...Array(n)].map((v,i)=>~~(m/n)+(i<m%n))

1
_=>m++/n|0많은 바이트를 저장합니다.
Neil



0

Pyth , 13 바이트

KE?>KQ0lMcK*d

온라인으로 사용해보십시오! 0에러 출력 .

부정 행위, 6 바이트

lMcE*d

온라인으로 사용해보십시오! 배열 0에 오류가 있습니다. 슬프게도 이것은 Pyth에서 거짓 이 아닙니다 .

설명

KE?>KQ0lMcK*dQ    # Implicit input Q for m
KE                # Store n in K
           *d     # Generate a string of length Q containing only spaces
         cK       # Chop this string in K pieces of equal sizes, initial piece longer if necessary
       lM         # For each string, compute the length. Here we already have our result. However if the array contain a zero, we must output a falsy value
  ?>KQ            # If K > Q...
      0           # Then display zero, otherwise display the array

0

CJam , 13 12 바이트

{_2$>/,/z:,}

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

n m스택에서와 같이 입력을받는 익명 블록입니다 . 좋은 대답 이었지만 오류 처리 요구 사항으로 인해 완전히 종료되었습니다.

해결할 수없는 경우 0으로 나누기 오류가 발생합니다.

설명

{   e# Stack:                | 3 10
 _  e# Duplicate:            | 3 10 10
 2$ e# Copy from back:       | 3 10 10 3
 >  e# Greater than:         | 3 10 1 (true)
 /  e# Divide:               | 3 10
    e# This will cause an error on invalid input.
 ,  e# Range:                | 3 [0 1 2 3 4 5 6 7 8 9]
 /  e# Split on nth element: | [[0 1 2] [3 4 5] [6 7 8] [9]]
 z  e# Transpose array:      | [[0 3 4 9] [1 4 7] [2 5 8]]
 :, e# Length of each:       | [4 3 3]
}

오류 처리 요구 사항이 해제되면이를 7 바이트로 단축 할 수 있으며 이는 40 % 이상 감소한 것입니다.

{,/z:,}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.