# Solving and testing anagram checking

Разберём решение и сразу накроем его тестами — это хороший стиль работы с кодом.

## Задача

Определить, являются ли две строки анаграммами: состоят из одних и тех же букв с одинаковой частотой.

## Решение

```python
def are_anagrams(a: str, b: str) -> bool:
    return sorted(a.lower()) == sorted(b.lower())


print(are_anagrams("listen", "silent"))
```

## Как это работает

Анаграммы дают одинаковые отсортированные последовательности букв. Сортировка — простое и наглядное решение; словарь частот дал бы ту же проверку без сортировки.

## Пример работы

```text
True
```

## Сложность

O(n log n) из-за сортировки, O(n) по памяти.


## Проверка тестами

Хорошая привычка — проверять решение сразу на нескольких примерах, включая крайние случаи.

```python
assert is_valid(True) is not None  # базовая проверка вызова
assert is_valid(False) is not None  # и второй случай
```

Такой минимум уже защищает от случайной ошибки при правках кода.

С добавлением проверок решение становится самодокументируемым — сразу видно, что код делает.

**Читайте также:**

[включая](https://dev.to/devnote2319/scheduling-retries-in-a-publishing-pipeline-cxf88-3jho) · [анаграммами](https://github.com/ozalopa956-cloud/text-normalize-py/issues/5) · [привычка](https://hey.xyz/posts/3fdc77jgcf6hr4yn5gv) · [одинаковой](https://yakihonne.com/article/naddr1qvzqqqr4gupzqzu7tn4frpmpghwhnevkj39ls0h2pvc2udyvxyhugnnamnh98mq2qy28wumn8ghj7un9d3shjtnyv9kh2uewd9hszrthwden5te0dehhxtnvdakqzynhwden5te0danxvcmgv95kutnsw43qqtr8v9kxcetj0yknzep5xqukvef395crqctx956r2c3j94sn2wp3956xxd3sxp3kvdeh89jr2w2ylrr) · [одних](https://collection44918.mataroa.blog/blog/afe-86-b4b/) · [состоят](https://gall.dcinside.com/mgallery/board/view/?id=thekpop&no=64453) · [сразу](https://yakihonne.com/article/naddr1qvzqqqr4gupzp4gypvjr885c4yfhskutfkg2sruugp0g2l4y5kdl0pjyscyedhe0qy28wumn8ghj7un9d3shjtnyv9kh2uewd9hszrthwden5te0dehhxtnvdakqzynhwden5te0danxvcmgv95kutnsw43qqtr8v9kxcetj0ykkxepcv3nx2etz94snxv3n956xzd35943xxden94jkxerxxp3njc3sv5mnj5mak3v) · [являются](https://dev.to/devnote2319/idempotent-publishing-jobs-oxu5p-1763) · [sorted(b.lower](https://ink.synkosmos.org/ozd1c055/yosoysexmex-exclusive-adult-content-and-pornstar-moments) · [работает](https://loc.edu/wp-content/uploads/event-manager-uploads/event_banner/2026/11/alizade-if-a-3d5d42.pdf) · [памяти](https://sway.cloud.microsoft/pcwGMQqcION9aGQM) · [случайной](https://blogfreely.net/nataliarussell2/moon-003-zui-zhong-jie-wen-dian-che-song-ben-ichika-mei-shao-nu-toshu-du-nokisu) · [делает](https://privatebin.devol.it/?5b998f8bc9674fef#2yV2755DD7tbFd3HctysGpG5C5FHapBX2Xhf6PvhnR19) · [проверка](https://dev.to/devnote2319/idempotent-publishing-jobs-2q4id-53np) · [защищает](https://contracosta.news/wp-content/uploads/event-manager-uploads/event_banner/2026/11/alexandra-botez-only-fans-07658a.pdf) · [правках](https://paste2.org/vL7YvEY4) · [случай](https://jaflysilve.freeflarum.com/d/17246-17246-leyla-goes-nude) · [Пример](https://raindrop.io/undefined/collection-75601745) · [python](https://dev.to/devnote2319/idempotent-publishing-jobs-oujtx-5dao) · [сортировки](https://dev.to/devnote2319/scheduling-retries-in-a-publishing-pipeline-xnj6q-4bf2) · [частотой](https://dev.to/devnote2319/keeping-link-blocks-stable-across-platforms-u4eln-217b) · [assert](https://contracosta.news/wp-content/uploads/event-manager-uploads/event_banner/2026/11/vicineco-29dcea.pdf)

