병렬 계정 (2 일)


10

대학 코드 챌린지 컨테스트의 허가를받은 챌린지


두 달 전에 공부를 마친 마리는 은행 계좌를 개설하여 마을에서 첫 직장을하게되었습니다. 그 이후로 그녀는 몇 가지 거래를 해왔습니다. 그녀의 첫 지불금은 $ 1000였습니다. 그 돈으로 그녀는 부모님을 초대 한 저녁 식사 비용을 지불했으며 (저녁 식사 비용은 $ 150), 잘 알려진 슈퍼마켓 ($ 80 달러)과 휴가를위한 호텔 예약 ($ 200)에서 구매했습니다. 월말에 그녀는 다시 지불금을 받았으며 (1040 달러, 전월보다 조금 더) 슈퍼마켓에서 70 달러를 더 지출했습니다.

오늘, 그녀는 슈퍼마켓에서 첫 $ 80 달러를 지불 한 후 두 번째 계정이 생성되고 첫 번째 계정이 정지되면 두 계정의 잔고가 동일하다는 것을 깨달았습니다.

100015080Total=770200104070Total=770

이벤트는 그녀에게 매우 드물기 때문에 그녀의 계정과 친구의 움직임에도이 기능이 있는지 여부를 계속 확인하려고합니다.

도전

거래 목록이 주어지면, 은행 계좌 소유자가 두 번째 계좌를 만들어서 동일한 최종 잔고를 가질 수있는 순간 수를 출력하십시오.

예 : [1000, -150, -80, -200, 1040, -70]

1)Total=0100015080200104070Total=1540
2)1000Total=100015080200104070Total=540
3)1000150Total=85080200104070Total=690
4)100015080Total=770200104070Total=770
5)100015080200Total=570104070Total=970
6)1000150802001040Total=161070Total=70
7)100015080200104070Total=1540Total=0

테스트 사례

  • 입력 : 1000 -150 -80 -200 1040 -70출력 :1
  • 입력 : 100 -100출력 :2
  • 입력 : 1 2 3출력 :1
  • 입력 : 10 -20 15출력 :0
  • 입력 : 15 -15 15 -15출력 :3
  • 입력 : 1출력 :0

노트

  • $ 0 달러의 거래가 없을 것이라고 가정 할 수 있습니다
  • 합리적인 방법으로 입력 할 수 있습니다

11
6 개월 동안 동결 및 새로 생성 된 계정이 있으면 마리의 은행가가 요양원에 인턴되었다고보고되었습니다. "우리는 당신의 친구입니다. 당신은 약간의 휴식이 필요합니다"라고 그들은 말했다.
Arnauld

2
단일 거래의 제안 된 테스트 사례
Veskah

답변:



4

펄 6 , 25 바이트

{+grep .sum/2,[\+] 0,|$_}

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

설명

우리는 주어진리스트 (행 0을 붙일 0,|$_와 부분합들의 시퀀스를 만드는) [\+](즉, 첫 번째 요소, 처음 두 개의 합, 처음 세 등의 합으로 이루어지는 시퀀스) 및 모양 ( grep임의의 경우) 최종 계정 상태의 절반과 정확히 동일한 요소 (주어진 목록의 합계) 마지막으로로 계산합니다 +.


3

05AB1E , 11 바이트

0.ø.œ2ùO€ËO

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

0.ø          # Surround the (implicit) input list with a leading and trailing 0
             #  i.e. [100,-100] → [0,100,-100,0]
           # Get all possible partitions to divide the list
             #  → [[[0],[100],[-100],[0]],[[0],[100],[-100,0]],[[0],[100,-100],[0]],[[0],[100,-100,0]],[[0,100],[-100],[0]],[[0,100],[-100,0]],[[0,100,-100],[0]],[[0,100,-100,0]]]
     2ù      # Only leave partitions consisting of 2 items
             #  → [[[0],[100,-100,0]],[[0,100],[-100,0]],[[0,100,-100],[0]]]
       O     # Take the sum of each
             #  → [[0,0],[100,-100],[0,0]]
        €Ë   # Check of each inner list if both sums are equal (1 if truthy; 0 if falsey)
             #  → [1,0,1]
          O  # Take the sum of that (and output as result)
             #  → 2


3

자바 스크립트 (Node.js) , 45 바이트

a=>!a.map(v=>o[s+=v]=-~o[s],s=0,o=[1])|o[s/2]

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

을 사용하여 4 바이트를 저장하십시오 -~o[s]. Shaggy에게 감사합니다.




@LuisfelipeDejesusMunoz, Arnauld는 (항상) 탁월한 것이 아닙니다! ;)
Shaggy

@Shaggy Leading이로 +변경 !되었으므로 입력이 가능 [100]합니다.
tsh

아, 싱글 톤 배열을 처리해야한다는 것을 몰랐습니다. 멋지게 수정되었습니다.
얽히고 설킨


2

자바 스크립트 (ES6), 52 바이트

a=>a.map(x=>n+=(s+=x)==eval(a.join`+`)-s,n=s=0)|n+!s

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

댓글

a =>                        // a[] = input array
  a.map(x =>                // for each element x in a[]:
    n +=                    //   increment n if the following test is truthy:
      (s += x)              //     update the left sum
      ==                    //     and test whether it's equal to
      eval(a.join`+`) - s,  //     the right sum
    n = s =0                //   start with n = s = 0
  )                         // end of map()
  | n                       // yield n; if the final sum is 0, it means that we could have
  +                         // created a balanced account at the beginning of the process;
  !s                        // so, we increment n if it is

