Skip to content

Commit 005c7b6

Browse files
authored
Add files via upload
1 parent 15d274f commit 005c7b6

34 files changed

+2697
-0
lines changed

Lab11/BacktrackingIterative.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
l = [0, "-", "+"]
2+
3+
4+
def backIter():
5+
x = [0] # candidate solution
6+
while len(x) > 0:
7+
choosed = False
8+
while (not choosed) and l.index(x[-1]) < len(l) - 1:
9+
x[-1] = l[l.index(x[-1]) + 1] # increase the last component
10+
choosed = consistent(x)
11+
if choosed:
12+
if solution(x):
13+
solutionFound(x)
14+
x.append(0) # expand candidate solution
15+
else:
16+
x.pop() # go back one component
17+
18+
19+
def consistent(s):
20+
return len(s) < n
21+
22+
23+
def solution(s):
24+
summ = list2[0]
25+
if not len(s) == n - 1:
26+
return False
27+
for i in range(n - 1):
28+
if s[i] == "-":
29+
summ -= list2[i + 1]
30+
else:
31+
summ += list2[i + 1]
32+
return summ > 0
33+
34+
35+
def solutionFound(s):
36+
print(s)
37+
38+
39+
n = int(input("Give number"))
40+
list2 = []
41+
for i in range(n):
42+
list2.append(int(input(str(i) + ":")))
43+
44+
backIter()
45+
print("test")

Lab11/BacktrackingRecursive.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
l = ["+", "-"]
2+
3+
4+
def backRec(x):
5+
for j in l:
6+
x.append(j)
7+
if consistent(x):
8+
if solution(x):
9+
solutionFound(x)
10+
backRec(x)
11+
x.pop()
12+
13+
14+
def consistent(s):
15+
return len(s) < n
16+
17+
18+
def solution(s):
19+
summ = list2[0]
20+
if not len(s) == n - 1:
21+
return False
22+
for i in range(n - 1):
23+
if s[i] == "-":
24+
summ -= list2[i + 1]
25+
else:
26+
summ += list2[i + 1]
27+
return summ > 0
28+
29+
30+
def solutionFound(s):
31+
print(s)
32+
33+
34+
n = int(input("Give number"))
35+
list2 = []
36+
for i in range(n):
37+
list2.append(int(input(str(i) + ":")))
38+
39+
backRec([])

Lab11/README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Requirements (the exact problem statement)
2+
You will be assigned with a problem from the list below and you are required to solve the problem
3+
using the BACKTRACKING programming method, using both an ITERATIVE and a RECURSIVE
4+
backtracking implementation
5+
6+
##### The problem statement I chose
7+
Consider the natural number n (n<=10) and the natural numbers a1, ... , an. Determine all the
8+
possibilities to insert between all numbers a1, ..., an the operators + and – such that by evaluating the
9+
expression the result is positive

Laborator1/README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# About this assignment
2+
There were three sets of problems and we have to solve one from each one
3+
4+
### Requirements (the exact problem statement)
5+
Select one problem statement from each set and solve it.
6+
* Each solution must have a console-based interface
7+
* Use procedural programming, make sure that each function only does one thing
8+
* Expected inputs as well as output must be clearly stated to the user

Laborator1/SetA/Problem1/problema1.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Generate the first prime number larger than a given natural number n.
2+
3+
4+
import math
5+
6+
7+
def isPrime(number):
8+
'''
9+
in: number - integer
10+
out: True if number is prime
11+
'''
12+
if number == 1:
13+
return False
14+
elif number == 2:
15+
return True
16+
if number % 2 == 0:
17+
return False
18+
else:
19+
for i in range(3, int(math.sqrt(number)) + 1, 2):
20+
if number % i == 0:
21+
return False
22+
return True
23+
24+
25+
def readNaturalNotNullNumber():
26+
'''
27+
in: read a number and checks if it is an integer
28+
out: it returns the writen number
29+
'''
30+
while True:
31+
try:
32+
auxNumber = int(input("Enter a natural number: "))
33+
if auxNumber < 0:
34+
print("The number is not bigger than 0")
35+
continue
36+
return auxNumber
37+
except ValueError:
38+
print("Oops! That was no valid number. Try again...")
39+
continue
40+
41+
42+
def searchForNumber(myNumber):
43+
'''
44+
in: myNumber integer
45+
out: returns the first prime number large than myNumber
46+
'''
47+
48+
auxNumber = myNumber + 1
49+
while not isPrime(auxNumber):
50+
auxNumber += 1
51+
return auxNumber
52+
53+
54+
number = readNaturalNotNullNumber()
55+
print(searchForNumber(number))

