Números para letras


15

Existe uma cifra muito simples que substitui uma letra pela sua posição no alfabeto. Por exemplo, abcficaria 1 2 3nessa cifra.

Esse desafio é uma abordagem alternativa a essa cifra.


O desafio

Crie um programa que receba uma entrada de caracteres ASCII e produza uma sequência separada por espaço de:

  • números inteiros -26através26

  • cartas aatravésj

A saída deve vir do STDOUT ou da alternativa mais próxima do seu idioma.


Especificações

  • Letras maiúsculas devem ser negadas. Uma capital Dpor exemplo seria -4, enquanto uma minúscula dseria 4.

  • Os dígitos devem ser alterados para seus equivalentes alfa. 1ser ae assim por diante. Quaisquer zeros na entrada serão j.

  • Todos os caracteres não alfanuméricos (exceto espaços) devem ser ignorados.

  • Os espaços são 0.

  • Os espaços adjacentes na saída devem ser reduzidos para um único espaço.

    Input: You + Me
    Correct Output: -25 15 21 0 -13 5
    Incorrect Output: -25 15 21 0 0 0 -13 5
    
  • Um único espaço à direita ou nova linha é permitido.


Exemplos

Input: programming puzzles
Output: 16 18 15 7 18 1 13 13 9 14 7 0 16 21 26 26 12 5 19

Input: Code Golf
Output: -3 15 4 5 0 -7 15 12 6

Input: Programming Puzzles & Code Golf
Output: -16 18 15 7 18 1 13 13 9 14 7 0 -16 21 26 26 12 5 19 0 -3 15 4 5 0 -7 15 12 6

Input: C0d3 G0lf
Output: -3 j 4 c 0 -7 j 12 6

Input: abc_ABC
Output: 1 2 3 -1 -2 -3

Placar

Para que sua pontuação apareça no quadro, ela deve estar neste formato:

# Language, Bytes

Tachado não deve causar problemas.



A saída pode ter um espaço à direita?
Dennis

Sim. Um único espaço à direita ou nova linha é permitido. @Dennis
Zach Gates

Uma função retornando / imprimindo uma string é uma resposta válida? Além disso, você pode adicionar um caso de teste como "abc_ABC" para descartar todas as regex [^ \ w] e [\ W]?
Max

Eu não tinha muita certeza do que você estava perguntando, mas adicionei esse caso de teste. Espero que seja o que você estava procurando; se não, me avise. @Max
Zach Gates

Respostas:


10

CJam, 58 57 54 51 50 49 bytes

Apenas quando eu escrevi a explicação, eu notei que uma das 50 versões alternativas de bytes pode ser encurtado por um byte ...

q_el_eu&S-A,s--S%S*{i_32md\2*5-*48md@)A%'a+\?}%S*

Teste aqui.

Soluções de 50 bytes:

q_el_eu&S-A,s--S%S*{_A,s&\i_)A%'a+\32md\2*5-*?}%S*
q_el_eu&S-A,s--S%'`*{i32md:D;(_(2*(D*D3+A%'a+?}%S*
q_el_eu&S-A,s--S%'`*{i32md\(_@_@(2*(*\3+A%'a+?}%S*
q_el_eu&S-A,s--S%'`*{i32md\(_(2*(g@*_z3+A%'a+?}%S*

Explicação

q         e# Read input.
_el_eu&   e# Intersect a lower-case version with an upper-case version to remove
          e# all letters.
S-        e# Remove spaces from that string.
A,s-      e# Remove digit characters from that string. It now contains all the
          e# the characters from the input we should ignore.
