Mi familia tiene un negocio de comercio electrónico. En nuestro propio sitio, obligamos a las personas a elegir su estado en un menú desplegable cuando ingresan su dirección, pero a través de otros canales que utilizamos, los clientes pueden ingresar lo que quieran en el cuadro.
A mi madre le encantan las plantillas de facturas que hice para ella, que se generan automáticamente. Pero debido a que son tan bonitas y equilibradas, no puede soportarlo cuando la gente ESCRIBE los nombres de sus estados, o peor aún, escribe algo como "nueva camiseta". Ella dice que arruina la mirada.
A mi papá le gusta que el código sea liviano. Entonces, en lugar de usar un bloque de caja de interruptor, quiere una solución más ágil.
Entonces, el desafío es hacer una función corta que tome las posibles entradas y devuelva una abreviatura de dos letras (en mayúscula, para mamá). Vamos a suponer (defectuoso) que nuestros usuarios pueden deletrear y siempre poner un espacio en el nombre (donde sea necesario) o pasar la abreviatura correcta. El alcance son los 50 estados de EE. UU.
- Nueva York
- Nueva York
- Nueva York
- Nueva York
son todos insumos aceptables para Nueva York, y deberían dar salida a NY.
Si se pasa algo como New Yrok, la función puede devolver el valor original.
Puedes usar cualquier lenguaje común. Este es un concurso de popularidad, por lo que gana el que tenga más votos al final de una semana. Supongo que esto favorecerá la novedad y la utilidad.
EDITAR: La descripción es historia fluff, pero estaba trabajando en un proyecto similar y pensé que debía haber una forma más interesante de hacerlo. Puedo hacer el proyecto yo mismo (ya lo hice) pero pensé que este era un buen lugar para un desafío más interesante. Por "Cualquier idioma común" excluía las bibliotecas / idiomas personalizados diseñados para este desafío. Intentaba buscar métodos novedosos, en lugar de ayuda gratuita con el código. Me imagino que todos lo han hecho en algún momento, pero sería divertido hacerlo de una manera inusual. Creo que los proyectos más interesantes son aquellos en los que abordas las tareas cotidianas de formas nuevas e interesantes, es por eso que este es un concurso de popularidad en lugar de golf.
fuente
you can use any code
... ¿entonces OP reescribirá su sitio para usar su solución APL / CJAM / GolfScript? Es un desafío basado en una historia real. Voto arribaRespuestas:
Rubí
Pensé que sería interesante extraer las abreviaturas de estado sin escribir ninguno de los nombres o abreviaturas explícitamente. Este no tiene en cuenta la falta de ortografía de la entrada, porque no nos importa tal cosa aquí en codegolf.SE, ¿ verdad ?
Tomó un tiempo considerable para descubrir patrones inteligentes para que coincida con todos los estados. El orden de los patrones es importante: cada patrón consecutivo se aplica a los estados restantes que no coincidían con un patrón anterior:
Todos los estados con dos palabras en ellos usan las letras iniciales de las dos palabras: Todos los estados que comienzan con cualquier letra en {CDGHKLPV
} usan la primera y la última letra del nombre: Del resto de los estados, las letras {ZVX
} son únicas: Todos los estados restantes que comienzan con {FNOUW
} usan las dos primeras letras. Entonces, {DNR
} son únicos como segundas letras:Realmente se está haciendo difícil hacer patrones generales, pero ...
Solo tres estados restantes usan dobleN
oL
, y la doble letra se usa en la abreviatura de estado:A
oO
después de doble S es exclusivo de Siempre que {SNW
} aparezca antes de otras letras en los nombres de estado restantes, las letras después de ellas se usan en las abreviaturas: Dos a la izquierda. Estos usan las dos primeras letras:Se puede jugar al golf, por supuesto:
Ruby 2 -
191165154 caracteresOtros 26 caracteres apagados al uglificar un poco las expresiones regulares. Además, ¡una de las expresiones regulares originales resultó ser redundante!
fuente
If something like New Yrok is passed in, the function should return the original value.
C#
Usé caracteres ya en los estados para las abreviaturas para acortar la cadena de estado.
fuente
JavaScript (E6)
Aquí el grueso es la lista de nombres, usando el truco camelCase para acortar un poco. Golfizado, 617 bytes.
fuente
Pitón
Decidí hacer esto como un desafío de código de golf. Lo reduje a
906713694 caracteres con la ayuda de daniero y hsl:Sin embargo, si se permiten módulos (como el módulo us ), puedo reducirlo a 130 caracteres:
Y si no tuviera que devolver el valor original cuando el estado no existe, podría reducirlo a 50 caracteres:
fuente
s
sea una cadena grande y luego dividirla en comas (,
); No hay necesidad de todas las comillas simples.bash + sed, 291 bytes
Conversión descarada de la solución Ruby de Daniero a sed:
fuente
Golfscript -
750653El grueso está en los nombres y abreviaturas de los estados.
Explicación:
fuente
PHP
Mi intento, que no fue tan exitoso como esperaba, usa la longitud de la cadena y una colocación específica de caracteres para extraer la abreviatura del nombre del estado. Probablemente sea posible una mejor secuencia de la eliminación del nombre.
Por supuesto, se puede jugar al golf. Este es mi primer intento de jugar al golf, por lo que aprecio la comprensión. (911)
fuente
Javascript
Sé que esto no es golf de código, pero quiero jugarlo de todos modos. :)
¡Yay por cosas nuevas! (Fragmentos de pila)
fuente
eval(open('a.txt'))
también es válido? Si usa un archivo de cualquier tipo, también debe incluir ese archivo y su nombre en el recuento de caracteres. (Esto no es código golf, por lo que en realidad no importa en este caso de todos modos.)