Sobes.tech

Python

Puteți lucra în prezent în compania dvs. actuală?

Intern — Junior
141

Când a fost ultima dată când ai rezolvat probleme algoritmice pentru practică sau proiecte?

Junior — Middle
141

class ATM(SKD): def __init__(self, atm_api: "SKD"): self.atm_api: SKD = atm_api self.bills_count: dict[int:int] = {bill: self.atm_api.count_banknotes(bill) for bill in BILLS} def withdraw(self, amount: int) -> bool: bills_plan: dict[int: int] = {} remaining = amount for bill in BILLS: available = self.bills_count[bill] take = min(remaining // bill, available) if take > 0: bills_plan[bill] = take remaining -= take * bill if remaining != 0: return False bills_count_const = {50: 0, 100: 2, 500: 0, 1000: 0, ...}, expected = True @pytest.mark.parametrize( "bills_count_const,expected", [ ({5000: 0, 1000: 0, 500: 0, 100: 0, 50: 0}, False), ({5000: 100, 1000: 100, 500: 100, 100: 100, 50: 100}, True), ({5000: 1, 1000: 0, 500: 0, 100: 2, 50: 0}, True) ] ) def test_false(bills_count_const, expected): atm = ATM(FakeSDK()) atm.bills_count = bills_count_const amount = 1000 res = atm.withdraw(amount) assert res == expected

140

# Bancomat, care se încarcă cu cassetete de bancnote, cu aplicația noastră la bord # trebuie să poată elibera bancnote pentru suma specificată sau să răspundă cu o refuzare # La eliberare, bancnotele sunt scăzute din soldul bancomatului. # Denominațiile permise: 50€, 100€, 500€, 1000€, 5000€. class ATM: pass # spațiu pentru cod # Dispozitivul bancomatului: # - banii sunt plasați în cassetete în interiorul bancomatului, încărcate de inspector și reîncărcate; # - în fiecare casetă se află bancnote de o denominație proprie; # - bancomatul poate număra bancnotele rămase în cassetete, dar această operație durează mult - trebuie apelată cât mai rar. # API pentru interacțiunea cu echipamentul bancomatului. # interfața SDK poate fi modificată/extinsă după acordul părților, dacă este necesar class SDK(ABC): @abstractmethod def count_banknotes(self, banknote: int) -> int: pass @abstractmethod def move_banknote_to_dispenser(self, banknote: int, count: int) -> None: pass @abstractmethod def open_dispenser(self) -> None: pass

140

Cum se implementează un mecanism simplu de blocare (lock) în memorie pentru protecție împotriva accesului concurent fără a folosi dependențe externe?

139

Poți evalua complexitatea acestei soluții (din punct de vedere al timpului și memoriei)? Și de ce complexitatea nu este O(n^2)?

139

# OneEditApart("pisică", "câine") -> fals # OneEditApart("pisică", "pisici") -> adevărat # OneEditApart("pisică", "tăietură") -> adevărat # OneEditApart("pisică", "castel") -> adevărat # OneEditApart("pisică", "la") -> adevărat # OneEditApart("pisică", "acte") -> fals def OneEditApart(s1, s2) -> bool:

138

În ce etapă se află în prezent căutarea dvs. de job sau proiect?

Junior — Middle
137

În ce țări iei în considerare opțiuni de muncă sau colaborare?

Junior — Middle
137

Candidatul solicită explicații pentru soluția propusă (de ce este necesar să comparăm produsele perechilor minime și maxime).

136

Aveți experiență în crearea și întreținerea sistemelor bazate pe arhitecturi distribuite?

Junior — Middle
136

```python from collections import Counter def min_s(a: str, s: str) -> str: need = set(a) window = Counter() res = "" c = 0 left = 0 best_len = float('inf') for right, char in enumerate(s): if char in need and \ window[char] += 1 if window[char] == 1: c += 1 while c == len(need): if right - left + 1 < best_len: res = s[left:right + 1] best_len = right - left + 1 if s[left] in need: window[s[left]] -= 1 if window[s[left]] == 0: c -= 1 left += 1 return res ```

133

Intervievatorul clarifică dacă candidatul vede condiția problemei.

133

Aveți experiență în suportul sau dezvoltarea sistemelor distribuite?

133

Care a fost dimensiunea maximă a datelor pe care le-ai stocat sau procesat vreodată în practica ta?

Junior — Middle
133

# Complicație # Acum avem o nouă funcție de produs: rezervarea banilor prin aplicația mobilă. # Pentru aceasta, în clasa ATM, trebuie să adăugăm o nouă metodă reserve(amount). De asemenea, trebuie să luăm în considerare posibilitatea unui HardwareError în metodele SDK.

129

După ce principiu trebuie să miști limita stângă a ferestrei atunci când aceasta acoperă deja întreg alfabetul?

128
/5