Código-fonte falso


23

Saída de um caractere aleatório para cada caractere do código fonte (conforme ilustrado abaixo). A probabilidade de cada caractere é sua frequência no código fonte original. Assim, a saída será um código-fonte falso, semelhante a um quine.

Especificação

  • Restrições
    • Aplicam-se restrições de padrão . Não há programas ou funções vazios. Também não é possível ler sua própria fonte.
  • Saída
    • O número de caracteres de saída deve ser exatamente o número de caracteres no código-fonte
    • Cada caractere de saída deve ser escolhido aleatoriamente
    • A probabilidade de escolher qualquer caractere é igual a (occurrences in source) / (length of source)
    • Isso significa que mesmo uma solução unária precisa escolher 'aleatoriamente' 1com probabilidade 1. O que significa que a saída não pode ser codificada.
  • Ganhando
    • Isso é código de golfe, então o menor número de bytes ganha

Exemplo

Program           Frequency           Probability           Possible Output
-------           ---------           -----------           ---------------           
 a@!@              a - 1               a - 25%               @@a@
                   ! - 1               ! - 25%
                   @ - 2               @ - 50%
Program           Frequency           Probability           Possible Output
-------           ---------           -----------           ---------------
caBaDBcDaBDB       a - 3               a - 25%               aaaBBBBccDDD
                   B - 4               B - 33%
                   c - 2               c - 17%
                   D - 3               D - 25%

Quines de caractere único são permitidos?
— Nathan Merrill

@NathanMerrill Sim, são permitidas soluções de caractere único (e outras unárias). No entanto, sua saída ainda precisa ser escolhida aleatoriamente.
— NonlinearFruit

Como vou encontrar as ocorrências de caracteres em um arquivo se não tenho permissão para lê-lo?
— Titus


1
@VolAnd No. A probabilidade de cada caractere aparecer é baseada na frequência do caractere. Se você jogar uma moeda duas vezes e ela cair na cara uma vez, ela não precisará ser usada na segunda vez.
— Wizzwizz4

Respostas:


8

CJam , 14 bytes

