맞춤 세관

코드 출현 2020 6일차



작업: X에 대해 풀기 여기서...



1 부:

X = the sum of each group's count of unique questions answered 'yes'


2 부:

X = the sum of each group's count of shared questions answered 'yes'


예시 입력




abc

a
b
c

ab
ac

a
a
a
a

b


나타내는
  • '예'라고 답한 질문
  • 회선당 1인승
  • 빈 줄로 구분된 승객 그룹에 의해

  • 1 부


  • 집합에서 고유한 값을 계산하는 것만큼 간단합니까?
  • 예, 그렇게 간단했습니다!

  • 세트에서 고유한 값을 세는 것만큼 간단합니까?



    주어진 그룹:

    abcx
    abcy
    abcz
    


    문자열로 표현:

    'abcx\nabcy\nabcz'
    


    개행 문자가 제거된 상태에서

    'abcxabcyabcz'
    


    문자 배열로 분할:

    ['a','b','c','x','a','b','c','y','a','b','c','z']
    


    고유한 값 세트에 추가된 각 문자

    abcxabcyabcz
    ++++xxx+xxx+
    
    abcx   y   z
    
    abcxyz
    


    집합의 크기를 반환

    6
    


    예, 그렇게 간단했습니다!




    Split the input at each double-new-line character to generate an array of strings
    
    For each string, accumulate a sum - starting from 0
      Add to the sum the result of these operations:
        Remove any new-line characters in the current string
        Split the string into an array of characters
        For each character, accumulate a unique set of values - starting empty
          Attempt to add the current character to the set
          Return the set containing all unique characters added
        Return the size of the unique set
    
    Return the sum of all set sizes
    


    다음은 JavaScript로 작성된 알고리즘입니다.
  • 어큐뮬레이터의 약자
  • c는 전류를 나타냅니다.

  • input
      .split('\n\n')
      .reduce((a,c) => a += c
        .replaceAll('\n','')
        .split('')
        .reduce((a,c) => a.add(c), new Set()).size
       ,0)
    


    다음은 해당 알고리즘의 시각화입니다.

    2 부


    순식간에 파트 1 리팩토링



    Split the input at each double-new-line character to generate an array of strings
    
    For each string, accumulate a sum - starting from 0
      Add to the sum the result of these operations:
        Store as the variable, groups:
          Split each string at the new-line character to create an array of strings
          Split each string into an array of characters
        Checking only the first array in groups:
          For each character, accumulate a unique set of values - starting empty
            If the character exists in each of the arrays inside groups
              Attempt to add the current character to the set
            Return the set containing all unique characters added
          Return the size of the unique set
    
    Return the sum of all set sizes
    

    JavaScript로 작성된 알고리즘은 다음과 같습니다.

    stream
      .split('\n\n')
      .reduce(
        (a1, c1) => {
          let groups = c1
            .split('\n')
            .map(el => el.split(''))
          return a1 += groups[0]
            .reduce(
              (a2,c2) => groups.every(i => i.includes(c2)) 
                ? a2.add(c2)
                : a2, new Set()
            )
            .size
        }, 0)
    


    내 알고리즘의 시각화는 다음과 같습니다.


    그 퍼즐은 쉽게 느껴졌다.

    내가 얼마나 배웠는지에 대한 증거입니다.

    거의 1년 전에 지침을 처음 훑어봤을 때 이 퍼즐을 건너뛴 것을 기억하기 때문입니다.

    입증할 수 있는 자기 개선과 성취감에 만세!

    좋은 웹페이지 즐겨찾기