Advent of Code (AoC) 2024


Buy Me a Coffee at ko-fi.com

E’ iniziato Advent of Code 2024 (AoC) , diversamente dall’avvento di cristo i programmatori aspettano l’AVVENTO DEL CODICE.  Come ogni anno, nel mese di dicembre, sul sito adventofcode.com per 25 giorni dal 1° di dicembre al 25° di dicembre, ogni giorno ce una sfida di programmazione, il vostro obbiettivo? Completare la sfida per ottenere tutte le stelle per addobbare l’albero di natale. 

La sfida consiste in una traccia a tema natalizio (solitamente gli elfi aiutanti di babbo natale che combinano casini) che si divide in due parti il completamento di ciascuna parte vi dara una stella. Otterrete cosi in totale 50 stelle.

Le sfide sono pesantemente basate sulla manipolazione delle stringhe di testo. Quindi preparatevi a fare string parsing di continuo. 

La difficolta principale che potreste trovare? La traccia è in inglese e può risultare lunga e difficile da decifrare. Ovviamente la sfida diventa sempre più difficile ogni giorno che passa. Io personalmente non sono riuscito ad andare oltre la 6° giornata. Ma questo sono io. 

SPOILERS

La prima traccia è uscita e sono riuscito a completarla. Io sono autodidatta e l’unico modo di programmare che conosco è il gdscript di Godot Engine. 

Tempo Impiegato : Circa 1h10m
Linguaggio : GdScript
Day 1

Dati base:
3   4
4   3
2   5
1   3
3   9
3   3
La prima parte della traccia chiedeva, date le due liste (sinistra e destra) altro non sono che due liste di luoghi distanti tra di loro. Bisogna organizzarsi in modo da capire quale è la distanza totale tra questi numeri, Bisogna quindi prendere i numeri più piccoli da entrambe le liste , due alla volta e poi sottrarli tra di loro. 1-3 =-2 , prendiamo il numero assoluto quindi senza il segno. 2-3=-1 e cosi via … totale distanza sarà data da 2 + 1 + 0 + 1 + 2 + 5 = 11
La seconda traccia invece chiede, di prendere ciascun numero della prima lista e trovare quante volte è presente nell’altra lista. Poi si prende il numero stesso e si moltiplica per il numero di occorrenze. 
Il 3 ad esempio è presente 3 volte nella lista a destra. 3*3 =9  , il 4 è presente solo 1 volta , quindi 4*1=4 …insomma bisogna fare la somma.
Questo è stato il mio approccio:


extends Node2D

var list1 = []
var list2 = []
var list1_1 = []
var list2_1 = []
var rawData
var rawData2 = []
var distance = 0
var similarities = 0

func _ready():
    # Loading Data
    rawData = Glo.loadData()
    # Splitting Data in for line
    rawData = rawData.split("\n")
    # Removing "\r" from some data and creating a new array
    for i in rawData:
        rawData2.append(i.rstrip("\r"))

    # Removing spaces " " from each array and converting to numbers (int)
    # Creating a new array
    rawData = []
    for n in rawData2:
        var finalForm = n.split(",", false)
        rawData.append([int(finalForm[0]), int(finalForm[1])])

    # Create list 1 and list 2
    for item in rawData:
        list1.append(item[0])
        list2.append(item[1])

    # Duplicating array for later
    list1_1 = list1.duplicate()
    list2_1 = list2.duplicate()
    
# Calculate Distance
for size in list1.size():
    var a = list1.pop_at(list1.find(list1.min()))
    var b = list2.pop_at(list2.find(list2.min()))
    var d = abs(a-b)
    distance += d

# Check similarities
for i in list1_1:
    var sim = list2_1.count(i)
    var simTot = i * sim
    similarities += simTot

print("Distance: ", distance)
print("Similarities: ", similarities)

#-In un singleton chiamato Glo

extends Node

var dataPath = "res://Day 1 data.txt"
# Load data func in singleton
func loadData():
    var data = FileAccess.get_file_as_string(dataPath)
    return data
Buy Me a Coffee at ko-fi.com

Commenti