jugaadcode 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. jugaadcode-0.1.0/PKG-INFO +17 -0
  2. jugaadcode-0.1.0/README.md +9 -0
  3. jugaadcode-0.1.0/pyproject.toml +9 -0
  4. jugaadcode-0.1.0/setup.cfg +4 -0
  5. jugaadcode-0.1.0/src/jugaadcode/__init__.py +51 -0
  6. jugaadcode-0.1.0/src/jugaadcode/anagram.py +12 -0
  7. jugaadcode-0.1.0/src/jugaadcode/armstrong.py +11 -0
  8. jugaadcode-0.1.0/src/jugaadcode/binary_search.py +27 -0
  9. jugaadcode-0.1.0/src/jugaadcode/bubble_sort.py +21 -0
  10. jugaadcode-0.1.0/src/jugaadcode/capitalize_words.py +6 -0
  11. jugaadcode-0.1.0/src/jugaadcode/character_frequency.py +13 -0
  12. jugaadcode-0.1.0/src/jugaadcode/climbing_stairs.py +16 -0
  13. jugaadcode-0.1.0/src/jugaadcode/coin_change.py +29 -0
  14. jugaadcode-0.1.0/src/jugaadcode/count_vowels.py +15 -0
  15. jugaadcode-0.1.0/src/jugaadcode/counting_sort.py +26 -0
  16. jugaadcode-0.1.0/src/jugaadcode/duplicate_number.py +17 -0
  17. jugaadcode-0.1.0/src/jugaadcode/even_odd.py +6 -0
  18. jugaadcode-0.1.0/src/jugaadcode/factorial.py +14 -0
  19. jugaadcode-0.1.0/src/jugaadcode/factorial_trailing_zeros_direct.py +20 -0
  20. jugaadcode-0.1.0/src/jugaadcode/factorial_with_trailing_zeros.py +29 -0
  21. jugaadcode-0.1.0/src/jugaadcode/fibonacci.py +20 -0
  22. jugaadcode-0.1.0/src/jugaadcode/find_max.py +15 -0
  23. jugaadcode-0.1.0/src/jugaadcode/find_min.py +15 -0
  24. jugaadcode-0.1.0/src/jugaadcode/first_non_repeating.py +18 -0
  25. jugaadcode-0.1.0/src/jugaadcode/gcd.py +12 -0
  26. jugaadcode-0.1.0/src/jugaadcode/harshad_number.py +11 -0
  27. jugaadcode-0.1.0/src/jugaadcode/input_utils.py +50 -0
  28. jugaadcode-0.1.0/src/jugaadcode/insertion_sort.py +24 -0
  29. jugaadcode-0.1.0/src/jugaadcode/kth_largest.py +16 -0
  30. jugaadcode-0.1.0/src/jugaadcode/lcm.py +18 -0
  31. jugaadcode-0.1.0/src/jugaadcode/linear_search.py +16 -0
  32. jugaadcode-0.1.0/src/jugaadcode/longest_consecutive.py +22 -0
  33. jugaadcode-0.1.0/src/jugaadcode/longest_word.py +18 -0
  34. jugaadcode-0.1.0/src/jugaadcode/matrix_transpose.py +42 -0
  35. jugaadcode-0.1.0/src/jugaadcode/maximum_subarray.py +26 -0
  36. jugaadcode-0.1.0/src/jugaadcode/merge_sort.py +36 -0
  37. jugaadcode-0.1.0/src/jugaadcode/move_zeros.py +21 -0
  38. jugaadcode-0.1.0/src/jugaadcode/pair_with_difference.py +21 -0
  39. jugaadcode-0.1.0/src/jugaadcode/palindrome.py +8 -0
  40. jugaadcode-0.1.0/src/jugaadcode/perfect_number.py +19 -0
  41. jugaadcode-0.1.0/src/jugaadcode/power.py +15 -0
  42. jugaadcode-0.1.0/src/jugaadcode/prime.py +14 -0
  43. jugaadcode-0.1.0/src/jugaadcode/quick_sort.py +29 -0
  44. jugaadcode-0.1.0/src/jugaadcode/remove_duplicates_array.py +15 -0
  45. jugaadcode-0.1.0/src/jugaadcode/remove_duplicates_string.py +13 -0
  46. jugaadcode-0.1.0/src/jugaadcode/reverse_linked_list.py +38 -0
  47. jugaadcode-0.1.0/src/jugaadcode/reverse_number.py +8 -0
  48. jugaadcode-0.1.0/src/jugaadcode/reverse_string.py +6 -0
  49. jugaadcode-0.1.0/src/jugaadcode/second_largest.py +25 -0
  50. jugaadcode-0.1.0/src/jugaadcode/selection_sort.py +24 -0
  51. jugaadcode-0.1.0/src/jugaadcode/strong_number.py +14 -0
  52. jugaadcode-0.1.0/src/jugaadcode/subsequence.py +16 -0
  53. jugaadcode-0.1.0/src/jugaadcode/sum_of_digits.py +6 -0
  54. jugaadcode-0.1.0/src/jugaadcode/trailing_zeros.py +14 -0
  55. jugaadcode-0.1.0/src/jugaadcode/two_sum.py +22 -0
  56. jugaadcode-0.1.0/src/jugaadcode/valid_parentheses.py +28 -0
  57. jugaadcode-0.1.0/src/jugaadcode/word_count.py +6 -0
  58. jugaadcode-0.1.0/src/jugaadcode.egg-info/PKG-INFO +17 -0
  59. jugaadcode-0.1.0/src/jugaadcode.egg-info/SOURCES.txt +59 -0
  60. jugaadcode-0.1.0/src/jugaadcode.egg-info/dependency_links.txt +1 -0
  61. jugaadcode-0.1.0/src/jugaadcode.egg-info/top_level.txt +1 -0