{{E*`mR}`mR}E*

Experimente online!

Explicação

Cada caractere aparece exatamente duas vezes, portanto, as probabilidades dos caracteres devem ser as mesmas.

{           e# Repeat this block 14 times.
  {E*`mR}   e# Push this (nonsensical) block.
  `         e# Stringify it, giving the string "{E*`mR}", which contains each of the
            e# seven characters once.
  mR        e# Select one of the characters at random.
}E*

7

Gelatina , 13 bytes

“;⁾vṾWṁ$X€”vṾ

Experimente online!

Como funciona

“;⁾vṾWṁ$X€”vṾ  Main link. No arguments.

“;⁾vṾWṁ$X€”    Set the argument and return value to the string s := ';⁾vṾWṁ$X€'.
            Ṿ  Uneval; construct a string representation of s.
               This yields r := '“;⁾vṾWṁ$X€”'.
           v   Dyadic eval; evaluate s with argument r.


 ;⁾vṾWṁ$X€     Evaluated link (s). Argument: r

  ⁾vṾ          Yield 'vṾ'.
 ;             Concatenate r with 'vṾ'.
               This yields t := '“;⁾vṾWṁ$X€”vṾ', i.e., the original source code.
       $       Combine the previous two links into a monadic chain.
     W           Wrap; yield ['“;⁾vṾWṁ$X€”vṾ'].
      ṁ          Mold; repeat ['“;⁾vṾWṁ$X€”vṾ'] once for each charcter in t.
        X€     Random each; select a character, uniformly at random, of each
               of the 13 repetitions of t.

6

Perl, 59 bytes

$_=q{$_.='$_=q{};eval';@a=/./g;s/./$a[rand@a]/g;print};eval

Usei um quine existente como base e modifiquei-o para imprimir caracteres aleatórios a partir do conteúdo de origem.

Uso

Salve como faux-source-code.ple execute usando:

perl faux-source-code.pl

Produz algo como o seguinte:

$d='=a{f.gng$d._{{{ag{ed{aa;ae/r$no{a]_q}/$;_}lrq=r_=;_;=$'
vptr.q'ap.vaa@}@{iel];na;f.o/qon/fa}ie;=e{/a}/ag.$vaiqa_gv'
$_..'daq;.;/./.@._ogd;@aapqirv/;nrp=}@$}a/i;vq;.l.l@i}g]qq'
va==/t@dl.fe'}ar.l@n;_tve@=n$;$}$.l'p{a@qv._qag@dgr_$/.$/;v
q{/@d;@a;a_=g_r$r/.qar{=[gnr';@;$qgvad;$===/$//i]}g[tr@@.q}

Em um breve teste, ~ 3% dos resultados do programa foram evalbem-sucedidos. Não sei o que isso diz sobre Perl ...


Ah, esse comentário sobre os 3% de sucesso eval! Agradável! ;-)
— Dada

@Dada Seriously! As submissões na resposta realmente funcionam! I foi muito impressionado ...
— Dom Hastings

Felizmente, pelo que vi, ele vem apenas da saída como uma string inteira com aspas (com 'ou q//, q{}etc)!
— Dada

@ Dadá Sim, ou uma correspondência regex. Me fez rir embora! :)
— Dom Hastings

1
Feliz em vê-lo jogar novamente btw! :)
— Dada

4

Japonês , 22 bytes

"+Q ²£ZgMqB"+Q ²£ZgMqB

Teste online!

Como funciona

"+Q ²£ZgMqB"+Q ²£ZgMqB  // Implicit: B = 11
"+Q ²£ZgMqB"            // Take this string.
            +Q          // Append a quotation mark.
               ²        // Double the result.
                £       // Replace each char in the result Z with
                 Zg     //  the char in Z at index
                   MqB  //   random integer in the range [0, 11).
                        // Implicit: output last expression

4

Pyth, 16 bytes

smO+N"m1NOs+6"16

experimente online!

Contém cada caractere duas vezes, portanto, a probabilidade é a mesma que se cada um estivesse lá apenas uma vez.

smO+N"m1NOs+6"16     #
   +N"m1NOs+6"       # Add a quotation mark to the string: "m1NOs+6
  O                  # random choice from the string
 m            16     # do this 16 times.
s                    # join the list into a string

3

PHP, 71 140 110 124 140 120 120 bytes

for($i=2*$n=strlen($s='for($i=2*$n=strlen($s=.chr(39));$i--;)echo$s[rand(0,$n-1)];'.chr(39));$i--;)echo$s[rand(0,$n-1)];

correr com php -d

  1. cria uma sequência contendo o código sem as aspas
  2. e concatena as aspas uma vez usando ord
    (mesma probabilidade como se eu dobrasse a string e adicionasse duas aspas);
  3. em seguida, passa o loop duas vezes o comprimento da string para obter caracteres aleatórios.

Possivelmente pode ser jogado ainda mais, mas minhas tentativas de avaliar foram inúteis até agora.
Provavelmente não irei mais fundo aqui.


1
The probability of each character is its frequency in the original source code.Posso estar errado, mas não parece que essa entrada atenda a esse requisito.
— ETHproductions

Oh, eu perdi esse ponto. De volta ao editor. Como isso pode ser feito sem ler o código?
— Titus

Usando isso , eu tenho um syntax error, unexpected '<'. Mas não estou familiarizado com PHP, como faço para testar isso?
— NonlinearFruit

@NonlinearFruit: Você usou a bandeira -d? Isso deve ser salvo em um arquivo e depois chamado com phpou php-cgisem nenhum sinalizador. Talvez você possa usar um heredoc.
— Titus

@NonlinearFruit: ... ou simplesmente remova o líder <?para uso -d.
— Titus

3

Python 2, 88 bytes

s='''from random import*; print "".join(choice(s) for c in "s='"+s+"';exec s")''';exec s

Todo o mérito real de chegar até aqui vai para mbomb007 - obrigado por sua ajuda (e o ponteiro sobre as barras invertidas)


1
Esse é um desafio do tipo quine, sem inserir ou ler seu código-fonte (suponha que ele tenha ncaracteres), você precisa imprimir ncaracteres aleatórios. Onde a probabilidade de um símbolo cser escolhido é igual a (number of times c occurs in your solution) / n.
— NonlinearFruit

Tão mais assim? exec("""s = 'from random import choice; print "".join([choice(s) for c in s])'; exec(s)""")
— user59421

Você ainda não incluiu as aspas simples e não precisa dos colchetes no join.
— Mbomb007

Graças - e para a direita, eu tenho um pouco apanhados na corrida de empurrando mais perto da solução
— user59421

1
Aqui vai: s='''from random import*;print"".join(choice(s)for c in s+"s='';''exec s''")''';exec s. Eu gostaria de ter pensado nisso.
— Mbomb007

3

Ruby, 47 bytes

eval r="47.times{$><<('eval r=%p'%r)[rand 47]}"

Isso é baseado no padrão evalquine:

eval r="$><<'eval r=%p'%r"

É um byte mais longo que o menor quine, mas geralmente é a melhor escolha para quines generalizados, porque qualquer cálculo feito na cadeia de código-fonte não precisa ser duplicado. Enquanto no quine usual, todo cálculo adicional precisa ir dentro e fora da string principal, só é necessário dentro da string principal para esse tipo de quine.

Quanto ao que o código realmente faz: após obter uma string que representa o código fonte inteiro, simplesmente selecionamos um caractere aleatório (selecionando um índice aleatório) 47 vezes e imprimimos cada caractere separadamente.


3

Wolfram Language / Mathematica, 109 bytes

Function[Print[StringJoin[RandomChoice[StringSplit[StringJoin[ToString[FullForm[Slot[0]]],"[]"],""],109]]]][]

saída de amostra:

niPi[no,ili[Siu[,Sdoio9nthg"t ginuu[1[o]"i,icgi[0TncrS"[ln"o0]r,i][Jon[[et]0"]m [ri"a[]motrin,iFoFnultnnno,Jl

Oh aqueles colchetes.


2

Geléia, 44 bytes

Espero ter interpretado todas as regras corretamente (eu não estou bastante certo de que a coisa "carry payload" está na meta ou se é mesmo relevante a este desafio).

“ẋ2;8220Ọ;8221ỌXµ44СḊ”ẋ2;8220Ọ;8221ỌXµ44СḊ

Teste-o em TryItOnline

Isso constrói uma cadeia de caracteres para escolher caracteres. A cadeia inicial possui todo o caractere usado, exceto as aspas de abertura e fechamento. Em seguida, ele dobra essa sequência e concatena uma de cada uma das aspas abertas e fechadas dos ordinais (daí a necessidade de duplicar os outros caracteres). Por fim, ele seleciona repetidamente caracteres aleatórios da sequência composta até o tamanho do programa.


1
@NonlinearFruit Ops - atualizei para adicionar um caractere perdido da minha string, mas não atualizei para 44 - obrigado!
— Jonathan Allan

2

Pyke, 35 bytes

35F\";"\\+3322 5**F;H)s"\"2*+2* H)s

Experimente aqui!

Para verificar: remova a final He a sequência resultante contém o número certo de cada caractere (com o número extraH )

Isso NÃO usa uma solução generalizada ou, de fato, uma solução. Ele conta com a capacidade de criar uma sequência contendo todos os caracteres na fonte. Ele deve poder fazer isso para qualquer código, mas cada caractere aumenta logaritmicamente o tamanho do código. O único número de vezes que um caractere é permitido na fonte é 2 ou 7


2

Ruby, 81 67 bytes

Economizou um monte de bytes roubando alguns truques da solução de Martin

s="s=%p;67.times{$><<(s%%s)[rand 67]}";67.times{$><<(s%s)[rand 67]}

Eu não percebi que você tinha que selecionar aleatoriamente todas as vezes; Eu pensei que um shuffle faria o truque. Provavelmente isso pode ser jogado no golfe, mas é o menor tempo possível.

Quine padrão do Ruby com algumas modificações, para que ele imprima a sequência embaralhada. Estou triste porque demorou quinze minutos para descobrir as peculiaridades da formatação antes de perceber que eu estava subconscientemente roubando de qualquer maneira.

Acho que o embaralhamento das cordas pode ser reduzido, mas não sei como; Talvez eu também consiga reduzir o tamanho da formatação depois de pensar um pouco. Ajuda seria apreciada.

Experimente online!


Eu acho que (como o meu CJam) responde, não é necessário usar um quine padrão como base. Uma porta direta da minha solução CJam fornece 64 bytes:64.times{$><<"64.times{$><<.inspect[rand 32]}".inspect[rand 32]}
— Martin Ender

Deixa pra lá, basear em um quine padrão é mais curto, mas você precisará usar o quine baseado em avaliação:eval r="47.times{$><<('eval r=%p'%r)[rand 47]}"
— Martin Ender

@ MartinEnder Isso é diferente o suficiente para merecer sua própria resposta, eu acho. Se você não concordar, sinta-se à vontade para editá-lo no meu, mas nesse meio tempo vou apenas roubar alguns truques seus para salvar alguns bytes no meu.
— Fund Monica's Lawsuit

2

C, 125 bytes

char*s="char*s;l,i;f(){l=i=strlen(s);while(i--)putchar(s[rand()%l]);}";l,i;f(){l=i=strlen(s);while(i--)putchar(s[rand()%l]);}

C, 60 bytes para código golfado, mas não para quine, usando qualquer string

l,i;f(char*s){l=i=strlen(s);while(i--)putchar(s[rand()%l]);}

Enquanto para contar caracteres, minha solução precisava de 86:

c[256];i;f(char*s){i=256;while(*s)c[*s++]++;while(--i)while(c[i]?c[i]--:0)putchar(i);}

Não deveria? Talvez eu não entenda as regras deste questionário. My fpega string e imprime na saída padrão: string pode ser qualquer sequência de caracteres.
— VolAnd

Probabilidades @NonlinearFruit não calculadas, mas a expressão rand()%LENGTH_OF_STRINGassume caractere de acordo com a probabilidade desse caractere com distribuição normal fornecida por rand(). Talvez, eu não entendo quineabordagem para C ....
— Voland

+1 A nova solução está quase correta. ssó precisa conter char*s="";. Eu acho que algo assim char*s="char*s=l,i;f(){l=i=strlen(s);while(i--)putchar(s[rand()%l]);};+''"+'""'faria isso (mas eu não estou familiarizado com C).
— NonlinearFruit

Se a resposta não for válida em seu estado atual, ela deverá ser excluída.
— mbomb007

@ mbomb007 Você poderia explicar seu julgamento e possivelmente fornecer conselhos?
— VolAnd 29/09/16

2

JavaScript, 128 bytes

a=";a+=uneval(a);alert(a.replace(/./g,_=>a[Math.random()*64|0]))a=";a+=uneval(a);alert(a.replace(/./g,_=>a[Math.random()*64|0]))

Nota: só funciona no Firefox devido ao uso de uneval.

Amostras de execuções:

)a(rgc=d6m_a4uar=hp(lll(,d=m=dee(M(gtraoan0)(M(aaaa(M]c)e)/M()/u//M6_n/a"*unea(/>atugrn(a=nav"|;)|=)/,ataa,aaangtue;am)t0;|ctoa/
=lvct;eee,,a.e=6r0;);Mtaaoa.aeea4)a[r.6]e/ll+l.)=)|a[(c"rao4ea/=_acaMh=veerva"a(_(d(l)lgn.;rM">=ea40a*).e(h(laa6r)4a)rhlar=t(ta[
[rt]ll]n))aota.e)g;>ae*;..4tt];l[;].*lnr4(mnM|alg(a.ag(.=e(a>>aa>.hga;a/pat+elc];apc=(ag)tao.).ll4u)dah]r(ul)>lr;,)ret(e/g(=_c*r
M.r)_;.a(lraalg("mac>dmrlr"0/ah(a()ead|/0a(m.|u0)(a(0_[dn)a]/raal;eata)a.ataeaa*l)=ra()la=(a)*aaea>n;.a.)ca)orM(tm*a,a=)p;(>r)aa

Agora estou realmente surpreso que isso tenha produzido um código mais válido no Perl do que parece no JS! Não como muitas palavras divertidas aqui, exceto gtraoanque é quase um gemido eu acho ...
— Dom Hastings

1
@DomHastings Bem, Perl é mais de um mosto de pontuação de JS;)
— ETHproductions

Definitivamente! É mais uma bagunça de pontuação do que uma explosão em uma fábrica de pontuação! mas eu gosto disso!
— Dom Hastings

Tem "uma probabilidade de aparecer?
— NonlinearFruit

1
@NonlinearFruit Yup. Há pelo menos um no primeiro, segundo e último exemplo de saída.
— ETHproductions

1

Python 3, 134 132 bytes

Uso cada caractere no meu código-fonte dentro da string o número correto de vezes e multiplico a string por dois para incluir a si mesma. O programa imprime um caractere aleatório dessa sequência para cada caractere no código (o comprimento é codificado).

from random import*
for i in[0]*134:print(choice("""from random import*
for i in[0]*134:print(choice(""*""2""),end='')"""*2),end='')

Experimente online

Evitei barras como a praga. Assim que o código contiver \nou \", você tiver um problema, porque a string ainda não contém barras invertidas, você deverá adicioná-las também, mas em uma string separada multiplicada por um número maior, porque são necessárias duas barras invertidas para representar uma ( \\)

Exemplo de saída:

i(tc*"3]i o''r=,,,h34t"r
ri"](fco t)niap)t "it2nc0o  npoi3'"nto(*4 i(ido' r*4f"oi]d rm ,i"eif)m"d
m emi
dfr n*p 3*(i""r1d"dr menc hio'

Eu tenho que dizer, isso me lembra o FlogScript.


1

PowerShell v2 +, 175 bytes

$d='$d={0}{1}{0}{2}-join(0..174|%{3}[char[]]($d-f [char]39,$d,"`n",[char]123,[char]125)|Random{4})'
-join(0..174|%{[char[]]($d-f [char]39,$d,"`n",[char]123,[char]125)|Random})

Quines em PowerShell chupar, porque os delimitadores de substituição de string {}também laços denotam e outros enfeites, então você precisa usar um monte de chars no -foperador, que incha o código.

Semelhante à minha resposta Quine on Every Line . Basicamente, fazemos um loop de 0para 174e cada iteração recalcula o quine $d, o charprojeta como um array e extrai um Randomelemento escolhido uniformemente da entrada. Por definição, isso fornece probabilidade (occurrences in source) / (length of source)conforme necessário. Esses caracteres são encapsulados em parênteses e -joinreunidos novamente em uma sequência.

Exemplo

PS C:\Tools\Scripts\golfing> .\faux-souce-code.ps1
}}[${hr[`ini}}] [5i,=[]0,j2($=n4(dm]jh]jc]]7
}..j"rnj9|fn,4r]{9]('["jdh0}$rd,-f,a.c"}{h1 ]5d,),0n5|nh(]73a9da4aRi[5}a}430}}rd$,$r)-hhr%or79-R.R-`'r'aa|=1f0][|[{7}do1]$ja0 rd{h

(Sim, é uma nova linha na saída - quando uma string que contém uma nova linha é char-array'd, `né tratada como um caractere, uma vez que a char-array é apenas uma matriz de códigos de bytes, por isso também possui 1/175 chance de ser selecionado.)


1

Dyalog APL , 20 bytes

f←{(,⎕CR'f')[?⍴⍨20]}

f←{... }defina f como

(,⎕CR'f')listified ( ,) C haracter (tabela) R ePresentation ( ⎕CR) de f ('f' )

[?⍴⍨20]indexado com ( [... ]) ?tempos aleatórios até ( ) repetir a si próprio (⍴⍨ ) de vinte

Vamos executá-lo (com um argumento fictício) algumas vezes:

      f⍬
)0'0](⍨(([],}⎕))⎕'f2
      f⍬
{'['}f[←R[)2←?}⍨]}C2
      f⍬
,,⍨←?2}⍴?'⍨}C,'{⎕(C0

Tudo bem, mas a distribuição está correta? Vamos executá-lo com 10.000 argumentos fictícios e ver quantas vezes cada caractere ocorre:

      {⍺ , 1E¯4× ⍴⍵}⌸ ∊ f¨ ⍳1E4
C 0.9952
⎕ 0.9996
' 1.9777
f 2.004 
← 1.0018
⍨ 1.0173
0 1.0213
] 1.0049
[ 0.9988
2 0.9943
{ 0.9895
) 1.0093
R 1.0054
, 1.0029
? 0.9943
} 0.9861
⍴ 1.0032
( 0.9944

Claramente, fe 'ocorrem duas vezes mais que os outros caracteres, assim como no código-fonte original.

Como fizemos isso?

{⍺ , 1E¯4× ⍴⍵}⌸ ∊ f¨ ⍳1E4`

⍳1E4 gera os primeiros 10.000 números inteiros

f¨executa f em cada um desses números

∊ nivela todos os pseudoquinos em uma única cadeia de 200.000 caracteres

⌸é uma função de ordem superior que, para cada caractere exclusivo nos dados do lado direito, alimenta a função do lado esquerdo do elemento exclusivo como argumento à esquerda e os índices em que esse caractere ocorre como argumento à direita. A função do lado esquerdo é

{⍺ , 1E¯4× ⍴⍵}

⍺ argumento à esquerda, ou seja, o caractere único

, Seguido por

1E¯4× 1 × 10⁻⁴ vezes

⍴⍵ a forma do argumento correto (os índices de ocorrência), ou seja, quantas vezes ocorre

Finalmente, ⌸coloca tudo junto em uma tabela.


1

C #, 277 280 268 bytes.

using System;class a{static void Main(){var s="using System;class a{static void Main(){var s=\"x5Cx5C\x5C\x5C\";Random d=new Random();for(int i=0;i++<268;)Console.Write(s[d.Next(0,134)]);}}";Random d=new Random();for(int i=0;i++<268;)Console.Write(s[d.Next(0,134)]);}}

Ungolfed:

using System;
class a
{
    static void Main()
    {
        var s="using System;class a{static void Main(){var s=\"x5Cx5C\x5C\x5C\";Random d=new Random();for(int i=0;i++<268;)Console.Write(s[d.Next(0,134)]);}}";
        Random d=new Random();
        for(int i=0;i++<268;)
            Console.Write(s[d.Next(0,134)]);
    }
}

Certamente isso funciona corretamente.

Saída de amostra:

    fn;i)(]ns;<ftt08et]i+ii8]m[W}dr{rmte,)t edayid 2s cmsee\;ta["e n;o}]iolys;t sftoR{.=g vs8;(sd isWrecn++iia]iuf"avs\i<{ee vfs[ensin\s i]0a(We.0ns R(2roo=ldxil\{t(o"aistt.;.  r w"m1];idi}Ctitiindnn;M[,[+0(,o"]mca[rmnm)<;n"8ReaystinRsanr([(d,n\.ateiR sd.=[=;ttn.;wna)cCt[=+t{Wxs(\}rg

@NonlinearFruit Obrigado, perdi esse espaço. Também significa que não posso usar um loop foreach que adicione alguns bytes :(. No entanto, acho que "incluímos corretamente essas duas aspas de escape na string, pois elas aparecem na saída algumas vezes, a menos que eu ' m faltando seu uso em outro lugar.
— Yodle

Ahh, eu pensei que eles não contavam se estivessem na corda, meu mal. Vai consertar um pouco.
— Yodle 9/09/16

Ok, agora também aparece!
— Yodle

1
Hum, problema interessante então. Não posso continuar adicionando \\ ou sempre serei um curto. Vou usar o código ascii para \.
— Yodle

Funciona (new Random()).Next(0,134)]? Economizaria alguns bytes.
— NonlinearFruit

1

C, 136 bytes

main(a){for(a=136;a--;)rand()%68?putchar("main(a){for(a=136;a--;)rand()%68?putchar([rand()%67]):putchar(34);}"[rand()%67]):putchar(34);}

Exemplo de saída:

;%7c(u)"r4-hd)nnr-%n6;6(4or(n4(6(a:=a3r-:()hp(:aa%;4rru}h;(a()3mh3rdi7));a-u36:r3on[4?p((]6n6?()-6t736unhr%:[%[[d(p:[ru)-n(6r=:](p-})8"]

Este programa gera 136 caracteres aleatoriamente.

O código fonte inteiro (menos "aspas) está contido em uma seqüência de caracteres. O programa determina a probabilidade de gerar aspas como 2/136, caso contrário, gera um dos outros 67 caracteres aleatoriamente.

Existem duas ocorrências de cada caractere na cadeia de caracteres do programa. A probabilidade de gerar um caractere a partir da string é 134/136. A probabilidade de escolher um caractere específico na sequência é 1/67. Portanto, a chance de gerar um caractere na sequência é 134/136 * 1/67 = 2/136. Existem duas ocorrências de cada caractere de seqüência de caracteres no programa, portanto, existe uma probabilidade 1/136 de gerar um caractere para cada ocorrência no programa.

A ordem dos símbolos dentro da string não importa.

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.