코드 2021의 출현 - 3일 차
7470 단어 javaprogrammingadventofcode
퍼즐
--- 3일차: 이진 진단 ---
잠수함이 이상한 삐걱거리는 소리를 내고 있으므로 만일을 대비하여 진단 보고서를 생성하도록 요청합니다.
진단 보고서(퍼즐 입력)는 이진 숫자 목록으로 구성되어 있으며 올바르게 디코딩되면 잠수함의 상태에 대해 많은 유용한 정보를 알려줄 수 있습니다. 확인해야 할 첫 번째 매개변수는 전력 소비입니다.
진단 보고서의 이진수를 사용하여 두 개의 새로운 이진수(감마율 및 입실론율이라고 함)를 생성해야 합니다. 그런 다음 감마 비율에 엡실론 비율을 곱하여 전력 소비를 찾을 수 있습니다.
감마율의 각 비트는 진단 보고서에 있는 모든 숫자의 해당 위치에서 가장 공통적인 비트를 찾아서 결정할 수 있습니다. 예를 들어 다음 진단 보고서가 있다고 가정합니다.
00100
11110
10110
10111
10101
01111
00111
11100
10000
11001
00010
01010
각 숫자의 첫 번째 비트만 고려하면 5개의 0비트와 7개의 1비트가 있습니다. 가장 일반적인 비트가 1이므로 감마율의 첫 번째 비트는 1입니다.
진단 보고서에 있는 숫자의 가장 일반적인 두 번째 비트는 0이므로 감마율의 두 번째 비트는 0입니다.
세 번째, 네 번째, 다섯 번째 비트의 가장 일반적인 값은 각각 1, 1, 0이므로 감마율의 마지막 세 비트는 110입니다.
따라서 감마율은 이진수 10110 또는 십진수로 22입니다.
엡실론 비율은 비슷한 방식으로 계산됩니다. 가장 공통 비트를 사용하는 대신 각 위치의 최소 공통 비트가 사용됩니다. 따라서 엡실론 비율은 01001 또는 십진수로 9입니다. 감마 비율(22)에 엡실론 비율(9)을 곱하면 소비 전력 198이 생성됩니다.
진단 보고서의 이진수를 사용하여 감마 비율과 엡실론 비율을 계산한 다음 함께 곱합니다. 잠수함의 전력 소비는 얼마입니까? (2진수가 아닌 10진수로 답을 표현해야 합니다.)*
내 솔루션
package main;
import java.io.File;
import java.util.*;
public class Puzzle {
public static void main(String[] args) throws Exception {
File input = new File("/Users/files/input.txt");
StringBuilder gammaRate = new StringBuilder();
StringBuilder epsilonRate = new StringBuilder();
for (int i = 0; i < 12; i++) {
Scanner scanner = new Scanner(input);
List<Character> characterZero = new ArrayList<>();
List<Character> characterOne = new ArrayList<>();
while (scanner.hasNextLine()) {
char character = scanner.nextLine().charAt(i);
switch (character) {
case '0':
characterZero.add(character);
break;
case '1':
characterOne.add(character);
}
}
if (characterZero.size() > characterOne.size()) {
gammaRate.append('0');
epsilonRate.append('1');
} else {
gammaRate.append('1');
epsilonRate.append('0');
}
}
int gammaInDecimal = Integer.parseInt(gammaRate.toString(), 2);
int epsilonInDecimal = Integer.parseInt(epsilonRate.toString(), 2);
System.out.println(gammaInDecimal * epsilonInDecimal);
}
}
*출처: https://adventofcode.com/2021/day/3
Reference
이 문제에 관하여(코드 2021의 출현 - 3일 차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/petraboldi/advent-of-code-2021-day-3-1oo5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)