신호와 잡음

코드 출현 2016 6일 차



1 부



괜찮아요!


  • 또 다른 캐릭터 카운팅 퍼즐?
  • 이제 마스터가 된 기분이에요!
  • 두 가지reduce() 메서드를 함께 연결하는 경우는 드문 경우일 수 있습니다. 이전에 두 메서드를 서로 중첩한 적이 있지만 바로 사용하는 경우는 거의 없습니다
  • .

    의사 코드로서의 내 알고리즘 :

    Split the input at each newline character into an array of strings
    For each string, accumulate an array with as many empty objects as there are characters in the string
      Split each string into an array of characters
      For each character
        Increment the number associated with the character key in the object at the same index in the accumulating array as the character's in the string
    For each object, accumulate a string
      The next character is the one who's key is associated with the largest number among all the keys in that object
    Return the accumulated string
    


    내 알고리즘을 JavaScript로:

    input.reduce(
     (counts, line) => {
      line.split('')
       .forEach(
        (char, i) => counts[i][char] = (counts[i][char] || 0) + 1
       )
      return counts
     }, new Array(stream[0].length).fill(null)
                                   .map(el => Object.create({}))
    ).reduce(
     (message, tallies) => {
       return message += Object.entries(tallies)
        .find(
           (el) => el[1] == Math.max(...Object.values(tallies))
        )[0]
     }, ""
    )
    


    예를 들어 예상대로 easter가 생성되었습니다!

    내 정답도 생성되었습니다!

    2 부



    최대값을 최소값으로 변경



    그것이 정답을 얻기 위해 내가 해야 할 전부였습니다!

    두 답변을 모두 생성하도록 알고리즘을 리팩토링했습니다.

    function bothParts(fn) {
     input.reduce(
      (counts, line) => {
       line.split('')
        .forEach(
         (char, i) => counts[i][char] = (counts[i][char] || 0) + 1
        )
       return counts
      }, new Array(stream[0].length).fill(null)
                                    .map(el => Object.create({}))
     ).reduce(
      (message, tallies) => {
        return message += Object.entries(tallies)
         .find(
            (el) => el[1] == fn(...Object.values(tallies))
         )[0]
      }, ""
     )
    }
    // Part 1: bothParts(Math.max)
    // Part 2: bothParts(Math.min)
    


    훌륭하게 작동합니다!

    해냈어!!


  • 두 부분 모두 해결했습니다!
  • 5일차 퍼즐의 기록 시간은 30분 미만입니다!
  • 그리고 함수 본문에 대해 10줄 미만의 코드를 호출하는 일련의 긴 일련의 메서드가 있습니다!
  • 제 알고리즘이 작동하는 방식을 애니메이션화하기 위해 우스꽝스러운 GIF도 만들었습니다!
  • 좋은 웹페이지 즐겨찾기