The Programming Project: CBSE
Showing posts with label CBSE. Show all posts
Showing posts with label CBSE. Show all posts

Tuesday, February 14, 2023

Python Program Divisibility with 5

Write a python program to print and count all numbers from 0 to n which are divisible by 5 and having none of the digits being repeated.




def checkRepeatingDigits(numb):
    checkString = str(numb)
    flag = True
    for i in range(len(checkString)-1):
        for j in range(i+1,len(checkString)):
            if checkString[i] == checkString[j]:
                flag = False
                break
        if flag == False:
            break
    return(flag)
n = int(input("Enter the limit:"))
counter = 0
for i in range(n):
    numb = i
    if numb % 5 == 0:
        if checkRepeatingDigits(numb) == True:
            counter +=1
            print(numb)
print("Total number of numbers divisible by 5 and having non-repeating characters =",counter)

Monday, January 30, 2023

Banking ICSE Interest Calculator

Calculation of interest on a savings bank account
Mini Python project for middle and high school students

Example




Run the code on google colaboratory
Python Code:
class Solution(object):

    def Banking(self, numberOfMonths):
        transactions = dict()
        for i in range(numberOfMonths):
            month = str(input("Enter the month:"))
            transactions_for_month = int(
                input("Enter the number of transactions for this month:"))
            tempList = []
            for j in range(transactions_for_month):
                tempList.append(int(input("Enter the date of the month:")))
                # put a negative sign before the number if the amount is withdrawn
                tempList.append(
                    float(input("Enter the amount deposited or withdrawn:")))
            transactions[month] = tempList
        #print(transactions)
        self.MinimumBalance(transactions)

    def MinimumBalance(self, transactions):
        key = list(transactions.keys())
        balance = []
        balanceFinal = 0
        date = []
        monthWiseMBList = []
        for i in range(len(transactions)):
            for j in range(len(transactions[key[i]])):
                if j % 2 == 0:
                    date.append(transactions[key[i]][j])
                else:
                    balanceFinal += (transactions[key[i]][j])
                    balance.append(balanceFinal)
            balanceFinal = balance[-1]
            #print(balance)
            #print(date)
            if i != 0:
                move_date += int((len(transactions[key[i - 1]]) / 2))
            else:
                move_date = 0
            #print(move_date)
            minimumBalanceMonthly = float('inf')
            flagTransactionLessThanTenth = False
           
            for k in range(len(date) - move_date):
                if date[k+move_date] <= 10:
                    minimumBalanceMonthly = balance[k + move_date]
                    flagTransactionLessThanTenth = True
                else:

                    if minimumBalanceMonthly > balance[k + move_date]:
                        minimumBalanceMonthly = balance[k + move_date]
            if len(transactions[key[i]]) == 0:
                monthWiseMBList.append(monthWiseMBList[i - 1])
            else:
                monthWiseMBList.append(minimumBalanceMonthly)
            if flagTransactionLessThanTenth == False:
                if i == 0:
                    print(monthWiseMBList[i], i, minimumBalanceMonthly)
                    monthWiseMBList[i] = 0
                if i!=0:
                    if monthWiseMBList[i] > monthWiseMBList[i - 1] and len(transactions[key[i]]) != 0:
                        monthWiseMBList[i] = monthWiseMBList[i - 1]
                    else:
                        monthWiseMBList[i] = balance[-1]
            if i == len(key) - 1:
                print("Press Y/y is the account was closed in the month of ", key[-1])
                choice = str(input())
                if choice == "Y" or choice == "y":
                    monthWiseMBList[-1] = 0
            print("Minimum Monthly Balance for the month of ", key[i], "= ",
                  monthWiseMBList[i])
        #calculation of interest
        qualifyingAmount = 0
        for j in (monthWiseMBList):
            qualifyingAmount += j
        print("Total of balances ", qualifyingAmount)
        rate_of_interest = float(input("Enter the rate of interest:"))
        interest = (qualifyingAmount * rate_of_interest * (1 / 12)) / 100.0
        print("Total interest earned = ", round(interest, 2))


obj = Solution()
numberOfmonths = int(input("Enter the number of months:"))
obj.Banking(numberOfmonths)






Saturday, January 21, 2023

Karl Pearson Coefficient of Correlation and Scatter diagram Regression Line

 A simple program to calculate the correlation between two variates (X and Y) and the Karl Pearson Coefficient of correlation. The scatter diagram along with the regression line of Y on X has been plotted. 




import matplotlib.pyplot as plt
import numpy as np
import math


class RegressionLine:

    def plotScatterDiagram(self):
        x = np.array(self._xValues)
        y = np.array(self._yValues)
        plt.scatter(x, y)
        # calculating regression of y on x
        self._bYX = (self._karlPCoefficient*self._sigmaY)/self._sigmaX
        self._bXY = (self._karlPCoefficient*self._sigmaX)/self._sigmaY
        x = np.linspace(self._minX,self._maxX,100)
        y = (self._bYX)*x + (self._sumY/self._N - (self._sumX/self._N)*self._bYX )
        plt.title('Regression line of y on x')
        plt.plot(x, y, '-r', label='regression line of y on x')
        plt.xlabel('x', color='#1C2833')
        plt.ylabel('y', color='#1C2833')
        plt.show()
    def parityString(self, string):
        while len(string) < 9:
            string += " "
        return string

    def accept(self):
        self._N = int(input("Enter the total number of values:"))
        print("Enter the data for x and y:")
        for i in range(self._N):
            print("Enter the value at position ", (i + 1))
            self._xValues.append(float(input("Enter a x value: ")))
            self._yValues.append(float(input("Enter a y value: ")))
        print("Enter 0 is you don't want a change of scale:")
        self._A = float(input("Enter the assumed mean for x-data set:"))
        self._B = float(input("Enter the assumed mean for y-data set:"))

    def calculateCovariance(self):
        for i in range(self._N):
            if self._maxX < self._xValues[i]:
                self._maxX = self._xValues[i]
            if self._minX > self._xValues[i]:
                self._minX = self._xValues[i]
            self._uValues.append(self._xValues[i] - self._A)
            self._vValues.append(self._yValues[i] - self._B)
            self._uvValues.append(self._uValues[i] * self._vValues[i])
            self._sumXY += self._uvValues[i]
            self._sumX += self._uValues[i]
            self._sumY += self._vValues[i]
        self._coVarianceXY = (1 / self._N) * (
            self._sumXY - (1 / self._N) * self._sumX * self._sumY)
        # print covariance table
        if self._A == 0 and self._B == 0:
            print(self.parityString("X"), self.parityString("Y"),
                  self.parityString("XY"))
            for i in range(self._N):
                print(self.parityString(str(self._xValues[i])),
                      self.parityString(str(self._yValues[i])),
                      self.parityString(str(self._uvValues[i])))
            print("-------------------------------------")
            print(self.parityString(str(self._sumX)),
                  self.parityString(str(self._sumY)),
                  self.parityString(str(self._sumXY)))
            print("-------------------------------------")
            print("Cov(X,Y)=", self._coVarianceXY)
        else:
            print(self.parityString("X"), self.parityString("u"),
                  self.parityString("Y"), self.parityString("v"),
                  self.parityString("uv"))
            for i in range(self._N):
                print(self.parityString(str(self._xValues[i])),
                      self.parityString(str(self._uValues[i])),
                      self.parityString(str(self._yValues[i])),
                      self.parityString(str(self._vValues[i])),
                      self.parityString(str(self._uvValues[i])))
            print("-----------------------------------------------")
            print(self.parityString(" "), self.parityString(str(self._sumX)),
                  self.parityString(" "), self.parityString(str(self._sumY)),
                  self.parityString(str(self._sumXY)))
            print("-----------------------------------------------")
            print("Cov(X,Y)=", self._coVarianceXY)

    def calculateKarlPearson(self):
        self._sigmaX = self.calculateSD(self._uValues)
        self._sigmaY = self.calculateSD(self._vValues)
        self._karlPCoefficient = self._coVarianceXY / (self._sigmaX *
                                                       self._sigmaY)
        print("r =", round(self._karlPCoefficient, 3))

    def calculateSD(self, _valuesList):
        standard_deviation = 0.0
        mean = 0
        for i in range(self._N):
            mean += _valuesList[i]
        mean /= self._N
        for i in range(self._N):
            standard_deviation += (_valuesList[i] - mean)**2
        standard_deviation /= self._N
        standard_deviation = math.sqrt(standard_deviation)
        return standard_deviation

    def __init__(self) -> None:
        self._xValues = []
        self._uValues = []
        self._yValues = []
        self._vValues = []
        self._uvValues = []
        self._coVarianceXY = 0.0
        self._karlPCoefficient = 0.0
        self._sigmaX = 0.0  # standard deviation for X
        self._sigmaY = 0.0  # standard deviation for Y
        self._N = 0
        self._A = 0  # assumed mean for X
        self._B = 0  # assumed mean for Y
        self._maxX = float('-inf')
        self._minX = float('inf')
        self._sumX = 0
        self._sumY = 0
        self._sumXY = 0
        self._bYX = 0
        self._bXY = 0

obj = RegressionLine()
obj.accept()
obj.calculateCovariance()
obj.calculateKarlPearson()
obj.plotScatterDiagram()

Sunday, January 8, 2023

Leet Code Roman to Integer

Roman numerals are represented by seven different symbols: IVXLCD and M.

Symbol       Value
I                   1
V                  5
X                 10
L                  50
C                 100
D                 500
M               1000

  For example, 2 is written as II in Roman numeral, just two ones added together. 12 is written as XII,       which is simply X + II. The number 27 is written as XXVII, which is XX + V + II.

 Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is   not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making   four. The same principle applies to the number nine, which is written as IX. There are six instances where   subtraction is used:

  • I can be placed before V (5) and X (10) to make 4 and 9. 
  • X can be placed before L (50) and C (100) to make 40 and 90. 
  • C can be placed before D (500) and M (1000) to make 400 and 900.

 Given a roman numeral, convert it to an integer.

 

 Example 1:

Input: s = "III"
Output: 3
Explanation: III = 3.

 Example 2:

Input: s = "LVIII"
Output: 58
Explanation: L = 50, V= 5, III = 3.

 Example 3:

Input: s = "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

 

 Constraints:

  • 1 <= s.length <= 15
  • s contains only the characters ('I', 'V', 'X', 'L', 'C', 'D', 'M').
  • It is guaranteed that s is a valid roman numeral in the range [1, 3999].
 Explanation:
The logic of the program is explained below with the example of MCMXCIV.
Take the value of each of the letters in the sequence:
1000 = M, 100 = C, 1000 = M, 10 = X, 100 = C, 1 = I, 5 = V
Keed adding the values in a variable. But for the second position onwards we
have check the difference of the value of the current position and the previous
position. If the difference is 4 or 9 or 40 or 90 or 400 or 900 then by the exception
rule we have to adjust the value.
For the example above, as 100-1000 = -900 ( i = 1 and i = 0) which is not under
exception rule we add 1000+100 = 1100
But for the next letter ('M') the value is 1000 ( i = 2 ) and 1000 - 100 = 900
( under exception rule), so instead of adding 1000 to 1100 we have to have add 900
to the value of the first letter ( since CM is forming a single value). For this
we need to subtract the value of the current letter (M = 1000) and the previous
letter ( C = 100 ) from the sum of 1000+100+1000 = 2100 and add 900.
Which gives 2100-1000 - 100 + 900 = 1900.


PYTHON CODE

class Solution(object):

    def romanToInt(self, s):
        temp = 0
        for i in range(len(s)):
            self.output += self.value[self.position(s[i])]
            #print ("BEFORE ADJUSTMENT",self.output)
            if i > 0:
                temp = (self.value[self.position(s[i])] -
                        self.value[self.position(s[i - 1])])
            if temp == 4 or temp == 9 or temp == 40 or temp == 90 or temp == 400 or temp == 900:
                self.output = self.output - self.value[self.position(
                    s[i - 1])] - self.value[self.position(s[i])] + temp
            #print ("AFTER ADJUSTMENT",self.output)
        return self.output

    def position(self, symb):
        counter = 0
        while symb != self.symbol[counter]:
            counter += 1
        return (counter)

    symbol = ['I', 'V', 'X', 'L', 'C', 'D', 'M']
    value = [1, 5, 10, 50, 100, 500, 1000]
    output = 0


obj = Solution()
s = str(input("Enter a valid roman numeral in range(1,3999):"))
print(obj.romanToInt(s))