Maison > développement back-end > Tutoriel Python > AoC' - Hystérie de l'historien de jour (C# et Python) #Spoilers

AoC' - Hystérie de l'historien de jour (C# et Python) #Spoilers

Susan Sarandon
Libérer: 2024-12-09 05:14:14
original
788 Les gens l'ont consulté

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

Le défi d'aujourd'hui était assez simple :

Partie 1 :
Pour résoudre le problème, nous avons dû

  • créez 2 listes de nombres à partir de la chaîne d'entrée,
  • classez-les par ordre croissant
  • pour chaque numéro de la Liste1, obtenez le même index dans la Liste2 et trouvez la distance entre les deux nombres.
  • puis résumez les distances

Facile, c'est vrai.

Partie 2 :

C'était un peu plus délicat mais le concept principal de ma solution était :

  • créez un dictionnaire où la clé est le numéro dans la listeA, la valeur a utilisé la méthode Count() pour compter tous les nombres de la listeB qui étaient identiques à la clé (numéro au même index que la listeA).

  • il s'agit alors simplement de multiplier les clés par les valeurs et d'additionner les totaux.

Csharp parties 1 et 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);
}
Copier après la connexion

Partie 1 - Python

Même concept syntaxe différente - beaucoup
Plus concis grâce à la fonction zip intégrée et à la fonctionnalité de compréhension de liste.

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)

Copier après la connexion

Partie 2 - En cours (il se faisait tard)⏰

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal