Constructor Injection and Null Object Design Patterns

The Constructor Injection design pattern is a pattern that helps you declare all the required dependencies of a class in it’s constructor. This is useful because it helps you decouple the code, you can specify an interface instead of a concrete type, remember, program to an interface. Also, in the constructor it is easier to guard against null objects. The calling code doesn’t have to worry about null exceptions every time it uses a dependency. ...

November 7, 2020 · 2 min · Denis Nuțiu

Composition Root Pattern: How to Write Modular Software

The composition root is a design pattern which helps you structure a software application by implementing a class that builds all the other classes. In this example we will examine this pattern in Python. Here’s the object graph of the classes that we’re going to implement: I have designed a sample application that we’re going to use. It contains three components: ConsoleInputListener, ConsolePrinter and RomanianTranslator and a value object class: Message. ...

November 6, 2020 · 4 min · Denis Nuțiu

Introduction to Pyenv for Linux Users

Hello, In this article I will introduce you to pyenv, a tool for managing python environments. Installing pyenv is pretty straight forward, you’ll need to clone the repo and add the binaries to the path. For a typical Debian based distro using the Zsh shell the instructions would be: 1 2 3 4 git clone https://github.com/pyenv/pyenv.git ~/.pyenv echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc Then, in order for this to take effect, you need to reload the shell with: source ~/.zshrc, or just restart your terminal. 😀 ...

June 27, 2020 · 4 min · Denis Nuțiu

LeetCode: Find The Town Judge

Hello In this article I will present you my Python3 solution for the following problem which I found on LeetCode: find-the-town-judge. Note: The solution is on the second page, so you won’t get spoiled if you want to attempt to solve the problem by yourself. Have fun! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 from collections import defaultdict from typing import List """ In a town, there are N people labelled from 1 to N. There is a rumor that one of these people is secretly the town judge. If the town judge exists, then: The town judge trusts nobody. Everybody (except for the town judge) trusts the town judge. There is exactly one person that satisfies properties 1 and 2. You are given trust, an array of pairs trust[i] = [a, b] representing that the person labelled a trusts the person labelled b. If the town judge exists and can be identified, return the label of the town judge. Otherwise, return -1. """ class Solution: def _filterForJudge(self, N, trust_dict): no_trustees = None for i in range(1, N + 1): person_trusted = trust_dict.get(i, set()) if len(person_trusted) == 0: if no_trustees is None: no_trustees = i else: return None return no_trustees def findJudge(self, N: int, trust: List[List[int]]) -> int: trust_dict = defaultdict(set) for i in trust: trust_dict[i[0]].add(i[1]) # The town judge trusts nobody. no_trustee = self._filterForJudge(N, trust_dict) if no_trustee: # Everybody trusts the town judge. people_who_trust = 0 for p in trust_dict.items(): # Check if the person trusts the town judge. if no_trustee in p[1]: people_who_trust += 1 if people_who_trust == N-1: return no_trustee return -1 if __name__ == '__main__': s = Solution() print(s.findJudge(2, [[1,2]])) print(s.findJudge(3, [[1,3],[2,3]])) print(s.findJudge(3, [[1,3],[2,3],[3,1]])) print(s.findJudge(3, [[1,2],[2,3]])) print(s.findJudge(4, [[1,3],[1,4],[2,3],[2,4],[4,3]])) Thanks for reading! ...

May 11, 2020 · 2 min · Denis Nuțiu

LeetCode: Arrays 101: Introduction – Solutions

Hello, LeetCode is a good place to practice programming by solving problems of all levels! After you solve a problem, you’ll get access to all submitted solutions, sorted by time and memory usage. That’s a nice way to compare your code to others and see what you did well and where you can improve. Here’s my solutions for the Arrays 101: Introduction card: Max Consecutive Ones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Solution: def findMaxConsecutiveOnes(self, nums: List[int]) -> int: max_counter = 0 counter = 0 for i in nums: if i == 1: counter += 1 else: if counter > max_counter: max_counter = counter counter = 0 if counter > max_counter: max_counter = counter return max_counter Find Numbers with Even Number of Digits 1 2 3 4 5 6 7 8 9 10 11 12 class Solution: @staticmethod def is_even(value): return len(str(value)) % 2 == 0 def findNumbers(self, nums: List[int]) -> int: return_value = 0 for number in nums: if self.is_even(number): return_value += 1 return return_value Squares of a Sorted Array When writing code like this be careful because you’re altering the A list in place. ...

April 26, 2020 · 2 min · Denis Nuțiu