{"id":250,"date":"2017-08-07T10:17:44","date_gmt":"2017-08-07T13:17:44","guid":{"rendered":"http:\/\/www.galirows.com.br\/meublog\/competir\/?p=250"},"modified":"2021-06-15T10:00:05","modified_gmt":"2021-06-15T13:00:05","slug":"proteja-sua-senha-obi2004","status":"publish","type":"post","link":"http:\/\/www.galirows.com.br\/meublog\/competir\/proteja-sua-senha-obi2004\/","title":{"rendered":"Proteja sua senha [OBI 2004]"},"content":{"rendered":"\n<div class=\"description\">\n<p>Por quest\u00f5es de seguran\u00e7a, muitos bancos hoje em dia est\u00e3o alterando a forma como seus clientes digitam as senhas nos caixas eletr\u00f4nicos, pois algu\u00e9m pode postar-se atr\u00e1s do cliente e ver as teclas \u00e0 medida em que ele as digita.<\/p>\n<p>Uma alternativa bastante utilizada tem sido associar os dez d\u00edgitos a cinco letras, de forma que cada letra esteja associada a dois d\u00edgitos, conforme o exemplo abaixo:<\/p>\n<figure><a href=\"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-content\/uploads\/sites\/5\/2017\/08\/UOJ_157_E.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-267\" src=\"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-content\/uploads\/sites\/5\/2017\/08\/UOJ_157_E-300x53.png\" alt=\"\" width=\"300\" height=\"53\" srcset=\"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-content\/uploads\/sites\/5\/2017\/08\/UOJ_157_E-300x53.png 300w, http:\/\/www.galirows.com.br\/meublog\/competir\/wp-content\/uploads\/sites\/5\/2017\/08\/UOJ_157_E-768x134.png 768w, http:\/\/www.galirows.com.br\/meublog\/competir\/wp-content\/uploads\/sites\/5\/2017\/08\/UOJ_157_E-1024x179.png 1024w, http:\/\/www.galirows.com.br\/meublog\/competir\/wp-content\/uploads\/sites\/5\/2017\/08\/UOJ_157_E.png 1068w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure><p><\/p>\n<p>As associa\u00e7\u00f5es entre n\u00fameros e letras s\u00e3o mostradas como bot\u00f5es numa tela sens\u00edvel ao toque, permitindo que o cliente selecione os bot\u00f5es correspondentes \u00e0 senha. Considerando a disposi\u00e7\u00e3o dos bot\u00f5es da figura acima, a senha 384729 seria digitada como BCEAEB (note que a mesma seq\u00fc\u00eancia de letras seria digitada para outras senhas, como por exemplo 982123).<\/p>\n<p>Cada vez que o cliente usa o caixa eletr\u00f4nico, as letras utilizadas s\u00e3o as mesmas (de \u2018A\u2019 a \u2018E\u2019), com os bot\u00f5es nas mesmas posi\u00e7\u00f5es, mas os d\u00edgitos s\u00e3o trocados de lugar. Assim, caso um intruso veja (mesmo que mais de uma vez) a seq\u00fc\u00eancia de letras digitada, n\u00e3o \u00e9 poss\u00edvel notar facilmente qual a senha do cliente do banco.<\/p>\n<p>Dada uma seq\u00fc\u00eancia de associa\u00e7\u00f5es entre letras e n\u00fameros, e as letras digitadas pelo cliente do banco para cada uma dessas associa\u00e7\u00f5es, voc\u00ea deve escrever um programa para determinar qual \u00e9 a senha do cliente.<\/p>\n<\/div>\n\n\n\n<!--more-->\n\n\n\n<p><strong>Entrada<\/strong><\/p>\n\n\n\n<div class=\"input\">\n<p>A entrada \u00e9 composta de v\u00e1rios conjuntos de testes. A primeira linha de um conjunto de testes cont\u00e9m um inteiro N, que indica o n\u00famero de associa\u00e7\u00f5es entre letras e n\u00fameros e as senhas digitadas (2 \u2264 N \u2264 10). As N linhas seguintes cont\u00eam as entradas da seguinte forma: 10 d\u00edgitos, em ordem de associa\u00e7\u00e3o, para as letras de \u2018A\u2019 a \u2018E\u2019 (2 d\u00edgitos para a letra A, 2 para a B e assim sucessivamente) e 6 letras que representam a senha codificada conforme os d\u00edgitos anteriores. As N associa\u00e7\u00f5es fornecidas em um conjunto de testes ser\u00e3o sempre suficientes para definir univocamente a senha do cliente. O final da entrada \u00e9 indicado por N = 0.<\/p>\n<\/div>\n\n\n\n<p><strong>Sa\u00edda<\/strong><\/p>\n\n\n\n<div class=\"output\">\n<p>Para cada conjunto de teste da entrada, seu programa deve produzir tr\u00eas linhas na sa\u00edda. A primeira linha deve conter um identificador do conjunto de teste, no formato \u201cTeste n\u201d, onde n \u00e9 numerado sequencialmente a partir de 1. A segunda linha deve conter a senha do cliente, com um espa\u00e7o ap\u00f3s cada d\u00edgito. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sa\u00edda, abaixo, deve ser seguida rigorosamente.<\/p>\n<\/div>\n\n\n\n<div class=\"both\">&nbsp;<\/div>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><td>Exemplo de Entrada<\/td><td>Exemplo de Sa\u00edda<\/td><\/tr><\/thead><tbody><tr><td>2<br>1 7 3 9 0 8 5 6 2 4 B C E A E B<br>9 0 7 5 8 4 6 2 3 1 E C C B D A<br>3<br>0 1 2 3 4 5 6 7 8 9 B C D D E E<br>1 3 5 4 6 8 7 9 0 2 E B C D C D<br>3 2 0 4 5 9 7 6 8 1 A C D D E C<br>0<\/td><td>\n<pre class=\"\">Teste 1\n3 8 4 7 2 9      \n\nTeste 2\n2 5 6 7 8 9<\/pre>\n<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div class=\"both\">&nbsp;<\/div>\n\n\n\n<div class=\"both\"><strong>Solu\u00e7\u00e3o em C*<br><\/strong><em>* solu\u00e7\u00e3o adaptada de&nbsp;https:\/\/github.com\/FormigTeen\/Maratona\/blob\/master\/ILP\/Lista5-ILP\/SENHA\/senha.cpp<\/em><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c line-numbers\"><div class=\"both\">#include &lt;stdio.h>\n<pre class=\"lang:c decode:true\">\n#define TAM 5 \n#define TAMSENHA 6 \n#define VAR 2 \n\nint main(){ \n\tint banco[TAM][VAR], N, i, j, t, convert, teste = 1;\n\tint senha[TAMSENHA][VAR];\n\tchar letra;\n\n\tscanf(\"%i\", &amp;N);\n\t\n\twhile (N > 0) {\n\t\tfor (i=0; i &lt; TAMSENHA; i++) {\n\t\t\tfor (j=0; j &lt; VAR; j++) {\n\t\t\t\tsenha[i][j] = 0;\n\t\t\t}\n\t\t}\n\n\t\tfor (i=0; i &lt; N; i++) {\n\t\t\tfor (j=0; j &lt; TAM; j++) {\n\t\t\t\tfor (t=0; t &lt; VAR; t++) {\n\t\t\t\t\tscanf(\"%i\", &amp;banco[j][t]);\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tfor (j=0; j &lt; TAMSENHA; j++) {\n\t\t\t\tletra = getchar(); \/\/para descartar o espa\u00e7o em branco\n\t\t\t\tletra = getchar();\n\t\t\t\tconvert = letra - 'A';\n\t\t\t\t\/\/printf(\"\\n------- %i %i ------\", letra, convert);\n\t\t\t\t\n\t\t\t\tif (i == 0) {\n\t\t\t\t\tsenha[j][0] = banco[convert][0];\n\t\t\t\t\tsenha[j][1] = banco[convert][1];\n\t\t\t\t} else {\n\t\t\t\t\tif (senha[j][0] != banco[convert][0] &amp;&amp; senha[j][0] != banco[convert][1]) {\n\t\t\t\t\t\tif (senha[j][1] == banco[convert][0] || senha[j][1] == banco[convert][1]) {\n\t\t\t\t\t\t\tsenha[j][0] = senha[j][1];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsenha[j][0] = banco[convert][0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (senha[j][1] != banco[convert][0] &amp;&amp; senha[j][1] != banco[convert][1]) {\n\t\t\t\t\t\tif (senha[j][0] == banco[convert][0] || senha[j][1] == banco[convert][1]) {\n\t\t\t\t\t\t\tsenha[j][1] = senha[j][0];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsenha[j][1] = banco[convert][1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tprintf(\"Teste %i\\n\", teste);\n\t\tteste++;\n\n\t\tfor (i=0; i &lt; TAMSENHA; i++) {\n\t\t\tprintf(\"%i \", senha[i][0]);\n\t\t}\n\n\t\tprintf(\"\\n\\n\");\n\t\t\n\t\tscanf(\"%i\", &amp;N);\n\t}\n\t\n\treturn 0;\n}<\/pre><\/div><\/code><\/pre>\n\n\n\n<div class=\"both\">&nbsp;<strong>Teste o c\u00f3digo:<\/strong>&nbsp;<a href=\"http:\/\/ideone.com\/2gfTMd\" target=\"_blank\" rel=\"noopener\">http:\/\/ideone.com\/2gfTMd<\/a><\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Por quest\u00f5es de seguran\u00e7a, muitos bancos hoje em dia est\u00e3o alterando a forma como seus clientes digitam as senhas nos caixas eletr\u00f4nicos, pois algu\u00e9m pode postar-se atr\u00e1s do cliente e ver as teclas \u00e0 medida em que ele as digita. Uma alternativa bastante utilizada tem sido associar os dez d\u00edgitos a cinco letras, de forma [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,6],"tags":[12,10,9,17,11],"class_list":["post-250","post","type-post","status-publish","format-standard","hentry","category-cc","category-obi","tag-for","tag-if","tag-matriz","tag-string","tag-while"],"aioseo_notices":[],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/posts\/250","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/comments?post=250"}],"version-history":[{"count":10,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/posts\/250\/revisions"}],"predecessor-version":[{"id":324,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/posts\/250\/revisions\/324"}],"wp:attachment":[{"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/media?parent=250"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/categories?post=250"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/tags?post=250"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}