diff --git a/day3/day3ai.lua b/day3/day3ai.lua new file mode 100644 index 0000000..d0eb7a5 --- /dev/null +++ b/day3/day3ai.lua @@ -0,0 +1,54 @@ +for i = 1, 1000 do +-- Open the file for reading +local file = assert(io.open("strings.txt", "r")) + +-- Initialize a variable to store the sum of scores +local score = 0 + +-- Read each line from the file +for line in file:lines() do + -- Split the line in half + local first_half = line:sub(1, #line / 2) + local second_half = line:sub(#line / 2 + 1) + + -- Create a table to store the characters in each half + local first_half_chars = {} + local second_half_chars = {} + + -- Iterate over each character in each half and store it in the table + for i = 1, #first_half do + first_half_chars[first_half:sub(i, i)] = true + end + for i = 1, #second_half do + second_half_chars[second_half:sub(i, i)] = true + end + + -- Create a table to store the characters that have already been counted + local counted_chars = {} + + -- Iterate over each character in the first half again + -- and check if it exists in the second half + for i = 1, #first_half do + local char = first_half:sub(i, i) + if second_half_chars[char] and not counted_chars[char] then + -- If it does and it hasn't been counted yet, + -- assign it a score and add it to the sum of scores + local score_value = 0 + if char:lower() == char then + -- If the character is lowercase, its score is its ASCII value - 96 + score_value = string.byte(char) - 96 + else + -- If the character is uppercase, its score is its ASCII value - 64 + 26 + score_value = string.byte(char) - 64 + 26 + end + score = score + score_value + + -- Add the character to the counted_chars table so it won't be counted again + counted_chars[char] = true + end + end +end + +-- Print the final sum of scores +print(score) +end