Skip to content

Commit 3fa0f83

Browse files
authored
Merge pull request #662 from sir-gon/develop
Develop
2 parents ec9e703 + 058f2d3 commit 3fa0f83

File tree

115 files changed

+376
-358
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

115 files changed

+376
-358
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,3 +181,6 @@ cython_debug/
181181

182182
# Sarif
183183
*.sarif
184+
185+
# SonarQube sonar-scanner (cli)
186+
.scannerwork

.pylintrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ const-naming-style=UPPER_CASE
552552
docstring-min-length=-1
553553

554554
# Naming style matching correct function names.
555-
function-naming-style=snake_case
555+
function-naming-style=camelCase
556556

557557
# Regular expression matching correct function names. Overrides function-
558558
# naming-style. If left empty, function names will be checked with the set

Makefile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,15 +118,15 @@ upgrade:
118118
${PACKAGE_TOOL} list --outdated | cut -f1 -d' ' | tr " " "\n" | awk '{if(NR>=3)print}' | cut -d' ' -f1 | xargs -n1 pip3 install -U
119119

120120
clean:
121-
${PACKAGE_TOOL} freeze > unins ; pip3 uninstall -y -r unins ; rm unins
121+
${PACKAGE_TOOL} freeze > unins ; ${PACKAGE_TOOL} uninstall -y -r unins ; rm unins
122122
rm -f .coverage
123123
rm -fr .pytest_cache
124124
rm -fr htmlcov
125125
rm -fr coverage
126126
rm -fr build
127-
find . -path "*/*.pyc" -delete -print
128-
find . -path "*/*.pyo" -delete -print
129-
find . -path "*/__pycache__" -type d -print -exec rm -fr {} ';'
127+
find . -path "*/*.pyc" -delete -print || true
128+
find . -path "*/*.pyo" -delete -print || true
129+
find . -path "*/__pycache__" -type d -print -exec rm -fr {} ';' || true
130130

131131
compose/build: env
132132
${DOCKER_COMPOSE} --profile lint build

docs/hackerrank/interview_preparation_kit/linked_lists/insert-a-node-into-a-sorted-doubly-linked-list.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# [Linked Lists: Insert a node at a specific position in a linked list](https://www.hackerrank.com/challenges/insert-a-node-at-a-specific-position-in-a-linked-list)
1+
# [Linked Lists: Insert a node at a specific position in a linked list](https://www.hackerrank.com/challenges/insert-a-node-into-a-sorted-doubly-linked-list)
22

33
Create a node with a given value and insert it into a sorted doubly-linked list
44

