손상 체크섬

코드 출현 2017 2일 차



1 부


  • 유쾌한 안락함
  • 계획한 알고리즘에 애니메이션 적용

  • 유쾌한 편안함


  • 숫자 목록
  • 가장 큰 것과 가장 작은 것의 차이 찾기
  • 이러한 차이의 절대값을 합산합니다
  • .

    지금은 충분히 쉽게 들립니다!

    내가 계획한 알고리즘 애니메이션



    내 알고리즘이 하려는 것:


    그것을 만들 시간입니다!

    내 작업 알고리즘 작성


  • A reduce() 각각 집계 checksum
  • 각 행의 번호를 추출하는 정규식
  • 일치하는 각 문자열을 숫자로 변환하는 Amap()
  • 숫자를 오름차순으로 정렬하는 A sort()
  • pop()shift() 마지막 항목에서 첫 번째 항목 빼기

  • return input
        .split('\n')
        .reduce((chucksums, row) => {
          let cells = [...row.matchAll(/\d+/g)]
            .map(match => +match[0])
            .sort((a,b) => a - b)
          return chucksums += cells.pop() - cells.shift()
        }, 0)
    


    2 부


  • 승리를 위한 중첩 루프
  • 계획한 알고리즘에 애니메이션 적용

  • 승리를 위한 중첩 루프


  • 각 목록을 정렬한 후 각 값을 비교하겠습니다.
  • 내 입력의 최악의 경우, 각 라인에는 16+15+14...+1 비교가 필요합니다. 즉, 150 미만, 곱하기 16 라인: 총 2200 미만입니다. 별거 아닙니다

  • 내가 계획한 알고리즘 애니메이션





    내 작업 알고리즘 작성




    return input
        .split('\n')
        .reduce((chucksums, row) => {
          let cells = [...row.matchAll(/\d+/g)]
            .map(match => +match[0])
            .sort((a,b) => a - b)
          let divisor = null
          for (let i = 0; i < cells.length - 1; i++) {
            for (let j = i + 1; j < cells.length; j++) {
              if (
                  cells[j] / cells[i] == 
                  Math.round(cells[j] / cells[i])
                 ) {
                divisor = cells[j] / cells[i]
              }
            }
          }
          return chucksums += divisor
        }, 0)
    


  • 애니메이션과 달리 내 알고리즘은 오름차순으로 정렬합니다
  • .
  • 가장 작은 숫자로 시작하여 점점 더 큰 숫자로 나눌 때 더 빨리 실행될 가능성이 높기 때문입니다
  • .

    해냈어!!


  • 두 부분 모두 해결했습니다!
  • 내 알고리즘이 작동하는 방식을 애니메이션으로 보여주는 두 개의 GIF를 만들었습니다!
  • 두 GIF 모두 내 알고리즘과 관련된 몇 가지 오류 및 성능 향상을 보여주는 데 도움이 되었습니다!

  • 1일차를 시작하세요!

    좋은 웹페이지 즐겨찾기