Условие:
У тебя есть список строк — чисел от 1 до 100, но одно из чисел случайно пропало.
Найди, какое число отсутствует. Нельзя использовать
sum(), sorted(), Counter. Все числа в списке представлены как строки.Пример:
import random
original = [str(i) for i in range(1, 101)]
missing = random.choice(original)
shuffled = original.copy()
shuffled.remove(missing)
random.shuffle(shuffled)
Напиши функцию:
def find_missing_number(data: list[str]) -> int:
...
📌 Подвох:
Нельзя просто сложить строки. Но можно использовать свойство XOR:
a ^ a = 0
0 ^ b = b
То есть: если мы сделаем XOR всех чисел от 1 до 100, а затем XOR всех чисел в переданном списке — результатом будет пропущенное число.
🧠 Решение:
```python
def find_missing_number(data: list[str]) -> int:
xor_full = 0
xor_data = 0
for i in range(1, 101):
xor_full ^= i
for val in data:
xor_data ^= int(val)
return xor_full ^ xor_data
```
✅ Пояснение:
-
xor_full — XOR всех чисел от 1 до 100.-
xor_data — XOR всех чисел в текущем списке (`str` → `int`).- Разность
xor_full ^ xor_data вернёт единственное отсутствующее число.🎯 Пример использования:
```python
original = [str(i) for i in range(1, 101)]
original.remove("42")
random.shuffle(original)
print(find_missing_number(original)) # → 42
```
🔥 Эта задача хороша тем, что:
• содержит хитрый запрет на
sum() • требует знания побитовых операций
• работает с типами (`str` vs `int`)
• подходит для собеседования уровня middle+
@pythonl