높은 엔트로피 암호

코드 출현 2017 4일차



1 부


  • 재고 관리 시스템 Redux!
  • 작업 알고리즘 작성

  • 재고 관리 시스템 Redux!


  • 기억하세요 2018 Day 2 ?
  • 문자열 내에서 문자의 정확한 개수를 찾도록 요청함
  • 비슷한 느낌이지만 내 생각에는 더 쉽습니다.
  • 각 문자열에 대한 문자 수 개체를 빌드할 필요가 없기 때문에
  • ArraySet 만 있으면 lengthsize 를 비교할 수 있습니다!

  • 내 작업 알고리즘 작성




    Split the input at each newline character into an array of strings
    
    For each string, accumulate a tally, starting at 0
      Split the string at each space character into an array of strings
      If the length of the array is the same as the size of a Set generated from that array
        Increment the tally by 1, because there are no duplicate phrases
      Else
        Leave the tally unchanged
    
    Return the tally
    


    JavaScript에서는 reduce() , split() , Array.length , Set.size 및 a ternary operator 를 하나의 긴 체인 문에 사용합니다.

    input.split('\n')
         .reduce((tally, current) => {
           return tally += current.split(' ').length 
                        == new Set(current.split(' ')).size 
                        ? 1 : 0
         }, 0)
    


    2 부


  • 정말 유쾌한 반전입니다!
  • 쓰리reduce() RS 이렇게!
  • 내 작업물 공개 reduce() rs

  • 정말 유쾌한 반전입니다!


  • 애너그램, 어? 재미있다!
  • 또한...복잡함

  • 음... 어떻게 해결해야 할까요?

    3개의 reduce() rs, 그 방법입니다!



    이것은 매우 빠르게 복잡해 질 것입니다. 그러니 참으세요.
  • 유효한 암호
  • 의 집계를 추적하는 외부reduce()
  • 각 단어
  • 에 대한 문자열화된 모든 문자 집계를 수집하는 이너reduce()
  • 한 단어
  • 에 대한 문자열화된 문자 집계를 생성하는 가장 안쪽reduce()
    이 애니메이션은 마지막 예제 암호 세트를 사용하여 각 reduce() rs를 보여줍니다.

    작동 중인 reduce() rs 공개



    이것은 제가 자랑스럽게 약 15분 만에 작성한 JavaScript입니다.

    return input
      .split('\n')
      .reduce((passphrases, passphrase) => {
        let letterCounts = passphrase
          .split(' ')
          .reduce((list, group) => {
            let counts = group
              .split(' ')
              .reduce((tallies, letter) => {
                tallies[letter] = (tallies[letter] || 0) + 1
                return tallies
              }, {})
            list.push(
              Object.keys(counts)
                .sort()
                .map(el => el + '|' + counts[el]).join(''))
            return list
          }, [])
        return passphrases += letterCounts.length 
                           == new Set(letterCounts).size 
                           ? 1 : 0
      }, 0)
    


    해냈어!!


  • 두 부분 모두 해결했습니다!
  • 나는 reduce()를 많이 사용했습니다!
  • 각각reduce()이 무엇을 하는지 보여주는 상세한 GIF를 만들었습니다!
  • 파트 2를 풀면서 정말 즐거웠습니다!
  • 이제 해당 연도 내 개인 최고 별점에서 동률을 기록했습니다: 40 !
  • 좋은 웹페이지 즐겨찾기