Abrevie esse estado dos EUA! foi divertido, mas aprendemos que abreviar com eficiência nomes de estados dos EUA é difícil com o sistema atual. Vamos criar um esquema de código de estado alternativo para um golfe eficiente.
Sua tarefa:
Escreva uma função (ou programa) que, dado um nome de estado válido nos EUA (somente os 50 estados normais necessários), retorne um código exclusivo de duas letras em maiúscula para identificá-lo. O código deve atender a estes requisitos:
- A primeira letra deve ser igual à primeira letra do estado.
- A segunda letra deve ser uma das outras letras do estado (não um espaço).
- Ele sempre deve fornecer a mesma saída para a mesma entrada e nunca deve fornecer a mesma saída para duas entradas válidas diferentes.
Por exemplo, dado "Alabama", sua função pode retornar "AL", "AA", "AB" ou "AM" - contanto que não retorne esse valor para qualquer Alasca, Arkansas etc. ("AA "só é possível porque" A "aparece mais de uma vez no nome do estado.)
Falhas padrão proibidas. Entrada / saída padrão estão ok. Este é o código golf, a solução mais curta, em bytes, vence.
A lista completa de possíveis entradas está aqui:
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
Respostas:
Geléia ,
1312 bytesUm link monádico que recebe e retorna listas de caracteres.
Experimente online! ou veja uma suíte de testes
Quão?
Indexação in Jelly é 1-indexados e modular, de modo que o 907 º índice de algo de comprimento L é o (907-modulo-L) th item. Por exemplo, para "Alabama", o comprimento é 7; portanto, o item no índice 907 é o (907-módulo-7) th e 907-módulo-7 é 4 (907 = 129 * 7 + 4 ), portanto, o item no índice 907 é 'b'.
907 é o primeiro índice positivo no qual as abreviações de estado usando o índice 1 e esse índice em todos os 50 estados se tornam únicos.
Os nomes de estado, incluindo seus espaços, têm comprimento de 4 a 14, inclusive, e 907-modulo-6 é 1 (enquanto que para todos os outros comprimentos o valor não é 1). Isso significa que, se usarmos o primeiro e o 907º caracteres para as abreviações de que Alasca, Havaí, Kansas, Nevada e Oregon seriam AA, HH, KK, NN e OO, respectivamente - isso não é aceitável para o Havaí, Kansas, ou Nevada; portanto, é necessário fazer um ajuste; esse é o motivo da concatenação, deduplicação, vá para o índice 2 e classifique, isso faz com que o Alasca, Havaí, Kansas, Nevada e Oregon se tornem AL, HA, KA, NA e OR, respectivamente, e não colide com as abreviações de estado existentes. .
fonte
Ruby, 34 bytes
Comecei com
s[0]+s*99999[x].upcase
e encontrei muitos valores de x até x = 100000, que retornavam códigos exclusivos para todos os 50 estados. Infelizmente, todos eles tiveram casos em que a segunda letra da abreviação era a primeira letra do estado duplicado, o que não é permitido (a menos que a letra apareça duas vezes no nome do estado). Então, decidi usar a expressãos[0]+s[1,8]*999[x]
e encontrei o menor valor de x que funcionou foi 445.Comentado no programa de teste e saída
fonte
The second letter must be one of the other letters of the state.
AA para o Alabama é bom porque o Alabama tem dois A's. KK é bom para Kentucky, mas não para Kansas, por exemplo.Python 2 , 39 bytes
Experimente online!
Python 2 , 39 bytes
Experimente online!
fonte
JavaScript (ES6), 46 bytes
Demo
Mostrar snippet de código
fonte
Retina ,
4946 bytesExperimente online! Se o estado contiver uma segunda letra maiúscula ou uma das letras
flmpxz
, ela se tornará a segunda letra do código. Caso contrário, se contiver uma das letrashru
, ela se tornará a segunda letra do código; caso contrário, use as duas primeiras letras do estado.fonte
JavaScript (ES6), 52 bytes
Mostrar snippet de código
JavaScript (ES6), 52 bytes
Mostrar snippet de código
fonte