Minha família tem um negócio de comércio eletrônico. Em nosso próprio site, forçamos as pessoas a escolher seu estado em um menu suspenso ao inserir seu endereço, mas através de outros canais que usamos, os clientes podem inserir o que quiserem na caixa.
Minha mãe adora os modelos de fatura que fiz para ela, que são gerados automaticamente. Mas, por serem tão bonitas e equilibradas, ela não consegue suportar quando as pessoas ESCREVEM os nomes de seus estados, ou pior, escrevem algo como "Nova Jersey". Ela diz que isso estraga o visual.
Meu pai gosta que o código seja leve. Portanto, em vez de usar um bloco de caixas de chaves, ele deseja uma solução mais enxuta.
Portanto, o desafio é criar uma função curta que aceite as entradas possíveis e retorne uma abreviação de duas letras (maiúscula, para mamãe). Vamos fazer uma suposição (defeituosa) de que nossos usuários podem soletrar e sempre colocar um espaço no nome (quando necessário) ou passar a abreviação correta. O escopo são os 50 estados dos EUA.
- Nova york
- Nova york
- Nova Iorque
- Nova Iorque
são todas entradas aceitáveis para Nova York e devem produzir NY.
Se algo como New Yrok for passado, a função poderá retornar o valor original.
Você pode usar qualquer idioma comum. Este é um concurso de popularidade e, portanto, o vencedor com mais votos no final de uma semana. Suponho que isso favorecerá a novidade e a utilidade.
EDIT: A descrição é uma história, mas eu estava trabalhando em um projeto semelhante e pensei que deveria haver uma maneira mais interessante de fazê-lo. Posso fazer o projeto pessoalmente (já fiz), mas achei que esse era um bom lugar para um desafio mais interessante. Por "Qualquer linguagem comum", eu estava excluindo linguagens / bibliotecas personalizadas projetadas para esse desafio - estava tentando procurar métodos novos, em vez de ajudar o código gratuitamente. Eu acho que todo mundo já fez isso em algum momento, mas seria divertido fazê-lo de uma maneira incomum. Acho que os projetos mais interessantes são aqueles em que você lida com as tarefas diárias de maneiras novas e interessantes - é por isso que esse é um concurso de popularidade e não de golfe.
fonte
you can use any code
... para que o OP reescreva seu site para usar sua solução APL / CJAM / GolfScript? É um desafio baseado em uma história verdadeira. Eu votoRespostas:
Rubi
Pensei que seria interessante extrair as abreviações de estado sem escrever explicitamente nenhum dos nomes ou abreviações. Este não leva em consideração erros ortográficos da entrada, porque não nos importamos com isso aqui no codegolf.SE, rihgt ?
Demorou um tempo considerável para descobrir padrões inteligentes para combinar com todos os estados. A ordem dos padrões é importante - cada padrão consecutivo se aplica aos estados restantes que não foram correspondidos por um padrão anterior:
Todos os estados com duas palavras neles usam as letras iniciais das duas palavras: Todos os estados que começam com qualquer letra em {CDGHKLPV
} usam a primeira e a última letra no nome: Dos estados restantes, as letras {ZVX
} são exclusivas: Todos os estados restantes que começam com {FNOUW
} usam as duas primeiras letras. Então, {DNR
} são únicos como segundas letras:Está realmente ficando difícil fazer padrões gerais, mas ...
Apenas três estados restantes usam o dobroN
ouL
, e a letra dupla é usada na abreviação de estado:A
ouO
depois do duplo S é exclusivo para Sempre que {SNW
} aparecer antes de outras letras nos nomes de estado restantes, as letras a seguir serão usadas nas abreviações: Sobraram dois. Eles usam as duas primeiras letras:Pode-se jogar golfe, é claro:
Ruby 2 -
191165154 caracteresOutros 26 caracteres desligando um pouco as expressões regulares. Além disso, um dos regexes originais acabou sendo redundante!
fonte
If something like New Yrok is passed in, the function should return the original value.
C #
Eu usei caracteres já nos estados para as abreviações para encurtar a cadeia de estado.
fonte
JavaScript (E6)
Aqui o volume está na lista de nomes, usando o truque camelCase para diminuir um pouco. Golfe, 617 bytes.
fonte
Pitão
Decidiu fazer isso como um desafio ao código-golfe. Você baixou para
906713694 caracteres com a ajuda de daniero e hsl:No entanto, se os módulos forem permitidos (como o módulo us ), eu posso reduzi-lo para 130 caracteres:
E se você não tivesse que retornar o valor original quando o estado não existe, eu poderia reduzi-lo para 50 caracteres:
fonte
s
uma string grande e depois dividi-la em vírgulas (,
); Não há necessidade de todas as aspas simples.bash + sed, 291 bytes
Conversão descarada da solução Ruby da Daniero para sed:
fonte
Golfscript -
750653O volume está nos nomes e abreviações do estado.
Explicação:
fonte
PHP
Minha tentativa, que não teve tanto sucesso quanto eu esperava, usa o comprimento da string e algum posicionamento específico de caracteres para extrair a abreviação do nome do estado. Provavelmente, é possível uma melhor sequência de eliminação de nomes.
Claro, pode ser jogado golfe. Esta é a minha primeira tentativa de golfe, portanto, o insight é apreciado. (911)
fonte
Javascript
Eu sei que isso não é código de golfe, mas eu quero jogar de qualquer maneira. :)
Yay para coisas novas! (Snippets de pilha)
fonte
eval(open('a.txt'))
também é válido? Se você usar um arquivo de qualquer tipo, também deverá incluir esse arquivo e seu nome na contagem de caracteres. (Isso não é um código de golfe, portanto, na verdade, não importa de qualquer maneira.)