Mi padre es un maestro retirado, y solía dar exámenes combinados de ortografía y matemáticas, donde el alumno deletreaba una palabra y luego 'puntuaba' la palabra sumando las letras, donde a = 1, b = 2, etc. (p. ej. cat = 3 + 1 + 20 = 24). Esto facilitó la calificación de los cuestionarios, ya que solo tendría que verificar las 'puntuaciones' incorrectas en lugar de las palabras mal escritas, y tuvo el beneficio adicional de probar 2 habilidades a la vez.
Contrató a un amigo mío para que escribiera un programa que calificara palabras para él, de modo que pudiera generar largas respuestas sin errores. Este problema está inspirado en ese programa.
Requisitos:
- Acepta cualquier palabra con letras mayúsculas y minúsculas
- Devuelve un error para cualquier carácter especial, es decir, espacios, guiones, @ ^% # etc.
- a = 1, b = 2, ... y A = 1, B = 2, ...
- Imprime el puntaje de la palabra
- (Opcional) verifique que la palabra esté en un diccionario después de la puntuación e imprima una advertencia si no lo está.
- No importa un diccionario externo de letras-> números. Debes generarlo tú mismo.
Cualquier idioma es aceptable. Esto es similar a la ' batalla raíz digital ', pero mucho más simple.
code-golf
etiqueta.aaaaaaaaaaaaaaaaaaaaaaaa
. Papá: ¿El puntaje es 24? ¡Así es!Respuestas:
Golfscript - 23 caracteres
Asegúrese de que no haya nuevas líneas finales en la entrada (por ejemplo, uso
echo -n
).fuente
echo -n
realmente no cuenta como filtrado externo; de hecho, la respuesta que vinculó lo sugiere como un formulario válido para la entrada.Brainf *** (100)
Sin embargo, debo admitir que esto no cumple con todos los requisitos. Primero, solo acepta letras mayúsculas, y la palabra debe terminar con una pestaña. Tiene un comportamiento indefinido para caracteres no válidos y no arroja un error. Muestra la suma de las letras como un carácter ASCII. Por ejemplo, si la palabra es "HOLA", (8 + 5 + 12 + 12 + 15 = 52) mostrará el carácter "4", que es el carácter ASCII para 52. Esto también significa que el programa se asusta cuando la suma es más de 255.
Pero aparte de eso , funciona bien. Dame un respiro, mi cerebro solo puede manejar pequeñas dosis de ... bueno, ya sabes.
fuente
\n
o\r\n
o\n\r
. Y si usara nueva línea, no tendría un buen número redondo como 100 como el recuento de caracteres.Pitón (
6564)Esto genera un error si la palabra contiene caracteres que no son letras, pero no es útil o informativo. (Editar: punta del sombrero para evitar el truco de indexación).
fuente
print sum(['',ord(i)-64]['@'<i<'[']for i in raw_input().upper())
afeitado un par de caracteres.input
; obliga al usuario a poner comillas alrededor de las cadenas de entrada, pero "fácil de usar" y "no peligroso" no están en la especificación.raw_input
→input
print sum([i,ord(i)-64]['@'<i<'[']for i in raw_input().upper())
otro byte afeitadoRuby, 43 caracteres
Sin embargo, el mensaje de error que esto genera no es exactamente útil. Ambas soluciones publicadas aquí suponen que la entrada no tiene salto de línea final, así que para probarlas, use
echo -n
.Ruby, 76 caracteres con verificación de diccionario
El mensaje de advertencia consta del carácter único "W". La ruta al diccionario se debe proporcionar a través de ARGV. Ejemplo de uso:
fuente
Python 2.6 (72 caracteres) Sin verificación de diccionario
Python 2.6 (178 caracteres *) con verificación de diccionario
* Se puede bajar a 156 con un mensaje de error menos útil. :-)
Gracias a todos los comentaristas por ayudar a mejorar esto.
fuente
sum
builtin con una expresión generadora, en lugar de unfor
bucle. Le permitiría recortar algunos caracteres (~ 17).a
solo una vez, así que usa el literal en sí mismo ..."0abc....z".index(i)
funcionará de manera equivalente.0
matriz de puntuación es inteligente, pero también significa quecat0
se acepta sin error, lo cual no es correcto, creo. Lo cual es una lástima, ya que le permitiría pasarmap(a.index,w)
en susum
lugar (sustituyendo el literal pora
como sugiere st0le).Perl
(52)(48)golf aún más gracias a Timwi
perl -lpe "($w=uc)=~/[^A-Z]/&¨$w=~s/./$_-=64-ord$&/ge"
fuente
-e
bandera allí.p
el
intérprete en su recuento de caracteres. Ver esta discusión en meta.syntax error at -e line 1, near "(=" Execution of -e aborted due to compilation errors.
¿Qué estoy haciendo mal?Pitón (80)
Python v2 (65 pero char `será aceptado)
v3 (60 caracteres, @ serán aceptados pero no contados, gracias jloy)
fuente
Scala: 59 caracteres, 7 de ellos carga útil, sin dict:
No hay diccionario hasta ahora. Resultado negativo significa: ¡Negativo!
Maneja el Umlaute alemán con gracia, por cierto:
fuente
alpha.pl
y los comencéperl alpha.pl
. ¿Solo manejan Ascii? Bueno, en Perl es una bestia tan vieja ... :)perl -M5.010 alpha.pl
o algo así.Bibliotecas Java + Google Guava, 347 caracteres, con verificación de diccionario
Versión de 1 cadena larga ilegible :-)
Versión legible para humanos (tipo de :-))
La ruta del diccionario ahora se pasa a través de
a[1]
, para que las aserciones funcionen, debe usar la-ea
bandera (+3 caracteres más). En cuanto al diccionario,/usr/share/dict/words
se ha utilizado el dict (debería estar disponible en la mayoría de los sistemas * nix).fuente
UTF-8
es más corto que los otros conjuntos de caracteres :-).Python 3, 95 caracteres con diccionario
El diccionario tiene que estar en un archivo llamado d.
Python 3, 61 sin diccionario, pero idea robada
fuente
Perl (71)
fuente
VB.NET,
84827371Editar: Con validación es:
129 caracteres. En ese caso:
C #, 118
fuente
Mejorando ligeramente la respuesta de John: Python (90)
fuente
Erlang, 104
fuente
Golfscript - 39 caracteres
El error que arroja no es exactamente el mejor, pero bueno, aborta la ejecución.
fuente
PYTHON
6268 * PersonajesRequiere que el usuario ingrese cadenas usando comillas, y no es seguro (
input
ejecuta el código), pero, como dije en un comentario en otra publicación, "no es fácil de usar" y "no es un riesgo de seguridad" no está en la especificación.* Me olvidé
print
, maldita sea.fuente
input
/raw_input
.Ruby 1.9, 69
fuente
GolfScript, 50 (53)
Da un error en los caracteres incorrectos, pero no uno muy bueno (50 caracteres):
Da "E" en caso de error (53 caracteres):
El fragmento generador de alfabeto
123,97>+
es robado de Ventero.fuente
J (55)
Esto satisface todas las condiciones excepto la del diccionario. Como condición de error, devuelve "infinito" (el símbolo de subrayado en J) para palabras que contienen cualquier cosa menos letras.
fuente
Haskell (127)
(genera un error en caracteres extraños)
(también: el espacio entre
toUpper.
y\x
es necesario, de lo contrario lo analiza como(toUpper)
.\
(x)
)Haskell (70)
(no genera un error, pero es un 45% más corto)
fuente
C ++ (
111107)La "configuración" / etc:
Comportamiento "indefinido" (es más 'mala práctica' que 'indefinido', pero bueno):
void main()
Eso lo dice todo.new
sindelete
.fuente
JavaScript 1.8, 80 caracteres
Sorprendentemente legible!
fuente
alert(prompt().toLowerCase().split("").reduce(function(a,b){return a+b.charCodeAt(0)-96},0))
. Todavía me gustan las soluciones de JavaScript :)APL (34)
Da la puntuación o un
VALUE ERROR
si hay caracteres no alfabéticos en la entrada.Explicación:
⍞
: lee una línea de entrada{
...}
: función aplicada a cada carácter de entradaA←⎕UCS⍵
: almacena el valor ASCII del carácter actual enA
A-32×96<A
: hace que el carácter sea mayúscula: deA
se resta 32 si96<A
(entonces, si es mayúscula), de lo contrario 064-⍨
: resta 64 de esto, dando A = 1, B = 2 ...¨
: aplica esta función a cada personaje:⍵∊⍳26
: si el personaje tiene entre 1 y 26 ...:⍵
: luego devuelve ⍵ (y dado que no hay otra cláusula, habrá unVALUE ERROR
si no está entre 1 y 26)+/
: suma todos los valores juntos (y este valor se genera automáticamente porque es el resultado final).fuente
JavaScript, 60 bytes
Si el programa debe devolver un error en entradas no válidas, entonces 80 bytes:
Si una entrada no es válida, la consola dirá que
_
no está definida (no debe haber una variable definida llamada_
).fuente
Pitón 3,
5855sin diccionario o idea robada pero todavía error inútil;)
thx @ Eᴀsᴛᴇʀʟʏ
Prueba aquí .
fuente
print<SPACE>sum(ord(.......
, eliminando los 2 paréntesis alrededor de la expresión.input()
en python3 estáraw_input()
en python2C, 98 bytes
fuente
F # (sin validación)
7957 caracteresfuente
C # con validación: 108 caracteres (con 12 para mensaje de error):
C # sin validación:
6053 caracteres:fuente
Perl (
4231)Espero contar F, p, a y l como 1 carácter fue correcto.
fuente
JavaScript, 68 bytes
Esto casi seguro se puede jugar más al golf
Con comprobación de diccionario (Node.js y descendientes de Unix únicamente) 195 bytes
Usos
/usr/share/dict/words
, y definitivamente se puede acortar (ver el mensaje de advertencia)fuente
console.error()
, noconsole.warn()
.