-         e# Remove these characters from the input.
S%S*      e# Split on runs of spaces and join by spaces, collapsing multiple into one.
{         e# Map this block onto each character...
  i_      e#   Convert to character code and make a copy.
  32md    e#   Get divmod 32. Note that digits have character codes 32 + something,
          e#   the upper case letters have character codes 64 + n (where n is the 
          e#   absolute value we want), while lower case letters have codes 96 + n. 
          e#   So the div gives 2 or 3 to distinguish capitalisation (and 1 for digits) 
          e#   and the mod gives the correct absolute value for letters.
          e#   As it happens, the mod also gives 0 for spaces.
  \2*5-   e#   Pull up the div, duplicate, subtract 5. Turns 2 into -1 and 3 into 1. 
          e#   It also turns 1 (digits) into -3.
  *       e#   Multiply the mod by this sign.
          e#   We now have the correct result for everything but digits. Note that
          e#   the absolute value for digits is more than 26, and for everything
          e#   else it's less than 27.
  48md    e#   Get divmod 48. This gives div 0 and mod n for all correct results n.
          e#   For digits it gives div -1 and we don't care about the mod. We'll
          e#   use the div as a truthy/falsy value to select the right result.
  @)A%    e#   Pull up the other copy of the character code, increment 
          e#   (range 49..58), take modulo 10.
          e#   This gives 9 for 0 and n-1 for any other digit n.
  'a+     e#   Add to the character a.
  \?      e#   Select the correct result based on the div 48.
}%
S*        e# Join the resulting values by spaces.

Essa deve ser a primeira vez que o comportamento do módulo de CJam para valores negativos foi útil para mim.


6

JavaScript (ES6), 110 107 133 120 bytes

Tome isso, meu velho!

a=>[...a.replace(/[\W_]*?( ?)[\W_]*/g,'$1')].map(x=>(c=x.charCodeAt())<40?0:c<60?'jabcdefghi'[x]:c<91?64-c:c-96).join` `

Há potencialmente muito mais espaço para jogar golfe, especialmente nas regexes , que diminuíram bastante. Versão não destruída:

function f(a) {
  // Replaces each run of bad chars and spaces with
  // a space if it contained one, nothing otherwise:
  a = a.replace(/[\W_]*?( ?)[\W_]*/g, '$1');

  var b = a.split('');
  b = b.map(function(x) {
    var c = x.charCodeAt();
    if (c == 32)     // space
      return 0;
    else if (c < 60) // numbers
      return 'jabcdefghi'.charAt(x);
    else if (c < 91)
      return 64 - c; // uppercase
    else
      return c - 96; // lowercase
  });
  b = b.join(' ');
  return b;
}

Sugestões são bem-vindas!


Teste '123___abc'. Dica: você precisa lidar com sublinhados
edc65

Outro problema: All non-alphanumeric characters should be ignored.. Teste: 'A $ b' deve ser-1 2
edc65

@ edc65 Ah, cara, eu pensei que tinha feito ... Mas obrigado por me avisar!
ETHproductions

4

Pitão, 50 49 bytes

jdm?>d26C+70ddm-xZd26:-z-z=Zs[_rG1dGjk.<UT1)" +"d

Experimente aqui .

Editar: higienização reestruturada das cordas para garantir que os sublinhados sejam manipulados corretamente. Até salvou um byte também, yay!

Este programa cria uma cadeia de pesquisa, que é usada para limpar a entrada. Isso é mapeado para o índice correspondente nessa sequência. Por fim, qualquer índice maior que 26 é convertido no caractere ASCII correto.

                                                     Implicit: z=input(), d=' ', ,
                                                       k='', G=[a-z]
                              _rG1                   Reversed, capitalised alphabet
                                  d                  Single space
                                   G                 Lower case alphabet
                                    jk.<UT1          '1234567890'
                            s[             )         Concatenate the 4 previous statements
                          =Z                         Store in Z
                        -z                           Setwise difference of input and above
                                                       (to get all illegal characters)
                      -z                             Setwise difference of input and illegal chars
                     :                      " +"d    Regex replace to lose multiple spaces
              m                                      Map the above over d:
                xZd                                    Get index of d in Z
               -   26                                  Subtract 26
  m                                                  Map the above over d:
   ?>d26                                               If d > 26
        C+70d                                            Convert (d+70) to ASCII
             d                                         Otherwise, select d
jd                                                   Join on spaces and print

Versão anterior, que utilizava \Wregex, em 50 bytes:

jdm?>d26C+70ddm-xs[_rG1\ Gjk.<UT1)d26::z"\W"d" +"d

3

Julia, 145 136 bytes

r=replace;print(join([47<x<58?x+58-10(x>48):x==32?0:cmp(x,96)*(lowercase(x)-96)for x=r(r(readline(),r"[^a-z0-9 ]"i,""),r" +"," ")]," "))

Ungolfed:

# Read a string from STDIN
input = readline()

# Remove non-alphanumeric characters and replace duplicated spaces
r = replace(replace(input, r"[^a-z0-9 ]"i, ""), r" +", " ")

