Спасибо за мок-собес! И задача интересная была. Интересна судьба собеседуемых, насколько быстро они потом устраиваются в итоге
@MGIMOmsk9 ай бұрын
Очень полезный фидбэк. Спасибо!
@dmitriyb24389 ай бұрын
хотелось бы звук чуть получше, при монтаже можно выровнять
@Chel1k79 ай бұрын
вообще то в питоне можно перевести в int число даже у которого 1000 символов
@vladimirdo9 ай бұрын
Жиза
@mikeofs13049 ай бұрын
Причем даже если принять , полагаемую Олегом историю , что питоновский int этот как например в шарпах 4 байта, то его идея с накоплением в словаре сумм по разрядам, может запросто опять упереться в переполнение, если входной массив будет больше нескольких сот миллионов например
@sniiick9 ай бұрын
@mikeofs1304 идея не в накоплении сумм в словаре, а в записи поразрядно в словарь, где ключи - разряды. Причем двигать разряды можно сразу при переходе через базу, а не накапливать суммы чтобы потом высчитать какие разряды мы должны далее подвинуть и насколько. Я вижу решение через рекурсию и divmod. Насчет длины инта, он то конечно UInt, но ValueError: Exceeds the limit (4300 digits) for integer string conversion
@ДімаКуріптя9 ай бұрын
я тоже не понял, у меня всё посчитало нормально
@igorz58049 ай бұрын
Ну да, вроде же всё так. Сделал паузу, не смотрел дальше поставленного условия. Перепроверил себя. В python 2 у инта был потолок в sys.maxint, в python 3 это убрали. Лимита нет (по доке). Т.е. кастанули из строки в инт и сложили. Всё.
@7IdE9 ай бұрын
На самом деле было больно смотреть - перемотал большую часть видоса. Софтовая часть - прям слишком размыта. На 15 минут растянуто, но при этом полезной информации там на минуту максимум. Написание кода - это тоже был провал. Dict? dict(100)? i для итерации по элементам? dict1? PEP8? Спросить про отрицательные числа/с плавающей точкой? И решение этой задачи в принципе нужно было начинать с фразы "в Питоне нет переполнения типов и 100 символов - не приговор". Да и все вот эти фразы "как нас учили", "ой, я не знаю" и тд - за это отдельный минус. Ну и также скорость печати тоже далеко не на высоте. И все это приведет к написанию неподдерживаемого неоптимального кода. Тут не просто алгосы решать нужно, а в целом просто писать код / решать задачки на Питоне. Мб на стажировку и устроит кого-то, но не думаю, что выше.
@TheLineHit5 ай бұрын
import random def func(lst: list) -> int: return sum(list(map(int, lst))) arr_numbers = list(map(str, [random.randint(10**10, 10**15) for i in range(20)])) print(func(arr_numbers))
@TmsoftАй бұрын
Вы не внимательно условие задания услышали в задаче он намекнул, что int не подойдёт как тип... потому что большое число.
@АмальАтамурадов3 ай бұрын
1ое решение: def sum_list(num_str_list: list[str]) -> str: return str(sum((int(elem) for elem in num_str_list))) 2ое решение (без "больших" интов): def sum_two_big_num(num1: str, num2: str) -> str: max_len = max(len(num1), len(num2)) num1 = num1.rjust(max_len, '0') num2 = num2.rjust(max_len, '0') res, ost = "", 0 for i in range(max_len - 1, -1, -1): sum_two = str(int(num1[i]) + int(num2[i]) + ost).rjust(2, '0') ost, res = int(sum_two[0]), sum_two[1] + res if ost != 0: res = str(ost) + res return res def sum_list(num_str_list: list[str]) -> str: res = "0" for i in range(len(num_str_list)): res = sum_two_big_num(res, num_str_list[i]) return res
@А_если_так_подумать6 ай бұрын
Харизматичная девушка)
@ArturVerbovshchuk9 ай бұрын
def foo(lst: list[str]) -> str: a = list(map(int, lst)) return f'your sum in list = {sum(a)}' print(foo([])) программирую 2 месяца, подскажите где ошибка ПОЖАЛУЙСТА
@АлександрРоманов-л2я9 ай бұрын
Суть задачи в том, чтобы придумать алгоритм без перевода в int
@АртёмЧавыкин-у5щ9 ай бұрын
в целом твой код отработает, но он вернет сумму в типе int т.к ты находишь сумму элементов в списке, где элементами являются целые числа, если на выходе должна получиться строка, переведи в строковой тип.
@madiarashkenov23044 ай бұрын
test_nums = ["999", "999", "999", "999"] def sum_str_nums(nums_array): current_num = ["0"] * (len(max(nums_array, key=len)) + 1) for num in nums_array: num = list(num)[::-1] for index, elem in enumerate(num): current_num[index] = str( int(current_num[index]) + int(elem)) if int(current_num[index]) >= 10: current_num[index+1] = str( int(current_num[index+1]) + 1) current_num[index] = str( int(current_num[index]) - 10) current_num.reverse() i = 0 while current_num[i] == "0": del current_num[0] current_num = "".join(current_num) return current_num print(sum_str_nums(test_nums))
@Георгий-з3с6с9 ай бұрын
Может этот вопрос задают часто, но как попасть к вам на мок собеседование?
@slizverg239 ай бұрын
Отучиться в Яндекс-практикуме для начала)
@mans66_6 ай бұрын
звук ужасный, слушать и смотреть из за этого не возможно и не хочется
@MrKorwin19 ай бұрын
def same_func(value:list[str]) -> str: result ='' naum = 0 for i in range(len(value[0])-1,-1,-1): for j in value: naum += int(j[i]) if naum > 9: result += str(naum)[1] naum = 1 else: result += str(naum) naum = 0 return(result[::-1])
@mikeofs13049 ай бұрын
Тут такое дело, в пехоне строки иммутабельны, так что по памяти эт овсе будет очень грустно. Незря интервьюер предложил словарь, ох незря.
@indawl9 ай бұрын
1. кто сказал что строки с числами имеют одинаковую длину? 2. почему в уме только 1? допустим в value 9 чисел 99, 9*9 = 81, т.е. в уме должно быть 8 3. зачем реверсить строку, если можно добавлять не в конец, а в начало 4. куда делось последнее число в уме? 9+9 != 8
@indawl9 ай бұрын
@@mikeofs1304 бред, словарь для решения этой задачи, вот что действительно грустно.
@mikeofs13049 ай бұрын
@@indawlаргументов конечно не будет))) Олег , я так понимаю , по вашему то же бредит? аааааааааа, " допустим в value 9 чисел 99, 9*9 = 81, т.е. в уме должно быть 8" - е если будет двадцать пять миллионов чисел 99999, чо делать будешь ?
@indawl9 ай бұрын
@@mikeofs1304 1. представь что там не 100 символов а 1000000000000000, словарь явно плох будет при таком раскладе 2. Олег не бредит, он предложил один из вариантов в лоб и хотел посмотреть как она будет развивать эту мысль 3. при чем тут "если будет двадцать пять миллионов чисел 99999"? я привел вариант, что один в уме некорректное решение, а делать я буду divmod от 10. 4. "в пехоне строки иммутабельны, так что по памяти эт овсе будет очень грустно." а бред я говорил про это, с чего должно быть все плохо с памятью? с памятью будет получше чем если использовать словарь.
@sniiick9 ай бұрын
def sum_strs(input_list): res = {} def _mod_sum(_tmp, _j, _pos): if _tmp: s = divmod(_tmp + int(_j), 10) res[_pos] = s[1] if s[0]: _mod_sum(res.get(_pos + 1, 0), s[0], _pos + 1) else: res[_pos] = int(_j) for i in input_list: length = len(i) for idx, j in enumerate(i): pos = length - idx _mod_sum(res.get(pos, 0), j, pos) return ''.join(str(v) for k, v in sorted(res.items(), reverse=True))
@kaluginpeter9 ай бұрын
В течении первых 10-15 секунд на ум пришло проитерироваться за линию и все посчитать. def count_sum(arr: list) -> str: count: int = 0 for obj in arr: top: int = 0 for char in obj: top = top * 10 + int(char) count += top ans: str = '' while count: ans = str(count % 10) + ans count //= 10 return ans Speed O(N) Memory O(N) Если не переводить число в строку, то память константа выходит. Но и по желанию, можно и через хеш таблицу реализовать, но тогда, если не требуется переводить число в строку, то память уже будет O(K), где K - это количество цифр в данной системе счисления. Учусь в Яндекс Практикуме на питон разработчика, но активно делаю упор на алгосы
@alexz75379 ай бұрын
Разве у тебя не O(N**2) будет по скорости? Цикл в цикле.
@beskrovniibv9 ай бұрын
class BigInt: def __init__(self, value: str): self.value = value self.integer = list(reversed([int(c) for c in value])) def __add__(self, other): result = [] l = max(len(self.integer), len(other.integer)) for c in range(l): op1 = self.integer[c] if c < len(self.integer) else 0 op2 = other.integer[c] if c < len(other.integer) else 0 result.append(op1 + op2) f0 = 0 for c in range(len(result)): f = 1 if result[c] > 9 else 0 result[c] = (result[c] + f0) % 10 f0 = f return BigInt(''.join(str(value) for value in reversed(result))) def __str__(self): return self.value def main(): r = BigInt('0') for s in input().split(): r = r + BigInt(s) print(type(r), r)
@I_A_Terekhov_tube7 ай бұрын
Добрый день! Для пар чисел 99 и 101, 56 и 56, 500 и 500 - ответы некорректные
@beskrovniibv7 ай бұрын
@@I_A_Terekhov_tube писал во время трансляции, спасибо за замечания, действительно часть случаев упустил в решении class BigInt: def __init__(self, value: str): self.value = value self.integer = list(reversed([int(c) for c in value])) def __add__(self, other): result = [] l = max(len(self.integer), len(other.integer)) for c in range(l): op1 = self.integer[c] if c < len(self.integer) else 0 op2 = other.integer[c] if c < len(other.integer) else 0 result.append(op1 + op2) f0 = 0 for c in range(len(result)): f = 1 if result[c] + f0 > 9 else 0 result[c] = (result[c] + f0) % 10 f0 = f if f0: result.append(f0) return BigInt(''.join(str(value) for value in reversed(result))) def __str__(self): return self.value
@Aleksey_Podkorytov9 ай бұрын
Она просто нулевый чел
@vlad-code9 ай бұрын
def sum_list(input_:list[str]) -> str: dict_count = {} result = '' for num in input_: index = 0 for digit in num[::-1]: if index not in dict_count: dict_count[index] = 0 dict_count[index] += int(digit) index += 1 size = len(dict_count) for i in range(size): if i
@srg54199 ай бұрын
def my_sum(nums:list[str]) -> str: result_dict = dict() result_string = '' for num in nums: index = 0 for symbol in num[::-1]: if symbol == '_': continue if index not in result_dict: result_dict[index] = 0 result_dict[index] += int(symbol) index += 1 for index in result_dict: value_string = str(result_dict[index]) if result_dict[index] > 9: if index + 1 in result_dict: result_string += value_string[-1::] result_dict[index + 1] += int(value_string[:-1:]) else: result_string += value_string[::-1] else: result_string += value_string return result_string[::-1] if __name__ == "__main__": result = my_sum(['13613', '13613']) assert result == '27226', f'{result = }' result = my_sum(['10_000_001', '10000002', '10000003', '10000004']) assert result == '40000010', f'{result = }' result = my_sum(['99999', '1', '0', '0']) assert result == '100000', f'{result = }' result = my_sum(['999','999','999','999','999','999','999','999','999']) assert result == '8991', f'{result = }'
@Rushan_Akhmetov9 ай бұрын
num_list = ['10000001', '10000003', '10000005', '10000001'] res = '40000010' res_dict = {1: 0, 2: 1, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 4} def some_foo(num_list): my_dict = {} total = 0 for i in range(1, len(num_list[0])+1): for q in num_list: total += int(q[len(q)-i]) my_dict[i] = str(total % 10) total //= 10 result = '' for i in my_dict.values(): res += i new_res = result[::-1] return my_dict, new_res
@УлановАлександр-м4е9 ай бұрын
input = ["1000001","1000002","1000006","5000",] def sum_input (input) -> str: while True: sum_str = '' result = '' add = "0" max1 = max(len(input[-1]), len(input[-2])) k1 = ''.join(reversed(input[-1].rjust(max1, '0'))) k2 = ''.join(reversed(input[-2].rjust(max1, '0'))) for a,b in zip( k1, k2 ): sum_str = str(int(a) + int(b)+ int(add)) if len(sum_str) == 2: add = "1" sum_str = sum_str[1] else: add = "0" result += sum_str result = ''.join(reversed(result)) input.pop() input.pop() input.append(result) if len(input)== 1: return input print(sum_input(input)) # Олег спасибо за интересное интервью и задачи смотрю с удовольствием ( для того чтобы решить понадобилось около часа + дебагер) задача на самом деле сложная
@sniiick9 ай бұрын
делать эту задачу через конкатенацию будет ОЧЕНЬ дорого по памяти, учитывая что по условию числа могут быть любого размера
@УлановАлександр-м4е9 ай бұрын
возможно) это то что в голову пришло первым. Я думаю там есть задел для улучшения .@@sniiick
@marat_shaydulin9 ай бұрын
def sum_str_nums(nums): nums = [list(num) for num in nums] ans = [] while nums: nxt = [] sm = 0 for num in nums: sm += int(num.pop()) if num: nxt.append(num) sm, d = divmod(sm, 10) ans.append(str(d)) if sm: nxt.append(list(str(sm))) nums = nxt ans.reverse() return "".join(ans)
@ratmirtrusov2519 ай бұрын
lst_input = ['10200000012', '20800000203', '69000003004'] # result = '100000003219' def summ_big_data(lst_in: list) -> str: result = dict() for i in lst_in: for j in range(1, len(i) + 1): num = i[-1 * j] if result.get(j) == None: result[j] = '0' blFlag = False if (int(result[j]) + int(num)) >= 10: result[j] = str((int(result[j]) + int(num)) - 10) blFlag = True else: result[j] = str(int(result[j]) + int(num)) r = j + 1 while blFlag: if result.get(r) == None: result[r] = '0' else: if (int(result[r]) + 1) >= 10: result[r] = str((int(result[r]) + 1) - 10) r += 1 else: result[r] = str((int(result[r]) + 1)) blFlag = False return ''.join(result.values())[::-1] if __name__ == '__main__': my_summ = summ_big_data(lst_input) print(my_summ, ' type', type(my_summ))
@НикитаПетрович-п1е9 ай бұрын
def some_func(arr): pre_res = {} for elem in arr: key1 = 1 for el in elem[::-1]: if key1 in pre_res: pre_res[key1] += int(el) * key1 else: pre_res[key1] = int(el) * key1 key1 *= 10 return sum(pre_res.values()) print(some_func(['1293812932189371238', '2190741212139812478', '21893712498712079421389612381'])) # ответ 21893712502196633565718796097 print(sum([1293812932189371238, 2190741212139812478, 21893712498712079421389612381])) # ответ 21893712502196633565718796097