Casamento de Padrões - Pedra-Papel-Tesoura

## **O que é o Casamento de Padrões?**

**Casamento de Padrões** é uma técnica utilizada na computação que recebe uma quantidade significativa de dados e tem por objetivo encontrar padrões existentes dentro deles. Encontrado esses padrões, cabe ao casamento interpretar os dados com base nos padrões, estabelecendo uma correspondência entre eles e os dados de entrada.

## **Como Funciona o Casamento de Padrões?**

Dada uma entrada de diversos números, o algoritmo a analisa uma quantidade de X números já pré-definidas e observa quantas vezes esses números juntamente com seu próximo se repetem.

#### **Exemplo:**

Dada uma sequência:

```
**AAABBBCCCABCAAAB**

```

Queremos fazer uma análise com uma sequência de **três** números. Logo, os padrões encontrados são:

```
AAA -> B

```

```
AAB -> B

```

```
ABB -> B

```

```
BBB -> C

```

```
BBC -> C

```

```
BCC -> C

```

```
CCC -> A

```

```
CCA -> B

```

```
CAB -> C

```

```
ABC -> A

```

```
BCA -> A

```

```
CAA -> A

```

Encontrado esses padrões, definimos qual deles tem a maior probabilidade de ocorrer. Nesse caso, trata-se do padrão **AAA -> B**, pois é o que repetiu mais vezes (duas vezes).

### **Curiosidades:**

Existem várias formas de padrões, algumas delas são:

#### **1. Padrão Constante:**

> Trata-se de uma constante, onde o casamento só ocorre caso o padrão for idêntico ao valor.
>
>

#### **2. Padrão Variável:**

> Trata-se de um identificador de uma variável de valor e o casamento ocorre sempre.
>
>

#### **3.** **Padrão Curinga:**

> Também chamado de **variável anônima**, nesse caso o casamento sempre ocorre, mas a variável casa com qualquer valor sem dar nome a ele.
>
>

#### **4.** **Padrão Tupla:**

> O casamento nesse caso ocorre apenas se cada um dos padrões casar com o componente do valor.
>
>

## **Exemplo Aplicado em um Jogo**

Foi aplicado durante as aulas de Agentes Inteligentes um Casamento de Padrões em um jogo Pedra-Papel-Tesoura.

O jogador escolhe um número referente à uma das três opções possíveis a serem jogadas, sendo:

1. Pedra
2. Papel
3. Tesoura

Após isso, é criada uma sequência que será armazenada dentro de uma String onde terá repetições em que cada valor é separado por um espaço. Exemplo:

```
1 1 2 3 3 1 1 2 2 3 1 1 2 3 1 3 3 1 1 2

```

Depois, é criada uma nova String que recebe a sequência que mais repetiu na String acima. Então, é chamado um método que "quebra" a primeira String e compara os seguimentos com a segunda String. Sempre que os valores forem iguais, o próximo valor da primeira String é analisado para saber qual das três opções o jogador escolheu e é adicionado +1 no contador referente a esta opção. Exemplo:

```
Foi dado o seguimento **311** na segunda String. A primeira vez que ele aparece na primeira String, o próximo valor é **2**. No contador de **Papel** é então, adicionado mais 1.

```

É feita então uma média entre cada um dos três contadores para descobrir a porcentagem de cada uma das três opções a serem lançadas. Exemplo no caso da Pedra:

```
contPedra/(contPedra + contPapel + contTesoura)

```

A opção que obtiver a maior porcentagem é a vencedora.

### **Conteúdo no Debug.Log:**

**Link para Download do Package:**

https://drive.google.com/open?id=1J84FKAazW3C7rWvlU0-3kSsE3jLaSV1r

**Aluna: Larissa Maria Bitencourt Cavalieri - 558573**