Boleto

1316
Tempo Limite: 4 | Nível: 3

Descrição

Afrânio trabalha no banco como programador e recebeu a incumbência de fazer a validação de um dos dígitos verificadores do código numérico dos boletos de cobrança. Sabe aquele numerão enorme que precisamos digitar no caixa eletrônico ou no computador quando não podemos usar o leitor de código de barras? Então, é esse mesmo. Todas as informações que existem no código de barras estão naquele número enorme, chamado tecnicamente de “Linha Digitável”. A figura 1 mostra um exemplo de boleto para refrescar a sua memória. Um daqueles dígitos é o chamado “dígito verificador do código de barras”, e ele é calculado por meio de uma variação de um algoritmo bastante conhecido no setor de Processamento de Dados chamado Módulo 11. A fórmula usada é bem simples: pegamos cada dígito numérico útil do código e o multiplicamos por um peso específico, acumulando o somatório desses produtos. Em seguida dividimos o valor da soma por 11 e guardamos o resto, que será então subtraído de 11. Esse resultado é o dígito verificador pelo módulo 11 e, na variação deste algoritmo utilizada neste problema, caso o valor obtido seja zero ou algo maior do que 9, consideramos o dígito verificador como sendo o inteiro 1. A título de exemplo, vamos considerar um boleto em que o somatório das multiplicações seja 445. O resto da divisão de 445 por 11 é 5 e 11 menos 5 produz o resultado 6, que é o dígito verificador esperado. Caso o somatório fosse 551, o resto seria 1 e 11 menos 1 dá 10 e, nesse caso, o dígito verificador esperado seria 1. Para determinar os pesos a serem usados na multiplicação de cada dígito, começamos pelo último dígito (aquele mais à direita) que é multiplicado por 2, o penúltimo por 3, o antepenúltimo por 4 e assim por diante, ignorando obviamente o próprio dígito verificador que faz parte do código lido. Nunca o valor do peso é maior do que 9, já que quando esse valor, na sequência, chegaria a 10 nós o trocamos pelo 2, reiniciando assim a progressão numérica.

 

Agora vamos aos problemas, por que até aqui está muito fácil. Nosso amigo Afrânio precisa calcular o dígito verificador do código de barras, mas a partir dos dados da Linha Digitável. Ocorre que infelizmente a sequência dos dados na Linha Digitável é diferente da ordem em que os mesmos dados aparecem no código de barras, e isso afeta a forma de cálculo, pois a fórmula apresentada anteriormente se aplica apenas à sequência em que os dígitos aparecem no código de barras e não na Linha Digitável. As Tabelas 1 e 2 mostram a sequência aplicada em cada um dos casos.

A formatação utilizada na Tabela 2 é aquela adotada nos boletos, com pontos separando algumas partes e espaços em branco em outras. Repare que existem dígitos verificadores adicionais na Linha Digitável, que devem ser ignorados no cálculo. Considere também que o peso a ser aplicado sobre um determinado dígito útil da Linha Digitável é o mesmo peso que seria aplicado no cálculo diretamente sobre o código de barras.

Assim, por exemplo, o último dígito do chamado Campo Livre (que corresponde à posição 44 do código de barras) deve ser multiplicado pelo peso 2. Na Linha Digitável esse mesmo dígito ocorre na posição 36 e, apesar disso, deve ser multiplicado também por 2 para respeitar a fórmula.

Seu objetivo é, para um código de boleto informado no formato da Linha Digitável apresentado anteriormente, determinar o valor correto do dígito verificador do código de barras (o elemento K da Tabela 2).

 


Entrada

A entrada consiste em uma string de 54 caracteres contendo o conteúdo referente a uma Linha Digitável, na formatação apresentada na Tabela 2. Os grupos numéricos terão os separadores padrão previstos: o ponto e o espaço em branco. O valor do dígito verificador do código de barras estará substituído pela letra X.


Saída

Imprimir o valor do dígito verificador do código de barras esperado para aquele código, seguido de uma quebra de linha.


Exemplos de Entrada Exemplos de Saída

03399.74644 70300.000000 00002.801017 X 70210000005000

5

03399.74644 70300.000000 00003.201019 X 70500000005000

1

03399.20159 52800.234156 03210.501023 X 70630000095453

7

Efetue Login ou Cadastre-se para submeter uma solução.



Criado por Antonio Cesar de Barros Munari (Fatec Sorocaba) | Adaptado por Erich Rodrigues | Competição: Interfatecs 2017 1ª Fase