# Construct an array using comprehension over the replaced input string
A = [47 < x < 58 ? x + 58 - 10(x > 48) : x == 32 ? 0 : cmp(x, 96) * (lowercase(x) - 96) for x = r]

# Join the array elements with spaces
j = join(A, " ")

# Print to STDOUT
print(j)

Para obter os dígitos como letras, adicionamos 58 ao valor ASCII e subtraímos 10 se o caractere atual não for 0. Isso garante que 0 seja mapeado para j e os outros dígitos sejam mapeados para a- i.

Negar letras maiúsculas é feito usando cmp . Isso retornará -1 para letras maiúsculas e 1 para letras minúsculas.

Experimente online


2

Perl 5, 120 116 113 105 Bytes

Primeiro limpa os caracteres indesejados e espaços extras.
Então desce a tabela ascii para cada personagem.

$_=pop;s/[^\w ]|_//g;s/ +/ /g;map{$n=ord;say$".($n>96?$n-96:$n>64?64-$n:$n>48?chr$n+48:$n>47?j:0)}split//

Teste

$ perl -M5.01 numbers4letters.pl "zZaA _ 190"
 26 -26 1 -1 0 a i j
$ perl -M5.01 numbers4letters.pl "PrOgr4mm1n9 Puz2l3s & C0d3_G0lf!"
-16 18 -15 7 18 d 13 13 a 14 i 0 -16 21 26 b 12 c 19 0 -3 j 4 c -7 j 12 6

2
Você pode jogar golfe com um caractere com um único espaço em regex no lugar de \ s, e o segundo regex pode ser jogado com golfe s/ +/ /g, o primeiro regex está errado porque \ w corresponde ao caractere sublinhado.
Max

2
Outros dois personagens lançados coms/[^\w ]|_//g
Max

Bom, ainda melhor do que com a flag ignore case.
LukStorms

@ Max dica agradável. 2 bytes salvos na minha resposta, obrigado.
Edc65 17/09/2015

2

C, 142 138 135

c,d;main(s){while(c=getchar()+1)d=c|32,c=d-98<26u?s=(d-97)*(c/32*2-5),0:c-48<11u?s='a'+c%10,4:c==33&&s?s=0,0:3,printf("%d \0%c "+c,s);}

Ungolfed um pouco:

int c,d;
int main(int s)                     // s initially non-zero, meaning spaces are allowed
{
    while(c=getchar()+1)            // getchar until EOF (-1) encountered
    {
        d=c|32;                     // d becomes lowercase c (both incremented by 1)
        if (d-98<26u)               // check for letter
        {
            s=(d-97)*(c/32*2-5);    // print this number and allow subsequent spaces
            c=0;                    // format string will be "%d "
        }
        else if (c-48<11u)          // check for digit
        {
            s='a'+c%10;             // print this letter and allow subsequent spaces
            c=4;                    // format string will be "%c "
        }
        else if (c==33&&s)          // else if space and allowed to output spaces
        {
            s=0;                    // print 0 and disallow subsequent spaces
            c=0;                    // format string will be "%c "
        }
        else
        {
            c=3;                    // format string will be "", prints nothing
        }
        printf("%d \0%c "+c,s);     // final c is treated as index into string literal
    }
}

Passa nos testes indicados no GCC 4.9.3 e Clang 3.5.2.


2

> <> (peixe), 219 209 bytes

