Сократите это государство США! Было весело, но мы узнали, что эффективно сокращать названия штатов США сложно с нынешней системой. Давайте придумаем альтернативную схему кодов штата для эффективного игры в гольф.
Твое задание:
Напишите функцию (или программу), которая, учитывая действительное имя штата США (требуется только 50 нормальных состояний), возвращает уникальный двухбуквенный код в верхнем регистре, идентифицирующий его. Код должен соответствовать этим требованиям:
- Первая буква должна совпадать с первой буквой государства.
- Вторая буква должна быть одной из других букв состояния (не пробел).
- Он должен всегда давать один и тот же выход для одного и того же входа и никогда не должен давать один и тот же выход для двух разных допустимых входов.
Например, учитывая «Алабаму», ваша функция может возвращать «AL», «AA», «AB» или «AM» - при условии, что она не возвращает это значение ни для одного из Аляски, Арканзаса и т. Д. («AA "возможно только потому, что" A "встречается в названии штата более одного раза.)
Стандартные лазейки запрещены. Стандартный ввод / вывод в порядке. Это код гольф, поэтому самое короткое решение, в байтах, выигрывает.
Полный список возможных входных данных находится здесь:
Alabama
Alaska
Arizona
Arkansas
California
Colorado
Connecticut
Delaware
Florida
Georgia
Hawaii
Idaho
Illinois
Indiana
Iowa
Kansas
Kentucky
Louisiana
Maine
Maryland
Massachusetts
Michigan
Minnesota
Mississippi
Missouri
Montana
Nebraska
Nevada
New Hampshire
New Jersey
New Mexico
New York
North Carolina
North Dakota
Ohio
Oklahoma
Oregon
Pennsylvania
Rhode Island
South Carolina
South Dakota
Tennessee
Texas
Utah
Vermont
Virginia
Washington
West Virginia
Wisconsin
Wyoming
Ответы:
Желе ,
1312 байтМонадическая ссылка, берущая и возвращающая списки символов.
Попробуйте онлайн! или посмотрите набор тестов
Как?
Индексирование в желе является 1-индексированным и модульным, поэтому 907- й индекс чего-то длины L является (907-по модулю L) -ым элементом. Например, для «Алабама» длина равна 7, поэтому элемент с индексом 907 является (907-по модулю 7- го ) , а 907 по модулю 7 равен 4 (907 = 129 * 7 + 4 ), поэтому элемент с индексом 907 это «б».
907 - это первый положительный индекс, по которому сокращения штатов, использующие индекс 1 и этот индекс по всем 50 штатам, становятся уникальными.
Имена состояний, включая их пробелы, имеют длину от 4 до 14 включительно, и 907-modulo-6 равно 1 (тогда как для всех других длин значение не равно 1). Это означает, что если бы мы использовали 1-й и 907-й символы для аббревиатур, что Аляска, Гавайи, Канзас, Невада и Орегон были бы соответственно AA, HH, KK, NN и OO - это неприемлемо для Гавайев, Канзаса, или Невада; поэтому необходимо внести коррективы; это является причиной конкатенации, дедупликации, перехода к индексу 2 и сортировке, благодаря чему Аляска, Гавайи, Канзас, Невада и Орегон становятся AL, HA, KA, NA и OR соответственно и не вступают в противоречие с существующими сокращениями состояний ,
источник
Рубин, 34 байта
Я начал с
s[0]+s*99999[x].upcase
и нашел много значений от x до x = 100000, которые возвращали уникальные коды для всех 50 состояний. К сожалению, все они имели случаи, когда вторая буква аббревиатуры была дублированной первой буквой штата, что недопустимо (если буква не встречается дважды в названии штата). Поэтому я решил использовать это выражениеs[0]+s[1,8]*999[x]
и нашел наименьшее значение х, который работал, был 445.Комментируется в тестовой программе и выводится
источник
The second letter must be one of the other letters of the state.
АА для Алабамы - это хорошо, потому что у Алабамы есть два А. KK хорошо для Кентукки, но не для Канзаса, например.Python 2 , 39 байт
Попробуйте онлайн!
Python 2 , 39 байт
Попробуйте онлайн!
источник
JavaScript (ES6), 46 байт
демонстрация
Показать фрагмент кода
источник
Retina ,
4946 байтПопробуйте онлайн! Если состояние содержит вторую заглавную букву или одну из букв
flmpxz
, то это становится второй буквой кода. В противном случае, если он содержит одну из буквhru
, он становится второй буквой кода, в противном случае просто используйте первые две буквы состояния.источник
JavaScript (ES6), 52 байта
Показать фрагмент кода
JavaScript (ES6), 52 байта
Показать фрагмент кода
источник