Solución:
Golfscript – 25 caracteres
{...+(;2%+{+}*3-~10%`+}:f
La versión completa del programa tiene solo 19 caracteres
...+(;2%+{+}*3-~10%
Vuelva a consultar aquí para analizarlo más tarde. Mientras tanto, mira mi vieja respuesta sin inspiración
Golfscript – 32 caracteres
Similar al cálculo del número luhn
{.{2+}%.(;2%{.+}%+{+}*~)10%`+}:f
Análisis para 978030640615
{...}:f this is how you define the function in golfscript
. store an extra copy of the input string
'978030640615' '978030640615'
{2+}% add 2 to each ascii digit, so '0'=>50, I can get away with this instead
of {15&}% because we are doing mod 10 math on it later
'978030640615' [59 57 58 50 53 50 56 54 50 56 51 55]
. duplicate that list
'978030640615' [59 57 58 50 53 50 56 54 50 56 51 55] [59 57 58 50 53 50 56 54 50 56 51 55]
(; trim the first element off
'978030640615' [59 57 58 50 53 50 56 54 50 56 51 55] [57 58 50 53 50 56 54 50 56 51 55]
2% select every second element
'978030640615' [59 57 58 50 53 50 56 54 50 56 51 55] [57 50 50 54 56 55]
{.+}% double each element by adding to itself
'978030640615' [59 57 58 50 53 50 56 54 50 56 51 55] [114 100 100 108 112 110]
+ join the two lists together
'978030640615' [59 57 58 50 53 50 56 54 50 56 51 55 114 100 100 108 112 110]
{+}* add up the items in the list
'978030640615' 1293
~ bitwise not
'978030640615' -1294
) add one
'978030640615' -1293
10% mod 10
'978030640615' 7
` convert to str
'978030640615' '7'
+ join the strings
'9780306406157'
Python – 44 caracteres
f=lambda s:s+`-sum(map(int,s+s[1::2]*2))%10`
Python – 53 caracteres
def f(s):d=map(int,s);return s+`-sum(d+d[1::2]*2)%10`
Haskell – 54 caracteres
i s=s++show(sum[-read[c]*m|c<-s|m<-cycle[1,3]]`mod`10)
Esto requiere soporte para comprensiones de listas paralelas, que es compatible con GHC (con el -XParallelListComp
bandera) y abrazos (con la -98
bandera).
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)