>i:84*=?v:86*1-)?!^:f4*2-(?v:88*)?!v:a9*1+(?v:c8*)?!^:ca*3+  (?v~
>4*(?vov>~86*$:@=?v86*00.  >:86*=?v77*1-+00.>88*-::-$-00.01-*8c<
 >.! ! ! 00~v?( 0:\00. >.!00+6*aa~<>~    92*2!.<2*29<
^7:;?=0:<r0~<
*o73.>n>84

Experimente aqui

Esta é a minha primeira resposta de código de golfe! Finalmente pude usar o idioma que eu queria usar para um desafio de golfe com código, e este parecia o perfeito, pois os caracteres são automaticamente convertidos em decimais.

Eu esperava que meu resultado fosse bem menor, mas aparentemente não. No entanto, eu não joguei muito esse. Existem alguns lugares em que o código pode ser mais limpo / com mais sentido, mas não salvará bytes, pois eles estão em locais onde o espaço em branco é necessário. Pode haver uma maneira de salvar alguns bytes no último bit na segunda linha, fazendo com que ele vá na direção oposta e se misture com o 00 já lá, vou ter que jogar mais tarde

Basicamente, isso verifica se o caractere atual é um espaço, número, letra maiúscula ou minúscula, verificando se está no intervalo dos valores mais altos / mais baixos desse grupo. Se não for um desses, é descartado. Se estiver em um desses, será convertido em um número, se for uma letra, e uma letra, se for um número (ou melhor, um número de 97 a 106, que são os valores das letras aj). Em seguida, verifica se o valor superior é menor que 28; nesse caso, é um número e gera um número; caso contrário, é uma letra e gera a letra que esse número representa, gera um espaço e circula até a pilha ficar vazia.


2

JavaScript (ES6), 108 122 124

Editar Usando o regexp do comentário de @ Max
Editar2 14 bytes salvos graças ETHProductions

O EcmaScript 6 apenas para as funções de seta, deve funcionar no Firefox e no Chrome mais recente.

Teste a execução do snippet abaixo

F=
t=>t[R='replace'](/[^\w ]|_/g,'')[R](/ +|./g,c=>((v=parseInt(c,36))>9?c>'Z'?v-9:9-v:'jabcdefghi'[v]||0)+' ')

// Less golfed
U=t=>
  t.replace(/[^\w ]|_/g,'') // remove invalid characters
  .replace(/ +/g,' ') // collapse spaces
  .replace(/./g, c => ( // valid character replacing
    v = parseInt(c,36), // '0'..'9'-> 0..9, 'a'..'z' -> 10..25, ' ' -> NaN
    (
      v > 9 
      ? c > 'Z' ? v-9 : 9-v // manage upper vs lower
      : 'jabcdefghi'[v] || 0 // digits, NaN as an index gives undefined, substituted with 0
    ) + ' ' // separator space
  ))


// TEST
out=x=>O.textContent=x+'\n'+O.textContent;

function go() { out(I.value + ' --> ' + F(I.value) +'\n')}

// test cases, a trailing blank added to the expected output as ...
// "A single trailing space or newline is allowed."

;[
  ['A$b','-1 2 ']
, ['123___abc', 'a b c 1 2 3 ']
, ['You + Me','-25 15 21 0 -13 5 ']
, ['programming puzzles', '16 18 15 7 18 1 13 13 9 14 7 0 16 21 26 26 12 5 19 ']
, ['Code Golf', '-3 15 4 5 0 -7 15 12 6 ']
, ['Programming Puzzles & Code Golf', '-16 18 15 7 18 1 13 13 9 14 7 0 -16 21 26 26 12 5 19 0 -3 15 4 5 0 -7 15 12 6 ']
, ['C0d3 G0lf', '-3 j 4 c 0 -7 j 12 6 ']
].forEach(t=>{ 
  k=t[1],r=F(t[0]), 
  out('Test '+(k==r?'OK':'Fail')+'\nInput:  '+t[0]+'\nResult: '+r+'\nCheck:  '+k+'\n')
})
Custom test: <input id=I><button onclick='go()'>-></button>
<pre id=O></pre>


Posso estar enganado, mas acho que você pode economizar um monte mudando [R](/ +/g,' ')[R](/./g,para [R](/ +|./g,. (Desculpe por trazer um post antigo, btw)
ETHproductions

@ETHproductions parece bom. Graças
edc65


1

CJam, 52 bytes

'{,97>:L_eu+A,s(++S+l{1$&},S%S*\26,:)_Wf*+LA<+0+erS*

Experimente online

A parte principal da solução é que ela usa o eroperador CJam (transliteração). Como argumentos para o operador, ele precisa da lista de todos os caracteres e de uma lista dos valores correspondentes.

Como uma etapa de pré-processamento na entrada, ele remove caracteres que não fazem parte da tabela de conversão (caracteres especiais) e reduz os espaços repetidos em um único espaço.

Explicação:

'{,97>  Build list of all lower case letters.
:L      Save it in variable L for later reuse.
_eu+    Add list of upper case letters.
A,s     Build digits "0123456789".
(+      Pop off first digit and append it at the end, to get "1234567890".
+       Add digits to list of characters.
S+      Add a space. List of characters that have values is now complete.
l       Get input.
{1$&},  Filter out all input characters that are not in list.
S%      Split input at spaces.
S*      And re-assemble it with spaces. This reduces multiple spaces to one space.
\       Swap input and character list.
26,     Start building list of values. Start with [0 ... 25].
:)      Use "smilie operator" to increment all values, to get [1 ... 26].
        These are the values for the lower case letters.
_Wf*    Copy the list and negate the values to get [-1 ... -26] for upper case.
+       Concatenate the two lists.
L       Retrieve the list of lower case letters we saved away earlier.
A<      Keep the first 10, which are the values for the digits.
+       Concatenate to list of values.
0+      Add 0 to list, as value for space.
er      Transliterate input string to corresponding values.
S*      Join with spaces for output.

1

Python 2, 191 179 177 173 172 168 160 bytes

import re
print" ".join([[[chr(x+48),"j"][x<49],[`[x-96,-x+64][x<96]`,"0"][x<65]][x>57or x<33]for x in map(ord,re.sub(" +"," ",re.sub("[^\w ]|_","",input())))])

Teste

"programming puzzles"
16 18 15 7 18 1 13 13 9 14 7 0 16 21 26 26 12 5 19

"Code Golf"
-3 15 4 5 0 -7 15 12 6

"Programming Puzzles & Code Golf"
-16 18 15 7 18 1 13 13 9 14 7 0 -16 21 26 26 12 5 19 0 -3 15 4 5 0 -7 15 12 6

"C0d3 G0lf"
-3 j 4 c 0 -7 j 12 6

"You + Me"
-25 15 21 0 -13 5

1

PHP, 116 bytes

while($c=ord(preg_replace(["#[^\w ]|_#","# +#"],["","@"],$argn))[$i++])echo$c<96?jabcdefghi[$c-48]?:64-$c:$c-96," ";

recebe entrada do STDIN; correr com-nR .

demolir

while($c=ord(preg_replace(["#[^\w ]|_#","# +#"],["","@"],$argn) # sanitize input
    [$i++]))echo            # loop through string and print ...
    $c<96                       # if not lowercase:
        ?jabcdefghi[$c-48]          # digit -> letter
        ?:                          # if that turned out falsy (=empty):
        64-$c                       # uppercase (or former spaces) -> negative (or 0)
    :$c-96                      # else -> positive
," ";                           # append space

Você pode substituir o @por um bastão para manipular espaços na parte minúscula.
Com jabcdefghi0os dígitos, você também pode usar :.


Eu acredito que você deve alterar a ordem em "#_|[^\w ]#"vez de "#[^\w ]|_#".
Jörg Hülsermann

0

Hássio , 1156 bytes

func main() {s = input();c="";for(x=0;x<s.length;x++){c=s[Convert.toNumber(Convert.toString(x))].toString();if (c.toLower()!=c)print(r(c.toLower())*-1);else if(r(c)=="")continue;else print(r(c));print(" ");}}func r(c) {if(c=="a")return 1;else if(c=="b")return 2;else if(c=="c")return 3;else if(c=="d")return 4;else if(c=="e")return 5;else if(c=="f")return 6;else if(c=="g")return 7;else if(c=="h")return 8;else if(c=="i")return 9;else if(c=="j")return 10;else if(c=="k")return 11;else if(c=="l")return 12;else if(c=="m")return 13;else if(c=="n")return 14;else if(c=="o")return 15;else if(c=="p")return 16;else if(c=="q")return 17;else if(c=="r")return 18;else if(c=="s")return 19;else if(c=="t")return 20;else if(c=="u")return 21;else if(c=="v")return 22;else if(c=="w")return 23;else if(c=="x")return 24;else if(c=="y")return 25;else if(c=="z")return 26;else if(c==" ")return 0;else if(c=="1")return "a";else if(c=="2")return "b";else if(c=="3")return "c";else if(c=="4")return "d";else if(c=="5")return "e";else if(c=="6")return "f";else if(c=="7")return "g";else if(c=="8")return "h";else if(c=="9")return "i";else if(c=="0")return "j";else return"";}

Resposta muito longa


1
O colapso de espaços não parece funcionar. You + Meproduz a saída -25 15 21 0 0 -13 5.
Dennis

1
Linguagem interessante, como C / Java / [outra linguagem da qual não me lembro o nome]. Existe uma maneira mais fácil de converter cada caractere em um número, ou seja, uma função para recuperar um código de char ? (Role para baixo até a tabela e veja a Deccoluna.)
ETHproductions

0

Geleia , 32 bytes, desafio de pós-datas de idiomas

⁶ØB;µ³fi@€
Øaḣ⁵ṙ9
26RµN;;0¢;ị@ÑK

Experimente online!

Explicação

Função auxiliar1Ŀ (converte cada alfanumérico / espaço na entrada em um número)

⁶ØB;µ³fi@€
⁶           space
 ØB;        append all digits, uppercase and lowercase letters (in that order)
    µ       set as the new default for missing arguments
     ³      first command-line argument
      f     delete all characters not in {space + alphanumerics}
       i@€  take index of each element within {space + alphanumerics}

Função auxiliar (retorna a cadeia constante “jabcdefghi”)

Øaḣ⁵ṙ9
Øa      lowercase alphabet
  ḣ⁵    take first 10 elements
    ṙ9  rotate 9 elements to the left

Programa principal

26RµN;;0¢;ị@ÑK
26R             Range from 1 to 26
   µ            set as default for missing arguments
    N           Minus {each element of the range from 1 to 26}
     ;          with {the range from 1 to 26} appended
      ;0        with a 0 appended
        ¢;      with the result of 2£ prepended
          ị@    index into this using
            Ñ   the result of 1Ŀ
             K  separate by spaces

0

Retina, 74 70 bytes (não concorrente)

Observe o espaço à esquerda na linha 3, o espaço à direita na linha 6 e a segunda linha vazia.

[^ \ w] | _

 +
~
.
$ + 
[AZ]
- $ +
T`L`l
[js]
a $ +
[tz]
b $ +
T` ~ ld`dd0-6jl

Experimente Online!

Embora o idioma tenha sido criado antes do desafio, acho que alguns dos recursos de idioma que eu usei após o desafio foram marcados como não concorrentes.


0

Java 7, 257 254 bytes

class M{public static void main(String[]a){String r="",x;for(int c:a[0].getBytes()){x=(c>96&c<123?c-96:c>64&c<91?"-"+(c-64):c>48&c<58?(char)(c+48):c==48?"j":c<33?0:"")+"";r+=!x.isEmpty()&&!(r.endsWith("0 ")&x.equals("0"))?x+" ":"";}System.out.print(r);}}

Experimente aqui.

Explicação:

class M{                               // Class
  public static void main(String[]a){  //  Required main-method
    String r="",                       //   Result-String
      x;                               //   Temp String
    for(int c:a[0].getBytes()){        //   Loop over the characters of the input-String
      x=(                              //    Set the temp String to:
        c>96&c<123?                    //     If it's a lowercase letter:
          c-96                         //      Set `x` to the 1-indexed alphabetic index
        :c>64&c<91?                    //     Else-if it's a uppercase letter:
          "-"+(c-64)                   //      Set `x` to the 1-indexed alphabetic index as negative
        :c>48&c<58?                    //     Else-if it's a digit 1-9:
          (char)(c+48)                 //      Set `x` to the 1-indexed alphabetic character
        :c==48?                        //     Else if it's a zero:
          "j"                          //      Set `x` to "j"
        :c<33?                         //     Else if it's a space:
          0                            //      Set `x` to "0"
        :                              //     Else:
          ""                           //      Set `x` to an empty String
       )+"";                           //     Required `+""` because `(char)` and `0` aren't Strings
      r+=                              //    Append the result-String with:
        !x.isEmpty()                   //     If `x` has a value
        &&!(r.endsWith("0 ")&x.equals("0"))?
                                       //     and it's not "0" with the previous value also being a zero
          x+" "                        //      Append the value of `x`, plus a space
        :                              //     Else:
          "";                          //      Append nothing
    }                                  //   End of loop
    System.out.print(r);               //   Print the result to STDOUT
  }                                    //  End of main-method
}                                      // End of class

Exemplo de entrada e saída:

Input:
Programming Puzzles & C0d3 G0lf

Output:
-16 18 15 7 18 1 13 13 9 14 7 0 -16 21 26 26 12 5 19 0 -3 j 4 c 0 -7 j 12 6 
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.