>백엔드 개발 >파이썬 튜토리얼 >AoC '- Day Historian Hysteria(C# 및 Python) #스포일러

AoC '- Day Historian Hysteria(C# 및 Python) #스포일러

Susan Sarandon
Susan Sarandon원래의
2024-12-09 05:14:14738검색

AoC ‘- Day Historian Hysteria (C# & Python) #Spoilers

오늘의 챌린지는 아주 간단했습니다.

1부:
문제를 해결하려면

  • 문자열 입력에서 숫자 목록 2개를 생성합니다.
  • 오름차순으로 정렬하세요
  • List1의 foreach 숫자는 List2에서 동일한 인덱스를 얻고 두 숫자 사이의 거리를 구합니다.
  • 그런 다음 거리를 합산합니다

쉽죠.

2부:

이것은 조금 더 까다로웠지만 내 솔루션의 주요 개념은 다음과 같습니다.

  • 키가 listA의 숫자인 사전을 생성합니다. 값은 Count() 메서드를 사용하여 키와 동일한(listA와 동일한 인덱스에 있는 숫자) listB의 모든 숫자를 계산합니다.

  • 그러면 키에 값을 곱하고 합계를 합산하는 간단한 경우입니다.

Csharp 파트 1 및 2:

var input = File.ReadAllLines("./input_1.txt")
    .Select(s => s.Split([' '], StringSplitOptions.RemoveEmptyEntries)).ToList();

var lists = ProcessLines(input);

Part1(lists.list1, lists.list2);

Part2(lists.list1, lists.list2);
return;


void Part1(List<int> list1, List<int> list2)
{
    var ordered1 = list1.OrderBy(x => x).ToList();
    var ordered2 = list2.OrderBy(x => x).ToList();
    var totals = ordered1
        .Select((t, i) => Math.Abs(t - ordered2[i]))
        .Select(difference => (long)difference)
        .ToList();


    Console.WriteLine("Sum of differences: " + totals.Sum());
}


void Part2(List<int> list1, List<int> list2)
{
    var counts = list1.ToDictionary(
        number => number,
        number => list2.Count(x => x == number)
    );

    var sum = counts.Sum(x => x.Value * x.Key);
    Console.WriteLine("Sum of counts: " + sum);
}

(List<int> list1, List<int> list2) ProcessLines(List<string[]> rows)
{
    var list1 = new List<int>();
    var list2 = new List<int>();

    foreach (var row in rows)
    {
        list1.Add(int.Parse(row[0]));
        list2.Add(int.Parse(row[1]));
    }

    return (list1, list2);
}

1부 - Python

같은 개념 다른 구문 - 많음
내장된 zip 기능과 목록 이해 기능을 사용하여 더욱 간결해졌습니다.

def get_steps(list1, list2):
    totals = [abs(value - partner_item)
              for value, partner_item in zip(list1, list2)]
    print("Sum Total:", sum(totals))


def read_input(file_name):
    list1, list2 = zip(*((int(num1), int(num2))
                       for num1, num2 in (line.split() for line in open(file_name))))
    return sorted(list1), sorted(list2)


list1, list2 = read_input("input.txt")

get_steps(list1, list2)

2부 - 진행 중(늦었어요)⏰

위 내용은 AoC '- Day Historian Hysteria(C# 및 Python) #스포일러의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.