@@ -0,0 +1,17 @@
1
+ Metadata-Version: 2.4
2
+ Name: jugaadcode
3
+ Version: 0.1.0
4
+ Summary: A Python library for common programming logic and algorithms
5
+ Author: Mohamed Faraazman Bin Farooq S
6
+ Requires-Python: >=3.9
7
+ Description-Content-Type: text/markdown
8
+
9
+ # codinglogic
10
+
11
+ A Python library containing common coding logic, algorithms, and
12
+ programming utilities.
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ pip install codinglogic
@@ -0,0 +1,9 @@
1
+ # codinglogic
2
+
3
+ A Python library containing common coding logic, algorithms, and
4
+ programming utilities.
5
+
6
+ ## Installation
7
+
8
+ ```bash
9
+ pip install codinglogic
@@ -0,0 +1,9 @@
1
+ [project]
2
+ name = "jugaadcode"
3
+ version = "0.1.0"
4
+ description = "A Python library for common programming logic and algorithms"
5
+ readme = "README.md"
6
+ requires-python = ">=3.9"
7
+ authors = [
8
+ {name = "Mohamed Faraazman Bin Farooq S"}
9
+ ]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,51 @@
1
+ from .prime import is_prime
2
+ from .factorial import factorial
3
+ from .fibonacci import fibonacci
4
+ from .palindrome import is_palindrome
5
+ from .armstrong import is_armstrong
6
+ from .reverse_number import reverse_number
7
+ from .sum_of_digits import sum_of_digits
8
+ from .perfect_number import is_perfect_number
9
+ from .strong_number import is_strong_number
10
+ from .harshad_number import is_harshad_number
11
+ from .gcd import gcd
12
+ from .lcm import lcm
13
+ from .even_odd import is_even
14
+ from .reverse_string import reverse_string
15
+ from .count_vowels import count_vowels
16
+ from .character_frequency import character_frequency
17
+ from .anagram import is_anagram
18
+ from .remove_duplicates_string import remove_duplicate_characters
19
+ from .first_non_repeating import first_non_repeating
20
+ from .word_count import word_count
21
+ from .capitalize_words import capitalize_words
22
+ from .longest_word import longest_word
23
+ from .subsequence import is_subsequence
24
+ from .find_max import find_max
25
+ from .find_min import find_min
26
+ from .second_largest import second_largest
27
+ from .remove_duplicates_array import remove_duplicates
28
+ from .duplicate_number import find_duplicate
29
+ from .two_sum import two_sum
30
+ from .move_zeros import move_zeros
31
+ from .linear_search import linear_search
32
+ from .binary_search import binary_search
33
+ from .bubble_sort import bubble_sort
34
+ from .selection_sort import selection_sort
35
+ from .insertion_sort import insertion_sort
36
+ from .merge_sort import merge_sort
37
+ from .quick_sort import quick_sort
38
+ from .counting_sort import counting_sort
39
+ from .kth_largest import kth_largest
40
+ from .power import power
41
+ from .maximum_subarray import maximum_subarray
42
+ from .climbing_stairs import climbing_stairs
43
+ from .coin_change import coin_change
44
+ from .valid_parentheses import valid_parentheses
45
+ from .matrix_transpose import matrix_transpose
46
+ from .reverse_linked_list import reverse_linked_list
47
+ from .longest_consecutive import longest_consecutive
48
+ from .pair_with_difference import pair_with_difference
49
+ from .trailing_zeros import trailing_zeros
50
+ from .factorial_with_trailing_zeros import factorial_with_trailing_zeros
51
+ from .factorial_trailing_zeros_direct import factorial_trailing_zeros_direct
@@ -0,0 +1,12 @@
1
+ def is_anagram(first=None, second=None):
2
+
3
+ if first is None:
4
+ first = input("Enter first string to check if it is an anagram: ")
5
+
6
+ if second is None:
7
+ second = input("Enter second string to check if it is an anagram: ")
8
+
9
+ first = first.replace(" ", "").lower()
10
+ second = second.replace(" ", "").lower()
11
+
12
+ return sorted(first) == sorted(second)
@@ -0,0 +1,11 @@
1
+ def is_armstrong(n=None):
2
+
3
+ if n is None:
4
+ n = int(input("Enter a number to check if it is an Armstrong number: "))
5
+
6
+ digits = str(abs(n))
7
+ power = len(digits)
8
+
9
+ total = sum(int(digit) ** power for digit in digits)
10
+
11
+ return total == n
@@ -0,0 +1,27 @@
1
+ def binary_search(numbers=None, target=None):
2
+
3
+ if numbers is None:
4
+ numbers = list(
5
+ map(int, input("Enter SORTED numbers separated by spaces: ").split())
6
+ )
7
+
8
+ if target is None:
9
+ target = int(input("Enter target: "))
10
+
11
+ left = 0
12
+ right = len(numbers) - 1
13
+
14
+ while left <= right:
15
+
16
+ middle = (left + right) // 2
17
+
18
+ if numbers[middle] == target:
19
+ return middle
20
+
21
+ if numbers[middle] < target:
22
+ left = middle + 1
23
+
24
+ else:
25
+ right = middle - 1
26
+
27
+ return -1
@@ -0,0 +1,21 @@
1
+ def bubble_sort(numbers=None):
2
+
3
+ if numbers is None:
4
+ numbers = list(
5
+ map(int, input("Enter numbers separated by spaces: ").split())
6
+ )
7
+
8
+ numbers = numbers.copy()
9
+
10
+ for i in range(len(numbers)):
11
+
12
+ for j in range(len(numbers) - i - 1):
13
+
14
+ if numbers[j] > numbers[j + 1]:
15
+
16
+ numbers[j], numbers[j + 1] = (
17
+ numbers[j + 1],
18
+ numbers[j]
19
+ )
20
+
21
+ return numbers
@@ -0,0 +1,6 @@
1
+ def capitalize_words(text=None):
2
+
3
+ if text is None:
4
+ text = input("Enter a sentence to capitalize words in: ")
5
+
6
+ return text.title()
@@ -0,0 +1,13 @@
1
+ def character_frequency(text=None):
2
+
3
+ if text is None:
4
+ text = input("Enter a string to analyze character frequency: ")
5
+
6
+ frequency = {}
7
+
8
+ for character in text:
9
+
10
+ if character != " ":
11
+ frequency[character] = frequency.get(character, 0) + 1
12
+
13
+ return frequency
@@ -0,0 +1,16 @@
1
+ def climbing_stairs(n=None):
2
+
3
+ if n is None:
4
+ n = int(input("Enter number of stairs: "))
5
+
6
+ if n <= 2:
7
+ return n
8
+
9
+ first = 1
10
+ second = 2
11
+
12
+ for _ in range(3, n + 1):
13
+
14
+ first, second = second, first + second
15
+
16
+ return second
@@ -0,0 +1,29 @@
1
+ def coin_change(coins=None, amount=None):
2
+
3
+ if coins is None:
4
+ coins = list(
5
+ map(int, input("Enter coin values separated by spaces: ").split())
6
+ )
7
+
8
+ if amount is None:
9
+ amount = int(input("Enter amount: "))
10
+
11
+ dp = [float("inf")] * (amount + 1)
12
+
13
+ dp[0] = 0
14
+
15
+ for current in range(1, amount + 1):
16
+
17
+ for coin in coins:
18
+
19
+ if coin <= current:
20
+
21
+ dp[current] = min(
22
+ dp[current],
23
+ dp[current - coin] + 1
24
+ )
25
+
26
+ if dp[amount] == float("inf"):
27
+ return -1
28
+
29
+ return dp[amount]
@@ -0,0 +1,15 @@
1
+ def count_vowels(text=None):
2
+
3
+ if text is None:
4
+ text = input("Enter a string to count vowels in: ")
5
+
6
+ vowels = "aeiouAEIOU"
7
+
8
+ count = 0
9
+
10
+ for character in text:
11
+
12
+ if character in vowels:
13
+ count += 1
14
+
15
+ return count
@@ -0,0 +1,26 @@
1
+ def counting_sort(numbers=None):
2
+
3
+ if numbers is None:
4
+ numbers = list(
5
+ map(int, input("Enter non-negative numbers: ").split())
6
+ )
7
+
8
+ if not numbers:
9
+ return []
10
+
11
+ if min(numbers) < 0:
12
+ raise ValueError("Only non-negative numbers are supported")
13
+
14
+ count = [0] * (max(numbers) + 1)
15
+
16
+ for number in numbers:
17
+ count[number] += 1
18
+
19
+ result = []
20
+
21
+ for number in range(len(count)):
22
+
23
+ for _ in range(count[number]):
24
+ result.append(number)
25
+
26
+ return result
@@ -0,0 +1,17 @@
1
+ def find_duplicate(numbers=None):
2
+
3
+ if numbers is None:
4
+ numbers = list(
5
+ map(int, input("Enter numbers separated by spaces: ").split())
6
+ )
7
+
8
+ seen = set()
9
+
10
+ for number in numbers:
11
+
12
+ if number in seen:
13
+ return number
14
+
15
+ seen.add(number)
16
+
17
+ return None
@@ -0,0 +1,6 @@
1
+ def is_even(n=None):
2
+
3
+ if n is None:
4
+ n = int(input("Enter a number to check if it is even: "))
5
+
6
+ return n % 2 == 0
@@ -0,0 +1,14 @@
1
+ def factorial(n=None):
2
+
3
+ if n is None:
4
+ n = int(input("Enter a number to calculate its factorial: "))
5
+
6
+ if n < 0:
7
+ raise ValueError("Number must be non-negative")
8
+
9
+ result = 1
10
+
11
+ for i in range(1, n + 1):
12
+ result *= i
13
+
14
+ return result
@@ -0,0 +1,20 @@
1
+ def factorial_trailing_zeros_direct(n=None):
2
+ if n is None:
3
+ n = int(input("Enter a number: "))
4
+
5
+ if n < 0:
6
+ raise ValueError("Number must be non-negative")
7
+
8
+ factorial = 1
9
+
10
+ for i in range(1, n + 1):
11
+ factorial *= i
12
+
13
+ number = factorial
14
+ count = 0
15
+
16
+ while number > 0 and number % 10 == 0:
17
+ count += 1
18
+ number //= 10
19
+
20
+ return factorial, count
@@ -0,0 +1,29 @@
1
+ def trailing_zeros(n):
2
+ count = 0
3
+
4
+ while n > 0:
5
+ n //= 5
6
+ count += n
7
+
8
+ return count
9
+
10
+
11
+ def factorial_with_trailing_zeros(zeros=None):
12
+ if zeros is None:
13
+ zeros = int(input("Enter required number of trailing zeros: "))
14
+
15
+ if zeros < 0:
16
+ raise ValueError("Number of trailing zeros must be non-negative")
17
+
18
+ n = 1
19
+
20
+ while True:
21
+ count = trailing_zeros(n)
22
+
23
+ if count == zeros:
24
+ return n
25
+
26
+ if count > zeros:
27
+ return None
28
+
29
+ n += 1
@@ -0,0 +1,20 @@
1
+ def fibonacci(n=None):
2
+
3
+ if n is None:
4
+ n = int(input("How many Fibonacci numbers? "))
5
+
6
+ if n < 0:
7
+ raise ValueError("Number must be non-negative")
8
+
9
+ result = []
10
+
11
+ a = 0
12
+ b = 1
13
+
14
+ for _ in range(n):
15
+
16
+ result.append(a)
17
+
18
+ a, b = b, a + b
19
+
20
+ return result
@@ -0,0 +1,15 @@
1
+ def find_max(numbers=None):
2
+
3
+ if numbers is None:
4
+ numbers = list(
5
+ map(int, input("Enter numbers separated by spaces: ").split())
6
+ )
7
+
8
+ maximum = numbers[0]
9
+
10
+ for number in numbers:
11
+
12
+ if number > maximum:
13
+ maximum = number
14
+
15
+ return maximum
@@ -0,0 +1,15 @@
1
+ def find_min(numbers=None):
2
+
3
+ if numbers is None:
4
+ numbers = list(
5
+ map(int, input("Enter numbers separated by spaces: ").split())
6
+ )
7
+
8
+ minimum = numbers[0]
9
+
10
+ for number in numbers:
11
+
12
+ if number < minimum:
13
+ minimum = number
14
+
15
+ return minimum
@@ -0,0 +1,18 @@
1
+ def first_non_repeating(text=None):
2
+
3
+ if text is None:
4
+ text = input("Enter a string to find the first non-repeating character: ")
5
+
6
+ frequency = {}
7
+
8
+ for character in text:
9
+
10
+ if character != " ":
11
+ frequency[character] = frequency.get(character, 0) + 1
12
+
13
+ for character in text:
14
+
15
+ if character != " " and frequency[character] == 1:
16
+ return character
17
+
18
+ return None
@@ -0,0 +1,12 @@
1
+ def gcd(a=None, b=None):
2
+
3
+ if a is None:
4
+ a = int(input("Enter first number of GCD: "))
5
+
6
+ if b is None:
7
+ b = int(input("Enter second number of GCD: "))
8
+
9
+ while b != 0:
10
+ a, b = b, a % b
11
+
12
+ return abs(a)
@@ -0,0 +1,11 @@
1
+ def is_harshad_number(n=None):
2
+
3
+ if n is None:
4
+ n = int(input("Enter a number to check if it is a harshad number: "))
5
+
6
+ if n == 0:
7
+ return False
8
+
9
+ digit_sum = sum(int(digit) for digit in str(abs(n)))
10
+
11
+ return n % digit_sum == 0
@@ -0,0 +1,50 @@
1
+ def get_number(message="Enter a number: "):
2
+ return int(input(message))
3
+
4
+
5
+ def get_numbers(message="Enter numbers separated by spaces: "):
6
+ return list(map(int, input(message).split()))
7
+
8
+
9
+ def get_text(message="Enter text: "):
10
+ return input(message)
11
+
12
+
13
+ def get_target(message="Enter target: "):
14
+ return int(input(message))
15
+
16
+
17
+ def get_k(message="Enter k: "):
18
+ return int(input(message))
19
+
20
+
21
+ def get_difference(message="Enter difference: "):
22
+ return int(input(message))
23
+
24
+
25
+ def get_amount(message="Enter amount: "):
26
+ return int(input(message))
27
+
28
+
29
+ def get_rows(message="Enter number of rows: "):
30
+ return int(input(message))
31
+
32
+
33
+ def get_columns(message="Enter number of columns: "):
34
+ return int(input(message))
35
+
36
+
37
+ def get_first_number(message="Enter first number: "):
38
+ return int(input(message))
39
+
40
+
41
+ def get_second_number(message="Enter second number: "):
42
+ return int(input(message))
43
+
44
+
45
+ def get_first_text(message="Enter first string: "):
46
+ return input(message)
47
+
48
+
49
+ def get_second_text(message="Enter second string: "):
50
+ return input(message)
@@ -0,0 +1,24 @@
1
+ def insertion_sort(numbers=None):
2
+
3
+ if numbers is None:
4
+ numbers = list(
5
+ map(int, input("Enter numbers separated by spaces: ").split())
6
+ )
7
+
8
+ numbers = numbers.copy()
9
+
10
+ for i in range(1, len(numbers)):
11
+
12
+ current = numbers[i]
13
+
14
+ j = i - 1
15
+
16
+ while j >= 0 and numbers[j] > current:
17
+
18
+ numbers[j + 1] = numbers[j]
19
+
20
+ j -= 1
21
+
22
+ numbers[j + 1] = current
23
+
24
+ return numbers
@@ -0,0 +1,16 @@
1
+ def kth_largest(numbers=None, k=None):
2
+
3
+ if numbers is None:
4
+ numbers = list(
5
+ map(int, input("Enter numbers separated by spaces: ").split())
6
+ )
7
+
8
+ if k is None:
9
+ k = int(input("Enter k: "))
10
+
11
+ if k < 1 or k > len(numbers):
12
+ raise ValueError("Invalid k")
13
+
14
+ sorted_numbers = sorted(numbers, reverse=True)
15
+
16
+ return sorted_numbers[k - 1]
@@ -0,0 +1,18 @@
1
+ def lcm(a=None, b=None):
2
+
3
+ if a is None:
4
+ a = int(input("Enter first number of LCM: "))
5
+
6
+ if b is None:
7
+ b = int(input("Enter second number of LCM: "))
8
+
9
+ if a == 0 or b == 0:
10
+ return 0
11
+
12
+ x = abs(a)
13
+ y = abs(b)
14
+
15
+ while y:
16
+ x, y = y, x % y
17
+
18
+ return abs(a * b) // x
@@ -0,0 +1,16 @@
1
+ def linear_search(numbers=None, target=None):
2
+
3
+ if numbers is None:
4
+ numbers = list(
5
+ map(int, input("Enter numbers separated by spaces: ").split())
6
+ )
7
+
8
+ if target is None:
9
+ target = int(input("Enter target: "))
10
+
11
+ for index, number in enumerate(numbers):
12
+
13
+ if number == target:
14
+ return index
15
+
16
+ return -1
@@ -0,0 +1,22 @@
1
+ def longest_consecutive(numbers=None):
2
+ if numbers is None:
3
+ numbers = list(
4
+ map(int, input("Enter numbers separated by spaces: ").split())
5
+ )
6
+
7
+ numbers = set(numbers)
8
+ longest = 0
9
+
10
+ for number in numbers:
11
+
12
+ if number - 1 not in numbers:
13
+ current = number
14
+ length = 1
15
+
16
+ while current + 1 in numbers:
17
+ current += 1
18
+ length += 1
19
+
20
+ longest = max(longest, length)
21
+
22
+ return longest
@@ -0,0 +1,18 @@
1
+ def longest_word(text=None):
2
+
3
+ if text is None:
4
+ text = input("Enter a sentence to find the longest word in: ")
5
+
6
+ words = text.split()
7
+
8
+ if not words:
9
+ return ""
10
+
11
+ longest = words[0]
12
+
13
+ for word in words:
14
+
15
+ if len(word) > len(longest):
16
+ longest = word
17
+
18
+ return longest
@@ -0,0 +1,42 @@
1
+ def matrix_transpose(matrix=None):
2
+
3
+ if matrix is None:
4
+
5
+ rows = int(input("Enter number of rows: "))
6
+
7
+ columns = int(input("Enter number of columns: "))
8
+
9
+ matrix = []
10
+
11
+ for i in range(rows):
12
+
13
+ row = list(
14
+ map(
15
+ int,
16
+ input(f"Enter row {i + 1}: ").split()
17
+ )
18
+ )
19
+
20
+ if len(row) != columns:
21
+ raise ValueError(
22
+ "Number of values does not match columns"
23
+ )
24
+
25
+ matrix.append(row)
26
+
27
+ if not matrix:
28
+ return []
29
+
30
+ result = []
31
+
32
+ for column in range(len(matrix[0])):
33
+
34
+ new_row = []
35
+
36
+ for row in range(len(matrix)):
37
+
38
+ new_row.append(matrix[row][column])
39
+
40
+ result.append(new_row)
41
+
42
+ return result
@@ -0,0 +1,26 @@
1
+ def maximum_subarray(numbers=None):
2
+
3
+ if numbers is None:
4
+ numbers = list(
5
+ map(int, input("Enter numbers separated by spaces: ").split())
6
+ )
7
+
8
+ if not numbers:
9
+ return 0
10
+
11
+ current_sum = numbers[0]
12
+ maximum_sum = numbers[0]
13
+
14
+ for number in numbers[1:]:
15
+
16
+ current_sum = max(
17
+ number,
18
+ current_sum + number
19
+ )
20
+
21
+ maximum_sum = max(
22
+ maximum_sum,
23
+ current_sum
24
+ )
25
+
26
+ return maximum_sum
@@ -0,0 +1,36 @@
1
+ def merge_sort(numbers=None):
2
+
3
+ if numbers is None:
4
+ numbers = list(
5
+ map(int, input("Enter numbers separated by spaces: ").split())
6
+ )
7
+
8
+ if len(numbers) <= 1:
9
+ return numbers
10
+
11
+ middle = len(numbers) // 2
12
+
13
+ left = merge_sort(numbers[:middle])
14
+ right = merge_sort(numbers[middle:])
15
+
16
+ result = []
17
+
18
+ i = 0
19
+ j = 0
20
+
21
+ while i < len(left) and j < len(right):
22
+
23
+ if left[i] <= right[j]:
24
+
25
+ result.append(left[i])
26
+ i += 1
27
+
28
+ else:
29
+
30
+ result.append(right[j])
31
+ j += 1
32
+
33
+ result.extend(left[i:])
34
+ result.extend(right[j:])
35
+
36
+ return result
@@ -0,0 +1,21 @@
1
+ def move_zeros(numbers=None):
2
+
3
+ if numbers is None:
4
+ numbers = list(
5
+ map(int, input("Enter numbers separated by spaces: ").split())
6
+ )
7
+
8
+ result = []
9
+
10
+ zero_count = 0
11
+
12
+ for number in numbers:
13
+
14
+ if number == 0:
15
+ zero_count += 1
16
+ else:
17
+ result.append(number)
18
+
19
+ result.extend([0] * zero_count)
20
+
21
+ return result
@@ -0,0 +1,21 @@
1
+ def pair_with_difference(numbers=None, difference=None):
2
+ if numbers is None:
3
+ numbers = list(
4
+ map(int, input("Enter numbers separated by spaces: ").split())
5
+ )
6
+
7
+ if difference is None:
8
+ difference = int(input("Enter difference: "))
9
+
10
+ seen = set()
11
+
12
+ for number in numbers:
13
+ if number - difference in seen:
14
+ return [number - difference, number]
15
+
16
+ if number + difference in seen:
17
+ return [number, number + difference]
18
+
19
+ seen.add(number)
20
+
21
+ return []
@@ -0,0 +1,8 @@
1
+ def is_palindrome(value=None):
2
+
3
+ if value is None:
4
+ value = input("Enter a word or number to check if it is a palindrome: ")
5
+
6
+ value = str(value)
7
+
8
+ return value == value[::-1]
@@ -0,0 +1,19 @@
1
+ def is_perfect_number(n=None):
2
+
3
+ if n is None:
4
+ n = int(input("Enter a number to check if it is a perfect number: "))
5
+
6
+ if n <= 1:
7
+ return False
8
+
9
+ total = 1
10
+
11
+ for i in range(2, int(n ** 0.5) + 1):
12
+
13
+ if n % i == 0:
14
+ total += i
15
+
16
+ if i != n // i:
17
+ total += n // i
18
+
19
+ return total == n
@@ -0,0 +1,15 @@
1
+ def power(base=None, exponent=None):
2
+
3
+ if base is None:
4
+ base = int(input("Enter base: "))
5
+
6
+ if exponent is None:
7
+ exponent = int(input("Enter exponent: "))
8
+
9
+ if exponent == 0:
10
+ return 1
11
+
12
+ if exponent < 0:
13
+ return 1 / power(base, -exponent)
14
+
15
+ return base * power(base, exponent - 1)
@@ -0,0 +1,14 @@
1
+ def is_prime(n=None):
2
+
3
+ if n is None:
4
+ n = int(input("Enter a number to check if it is prime: "))
5
+
6
+ if n < 2:
7
+ return False
8
+
9
+ for i in range(2, int(n ** 0.5) + 1):
10
+
11
+ if n % i == 0:
12
+ return False
13
+
14
+ return True
@@ -0,0 +1,29 @@
1
+ def quick_sort(numbers=None):
2
+
3
+ if numbers is None:
4
+ numbers = list(
5
+ map(int, input("Enter numbers separated by spaces: ").split())
6
+ )
7
+
8
+ if len(numbers) <= 1:
9
+ return numbers
10
+
11
+ pivot = numbers[-1]
12
+
13
+ smaller = []
14
+
15
+ greater = []
16
+
17
+ for number in numbers[:-1]:
18
+
19
+ if number <= pivot:
20
+ smaller.append(number)
21
+
22
+ else:
23
+ greater.append(number)
24
+
25
+ return (
26
+ quick_sort(smaller)
27
+ + [pivot]
28
+ + quick_sort(greater)
29
+ )
@@ -0,0 +1,15 @@
1
+ def remove_duplicates(numbers=None):
2
+
3
+ if numbers is None:
4
+ numbers = list(
5
+ map(int, input("Enter numbers separated by spaces: ").split())
6
+ )
7
+
8
+ result = []
9
+
10
+ for number in numbers:
11
+
12
+ if number not in result:
13
+ result.append(number)
14
+
15
+ return result
@@ -0,0 +1,13 @@
1
+ def remove_duplicate_characters(text=None):
2
+
3
+ if text is None:
4
+ text = input("Enter a string to remove duplicate characters from: ")
5
+
6
+ result = ""
7
+
8
+ for character in text:
9
+
10
+ if character not in result:
11
+ result += character
12
+
13
+ return result
@@ -0,0 +1,38 @@
1
+ class Node:
2
+ def __init__(self, value):
3
+ self.value = value
4
+ self.next = None
5
+
6
+
7
+ def reverse_linked_list(values=None):
8
+ if values is None:
9
+ values = list(
10
+ map(int, input("Enter linked list values separated by spaces: ").split())
11
+ )
12
+
13
+ if not values:
14
+ return []
15
+
16
+ head = Node(values[0])
17
+ current = head
18
+
19
+ for value in values[1:]:
20
+ current.next = Node(value)
21
+ current = current.next
22
+
23
+ previous = None
24
+ current = head
25
+
26
+ while current:
27
+ next_node = current.next
28
+ current.next = previous
29
+ previous = current
30
+ current = next_node
31
+
32
+ result = []
33
+
34
+ while previous:
35
+ result.append(previous.value)
36
+ previous = previous.next
37
+
38
+ return result
@@ -0,0 +1,8 @@
1
+ def reverse_number(n=None):
2
+
3
+ if n is None:
4
+ n = int(input("Enter a number to reverse: "))
5
+
6
+ sign = -1 if n < 0 else 1
7
+
8
+ return sign * int(str(abs(n))[::-1])
@@ -0,0 +1,6 @@
1
+ def reverse_string(text=None):
2
+
3
+ if text is None:
4
+ text = input("Enter a string to reverse: ")
5
+
6
+ return text[::-1]
@@ -0,0 +1,25 @@
1
+ def second_largest(numbers=None):
2
+
3
+ if numbers is None:
4
+ numbers = list(
5
+ map(int, input("Enter numbers separated by spaces: ").split())
6
+ )
7
+
8
+ unique_numbers = list(set(numbers))
9
+
10
+ if len(unique_numbers) < 2:
11
+ raise ValueError("Need at least two different numbers")
12
+
13
+ largest = unique_numbers[0]
14
+ second = None
15
+
16
+ for number in unique_numbers:
17
+
18
+ if number > largest:
19
+ second = largest
20
+ largest = number
21
+
22
+ elif second is None or number > second:
23
+ second = number
24
+
25
+ return second
@@ -0,0 +1,24 @@
1
+ def selection_sort(numbers=None):
2
+
3
+ if numbers is None:
4
+ numbers = list(
5
+ map(int, input("Enter numbers separated by spaces : ").split())
6
+ )
7
+
8
+ numbers = numbers.copy()
9
+
10
+ for i in range(len(numbers)):
11
+
12
+ minimum = i
13
+
14
+ for j in range(i + 1, len(numbers)):
15
+
16
+ if numbers[j] < numbers[minimum]:
17
+ minimum = j
18
+
19
+ numbers[i], numbers[minimum] = (
20
+ numbers[minimum],
21
+ numbers[i]
22
+ )
23
+
24
+ return numbers
@@ -0,0 +1,14 @@
1
+ import math
2
+
3
+
4
+ def is_strong_number(n=None):
5
+
6
+ if n is None:
7
+ n = int(input("Enter a number to check if it is a strong number: "))
8
+
9
+ total = 0
10
+
11
+ for digit in str(abs(n)):
12
+ total += math.factorial(int(digit))
13
+
14
+ return total == n
@@ -0,0 +1,16 @@
1
+ def is_subsequence(text=None, sequence=None):
2
+
3
+ if text is None:
4
+ text = input("Enter main string to check for subsequence: ")
5
+
6
+ if sequence is None:
7
+ sequence = input("Enter sequence to check for: ")
8
+
9
+ index = 0
10
+
11
+ for character in text:
12
+
13
+ if index < len(sequence) and character == sequence[index]:
14
+ index += 1
15
+
16
+ return index == len(sequence)
@@ -0,0 +1,6 @@
1
+ def sum_of_digits(n=None):
2
+
3
+ if n is None:
4
+ n = int(input("Enter a number to calculate the sum of its digits: "))
5
+
6
+ return sum(int(digit) for digit in str(abs(n)))
@@ -0,0 +1,14 @@
1
+ def trailing_zeros(n=None):
2
+ if n is None:
3
+ n = int(input("Enter a number: "))
4
+
5
+ if n < 0:
6
+ raise ValueError("Number must be non-negative")
7
+
8
+ count = 0
9
+
10
+ while n > 0:
11
+ n //= 5
12
+ count += n
13
+
14
+ return count
@@ -0,0 +1,22 @@
1
+ def two_sum(numbers=None, target=None):
2
+
3
+ if numbers is None:
4
+ numbers = list(
5
+ map(int, input("Enter numbers separated by spaces: ").split())
6
+ )
7
+
8
+ if target is None:
9
+ target = int(input("Enter target: "))
10
+
11
+ seen = {}
12
+
13
+ for index, number in enumerate(numbers):
14
+
15
+ difference = target - number
16
+
17
+ if difference in seen:
18
+ return [seen[difference], index]
19
+
20
+ seen[number] = index
21
+
22
+ return []
@@ -0,0 +1,28 @@
1
+ def valid_parentheses(text=None):
2
+
3
+ if text is None:
4
+ text = input("Enter brackets: ")
5
+
6
+ stack = []
7
+
8
+ pairs = {
9
+ ")": "(",
10
+ "]": "[",
11
+ "}": "{"
12
+ }
13
+
14
+ for character in text:
15
+
16
+ if character in "([{":
17
+
18
+ stack.append(character)
19
+
20
+ elif character in ")]}":
21
+
22
+ if not stack:
23
+ return False
24
+
25
+ if stack.pop() != pairs[character]:
26
+ return False
27
+
28
+ return len(stack) == 0
@@ -0,0 +1,6 @@
1
+ def word_count(text=None):
2
+
3
+ if text is None:
4
+ text = input("Enter a sentence to count words in: ")
5
+
6
+ return len(text.split())
@@ -0,0 +1,17 @@
1
+ Metadata-Version: 2.4
2
+ Name: jugaadcode
3
+ Version: 0.1.0
4
+ Summary: A Python library for common programming logic and algorithms
5
+ Author: Mohamed Faraazman Bin Farooq S
6
+ Requires-Python: >=3.9
7
+ Description-Content-Type: text/markdown
8
+
9
+ # codinglogic
10
+
11
+ A Python library containing common coding logic, algorithms, and
12
+ programming utilities.
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ pip install codinglogic
@@ -0,0 +1,59 @@
1
+ README.md
2
+ pyproject.toml
3
+ src/jugaadcode/__init__.py
4
+ src/jugaadcode/anagram.py
5
+ src/jugaadcode/armstrong.py
6
+ src/jugaadcode/binary_search.py
7
+ src/jugaadcode/bubble_sort.py
8
+ src/jugaadcode/capitalize_words.py
9
+ src/jugaadcode/character_frequency.py
10
+ src/jugaadcode/climbing_stairs.py
11
+ src/jugaadcode/coin_change.py
12
+ src/jugaadcode/count_vowels.py
13
+ src/jugaadcode/counting_sort.py
14
+ src/jugaadcode/duplicate_number.py
15
+ src/jugaadcode/even_odd.py
16
+ src/jugaadcode/factorial.py
17
+ src/jugaadcode/factorial_trailing_zeros_direct.py
18
+ src/jugaadcode/factorial_with_trailing_zeros.py
19
+ src/jugaadcode/fibonacci.py
20
+ src/jugaadcode/find_max.py
21
+ src/jugaadcode/find_min.py
22
+ src/jugaadcode/first_non_repeating.py
23
+ src/jugaadcode/gcd.py
24
+ src/jugaadcode/harshad_number.py
25
+ src/jugaadcode/input_utils.py
26
+ src/jugaadcode/insertion_sort.py
27
+ src/jugaadcode/kth_largest.py
28
+ src/jugaadcode/lcm.py
29
+ src/jugaadcode/linear_search.py
30
+ src/jugaadcode/longest_consecutive.py
31
+ src/jugaadcode/longest_word.py
32
+ src/jugaadcode/matrix_transpose.py
33
+ src/jugaadcode/maximum_subarray.py
34
+ src/jugaadcode/merge_sort.py
35
+ src/jugaadcode/move_zeros.py
36
+ src/jugaadcode/pair_with_difference.py
37
+ src/jugaadcode/palindrome.py
38
+ src/jugaadcode/perfect_number.py
39
+ src/jugaadcode/power.py
40
+ src/jugaadcode/prime.py
41
+ src/jugaadcode/quick_sort.py
42
+ src/jugaadcode/remove_duplicates_array.py
43
+ src/jugaadcode/remove_duplicates_string.py
44
+ src/jugaadcode/reverse_linked_list.py
45
+ src/jugaadcode/reverse_number.py
46
+ src/jugaadcode/reverse_string.py
47
+ src/jugaadcode/second_largest.py
48
+ src/jugaadcode/selection_sort.py
49
+ src/jugaadcode/strong_number.py
50
+ src/jugaadcode/subsequence.py
51
+ src/jugaadcode/sum_of_digits.py
52
+ src/jugaadcode/trailing_zeros.py
53
+ src/jugaadcode/two_sum.py
54
+ src/jugaadcode/valid_parentheses.py
55
+ src/jugaadcode/word_count.py
56
+ src/jugaadcode.egg-info/PKG-INFO
57
+ src/jugaadcode.egg-info/SOURCES.txt
58
+ src/jugaadcode.egg-info/dependency_links.txt
59
+ src/jugaadcode.egg-info/top_level.txt
@@ -0,0 +1 @@
1
+ jugaadcode