Ma famille a une entreprise de commerce électronique. Sur notre propre site, nous forçons les gens à choisir leur état dans un menu déroulant lorsqu'ils entrent leur adresse, mais via certains autres canaux que nous utilisons, les clients peuvent entrer tout ce qu'ils veulent dans la boîte.
Ma maman adore les modèles de factures que j'ai créés pour elle, qui sont générés automatiquement. Mais parce qu'ils sont si jolis et équilibrés, elle ne peut pas le supporter quand les gens écrivent le nom de leur état, ou pire, écrivent quelque chose comme "new jersey". Elle dit que ça gâche le look.
Mon père aime que le code soit léger. Donc, plutôt que d'utiliser un bloc de boîtier de commutation, il veut une solution plus légère.
Le défi consiste donc à créer une fonction courte qui prend les entrées possibles et renvoie une abréviation à deux lettres (en majuscule, pour maman). Nous allons faire une supposition (erronée) que nos utilisateurs peuvent épeler et toujours mettre un espace dans le nom (si nécessaire) ou passer l'abréviation correcte. La portée est les 50 États américains.
- New York
- New York
- New York
- New York
sont tous des entrées acceptables pour New York et devraient produire NY.
Si quelque chose comme New Yrok est passé, la fonction peut retourner la valeur d'origine.
Vous pouvez utiliser n'importe quel langage commun. C'est un concours de popularité, donc celui qui a le plus de votes à la fin d'une semaine gagne. Je suppose que cela favorisera la nouveauté et l'utilité.
EDIT: La description est une histoire, mais je travaillais sur un projet similaire et je pensais qu'il devait y avoir une façon plus intéressante de le faire. Je peux faire le projet moi-même (je l'ai déjà fait) mais je pensais que c'était un bon endroit pour un défi plus intéressant. Par "Tout langage commun", j'excluais les langages / bibliothèques personnalisés conçus pour ce défi - j'essayais de chercher de nouvelles méthodes, plutôt que de l'aide de code gratuite. Je pense que tout le monde l'a fait à un moment donné, mais ce serait amusant de le faire de manière inhabituelle. Je trouve que les projets les plus intéressants sont ceux où vous abordez les tâches quotidiennes de manière nouvelle et intéressante - c'est pourquoi il s'agit d'un concours de popularité plutôt que de golf.
la source
you can use any code
... donc OP réécrira son site pour utiliser votre solution APL / CJAM / GolfScript? C'est un défi basé sur une histoire vraie. Je voteRéponses:
Rubis
J'ai pensé qu'il serait intéressant d'extraire les abréviations d'état sans écrire explicitement aucun des noms ou abréviations. Celui-ci ne prend pas en compte l'orthographe de l'entrée, car nous ne nous soucions pas de cette chose ici sur codegolf.SE, rihgt ?
Il a fallu un temps considérable pour trouver des modèles intelligents pour correspondre à tous les états. L'ordre des modèles est important - chaque modèle consécutif s'applique aux états restants qui ne correspondaient pas à un modèle précédent:
Tous les États contenant deux mots utilisent les lettres initiales des deux mots: Tous les États commençant par une lettre en {CDGHKLPV
} utilisent la première et la dernière lettre du nom: Parmi les autres états, les lettres {ZVX
} sont uniques: Tous les autres états commençant par {FNOUW
} utilisent les deux premières lettres. Ensuite, {DNR
} sont uniques en tant que secondes lettres:Il devient vraiment difficile de faire des modèles généraux, mais ...
Seuls trois états restants utilisent le doubleN
ouL
, et la double lettre est utilisée dans l'abréviation d'état:A
ouO
après le double S est unique à Chaque fois que {SNW
} apparaît avant les autres lettres dans les noms d'état restants, les lettres qui les suivent sont utilisées dans les abréviations: Il en reste deux. Ceux-ci utilisent les deux premières lettres:Il peut être joué au golf bien sûr:
Rubis
2-191165 165154 caractèresEncore 26 caractères de moins en uglifiant un peu les regex. De plus, l'un des regex d'origine s'est avéré redondant!
la source
If something like New Yrok is passed in, the function should return the original value.
C #
J'ai utilisé des caractères déjà dans les états pour les abréviations pour raccourcir la chaîne d'état.
la source
JavaScript (E6)
Ici, l'essentiel est la liste des noms, en utilisant l' astuce camelCase pour raccourcir un peu. Golfé, 617 octets.
la source
Python
A décidé de le faire comme un défi de golf de code. Je suis descendu à
906713694 caractères avec l'aide de daniero et hsl:Cependant, si les modules sont autorisés (comme le module américain ), je peux le réduire à 130 caractères:
Et si vous n'aviez pas à retourner la valeur d'origine lorsque l'état n'existe pas, je pourrais la réduire à 50 caractères:
la source
s
une grande chaîne, puis la diviser par des virgules (,
); Pas besoin de toutes les guillemets simples.bash + sed, 291 octets
Conversion sans vergogne de la solution Ruby de Daniero en sed:
la source
Golfscript -
750653La majeure partie se trouve dans les noms et abréviations des États.
Explication:
la source
PHP
Ma tentative, qui n'a pas été aussi réussie que je l'avais espéré, utilise une longueur de chaîne et un placement de caractère spécifique pour extraire l'abréviation du nom de l'état. Un meilleur séquençage de l'élimination des noms est probablement possible.
Bien sûr, il peut être joué au golf. Ceci est ma première tentative de golf, donc un aperçu apprécié. (911)
la source
Javascript
Je sais que ce n'est pas du golf de code, mais je veux quand même jouer au golf. :)
Ouais pour de nouvelles choses! (Empiler des extraits)
la source
eval(open('a.txt'))
également valable? Si vous utilisez un fichier de quelque nature que ce soit, vous devez également inclure ce fichier et son nom dans votre nombre de caractères. (Ce n'est pas du golf de code, donc ça n'a pas vraiment d'importance dans ce cas de toute façon.)