CheckSum

CheckSum

Simple
EN Español

Los errores durante una transcripción son bastante comunes. Pulsaciones no intencionales de teclas pueden hacer que los caracteres sean reorganizados, omitidos o insertados en un texto tecleado manualmente.

Por suerte para los robots, tú tienes herramientas para solucionar este tipo de problemas. Tu módulo CheckSum ayuda a reducir la probabilidad de errores mediante la introducción de un carácter final que se calcula a partir de los caracteres anteriores. Con un procedimiento adecuado, el carácter final siempre se puede calcular, de manera que, cuando se completa una entrada, puedes verificar instantáneamente que el carácter final coincide con el carácter predicho por CheckSum. Si los dos no coinciden, la entrada es rechazada. El resultado al final es que reduces los errores de entrada de datos.

¿Cómo funciona CheckSum?:

Para implementar CheckSum necesitarás una tabla 'map point character lookup'. Dicha tabla es simplemente, una búsqueda de definiciones sobre como procesar la información necesaria para generar el carácter final (que nos permitirá verificar al instante si nuestra entrada es correcta). En otras palabras, para cada secuencia de caracteres de una entrada, estamos seguros de que sólo puede haber una entrada posible, y todo gracias al carácter final.

Los pasos que debes seguir para obtener el carácter final son los siguientes:
  1. Atraviesa una entrada de derecha a izquierda, y aplica 'map point character lookup' a cada carácter con índice par.
  2. Suma los resultados que obtuviste en el paso anterior, con los dígitos que no fueron cambiados (índice impar), del número original.
  3. Encuentra el residuo de esta suma dividida por 10. Por ejemplo, para una suma igual a 67, el residuo es 7 (67 módulo 10 = 7).
  4. Tu carácter final deberá ser 0 si la suma es un múltiplo de 10. En caso contrario, deberá ser igual a 10 menos el residuo.
Para generar la tabla 'map point character lookup':
  1. Duplica el valor de un carácter.
  2. Si el producto de esta operación es mayor que 9 (por ejemplo: 7 * 2 = 14), redúcelo sumando los dígitos del producto, (ejemplo 10: 1 + 0 = 1, 14: 1 + 4 = 5). Nota: Esto sólo deberás hacerlo...


A continuación puedes ver como se construye un



Y así es como calculamos nuestro carácter final:

Index : 0 1 2 3 4 5 6 7 8 9
Reversed : 1 7 8 9 3 7 2 9 9 7
From table : 2 7 6 4 9 Total: 67
Unchanged : 7 9 7 9 7
Final Character : 10 - ( 67 % 10 ) = 10 - 7 = 3

Así, podríamos transmitir el número de cuenta de la siguiente manera: 799 273 9871 3

Entradas alfanuméricas

Para hacer esto más interesante, podríamos utilizar entradas alfanuméricas, que corresponden a posibles combinaciones de 10 dígitos y 26 letras mayúsculas. Esto significa que tenemos que actualizar nuestro map point, para que pueda tabular letras. ¿Cómo lo logramos? Una alternativa es utilizar el valor ASCII de cada carácter y usar este valor para completar nuestra tabla. Ten en cuenta que para determinar su secuencia en nuestro mapa, siempre tendremos que restar 48.

Por ejemplo: "A" tiene un valor ASCII 65, y en nuetro 'map point character lookup' le asignamos 7. Ya que 65-48 = 17, 17 * 2 = 34 y 3 + 4 = 7. NOTA: Recuerda que sólo aplicas 'map point character lookup' a caracteres con índice par. Si ' A ' corresponde a un carácter con índice impar, su valor es 17, (65-48=17).

Ejemplo con entradas alfanuméricas

Muy bien, aquí tenemos otro ejemplo: "139MT". Veamos cómo podemos obtener el carácter final ...

Reversed : T M 9 3 1
Sum of digits : 9 29 9 3 2 Total: 52
Final Character : 10 - ( 52 % 10 ) = 10 - 2 = 8

A continuación explicamos en detalle como lo obtuvimos:

  • T:  ASCII = 84, 84 - 48 = 36, 36 * 2 = 72, y 7 + 2 = 9
  • M:  ASCII = 77, y 77 - 48 = 29
  • 9:  Según nuestra tabla 'map point character lookup' es 9. También se podría usar el valor ASCII = 57, 57 - 48 = 9, 9 * 2 = 18, y 1 + 8 = 9
  • 3:  Simplemente 3, ya que su índice es impar , ó ASCII = 51, y 51 - 48 = 3
  • 1:  Según nuestra tabla 'map point character lookup' es 2 , ó ASCII = 49, 49 - 48 = 1, and 1 * 2 = 2
  • La suma de los dígitos es 52, 9 + 29 + 9 + 3 + 1 = 52
  • Y nuestro carácter final es 8, ya que 10 - ( 52 % 10 ) = 10 - 2 = 8

¡Ahora es el momento de probar tu módulo CheckSum!

Datos de Entrada: Cadenas (str) con valores alfanuméricos.

Salida: una lista con dos elementos: el carácter final, como una cadena (str) y la suma de los dígitos correspondiente.

Ejemplo:

checkio("799 273 9871") == ["3", 67]
checkio("139-MT") == ["8", 52])
checkio("123") == ["0", 10])
checkio("999_999") == ["6", 54])
checkio("+61 820 9231 55") == ["3", 37])
checkio("VQ/WEWF/NY/8U") == ["9", 201])
You should be an authorized user in order to see the full description and start solving this mission.
Settings
Code:
Other:
Invalid hot key. Each hot key should be unique and valid
Hot keys:
CheckiO Extensions

CheckiO Extensions allow you to use local files to solve missions. More info in a blog post.

In order to install CheckiO client you'll need installed Python (version at least 3.8)

Install CheckiO Client first:

pip3 install checkio_client

Configure your tool

checkio --domain=py config --key=

Sync solutions into your local folder

checkio sync

(in beta testing) Launch local server so your browser can use it and sync solution between local file end extension on the fly. (doesn't work for safari)

checkio serv -d

Alternatevly, you can install Chrome extension or FF addon

checkio install-plugin
checkio install-plugin --ff
checkio install-plugin --chromium

Read more here about other functionality that the checkio client provides. Feel free to submit an issue in case of any difficulties.

Pair Programming (Beta-version)

Welcome to Pair Programming! Engage in real-time collaboration on coding projects by starting a session and sharing the provided unique URL with friends or colleagues. This feature is perfect for joint project development, debugging, or learning new skills together. Simply click 'Start Session' to begin your collaborative coding journey!

Waiting for Pair Programming to start...

You are trying to join a pair programming session that has not started yet.

Please wait for the session creator to join.

Waiting for Pair Programming to reconnect...

It looks like the creator of the pair programming session closed the editor window.

It might happen accidentally, so that you can wait for reconnection.

×
 
 
<< <
> >>
exec show

Whats Next?

Free accounts will see Best CheckiO solutions with some delay.
Best Solutions will be opened in a moment
Become Awesome and Don't wait
The next stage is ""
Will be activated in
View More Solutions Random Review Solutions Go to the next mission