Mon père est un enseignant à la retraite, et il donnait des tests d'orthographe et de mathématiques combinés, où l'élève épelait un mot, puis `` notait '' le mot en additionnant les lettres, où a = 1, b = 2, etc. (par exemple chat = 3 + 1 + 20 = 24). Cela rendait la notation des questionnaires plus facile, car il aurait juste à vérifier les «scores» incorrects plutôt que les mots mal orthographiés, et avait l'avantage supplémentaire de tester 2 compétences à la fois.
Il a engagé un de mes amis pour écrire un programme qui marquerait des mots pour lui, afin qu'il puisse générer de longues réponses sans erreur. Ce problème est inspiré par ce programme.
Exigences:
- Acceptez n'importe quel mot avec des lettres majuscules et minuscules
- Renvoie une erreur pour tous les caractères spéciaux, c'est-à-dire les espaces, les tirets, @ ^% # etc.
- a = 1, b = 2, ... et A = 1, B = 2, ...
- Imprimer la partition du mot
- (Facultatif) vérifiez que le mot figure dans un dictionnaire après la notation et imprimez un avertissement s'il ne l'est pas.
- Pas d'importation d'un dictionnaire externe de lettres-> chiffres. Vous devez le générer vous-même.
N'importe quelle langue est acceptable. Ceci est similaire à la « bataille racine numérique », mais beaucoup plus simple.
code-golf
balise.aaaaaaaaaaaaaaaaaaaaaaaa
. Papa: Le score est de 24? C'est vrai!Réponses:
Golfscript - 23 caractères
Assurez-vous qu'il n'y a pas de retour à la ligne en entrée (par exemple, utilisation
echo -n
).la source
echo -n
ne compte vraiment pas comme un filtrage externe - en fait, la réponse que vous avez liée le suggère comme un formulaire valide pour la saisie.Brainf *** (100)
Je dois cependant admettre que cela ne répond pas tout à fait à toutes les exigences. Tout d'abord, il n'accepte que les majuscules et le mot doit se terminer par un onglet. Il a un comportement indéfini pour les caractères non valides et ne génère pas d'erreur. Il affiche la somme des lettres sous forme de caractère ASCII. Par exemple, si le mot est "BONJOUR", (8 + 5 + 12 + 12 + 15 = 52), il affichera le caractère "4", qui est le caractère ASCII pour 52. Cela signifie également que le programme panique lorsque la somme est supérieure à 255.
Mais à part ça , ça marche très bien. Donnez-moi une pause, mon cerveau ne peut gérer que de petites doses de ... enfin, vous savez.
la source
\n
ou\r\n
ou\n\r
. Et si j'utilisais la nouvelle ligne, je n'aurais pas un joli chiffre rond comme 100 comme nombre de caractères.Python (
6564)Cela soulève une erreur si le mot contient des caractères autres que des lettres, mais pas un caractère utile ou informatif. (Edit: pointe du chapeau à st0le pour l'astuce d'indexation.)
la source
print sum(['',ord(i)-64]['@'<i<'[']for i in raw_input().upper())
rasé quelques caractères.input
; oblige l'utilisateur à mettre des guillemets autour des chaînes d'entrée, mais "convivial" et "pas dangereux" ne sont pas dans la spécification!raw_input
→input
print sum([i,ord(i)-64]['@'<i<'[']for i in raw_input().upper())
un autre octet raséRuby, 43 caractères
Le message d'erreur que cela génère n'est cependant pas vraiment utile. Les deux solutions publiées ici supposent que l'entrée n'a pas de saut de ligne de fin, donc pour les tester, utilisez
echo -n
.Ruby, 76 caractères avec vérification du dictionnaire
Le message d'avertissement se compose du seul caractère "W". Le chemin d'accès au dictionnaire doit être fourni via ARGV. Exemple d'utilisation:
la source
Python 2.6 (72 caractères) sans vérification du dictionnaire
Python 2.6 (178 caractères *) avec vérification du dictionnaire
* Peut être abaissé à 156 avec un message d'erreur moins utile. :-)
Merci à tous les commentateurs d'avoir aidé à améliorer cela.
la source
sum
intégrée avec une expression de générateur, plutôt qu'unefor
boucle. Cela vous permettrait de couper quelques caractères (~ 17).a
qu'une seule fois, alors utilisez le littéral lui-même ..."0abc....z".index(i)
fonctionnera de manière équivalente.0
dans votre tableau de score est intelligent, mais cela signifie également que celacat0
est accepté sans erreur, ce qui n'est pas correct, je pense. Ce qui est dommage, car cela vous permettrait de passermap(a.index,w)
à lasum
place (en substituant le littéral àa
comme le suggère St0le).Perl
(52)(48)golf encore plus grâce à Timwi
perl -lpe "($w=uc)=~/[^A-Z]/&¨$w=~s/./$_-=64-ord$&/ge"
la source
-e
drapeau là-bas.p
etl
interprète dans votre nombre de caractères. Voir cette discussion sur les méta.syntax error at -e line 1, near "(=" Execution of -e aborted due to compilation errors.
Qu'est-ce que je fais mal?Python (80)
Python v2 (65 mais le caractère `sera accepté)
v3 (60 caractères, @ seront acceptés mais non comptés, merci jloy)
la source
Scala: 59 caractères, dont 7 de charge utile, pas de dict:
Pas de dictionnaire pour l'instant. Un résultat négatif signifie: Négatif!
Manipule le tréma allemand avec grâce, soit dit en passant:
la source
alpha.pl
et les a démarrés parperl alpha.pl
. Manient-ils simplement Ascii? Eh bien - à Perl est une telle vieille bête ... :)perl -M5.010 alpha.pl
ou quelque chose comme ça.Bibliothèques Java + Google Guava, 347 caractères, avec vérification du dictionnaire
Version illisible à 1 chaîne longue :-)
Version lisible par l'homme (sorte de :-))
Le chemin du dictionnaire est maintenant transmis via
a[1]
, pour que les assertions fonctionnent, vous devez utiliser l'-ea
indicateur (+3 caractères supplémentaires). Quant au dictionnaire, le dict/usr/share/dict/words
(qui devrait être disponible sur la plupart des systèmes * nix) a été utilisé.la source
UTF-8
est plus courte que les autres jeux de caractères :-).Python 3, 95 caractères avec dictionnaire
Le dictionnaire doit être dans un fichier appelé d.
Python 3, 61 sans dictionnaire, mais idée volée
la source
Perl (71)
la source
VB.NET,
84827371Modifier: Avec validation est:
129 caractères. Dans quel cas:
C #, 118
la source
Améliorant légèrement la réponse de John: Python (90)
la source
Erlang, 104
la source
Golfscript - 39 caractères
L'erreur qu'elle lance n'est pas exactement la meilleure, mais bon, elle interrompt l'exécution.
la source
PYTHON
6268 * CaractèresNécessite que l'utilisateur entre des chaînes à l'aide de guillemets et n'est pas sûr (
input
exécute le code), mais, comme je l'ai dit dans un commentaire à un autre article, "convivial" et "pas un risque pour la sécurité" n'est pas dans la spécification!* J'ai oublié
print
, bon sang.la source
input
/raw_input
.Rubis 1.9, 69
la source
GolfScript, 50 (53)
Donne une erreur sur les mauvais caractères, mais pas très bonne (50 caractères):
Donne plutôt "E" en cas d'erreur (53 caractères):
L'extrait de génération d'alphabet
123,97>+
est volé à Ventero.la source
J (55)
Cela satisfait toutes les conditions sauf celle du dictionnaire. En tant que condition d'erreur, il renvoie "infini" (le symbole de soulignement en J) pour les mots qui contiennent autre chose que des lettres.
la source
Haskell (127)
(soulève une erreur sur les caractères étranges)
(aussi: l'espace entre
toUpper.
et\x
est nécessaire sinon il le traite comme(toUpper)
.\
(x)
)Haskell (70)
(ne génère pas d'erreur, mais 45% plus court)
la source
C ++ (
111107)Le "set up" / etc:
Comportement "non défini" (c'est plus une "mauvaise pratique" qu'un "non défini", mais bon):
void main()
Cela dit tout.new
sansdelete
.la source
JavaScript 1.8, 80 caractères
Étonnamment lisible!
la source
alert(prompt().toLowerCase().split("").reduce(function(a,b){return a+b.charCodeAt(0)-96},0))
. J'aime toujours plus les solutions JavaScript :)APL (34)
Donne soit le score, soit un
VALUE ERROR
s'il y a des caractères non alphabétiques dans l'entrée.Explication:
⍞
: lire une ligne d'entrée{
...}
: fonction appliquée à chaque caractère d'entréeA←⎕UCS⍵
: stocke la valeur ASCII du caractère courant dansA
A-32×96<A
: rendre le caractère majuscule: deA
est soustrait 32 si96<A
(donc, s'il est en majuscule), sinon 064-⍨
: soustrayez 64 de ceci, donnant A = 1, B = 2 ...¨
: appliquez cette fonction à chaque personnage:⍵∊⍳26
: si le personnage est compris entre 1 et 26 ...:⍵
: alors retourne ⍵ (et puisqu'il n'y a pas de clause else, il y aura unVALUE ERROR
si ce n'est pas entre 1 et 26)+/
: somme toutes les valeurs ensemble (et cette valeur est automatiquement sortie car c'est le résultat final).la source
JavaScript, 60 octets
Si le programme doit renvoyer une erreur sur des entrées invalides, alors 80 octets:
Si une entrée n'est pas valide, la console dira qu'elle
_
n'est pas définie (il ne doit pas déjà y avoir de variable définie appelée_
).la source
Python 3,
5855sans dictionnaire ou idée volée mais erreur toujours inutile;)
thx @ Eᴀsᴛᴇʀʟʏ
Testez ici .
la source
print<SPACE>sum(ord(.......
, en supprimant les 2 parenthèses autour de l'expression.input()
en python3 estraw_input()
en python2C, 98 octets
la source
F # (pas de validation)
7957 caractèresla source
C # avec validation: 108 caractères (dont 12 pour le message d'erreur):
C # sans validation:
6053 caractères:la source
Perl (
4231)J'espère que compter F, p, a et l comme 1 caractère était correct.
la source
JavaScript, 68 octets
Cela peut certainement être joué plus
Avec vérification du dictionnaire (Node.js et descendants Unix uniquement) 195 octets
Utilise
/usr/share/dict/words
et peut certainement être raccourci (voir le message d'avertissement)la source
console.error()
, nonconsole.warn()
.