Saltar al contenido

Calcular el dígito de control ISBN-13

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)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *