Skip to content

Commit

Permalink
add "docstrings"
Browse files Browse the repository at this point in the history
  • Loading branch information
LivInTheLookingGlass committed Sep 7, 2024
1 parent c2a554e commit d74a5d6
Show file tree
Hide file tree
Showing 6 changed files with 251 additions and 156 deletions.
60 changes: 38 additions & 22 deletions lua/src/p0001.lua
Original file line number Diff line number Diff line change
@@ -1,22 +1,38 @@
return {
solution = function()
local answer = 0

for i = 3,999,3
do
answer = answer + i
end

for i = 5,999,5
do
answer = answer + i
end

for i = 15,999,15
do
answer = answer - i
end

return answer
end
}
-- Project Euler Question 1
--
-- I did it the old-fashioned way in this language
--
-- Revision 1:
--
-- I found a closed form solution that works in the general case, so it's about an
-- order of magnitude faster now.
--
-- Problem:
--
-- If we list all the natural numbers below 10 that are multiples of 3 or 5, we
-- get 3, 5, 6 and 9. The sum of these multiples is 23.
--
-- Find the sum of all the multiples of 3 or 5 below 1000.

return {
solution = function()
local answer = 0

for i = 3,999,3
do
answer = answer + i
end

for i = 5,999,5
do
answer = answer + i
end

for i = 15,999,15
do
answer = answer - i
end

return answer
end
}
53 changes: 34 additions & 19 deletions lua/src/p0002.lua
Original file line number Diff line number Diff line change
@@ -1,19 +1,34 @@
return {
solution = function()
local answer = 0
local a = 1
local b = 2

while b < 4000000
do
answer = answer + b

for j = 1,3,1
do
a, b = b, a + b
end
end

return answer
end
}
-- Project Euler Problem 2
--
-- I modeled this after the C++ solution, because it was by far the simplest
--
-- Problem:
--
-- Each new term in the Fibonacci sequence is generated by adding the previous two
-- terms. By starting with 1 and 2, the first 10 terms will be:
--
-- 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
--
-- By considering the terms in the Fibonacci sequence whose values do not exceed
-- four million, find the sum of the even-valued terms.
--

return {
solution = function()
local answer = 0
local a = 1
local b = 2

while b < 4000000
do
answer = answer + b

for j = 1,3,1
do
a, b = b, a + b
end
end

return answer
end
}
44 changes: 31 additions & 13 deletions lua/src/p0006.lua
Original file line number Diff line number Diff line change
@@ -1,13 +1,31 @@
return {
solution = function()
local sum = 1
local sum_of_squares = 1
for i = 2,100,1
do
sum = sum + i
sum_of_squares = sum_of_squares + (i * i)
end
return (sum * sum) - sum_of_squares;
end
}

-- Project Euler Problem 6
--
-- This turned out to be really easy
--
-- Problem:
--
-- The sum of the squares of the first ten natural numbers is,
-- 1**2 + 2**2 + ... + 10**2 = 385
--
-- The square of the sum of the first ten natural numbers is,
-- (1 + 2 + ... + 10)**2 = 55**2 = 3025
--
-- Hence the difference between the sum of the squares of the first ten natural
-- numbers and the square of the sum is 3025 − 385 = 2640.
--
-- Find the difference between the sum of the squares of the first one hundred
-- natural numbers and the square of the sum.

return {
solution = function()
local sum = 1
local sum_of_squares = 1
for i = 2,100,1
do
sum = sum + i
sum_of_squares = sum_of_squares + (i * i)
end
return (sum * sum) - sum_of_squares;
end
}

58 changes: 36 additions & 22 deletions lua/src/p0009.lua
Original file line number Diff line number Diff line change
@@ -1,22 +1,36 @@
return {
solution = function()
local c = 3
while true
do
local c_square = c * c
for b = 2,c,1
do
local b_square = b * b
for a = 1,b,1
do
local a_square = a * a
if a_square + b_square == c_square and a + b + c == 1000
then
return a * b * c
end
end
end
c = c + 1
end
end
}
-- Project Euler Problem 9
--
-- This was pretty fun to port
--
-- Problem:
--
-- A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,
-- a**2 + b**2 = c**2
--
-- For example, 3**2 + 4**2 = 9 + 16 = 25 = 5**2.
--
-- There exists exactly one Pythagorean triplet for which a + b + c = 1000.
-- Find the product abc.