Laborator1/SetA/Problem2/Main.py

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
'''
2+
Given the natural number n, determine the prime numbers p1 and p2 such that n = p1 + p2
3+
(check the Goldbach hypothesis)
4+
'''
5+
6+
import math
7+
8+
9+
def checkConditions(conditions, number):
10+
for condition in conditions:
11+
if not condition(number):
12+
return False
13+
return True
14+
15+
16+
def naturalNumber(number):
17+
if number < 0:
18+
print("The number is not bigger than 0")
19+
return False
20+
return True
21+
22+
23+
def evenNumber(number):
24+
if number % 2 != 0:
25+
print("The number is not even!")
26+
return False
27+
return True
28+
29+
30+
def readIntegerWithGivenConditions(conditionsToCheck):
31+
'''
32+
in:
33+
read number and checks if it is a natural number
34+
out:
35+
returns the written number
36+
'''
37+
while True:
38+
try:
39+
auxNumber = int(input("Enter a natural (even) number: "))
40+
if not checkConditions(conditionsToCheck, auxNumber):
41+
continue
42+
return auxNumber
43+
except ValueError:
44+
print("Ooops.... tht wast not a valid number. Try again...")
45+
continue
46+
47+
48+
def isPrime(number):
49+
'''
50+
in:
51+
number - integer
52+
out:
53+
boolean if number is prime or not
54+
'''
55+
if number == 1:
56+
return False
57+
elif number == 2:
58+
return True
59+
if number % 2 == 0:
60+
return False
61+
else:
62+
for i in range(3, int(math.sqrt(number)) + 1, 2):
63+
if number % i == 0:
64+
return False
65+
return True
66+
67+
68+
def searchForNumbersGoldbachNumbers(naturalNumber):
69+
'''
70+
in:
71+
naturalNumber - a natural even number
72+
out:
73+
returns the Goldbach numbers for the given number - natural numbers
74+
'''
75+
auxList = []
76+
for i in range(2, naturalNumber // 2 + 1):
77+
if isPrime(i) and isPrime(naturalNumber - i):
78+
auxList.append([i, naturalNumber - i])
79+
return auxList
80+
81+
82+
def run():
83+
'''
84+
main function of our program
85+
it "runs" and "controls" the functions we need
86+
'''
87+
print("Goldbach's conjecture: \n Every even integer greater than 2 can be expressed as "
88+
"the sum of two primes (there are some odd numbers that respect this conjecture too)")
89+
n = readIntegerWithGivenConditions([naturalNumber, evenNumber])
90+
listOfGoldBachNumbers = searchForNumbersGoldbachNumbers(n)
91+
print("The Goldbach numbers are:\n " + str(listOfGoldBachNumbers))
92+
93+
94+
run()

Laborator1/SetA/Problem3/Main.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
'''
2+
For a given natural number n find the minimal natural number m formed with the same digits.
3+
E.g. n=3658, m=3568
4+
'''
5+
6+
7+
from functools import reduce
8+
9+
10+
def readNaturalNumber(message):
11+
'''
12+
in:
13+
message - string -> the message shown before reading the number
14+
out:
15+
it returns a natural number read from the keyboard
16+
'''
17+
18+
while True:
19+
try:
20+
auxNumber = int(input(message))
21+
if auxNumber < 0:
22+
print("The number should be positive!")
23+
continue
24+
return auxNumber
25+
except ValueError:
26+
print("Ooops... something went wrong... please try again!")
27+
continue
28+
29+
def getDigits(naturalNumber):
30+
auxList = []
31+
copy = naturalNumber
32+
while copy:
33+
auxList.append(copy%10)
34+
copy//=10
35+
return auxList
36+
37+
38+
def makeNumberFromDigits(list):
39+
return reduce(lambda x,y: x*10+y,list)
40+
41+
42+
def makeMinimalNumberFromDigits(list):
43+
list.sort()
44+
return makeNumberFromDigits(list)
45+
46+
47+
def run():
48+
n = readNaturalNumber("The given number is?\n")
49+
print("The minimal number is: " + str(makeMinimalNumberFromDigits(getDigits((n)))))
50+
51+
run()

Laborator1/SetB/Problem10/Main.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
'''
2+
Consider a given natural number n. Determine the product p of all the proper factors of n
3+
'''
4+
5+
import math
6+
from functools import reduce
7+
8+
9+
def readNaturalNumber(message):
10+
'''
11+
in:
12+
message - string -> the message shown before reading the number
13+
out:
14+
it returns a natural number read from the keyboard
15+
'''
16+
17+
while True:
18+
try:
19+
auxNumber = int(input(message))
20+
if auxNumber < 0:
21+
print("The number should be positive!")
22+
continue
23+
if isPrime(auxNumber):
24+
print("The number is prime!")
25+
continue
26+
return auxNumber
27+
except ValueError:
28+
print("Ooops... something went wrong... please try again!")
29+
continue
30+
31+
32+
def getProperFactors(naturalNumber):
33+
auxList = []
34+
for i in range(2, naturalNumber // 2 + 1):
35+
if naturalNumber % i == 0:
36+
auxList.append(i)
37+
return auxList
38+
39+
40+
def isPrime(number):
41+
'''
42+
in:
43+
number - integer
44+
out:
45+
boolean if number is prime or not
46+
'''
47+
if number == 1:
48+
return False
49+
elif number == 2:
50+
return True
51+
if number % 2 == 0:
52+
return False
53+
else:
54+
for i in range(3, int(math.sqrt(number)) + 1, 2):
55+
if number % i == 0:
56+
return False
57+
return True
58+
59+
60+
def listToProduct(list):
61+
return reduce(lambda x, y: x * y, list)
62+
63+
64+
def run():
65+
'''
66+
main function of our program
67+
it "runs" and "controls" the functions we need
68+
'''
69+
n = readNaturalNumber("The number is?\n")
70+
71+
print("The product of the number's factors is: " + str(listToProduct(getProperFactors(n))))
72+
73+
74+
run()

0 commit comments

Comments
 (0)