Недавно я наткнулся на этот вопрос:

Какие буквы не встречаются ни в одном из названий штатов США?

И я хотел знать ответ. Я так хотел узнать ответ, что бросил все, что делал, чтобы его получить.

Тут включился мой ленивый мозг. Нужно проверить много писем. Я не хочу проверять каждую букву, если она встречается в названиях штатов. В то же время гуглить ответ было все равно что обманывать и сдаваться.

К счастью, у нас есть компьютеры, и я умею программировать. Итак, я заставлю компьютер найти ответ за меня.

Общая идея состоит в том, чтобы найти все уникальные буквы из названий штатов США, сравнить их со всеми буквами английского алфавита, и разница будет ответом, который мы ищем.

Шаг 1 — получаем входные данные

Первым шагом является сбор данных.

В Википедии есть хороший список всех штатов и территорий США. Мы можем использовать его для извлечения нужных нам данных.

Я открыл DevTools и выбрал таблицу с состояниями. Затем я щелкнул правой кнопкой мыши элемент <table> и скопировал его селектор.

Селектор выглядит так:

#mw-content-text > div.mw-parser-output > table:nth-child(17)

Не беспокойтесь, если вы этого не понимаете. Думайте об этом как об уникальном идентификаторе для этой таблицы со штатами США. Мы будем использовать его, чтобы сообщить скриптам, откуда брать данные.

Но прежде чем использовать его, мы должны изменить селектор так, чтобы он нацеливался на ячейки таблицы с именами состояний.

#mw-content-text > div.mw-parser-output > table:nth-child(17) tbody th a

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

Этот скрипт использует наш селектор для захвата всех узлов, содержащих имена состояний, извлекает имена и возвращает их в виде списка. Скрипт также переводит все буквы в нижний регистр, поэтому нам не нужно различать прописные и строчные буквы — позже это облегчит нам жизнь.

Запуск этого скрипта в консоли DevTools приводит к следующему:

Это почти то, что нам нужно. Проблема в том, что у нас в списке 54 элемента, а должно получиться только 50. Это потому, что у нас есть лишние [d].

Удалим их. Мы могли бы сделать это вручную, но поскольку мы программируем, мы можем заставить компьютер делать это за нас.

Функция фильтра просматривает каждый элемент в списке и проверяет, равен ли элемент [d] (сейчас все в нижнем регистре). Если да, то фильтруется.

Намного лучше!

Последнее, что мы можем сделать на этом этапе, — удалить все пробелы — они нам не нужны.

И вот окончательный результат — наш набор данных с именами штатов.

Шаг 2 — вычислить ответ

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

Есть много способов написать алгоритм, отвечающий на вопрос. Самый простой подход, на мой взгляд, — использовать наборы.

В информатике множество — это структура данных, содержащая различные элементы. Если вы передадите набору список чисел вроде 1, 1, 2, 3, 4, 4, 4, 5 , внутри набора будет список уникальных чисел — в данном случае 1, 2, 3, 4, 5.

Одна полезная операция, которую мы можем выполнять над множествами, — это разница между двумя множествами. Учитывая два набора A и B, разница между наборами A и B вернет элементы, которые есть в наборе A, но не в наборе B.

Это именно то, что нам нужно. Мы можем вычислить разницу между всеми буквами английского алфавита и всеми уникальными буквами в названиях штатов США, и останется искомый ответ.

Я собираюсь использовать Python здесь. Python имеет наборы, встроенные в язык, а наборы в Python имеют метод вычисления разницы.

Приведенный ниже сценарий сначала склеивает названия штатов в одну большую строку (''.join(states)) и использует эту длинную строку для создания набора со всеми уникальными буквами в названиях штатов США.

Затем скрипт вычисляет разницу между набором всех букв английского алфавита и набором всех уникальных букв в названиях штатов США, и вуаля!

Остается только запустить скрипт и…

Ответ…

Q

Единственная буква, которая не встречается ни в одном из штатов США, — это буква Q.

Вот как вы отвечаете на простой вопрос инженера-программиста.

Обновление от 17 мая 2022 г.: финальный скрипт Python стал чище. Спасибо всем, кто оставил отзыв о том, как сделать его лучше!