Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4177ecf655 | |||
| 78a1607789 |
36
Euler.gd
Normal file
36
Euler.gd
Normal file
@@ -0,0 +1,36 @@
|
||||
class_name EulerCalculator extends Control
|
||||
|
||||
|
||||
|
||||
func _on_test_button_down() -> void:
|
||||
var answer:int = calc_biggest_palindromic_number(2)
|
||||
show_result(answer)
|
||||
|
||||
func _on_calculate_button_down() -> void:
|
||||
var answer:int = calc_biggest_palindromic_number(3)
|
||||
show_result(answer)
|
||||
|
||||
func show_result(answer:int) -> void:
|
||||
$VBoxContainer/Label.text = str(answer)
|
||||
|
||||
func calc_biggest_palindromic_number(digits:int) -> int:
|
||||
var highest_palindrome:int = -1
|
||||
var min:int=pow(10,digits-1)
|
||||
var max:int=pow(10,digits)
|
||||
for a in range(min, max):
|
||||
for b in range(min, max):
|
||||
var p:int = a*b
|
||||
var arr:Array = [0]
|
||||
for k in range(1, digits*2+1):
|
||||
var unit:int = p % (pow(10,k) as int)
|
||||
unit /= (pow(10,k-1) as int)
|
||||
arr.append(unit)
|
||||
arr.remove_at(0)
|
||||
if arr.size() != digits*2:
|
||||
continue
|
||||
var is_palindrome:bool = true
|
||||
for k in range(0,digits):
|
||||
is_palindrome = is_palindrome and arr[k] == arr[digits*2-k-1]
|
||||
if is_palindrome and highest_palindrome<p:
|
||||
highest_palindrome = p
|
||||
return highest_palindrome
|
||||
48
Euler.tscn
Normal file
48
Euler.tscn
Normal file
@@ -0,0 +1,48 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://cn5rxob16gaic"]
|
||||
|
||||
[ext_resource type="Script" path="res://Euler.gd" id="1_pj7ep"]
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_dpjfj"]
|
||||
font_size = 50
|
||||
outline_size = 10
|
||||
outline_color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="Euler" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_pj7ep")
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -75.5
|
||||
offset_top = -71.0
|
||||
offset_right = 75.5
|
||||
offset_bottom = 71.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Test" type="Button" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Test
|
||||
"
|
||||
|
||||
[node name="Calculate" type="Button" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Calculate"
|
||||
|
||||
[node name="Label" type="Label" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Result"
|
||||
label_settings = SubResource("LabelSettings_dpjfj")
|
||||
|
||||
[connection signal="button_down" from="VBoxContainer/Test" to="." method="_on_test_button_down"]
|
||||
[connection signal="button_down" from="VBoxContainer/Calculate" to="." method="_on_calculate_button_down"]
|
||||
@@ -1,24 +0,0 @@
|
||||
#include "Timer.h"
|
||||
|
||||
#include "ProblemBase.hpp"
|
||||
#include "Problem3.hpp"
|
||||
|
||||
Problem3 problem = Problem3();
|
||||
Timer timer(MICROS);
|
||||
// Initialize serial connection
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
Serial.println("Start calculating...");
|
||||
timer.start(); // start the timer
|
||||
}
|
||||
|
||||
// Calculation loop
|
||||
void loop() {
|
||||
if (problem.Step()) {
|
||||
// Print solution
|
||||
Serial.println("Result = " + String(problem.output) + " in " + String(timer.read()) + "us");
|
||||
timer.stop();
|
||||
delay(100);
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
21
Problem1.cpp
21
Problem1.cpp
@@ -1,21 +0,0 @@
|
||||
#include "Problem1.hpp"
|
||||
|
||||
Problem1::Problem1() {
|
||||
input = 1000;
|
||||
}
|
||||
|
||||
bool Problem1::Step() {
|
||||
// add all factors of 3 under input
|
||||
factor3 += 3;
|
||||
if (factor3 < input) output += factor3;
|
||||
|
||||
// add all factors of 5 under input but skip factors of 3
|
||||
factor5 += 5;
|
||||
if (factor5 < input) {
|
||||
factor5_tick++;
|
||||
if (factor5_tick != 3) output += factor5;
|
||||
else factor5_tick = 0;
|
||||
}
|
||||
|
||||
return input < factor3 && input < factor5;
|
||||
}
|
||||
18
Problem1.hpp
18
Problem1.hpp
@@ -1,18 +0,0 @@
|
||||
#ifndef Problem1_h
|
||||
#define Problem1_h
|
||||
|
||||
#include "ProblemBase.hpp"
|
||||
|
||||
class Problem1 : public ProblemBase {
|
||||
|
||||
private:
|
||||
unsigned long factor3 = 0;
|
||||
unsigned long factor5 = 0;
|
||||
unsigned long factor5_tick = 0;
|
||||
|
||||
public:
|
||||
Problem1();
|
||||
bool Step();
|
||||
};
|
||||
|
||||
#endif
|
||||
19
Problem2.cpp
19
Problem2.cpp
@@ -1,19 +0,0 @@
|
||||
#include "Problem2.hpp"
|
||||
#include "Arduino.h"
|
||||
|
||||
Problem2::Problem2() {
|
||||
input = 4000000;
|
||||
}
|
||||
|
||||
bool Problem2::Step() {
|
||||
// Sum fibonacci values
|
||||
if ((fibonacci & 0b1) == 0) output += fibonacci;
|
||||
|
||||
// calculate next fibonacci value
|
||||
fibonacci = value1 + value2;
|
||||
value1 = value2;
|
||||
value2 = fibonacci;
|
||||
|
||||
// stop if fibonacci value over max
|
||||
return input < fibonacci;
|
||||
}
|
||||
18
Problem2.hpp
18
Problem2.hpp
@@ -1,18 +0,0 @@
|
||||
#ifndef Problem2_h
|
||||
#define Problem2_h
|
||||
|
||||
#include "ProblemBase.hpp"
|
||||
|
||||
class Problem2 : public ProblemBase {
|
||||
|
||||
private:
|
||||
unsigned long value1 = 0;
|
||||
unsigned long value2 = 1;
|
||||
unsigned long fibonacci;
|
||||
|
||||
public:
|
||||
Problem2();
|
||||
bool Step();
|
||||
};
|
||||
|
||||
#endif
|
||||
41
Problem3.cpp
41
Problem3.cpp
@@ -1,41 +0,0 @@
|
||||
#include "WString.h"
|
||||
#include "HardwareSerial.h"
|
||||
#include "Problem3.hpp"
|
||||
#include "Arduino.h"
|
||||
#include "Vector.h"
|
||||
|
||||
Problem3::Problem3() {
|
||||
fl_input = 600851475143;
|
||||
|
||||
unsigned long primeArray[] = { 2 };
|
||||
primes = Vector<unsigned long>(primeArray, 1);
|
||||
}
|
||||
|
||||
bool Problem3::Step() {
|
||||
Serial.println("iterator = " + String(iterator));
|
||||
// Find prime
|
||||
bool isPrime;
|
||||
Serial.println("known primes = " + String(primes.size()));
|
||||
|
||||
for (unsigned long prime : primes) {
|
||||
Serial.println("prime = " + String(prime));
|
||||
isPrime = iterator % prime != 0;
|
||||
if (!isPrime) break;
|
||||
}
|
||||
|
||||
// Current value is new prime
|
||||
if (isPrime) {
|
||||
primes.push_back(iterator);
|
||||
Serial.println("Found prime = " + String(iterator));
|
||||
// Is number factor of input
|
||||
if (fl_input / iterator == floor(fl_input / iterator)) {
|
||||
// Save current prime as biggest prime and promote other factor as new max.
|
||||
Serial.println("Found prime factor = " + String(iterator));
|
||||
output = iterator;
|
||||
fl_input = fl_input / iterator;
|
||||
}
|
||||
}
|
||||
iterator++;
|
||||
delay(1000);
|
||||
return fl_input < iterator;
|
||||
}
|
||||
19
Problem3.hpp
19
Problem3.hpp
@@ -1,19 +0,0 @@
|
||||
#ifndef Problem3_h
|
||||
#define Problem3_h
|
||||
|
||||
#include "ProblemBase.hpp"
|
||||
#include "Vector.h"
|
||||
|
||||
class Problem3 : public ProblemBase {
|
||||
|
||||
private:
|
||||
Vector<unsigned long> primes;
|
||||
unsigned long iterator = 2;
|
||||
float fl_input;
|
||||
|
||||
public:
|
||||
Problem3();
|
||||
bool Step();
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,16 +0,0 @@
|
||||
#ifndef ProblemBase_h
|
||||
#define ProblemBase_h
|
||||
|
||||
class ProblemBase {
|
||||
|
||||
public:
|
||||
unsigned long output;
|
||||
|
||||
protected:
|
||||
unsigned long input;
|
||||
|
||||
public:
|
||||
virtual bool Step();
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,7 @@
|
||||
# ProjectEuler
|
||||
My source code for project Euler solutions
|
||||
Extra challenge: All algorithms are run on an Arduino
|
||||
|
||||
My source code for project Euler solutions.
|
||||
|
||||
|
||||
|
||||
Implemented in gdscript.
|
||||
|
||||
1
icon.svg
Normal file
1
icon.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg height="128" width="128" xmlns="http://www.w3.org/2000/svg"><g transform="translate(32 32)"><path d="m-16-32c-8.86 0-16 7.13-16 15.99v95.98c0 8.86 7.13 15.99 16 15.99h96c8.86 0 16-7.13 16-15.99v-95.98c0-8.85-7.14-15.99-16-15.99z" fill="#363d52"/><path d="m-16-32c-8.86 0-16 7.13-16 15.99v95.98c0 8.86 7.13 15.99 16 15.99h96c8.86 0 16-7.13 16-15.99v-95.98c0-8.85-7.14-15.99-16-15.99zm0 4h96c6.64 0 12 5.35 12 11.99v95.98c0 6.64-5.35 11.99-12 11.99h-96c-6.64 0-12-5.35-12-11.99v-95.98c0-6.64 5.36-11.99 12-11.99z" fill-opacity=".4"/></g><g stroke-width="9.92746" transform="matrix(.10073078 0 0 .10073078 12.425923 2.256365)"><path d="m0 0s-.325 1.994-.515 1.976l-36.182-3.491c-2.879-.278-5.115-2.574-5.317-5.459l-.994-14.247-27.992-1.997-1.904 12.912c-.424 2.872-2.932 5.037-5.835 5.037h-38.188c-2.902 0-5.41-2.165-5.834-5.037l-1.905-12.912-27.992 1.997-.994 14.247c-.202 2.886-2.438 5.182-5.317 5.46l-36.2 3.49c-.187.018-.324-1.978-.511-1.978l-.049-7.83 30.658-4.944 1.004-14.374c.203-2.91 2.551-5.263 5.463-5.472l38.551-2.75c.146-.01.29-.016.434-.016 2.897 0 5.401 2.166 5.825 5.038l1.959 13.286h28.005l1.959-13.286c.423-2.871 2.93-5.037 5.831-5.037.142 0 .284.005.423.015l38.556 2.75c2.911.209 5.26 2.562 5.463 5.472l1.003 14.374 30.645 4.966z" fill="#fff" transform="matrix(4.162611 0 0 -4.162611 919.24059 771.67186)"/><path d="m0 0v-47.514-6.035-5.492c.108-.001.216-.005.323-.015l36.196-3.49c1.896-.183 3.382-1.709 3.514-3.609l1.116-15.978 31.574-2.253 2.175 14.747c.282 1.912 1.922 3.329 3.856 3.329h38.188c1.933 0 3.573-1.417 3.855-3.329l2.175-14.747 31.575 2.253 1.115 15.978c.133 1.9 1.618 3.425 3.514 3.609l36.182 3.49c.107.01.214.014.322.015v4.711l.015.005v54.325c5.09692 6.4164715 9.92323 13.494208 13.621 19.449-5.651 9.62-12.575 18.217-19.976 26.182-6.864-3.455-13.531-7.369-19.828-11.534-3.151 3.132-6.7 5.694-10.186 8.372-3.425 2.751-7.285 4.768-10.946 7.118 1.09 8.117 1.629 16.108 1.846 24.448-9.446 4.754-19.519 7.906-29.708 10.17-4.068-6.837-7.788-14.241-11.028-21.479-3.842.642-7.702.88-11.567.926v.006c-.027 0-.052-.006-.075-.006-.024 0-.049.006-.073.006v-.006c-3.872-.046-7.729-.284-11.572-.926-3.238 7.238-6.956 14.642-11.03 21.479-10.184-2.264-20.258-5.416-29.703-10.17.216-8.34.755-16.331 1.848-24.448-3.668-2.35-7.523-4.367-10.949-7.118-3.481-2.678-7.036-5.24-10.188-8.372-6.297 4.165-12.962 8.079-19.828 11.534-7.401-7.965-14.321-16.562-19.974-26.182 4.4426579-6.973692 9.2079702-13.9828876 13.621-19.449z" fill="#478cbf" transform="matrix(4.162611 0 0 -4.162611 104.69892 525.90697)"/><path d="m0 0-1.121-16.063c-.135-1.936-1.675-3.477-3.611-3.616l-38.555-2.751c-.094-.007-.188-.01-.281-.01-1.916 0-3.569 1.406-3.852 3.33l-2.211 14.994h-31.459l-2.211-14.994c-.297-2.018-2.101-3.469-4.133-3.32l-38.555 2.751c-1.936.139-3.476 1.68-3.611 3.616l-1.121 16.063-32.547 3.138c.015-3.498.06-7.33.06-8.093 0-34.374 43.605-50.896 97.781-51.086h.066.067c54.176.19 97.766 16.712 97.766 51.086 0 .777.047 4.593.063 8.093z" fill="#478cbf" transform="matrix(4.162611 0 0 -4.162611 784.07144 817.24284)"/><path d="m0 0c0-12.052-9.765-21.815-21.813-21.815-12.042 0-21.81 9.763-21.81 21.815 0 12.044 9.768 21.802 21.81 21.802 12.048 0 21.813-9.758 21.813-21.802" fill="#fff" transform="matrix(4.162611 0 0 -4.162611 389.21484 625.67104)"/><path d="m0 0c0-7.994-6.479-14.473-14.479-14.473-7.996 0-14.479 6.479-14.479 14.473s6.483 14.479 14.479 14.479c8 0 14.479-6.485 14.479-14.479" fill="#414042" transform="matrix(4.162611 0 0 -4.162611 367.36686 631.05679)"/><path d="m0 0c-3.878 0-7.021 2.858-7.021 6.381v20.081c0 3.52 3.143 6.381 7.021 6.381s7.028-2.861 7.028-6.381v-20.081c0-3.523-3.15-6.381-7.028-6.381" fill="#fff" transform="matrix(4.162611 0 0 -4.162611 511.99336 724.73954)"/><path d="m0 0c0-12.052 9.765-21.815 21.815-21.815 12.041 0 21.808 9.763 21.808 21.815 0 12.044-9.767 21.802-21.808 21.802-12.05 0-21.815-9.758-21.815-21.802" fill="#fff" transform="matrix(4.162611 0 0 -4.162611 634.78706 625.67104)"/><path d="m0 0c0-7.994 6.477-14.473 14.471-14.473 8.002 0 14.479 6.479 14.479 14.473s-6.477 14.479-14.479 14.479c-7.994 0-14.471-6.485-14.471-14.479" fill="#414042" transform="matrix(4.162611 0 0 -4.162611 656.64056 631.05679)"/></g></svg>
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
37
icon.svg.import
Normal file
37
icon.svg.import
Normal file
@@ -0,0 +1,37 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c4suj7a7mivr7"
|
||||
path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://icon.svg"
|
||||
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
16
project.godot
Normal file
16
project.godot
Normal file
@@ -0,0 +1,16 @@
|
||||
; Engine configuration file.
|
||||
; It's best edited using the editor UI and not directly,
|
||||
; since the parameters that go here are not all obvious.
|
||||
;
|
||||
; Format:
|
||||
; [section] ; section goes between []
|
||||
; param=value ; assign values to parameters
|
||||
|
||||
config_version=5
|
||||
|
||||
[application]
|
||||
|
||||
config/name="GD-Euler"
|
||||
run/main_scene="res://Euler.tscn"
|
||||
config/features=PackedStringArray("4.0", "Forward Plus")
|
||||
config/icon="res://icon.svg"
|
||||
Reference in New Issue
Block a user