return {
solution = function()
local c = 3
while true
do
local c_square = c * c
for b = 2,c,1
do
local b_square = b * b
for a = 1,b,1
do
local a_square = a * a
if a_square + b_square == c_square and a + b + c == 1000
then
return a * b * c
end
end
end
c = c + 1
end
end
}
167 changes: 92 additions & 75 deletions lua/src/p0017.lua
Original file line number Diff line number Diff line change
@@ -1,75 +1,92 @@
local function to_string_len(n)
if n >= 1000
then
local thousands = to_string_len(n // 1000 % 100) + 8
if n % 1000 ~= 0
then
thousands = thousands + to_string_len(n % 1000)
end
return thousands
end
if n >= 100
then
local hundreds = to_string_len(n // 100 % 10) + 7
if n % 100 ~= 0
then
hundreds = hundreds + 3 + to_string_len(n % 100)
end
return hundreds
end
if n >= 20
then
local tens_t = {
[2] = 6,
[3] = 6,
[4] = 5,
[5] = 5,
[6] = 5,
[7] = 7,
[8] = 6,
[9] = 6,
}
local tens = tens_t[n // 10]
if n % 10 ~= 0
then
tens = tens + to_string_len(n % 10)
end
return tens
end
local final = {
[0] = 4,
[1] = 3,
[2] = 3,
[3] = 5,
[4] = 4,
[5] = 4,
[6] = 3,
[7] = 5,
[8] = 5,
[9] = 4,
[10] = 3,
[11] = 6,
[12] = 6,
[13] = 8,
[14] = 8,
[15] = 7,
[16] = 7,
[17] = 9,
[18] = 8,
[19] = 8,
}
return final[n]
end

return {
solution = function()
local answer = 0

for x = 1,1000,1
do
answer = answer + to_string_len(x)
end

return answer
end
}
-- Project Euler Problem 17
--
-- The key here was remembering I don't need to return the whole string, just the length
--
-- Problem:
--
-- If the numbers 1 to 5 are written out in words: one, two, three, four, five,
-- then there are 3 + 3 + 5 + 4 + 4 = 19 letters used in total.
--
-- If all the numbers from 1 to 1000 (one thousand) inclusive were written out in
-- words, how many letters would be used?
--
-- NOTE: Do not count spaces or hyphens. For example, 342 (three hundred and
-- forty-two) contains 23 letters and 115 (one hundred and fifteen) contains 20
-- letters. The use of "and" when writing out numbers is in compliance with
-- British usage.

local function to_string_len(n)
if n >= 1000
then
local thousands = to_string_len(n // 1000 % 100) + 8
if n % 1000 ~= 0
then
thousands = thousands + to_string_len(n % 1000)
end
return thousands
end
if n >= 100
then
local hundreds = to_string_len(n // 100 % 10) + 7
if n % 100 ~= 0
then
hundreds = hundreds + 3 + to_string_len(n % 100)
end
return hundreds
end
if n >= 20
then
local tens_t = {
[2] = 6,
[3] = 6,
[4] = 5,
[5] = 5,
[6] = 5,
[7] = 7,
[8] = 6,
[9] = 6,
}
local tens = tens_t[n // 10]
if n % 10 ~= 0
then
tens = tens + to_string_len(n % 10)
end
return tens
end
local final = {
[0] = 4,
[1] = 3,
[2] = 3,
[3] = 5,
[4] = 4,
[5] = 4,
[6] = 3,
[7] = 5,
[8] = 5,
[9] = 4,
[10] = 3,
[11] = 6,
[12] = 6,
[13] = 8,
[14] = 8,
[15] = 7,
[16] = 7,
[17] = 9,
[18] = 8,
[19] = 8,
}
return final[n]
end

return {
solution = function()
local answer = 0

for x = 1,1000,1
do
answer = answer + to_string_len(x)
end

return answer
end
}
Loading

0 comments on commit d74a5d6

Please sign in to comment.