sonar-project.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,4 @@ sonar.issue.ignore.multicriteria=e1
2424
# python:S6792 Use the "type" parameter syntax to declare this generic class.
2525
sonar.issue.ignore.multicriteria.e1.ruleKey=python:S6792
2626
sonar.issue.ignore.multicriteria.e1.resourceKey=**/*.py
27+
sonar.python.naming.function=^[a-z][a-zA-Z0-9]*$

src/hackerrank/implementation/between_two_sets.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
LOGGER = logging.getLogger(__name__)
66

77

8-
def is_factor(_n: int, group: list[int]) -> bool:
8+
def isFactor(_n: int, group: list[int]) -> bool:
99
result: bool = True
1010
i: int = 0
1111

@@ -21,7 +21,7 @@ def is_factor(_n: int, group: list[int]) -> bool:
2121
return result
2222

2323

24-
def factor_of(_n: int, group: list[int]):
24+
def factorOf(_n: int, group: list[int]):
2525
result: bool = True
2626
i: int = 0
2727

@@ -37,15 +37,15 @@ def factor_of(_n: int, group: list[int]):
3737
return result
3838

3939

40-
def get_total_x(_a: list[int], _b: list[int]) -> int:
40+
def getTotalX(_a: list[int], _b: list[int]) -> int:
4141
_max_ = 0
4242
for _, j in enumerate(_b):
4343
_max_ = max(_max_, j)
4444

4545
result: list[int] = []
4646

4747
for i in range(2, _max_):
48-
if is_factor(i, _a) and factor_of(i, _b):
48+
if isFactor(i, _a) and factorOf(i, _b):
4949
result.append(i)
5050

5151
output = len(result)
Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import unittest
2-
from .between_two_sets import get_total_x, is_factor, factor_of
2+
from .between_two_sets import getTotalX, isFactor, factorOf
33

44

55
class TestProblemBetweenTwoSets(unittest.TestCase):
@@ -9,39 +9,39 @@ def test_get_total_x(self):
99
tinput: list[int] = [16, 32, 96]
1010
solution_found: int = 0
1111

12-
calculated_a = get_total_x([], tinput)
12+
calculated_a = getTotalX([], tinput)
1313

1414
self.assertEqual(
1515
calculated_a, solution_found,
16-
f"get_total_x([], tinput) must be "
16+
f"getTotalX([], tinput) must be "
1717
f"=> {solution_found}")
1818

19-
calculated_b = get_total_x(tinput, [])
19+
calculated_b = getTotalX(tinput, [])
2020

2121
self.assertEqual(
2222
calculated_b, solution_found,
23-
f"get_total_x({tinput}, {[]}) must be "
23+
f"getTotalX({tinput}, {[]}) must be "
2424
f"=> {solution_found}")
2525

26-
calculated_c = get_total_x([], [])
26+
calculated_c = getTotalX([], [])
2727

2828
self.assertEqual(
2929
calculated_c, solution_found,
30-
f"get_total_x({[]}, {[]}) must be "
30+
f"getTotalX({[]}, {[]}) must be "
3131
f"=> {solution_found}")
3232

33-
calculated_d = is_factor(1, [])
33+
calculated_d = isFactor(1, [])
3434

3535
self.assertEqual(
3636
calculated_d, solution_found,
37-
f"is_factor({1}, {[]}) must be "
37+
f"isFactor({1}, {[]}) must be "
3838
f"=> {False}")
3939

40-
calculated_e = factor_of(1, [])
40+
calculated_e = factorOf(1, [])
4141

4242
self.assertEqual(
4343
calculated_e, solution_found,
44-
f"factor_of({1}, {[]}) must be "
44+
f"factorOf({1}, {[]}) must be "
4545
f"=> {False}")
4646

4747
def test_get_total_x_case_0(self):
@@ -53,11 +53,11 @@ def test_get_total_x_case_0(self):
5353
solution_found = 3
5454

5555
self.assertEqual(
56-
get_total_x(_a_, _b_), solution_found,
57-
f"get_total_x({_a_}, {_b_}) must be "
56+
getTotalX(_a_, _b_), solution_found,
57+
f"getTotalX({_a_}, {_b_}) must be "
5858
f"=> {solution_found}")
5959

6060
self.assertEqual(
61-
get_total_x(_a_, _b_reverse_), solution_found,
62-
f"get_total_x({_a_}, {_b_reverse_}) must be "
61+
getTotalX(_a_, _b_reverse_), solution_found,
62+
f"getTotalX({_a_}, {_b_reverse_}) must be "
6363
f"=> {solution_found}")

src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
LOGGER = logging.getLogger(__name__)
77

88

9-
def array_manipulation(n_operations: int, queries: list[list[int]]) -> int:
9+
def arrayManipulation(n_operations: int, queries: list[list[int]]) -> int:
1010
result = [0] * (n_operations + 1)
1111
maximum = 0
1212

src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce_test.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from pathlib import Path
33

44
from ....hackerrank.lib.loader import load_test_cases
5-
from .cruch_bruteforce import array_manipulation
5+
from .cruch_bruteforce import arrayManipulation
66

77
FILE_PATH = str(Path(__file__).resolve().parent)
88

@@ -17,6 +17,6 @@ def test_array_manipulation(self):
1717
for _, _tt in enumerate(CRUCH_SMALL_TEST_CASES):
1818

1919
self.assertEqual(
20-
array_manipulation(_tt['n'], _tt['queries']), _tt['expected'],
21-
f"{_} | array_manipulation({_tt['n']}, {_tt['queries']}) must be "
20+
arrayManipulation(_tt['n'], _tt['queries']), _tt['expected'],
21+
f"{_} | arrayManipulation({_tt['n']}, {_tt['queries']}) must be "
2222
f"=> {_tt['expected']}")

src/hackerrank/interview_preparation_kit/arrays/cruch_optimized.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
LOGGER = logging.getLogger(__name__)
1010

1111

12-
def array_manipulation_optimized(n_operations: int, queries: list[list[int]]) -> int:
12+
def arrayManipulation(n_operations: int, queries: list[list[int]]) -> int:
1313
# why adding 2?
1414
# first slot to adjust 1-based index and
1515
# last slot for storing accum_sum result

src/hackerrank/interview_preparation_kit/arrays/cruch_optimized_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from pathlib import Path
33

44
from ....hackerrank.lib.loader import load_test_cases
5-
from .cruch_optimized import array_manipulation_optimized
5+
from .cruch_optimized import arrayManipulation
66

77
FILE_PATH = str(Path(__file__).resolve().parent)
88

@@ -17,6 +17,6 @@ def test_array_manipulation_optimized(self):
1717
for _, _tt in enumerate(CRUCH_SMALL_TEST_CASES):
1818

1919
self.assertEqual(
20-
array_manipulation_optimized(_tt['n'], _tt['queries']), _tt['expected'],
20+
arrayManipulation(_tt['n'], _tt['queries']), _tt['expected'],
2121
f"{_} | array_manipulation_optimized({_tt['n']}, {_tt['queries']}) "
2222
f"must be => {_tt['expected']}")

src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,20 @@
77
FIRST_POSITION: int = 0
88

99

10-
def rot_left_one(group: list[int]) -> list[int]:
10+
def rotLeftOne(group: list[int]) -> list[int]:
1111

1212
first = group.pop(FIRST_POSITION)
1313
group.append(first)
1414

1515
return group
1616

1717

18-
def rot_left(group: list[int], d_rotations: int) -> list[int]:
18+
def rotLeft(group: list[int], d_rotations: int) -> list[int]:
1919

2020
output = group.copy()
2121
i = 1
2222
while i <= d_rotations:
23-
output = rot_left_one(output)
23+
output = rotLeftOne(output)
2424
i += 1
2525

2626
return output

src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation_test.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from pathlib import Path
33

44
from ....hackerrank.lib.loader import load_test_cases
5-
from .ctci_array_left_rotation import rot_left, rot_left_one
5+
from .ctci_array_left_rotation import rotLeft, rotLeftOne
66

77
FILE_PATH = str(Path(__file__).resolve().parent)
88

@@ -16,8 +16,8 @@ def test_rot_left_one(self):
1616
for _, _tt in enumerate(TEST_CASES):
1717

1818
self.assertEqual(
19-
rot_left_one(_tt['input']), _tt['expected'],
20-
f"{_} | rot_left({_tt['input']}) must be "
19+
rotLeftOne(_tt['input']), _tt['expected'],
20+
f"{_} | rotLeftOne({_tt['input']}) must be "
2121
f"=> {_tt['expected']}")
2222

2323
def test_rot_left(self):
@@ -29,6 +29,6 @@ def test_rot_left(self):
2929
for _, _tt in enumerate(tests):
3030

3131
self.assertEqual(
32-
rot_left(_tt['input'], _tt['d']), _tt['expected'],
33-
f"{_} | rot_left({_tt['input']}) must be "
32+
rotLeft(_tt['input'], _tt['d']), _tt['expected'],
33+
f"{_} | rotLeft({_tt['input']}) must be "
3434
f"=> {_tt['expected']}")

src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
LOGGER = logging.getLogger(__name__)
77

88

9-
def minimum_swaps(group: list[int]) -> int:
9+
def minimumSwaps(group: list[int]) -> int:
1010
indexed_group = [i - 1 for i in group]
1111

1212
swaps = 0

src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2_test.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from pathlib import Path
33

44
from ....hackerrank.lib.loader import load_test_cases
5-
from .minimum_swaps_2 import minimum_swaps
5+
from .minimum_swaps_2 import minimumSwaps
66

77
FILE_PATH = str(Path(__file__).resolve().parent)
88

@@ -17,6 +17,6 @@ def test_minimum_swaps(self):
1717
for _, _tt in enumerate(TEST_CASES):
1818

1919
self.assertEqual(
20-
minimum_swaps(_tt['input']), _tt['expected'],
21-
f"{_} | minimum_swaps({_tt['input']}) must be "
20+
minimumSwaps(_tt['input']), _tt['expected'],
21+
f"{_} | minimumSwaps({_tt['input']}) must be "
2222
f"=> {_tt['expected']}")

src/hackerrank/interview_preparation_kit/arrays/new_year_chaos.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@
44
import logging
55

66
LOGGER = logging.getLogger(__name__)
7-
87
TOO_CHAOTIC_ERROR = 'Too chaotic'
98

109

11-
def minimum_bribes(queue: list[int]) -> 'int | None':
10+
def minimumBribesCompute(queue: list[int]) -> 'int | None':
1211
bribes = 0
1312

1413
for i, value in enumerate(queue):
@@ -24,10 +23,14 @@ def minimum_bribes(queue: list[int]) -> 'int | None':
2423
return bribes
2524

2625

27-
def minimum_bribes_transform(queue: list[int]) -> 'int | str':
26+
def minimumBribesText(queue: list[int]) -> 'int | str':
2827

29-
result = minimum_bribes(queue)
28+
result = minimumBribesCompute(queue)
3029
if result is None:
3130
return TOO_CHAOTIC_ERROR
3231

3332
return result
33+
34+
35+
def minimumBribes(queue: list[int]):
36+
print(minimumBribesText(queue))

src/hackerrank/interview_preparation_kit/arrays/new_year_chaos_test.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from pathlib import Path
33

44
from ....hackerrank.lib.loader import load_test_cases
5-
from .new_year_chaos import minimum_bribes_transform
5+
from .new_year_chaos import minimumBribes, minimumBribesText
66

77
FILE_PATH = str(Path(__file__).resolve().parent)
88

@@ -17,6 +17,8 @@ def test_minimum_bribes(self):
1717
for _, _tt in enumerate(TEST_CASES):
1818

1919
self.assertEqual(
20-
minimum_bribes_transform(_tt['input']), _tt['expected'],
21-
f"{_} | minimum_bribes_transform({_tt['input']}) must be "
20+
minimumBribesText(_tt['input']), _tt['expected'],
21+
f"{_} | minimumBribesText({_tt['input']}) must be "
2222
f"=> {_tt['expected']}")
23+
24+
minimumBribes(_tt['input']) # Print the result (for coverage)

src/hackerrank/interview_preparation_kit/arrays/two_d_array.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def gethourglass(arr: list[list[int]], position_x: int, position_y: int) -> list
2525
return result
2626

2727

28-
def hourglass_sum(arr: list[list[int]]) -> int | None:
28+
def hourglassSum(arr: list[list[int]]) -> int | None:
2929
matrix_size: int = len(arr)
3030

3131
matrix_start_index: int = 1

src/hackerrank/interview_preparation_kit/arrays/two_d_array_test.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from pathlib import Path
33

44
from ....hackerrank.lib.loader import load_test_cases
5-
from .two_d_array import hourglass_sum
5+
from .two_d_array import hourglassSum
66

77
FILE_PATH = str(Path(__file__).resolve().parent)
88

@@ -16,6 +16,6 @@ def test_hourglass_sum(self):
1616
for _, _tt in enumerate(TEST_CASES):
1717

1818
self.assertEqual(
19-
hourglass_sum(_tt['input']), _tt['expected'],
20-
f"{_} | hourglass_sum({_tt['input']}) must be "
19+
hourglassSum(_tt['input']), _tt['expected'],
20+
f"{_} | hourglassSum({_tt['input']}) must be "
2121
f"=> {_tt['expected']}")

src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from collections import Counter
55

66

7-
def count_triplets_brute_force(arr: list[int], ratio: int) -> int:
7+
def countTripletsBruteForce(arr: list[int], ratio: int) -> int:
88

99
size = len(arr)
1010
counter = 0
@@ -20,7 +20,7 @@ def count_triplets_brute_force(arr: list[int], ratio: int) -> int:
2020
return counter
2121

2222

23-
def count_triplets(arr: list[int], ratio: int) -> int:
23+
def countTriplets(arr: list[int], ratio: int) -> int:
2424
a_counter = Counter(arr)
2525
b_counter = Counter()
2626
triplets = 0

0 commit comments

Comments
 (0)