재귀 버전,  54  53 바이트

f=(a,s=0)=>a+a?(s==eval(a.join`+`))+f(a,s+a.pop()):!s

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


나는 그 52 바이트 버전을 제안하려고했다!
얽히고 설킨 Shaggy

@Shaggy 그래, 나는 재귀 버전이 더 짧을 수 있다고 생각했기 때문에 비 재귀 버전을 너무 빨리 버렸다.
Arnauld

2

APL (Dyalog Unicode) , 21 바이트 SBCS

익명의 암묵적 접두사 함수

+/⊂((+/↑)=1⊥↓)¨⍨0,⍳∘≢

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

ɩ ndices
 의
 거래의 집계

0, 앞에 0을 더하다

⊂()¨⍨ 왼쪽 인수 인 거래와 전체 거래 목록을 오른쪽 인수 인 거래와 함께 다음 암묵적 기능을 적용합니다 ( 인수 교환

 전체 거래 목록
() 아래의 함수
  ¨ 에 대한 왼쪽 인수로서
    교환 된 인수가 있는 각 인덱스에 적용됩니다 (예 : 오른쪽 목록, 왼쪽 색인) :

   그 많은 것을 왼쪽에서 떨어 뜨리십시오

  1⊥ 합계 (1 단계에서 조명 평가)

  ()= (0/1)은…

    왼쪽에서 많은 거래를

   +/ 그들을 합치다

+/ 부울리스트를 합산하여 진리의 수를 얻습니다.


2

배치, 84 바이트

@set s=%*
@set/as=%s: =+%,c=0
@for %%n in (0 %*)do @set/as-=%%n*2,c+=!s
@echo %c%

입력을 명령 행 인수로 사용합니다. 설명:

@set s=%*

공백으로 인수를 결합하십시오.

@set/as=%s: =+%,c=0

공백을 +s로 바꾸고 결과를 평가하십시오. 또한 카운트를 지우십시오.

@for %%n in (0 %*)do @set/as-=%%n*2,c+=!s

각 금액에 대해 합계에서 두 배를 빼십시오. 결과가 0이면 유효한 일치이므로 카운트를 늘리십시오. 처음에 여분의 0은 금액이 나오기 전에 일치하는 것을 허용합니다.

@echo %c%

결과를 인쇄하십시오.


2

, 15 바이트

⊞θ⁰IΣEθ⁼Σθ⊗Σ✂θκ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

 θ              Input list
  ⁰             Literal 0
⊞               Push to list
      θ         Augmented list
     E          Mapped to
             θ  Augmented list
            ✂   Sliced from
              κ Current index
           Σ    Summed
          ⊗     Doubled
       ⁼        Equals
         θ      (Augmented) list
        Σ       Summed
    Σ           Sum of booleans
   I            Cast to string
                Implicitly print

불행히도 Charcoal Sum([])에서는 그렇지 0않으므로 항상 합할 요소가 하나 이상 있어야합니다.




2

MATL , 9 바이트

s0GhYsE=s

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

다른 답변과 동일한 접근 방식 : 0을 추가하고 누적 합계의 절반이 총 합계와 얼마나 자주 같은지 확인하십시오.

s   % Total sum of (implicit) input
0Gh % Prepend 0 to another copy of the input
Ys  % Cumulative sum
E=  % Check element-wise equality of 2*cumulative sum with total sum
s   % Sum number of `true` values

2

apt -x , 14 11 바이트

iT å+ ®¥nUx

시도 해봐

iT å+ ®¥nUx     :Implicit input of array U
i               :Prepend
 T              :  Zero
   å+           :Cumulatively reduce by addition
      ®         :Map each Z
       ¥        :  Test for equality with
        n       :  Z subtracted from
         Ux     :  U reduced by addition
                :Implicitly reduce by addition and output

2

PowerShell , 88 82 바이트

mazzy 덕분에 -6 바이트

param($n)0..($x=$n.length)|%{$i+=+$z-eq($n[$_..$x]|measure -Su).sum;$z+=$n[$_]};$i

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

이것은 매우 서투른 방법처럼 보이지만 작업이 완료되었습니다. 나는 나중에 그것을 시도하고 개조 할 것입니다.


1
$i+=<predicate>대신 쓸 수 있습니다if(<predicate>){$i++}
mazzy



1

bash, 52 바이트

IFS=+;for i in 0 $@;{((c+=2*(x+=i)=="$*"));};echo $c

TIO

트릭 : 설정 IFS=+, "$*"인수로 구분되는 문자열로 확장 +합 연산 식의 평가에서,



0

J , 19 바이트

1#.[:(={:-])0+/\@,]

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

설명

1 #. [: (= ({: - ])) 0 +/\@, ]

                     0     , ]  NB. prepend 0 to input...
                       +/\@     NB. and take the prefix sums...
     [:    ({: - ])             NB. then subtract that list
                                NB. from its final elm 
                                NB. (`{:`), giving the list
                                NB. of suffix sums...
     [: (= (      ))            NB. create a 1-0 list showing
                                NB. where the prefix sums 
                                NB. equal the suffix sums
1 #.                            NB. and take the sum.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.