├── .gitignore
├── README.md
├── package-lock.json
├── package.json
├── public
├── favicon.ico
├── index.html
├── logo192.png
├── logo512.png
├── manifest.json
└── robots.txt
└── src
├── App.js
├── components
├── CompletedWords
│ └── index.js
├── Ended
│ └── index.js
├── Timer
│ └── index.js
└── Word
│ └── index.js
├── helpers
├── configs.js
├── datetime.js
├── strings.js
└── validate.js
├── index.css
├── index.js
└── resources
└── words.json
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://github.com/tterb/atomic-design-ui/blob/master/LICENSEs)
2 |
3 | # Typing Game
4 |
5 | [](https://www.youtube.com/watch?v=cRFJZ80jxX4).
6 |
7 | Projeto da ***Maratona JS 3***.
8 |
9 | O conteúdo desse repositório, faz parte do material didático do curso "Dev Sem Fronteiras",
10 | também conhecido como "Curso de React/NodeJS" do [Emerson Brôga Dev](https://emersonbroga.com/instagram).
11 |
12 |
13 | Feito com
usando
. Esse repositório e o video têm fins educativos.
14 |
15 |
16 |
17 |
18 | #### Se ainda não segue, veja minhas outras Redes Sociais
19 |
20 | [](https://emersonbroga.com/instagram)
21 | [](https://emersonbroga.com/youtube)
22 | [](https://emersonbroga.com/facebook)
23 | [](https://emersonbroga.com/twitter)
24 | [](https://emersonbroga.com/github)
25 |
26 |
27 | ## Você fez também?
28 |
29 | Se você fizer o projeto tambem, me manda o link que eu coloco aqui, ou então envia uma PR!
30 |
31 | - [@emersonbroga](https://github.com/emersonbroga/super-shoes)
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "typing",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@testing-library/jest-dom": "^5.16.2",
7 | "@testing-library/react": "^12.1.4",
8 | "@testing-library/user-event": "^13.5.0",
9 | "react": "^17.0.2",
10 | "react-dom": "^17.0.2",
11 | "react-scripts": "5.0.0",
12 | "web-vitals": "^2.1.4"
13 | },
14 | "scripts": {
15 | "start": "react-scripts start",
16 | "build": "react-scripts build",
17 | "test": "react-scripts test",
18 | "eject": "react-scripts eject"
19 | },
20 | "eslintConfig": {
21 | "extends": [
22 | "react-app",
23 | "react-app/jest"
24 | ]
25 | },
26 | "browserslist": {
27 | "production": [
28 | ">0.2%",
29 | "not dead",
30 | "not op_mini all"
31 | ],
32 | "development": [
33 | "last 1 chrome version",
34 | "last 1 firefox version",
35 | "last 1 safari version"
36 | ]
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emersonbroga/react-typing/741eda185d0ffb6433e51295570ac4cdd6b699a0/public/favicon.ico
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
17 |
18 |
27 | React App
28 |
29 |
30 |
31 |
32 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emersonbroga/react-typing/741eda185d0ffb6433e51295570ac4cdd6b699a0/public/logo192.png
--------------------------------------------------------------------------------
/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emersonbroga/react-typing/741eda185d0ffb6433e51295570ac4cdd6b699a0/public/logo512.png
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/src/App.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect, useRef } from 'react';
2 |
3 | import CompletedWords from './components/CompletedWords';
4 | import Ended from './components/Ended';
5 | import Timer from './components/Timer';
6 | import Word from './components/Word';
7 |
8 | import { getWord } from './helpers/strings';
9 | import { isValidKey } from './helpers/validate';
10 | import { MAX_TYPED_KEYS, WORD_ANIMATION_INTERVAL, TIMER_DURATION } from './helpers/configs';
11 |
12 | const App = () => {
13 | const [typedKeys, setTypedKeys] = useState(['']);
14 | const [validKeys, setValidKeys] = useState([]);
15 | const [completedWords, setCompletedWords] = useState([]);
16 | const [word, setWord] = useState('');
17 | const [timerRunning, setTimerRunning] = useState(false);
18 | const [ended, setEnded] = useState(false);
19 | const containerRef = useRef(null);
20 |
21 | useEffect(() => {
22 | setWord(getWord());
23 | if (containerRef) containerRef.current.focus();
24 | }, []);
25 |
26 | useEffect(() => {
27 | const wordFromValidKeys = validKeys.join('').toLowerCase();
28 |
29 | let timeout = null;
30 | if (word && word === wordFromValidKeys) {
31 | timeout = setTimeout(() => {
32 | let newWord = null;
33 | do {
34 | newWord = getWord();
35 | } while (completedWords.includes(newWord));
36 |
37 | setWord(newWord);
38 | setValidKeys([]);
39 | setCompletedWords((prev) => [...prev, word]);
40 | }, WORD_ANIMATION_INTERVAL);
41 | }
42 |
43 | return () => {
44 | if (timeout) clearTimeout(timeout);
45 | };
46 | }, [word, validKeys, completedWords]);
47 |
48 | const getTimerValue = (v) => {
49 | if (v > 0) return;
50 | setTimerRunning(false);
51 | setEnded(true);
52 | };
53 |
54 | const onRestart = (e) => {
55 | e.preventDefault();
56 | setTypedKeys(['']);
57 | setValidKeys([]);
58 | setCompletedWords([]);
59 | setTimerRunning(false);
60 | setEnded(false);
61 |
62 | setWord(getWord());
63 | if (containerRef) containerRef.current.focus();
64 | };
65 |
66 | const handleKeyDown = (e) => {
67 | e.preventDefault();
68 | if (ended) return;
69 |
70 | const { key } = e;
71 | if (!timerRunning) setTimerRunning(true);
72 | setTypedKeys((prev) => [...prev, key].slice(MAX_TYPED_KEYS * -1));
73 |
74 | if (isValidKey(key, word)) {
75 | setValidKeys((prev) => {
76 | const isValidLength = prev.length <= word.length;
77 | const isNextChar = isValidLength && word[prev.length] === key;
78 | return isNextChar ? [...prev, key] : prev;
79 | });
80 | }
81 | };
82 |
83 | return (
84 |
85 |
86 |
87 |
88 |
89 |
{typedKeys ? typedKeys.join(' ') : null}
90 |
91 |
92 |
93 |
94 |
95 | );
96 | };
97 |
98 | export default App;
99 |
--------------------------------------------------------------------------------
/src/components/CompletedWords/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const CompletedWords = ({ data }) => {
4 | if (!data) return null;
5 |
6 | return (
7 |
8 | {data.map((word) => (
9 | - {word}
10 | ))}
11 |
12 | );
13 | };
14 |
15 | export default CompletedWords;
16 |
--------------------------------------------------------------------------------
/src/components/Ended/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const Ended = ({ ended, duration, completedWords = [], onRestart = () => {} }) => {
4 | if (!ended) return null;
5 | return (
6 |
7 |
Time's up
8 |
9 | {completedWords.length} completed words in {duration} seconds.
10 |
11 |
12 |
13 | );
14 | };
15 |
16 | export default Ended;
17 |
--------------------------------------------------------------------------------
/src/components/Timer/index.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from 'react';
2 |
3 | import { secondsToTime } from '../../helpers/datetime';
4 |
5 | const Timer = ({ duration, isRunning, getValue = (v) => v }) => {
6 | const [startDate, setStartDate] = useState(null);
7 | const [currentDate, setCurrentDate] = useState(null);
8 | const [time, setTime] = useState(null);
9 |
10 | useEffect(() => {
11 | let interval = null;
12 |
13 | if (isRunning) {
14 | setStartDate(new Date());
15 | interval = setInterval(() => {
16 | setCurrentDate(new Date());
17 | }, 1000);
18 | } else {
19 | setStartDate(null);
20 | setCurrentDate(null);
21 | if (interval) clearInterval(interval);
22 | }
23 |
24 | return () => {
25 | if (interval) clearInterval(interval);
26 | };
27 | }, [isRunning]);
28 |
29 | useEffect(() => {
30 | if (!startDate || !currentDate) return;
31 |
32 | const currentTime = currentDate.getTime();
33 | const startTime = startDate.getTime();
34 | const time = Number.parseInt((currentTime - startTime) / 1000, 10);
35 | getValue(duration - time);
36 | setTime(time);
37 | }, [startDate, currentDate, duration, getValue]);
38 |
39 | if (!startDate || !currentDate) return {secondsToTime(duration)}
;
40 |
41 | return {secondsToTime(duration - time)}
;
42 | };
43 |
44 | export default Timer;
45 |
--------------------------------------------------------------------------------
/src/components/Word/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const Word = ({ word, validKeys }) => {
4 | if (!word) return null;
5 | const joinedKeys = validKeys.join('');
6 | const matched = word.slice(0, joinedKeys.length);
7 | const remainder = word.slice(joinedKeys.length);
8 |
9 | const matchedClass = joinedKeys === word ? 'matched completed' : 'matched';
10 |
11 | return (
12 | <>
13 | {matched}
14 | {remainder}
15 | >
16 | );
17 | };
18 |
19 | export default Word;
20 |
--------------------------------------------------------------------------------
/src/helpers/configs.js:
--------------------------------------------------------------------------------
1 | export const MAX_TYPED_KEYS = 30;
2 | export const WORD_ANIMATION_INTERVAL = 200;
3 | export const TIMER_DURATION = 60;
4 |
--------------------------------------------------------------------------------
/src/helpers/datetime.js:
--------------------------------------------------------------------------------
1 | export const secondsToTime = (total) => {
2 | const hours = Math.floor(total / 3600);
3 | const minutes = Math.floor((total % 3600) / 60);
4 | const seconds = Math.round(total % 60);
5 |
6 | const data = hours ? [hours, minutes, seconds] : [minutes, seconds];
7 |
8 | return data.map((v) => `0${v}`.slice(-2)).join(':');
9 | };
10 |
--------------------------------------------------------------------------------
/src/helpers/strings.js:
--------------------------------------------------------------------------------
1 | import wordList from '../resources/words.json';
2 |
3 | export const getWord = () => {
4 | const index = Math.floor(Math.random() * wordList.length);
5 | const word = wordList[index];
6 | return word.toLowerCase();
7 | };
8 |
--------------------------------------------------------------------------------
/src/helpers/validate.js:
--------------------------------------------------------------------------------
1 | export const isValidKey = (key, word) => {
2 | if (!word) return false;
3 | const result = word.split('').includes(key);
4 | return result;
5 | };
6 |
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css2?family=Rubik:wght@600&display=swap');
2 |
3 | * {
4 | margin: 0;
5 | padding: 0;
6 | box-sizing: border-box;
7 | }
8 |
9 | body {
10 | width: 100%;
11 | min-height: 100vh;
12 | color: #e1e1e1;
13 | background-color: #1e1e1e;
14 | display: flex;
15 | justify-content: center;
16 | align-items: center;
17 | font-family: 'Rubik', sans-serif;
18 | }
19 | .container {
20 | width: 100vw;
21 | height: 100vh;
22 | text-align: center;
23 | display: flex;
24 | flex-direction: column;
25 | justify-content: center;
26 | align-items: center;
27 | overflow: hidden;
28 | }
29 | .container:focus {
30 | outline: none;
31 | }
32 |
33 | .container .valid-keys {
34 | font-size: 10rem;
35 | font-weight: bold;
36 | min-width: 600px;
37 | border-bottom: solid 2px #fff;
38 | }
39 | .container .valid-keys .matched {
40 | background-color: #fdf8c5;
41 | color: #282c34;
42 | }
43 |
44 | .container .valid-keys .matched.completed {
45 | position: relative;
46 | top: 0;
47 | left: 0;
48 | opacity: 1;
49 | animation: moveDown 200ms ease-in;
50 | }
51 |
52 | .container .valid-keys .remainder {
53 | opacity: 0.5;
54 | }
55 |
56 | .container .completed-words {
57 | width: max-content;
58 | height: 100vh;
59 | overflow-y: scroll;
60 | position: fixed;
61 | top: 0;
62 | right: 0;
63 | text-align: left;
64 | padding: 20px 40px 20px 80px;
65 | font-size: 1.8rem;
66 | line-height: 2.5rem;
67 | opacity: 0.5;
68 | display: flex;
69 | }
70 |
71 | .container .completed-words ol {
72 | flex-grow: 1;
73 | align-self: flex-end;
74 | }
75 |
76 | .container .typed-keys {
77 | margin-top: 20px;
78 | font-size: 1.3rem;
79 | width: 600px;
80 | overflow: hidden;
81 | }
82 |
83 | .container .timer {
84 | font-size: 2.3rem;
85 | color: #fdf8c5;
86 | }
87 |
88 | .container .ended {
89 | width: 600px;
90 | padding: 60px;
91 | margin: 20px 0;
92 | border: dashed 3px #fdf8c5;
93 | position: absolute;
94 | background-color: black;
95 | }
96 | .container .ended h2 {
97 | color: #fdf8c5;
98 | font-size: 3rem;
99 | }
100 | .container .ended p {
101 | font-size: 1.5rem;
102 | }
103 |
104 | .container .ended button {
105 | background-color: #5d5d5e;
106 | color: #e1e1e1;
107 | border: none;
108 | margin-top: 10px;
109 | padding: 20px 60px;
110 | cursor: pointer;
111 | }
112 |
113 | @keyframes moveDown {
114 | 0% {
115 | top: 0;
116 | opacity: 1;
117 | }
118 | 20% {
119 | top: -3rem;
120 | background-color: #26947c;
121 | }
122 |
123 | 100% {
124 | top: 22rem;
125 | opacity: 0;
126 | }
127 | }
128 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 |
6 | ReactDOM.render(
7 |
8 |
9 | ,
10 | document.getElementById('root'),
11 | );
12 |
--------------------------------------------------------------------------------
/src/resources/words.json:
--------------------------------------------------------------------------------
1 | [
2 | "abaixo",
3 | "abastecido",
4 | "aberto",
5 | "abertos",
6 | "abreviada",
7 | "abril",
8 | "abrigo",
9 | "abrigos",
10 | "acabaram",
11 | "acabou",
12 | "acesso",
13 | "acho",
14 | "acidente",
15 | "acima",
16 | "acionado",
17 | "acontecer",
18 | "acordei",
19 | "acordo",
20 | "acrobacias",
21 | "adeus",
22 | "adoramos",
23 | "adquiridos",
24 | "adultos",
25 | "advertidos",
26 | "afazeres",
27 | "afetados",
28 | "afirma",
29 | "afirmou",
30 | "agora",
31 | "agosto",
32 | "agudo",
33 | "ainda",
34 | "ajuda",
35 | "ajudar",
36 | "ajustado",
37 | "alasca",
38 | "alega",
39 | "alegria",
40 | "alerta",
41 | "alerting",
42 | "alexandre",
43 | "algo",
44 | "algum",
45 | "alguma",
46 | "algumas",
47 | "alguns",
48 | "alimenta",
49 | "alimentar",
50 | "alimentava",
51 | "alimento",
52 | "alojamento",
53 | "alta",
54 | "alterou",
55 | "alugado",
56 | "alugou",
57 | "alves",
58 | "alvo",
59 | "alvos",
60 | "amarela",
61 | "ambas",
62 | "ambientais",
63 | "ambiente",
64 | "amigos",
65 | "amostra",
66 | "amostras",
67 | "anajatuba",
68 | "analisando",
69 | "analisar",
70 | "anda",
71 | "animais",
72 | "animal",
73 | "ano",
74 | "anos",
75 | "ansiedade",
76 | "ansiosa",
77 | "anterior",
78 | "antes",
79 | "antoninho",
80 | "anunciar",
81 | "anunciou",
82 | "aos",
83 | "aparece",
84 | "aparecer",
85 | "apareceu",
86 | "apelidada",
87 | "apenas",
88 | "apesar",
89 | "aplaudiu",
90 | "aplicadas",
91 | "apoio",
92 | "aponta",
93 | "apontou",
94 | "aprendendo",
95 | "aprender",
96 | "aprendeu",
97 | "apresentam",
98 | "aprimora",
99 | "aprimoram",
100 | "aqueles",
101 | "aqui",
102 | "aquinho",
103 | "arara",
104 | "araras",
105 | "arma",
106 | "arquivo",
107 | "artes",
108 | "artificial",
109 | "artigo",
110 | "artigos",
111 | "artista",
112 | "asas",
113 | "asseverou",
114 | "assim",
115 | "assinarem",
116 | "assinatura",
117 | "assinou",
118 | "assumir",
119 | "assumiu",
120 | "assustou",
121 | "atestado",
122 | "atividade",
123 | "atividades",
124 | "atos",
125 | "atravessa",
126 | "atributos",
127 | "atual",
128 | "atualmente",
129 | "augusto",
130 | "aula",
131 | "aumenta",
132 | "avaliado",
133 | "avaliou",
134 | "azuis",
135 | "azul",
136 | "bairro",
137 | "bairros",
138 | "baixas",
139 | "balde",
140 | "baleeiros",
141 | "baleia",
142 | "baleias",
143 | "bandeira",
144 | "bandeiras",
145 | "banheiro",
146 | "banho",
147 | "bar",
148 | "barco",
149 | "barcos",
150 | "barraca",
151 | "barracas",
152 | "bay",
153 | "biologia",
154 | "boa",
155 | "boas",
156 | "bolha",
157 | "bolhas",
158 | "bom",
159 | "borda",
160 | "borrifam",
161 | "brasil",
162 | "brasileira",
163 | "brasileiro",
164 | "brincando",
165 | "bruno",
166 | "brunopel",
167 | "buritizais",
168 | "busca",
169 | "buscam",
170 | "buscar",
171 | "cabo",
172 | "cachoeiras",
173 | "cachorro",
174 | "cada",
175 | "cair",
176 | "caiu",
177 | "calcula",
178 | "calma",
179 | "calmaria",
180 | "calmos",
181 | "caminhada",
182 | "caminho",
183 | "campanha",
184 | "campinas",
185 | "camping",
186 | "campo",
187 | "campus",
188 | "candidato",
189 | "candidatos",
190 | "cansados",
191 | "canta",
192 | "cantar",
193 | "cantora",
194 | "cantos",
195 | "capacidade",
196 | "capital",
197 | "caribou",
198 | "carlos",
199 | "carnival",
200 | "carreiras",
201 | "carro",
202 | "carros",
203 | "casa",
204 | "casal",
205 | "caso",
206 | "casos",
207 | "caudas",
208 | "causa",
209 | "cavalcanti",
210 | "centenas",
211 | "central",
212 | "centro",
213 | "cerca",
214 | "cercada",
215 | "cerebrais",
216 | "chama",
217 | "chamado",
218 | "chamados",
219 | "chamaram",
220 | "chance",
221 | "chega",
222 | "chegam",
223 | "chegar",
224 | "chegou",
225 | "cheia",
226 | "chorava",
227 | "cidade",
228 | "cima",
229 | "cinco",
230 | "cirurgia",
231 | "cita",
232 | "civil",
233 | "claro",
234 | "clima",
235 | "cobertas",
236 | "coberto",
237 | "cobertos",
238 | "cocos",
239 | "cognitivas",
240 | "coincidam",
241 | "coisas",
242 | "colados",
243 | "colhendo",
244 | "colocam",
245 | "colocar",
246 | "colocou",
247 | "coluna",
248 | "com",
249 | "comendo",
250 | "comercial",
251 | "comida",
252 | "como",
253 | "comparou",
254 | "compra",
255 | "comprou",
256 | "comprovado",
257 | "comprovar",
258 | "comprovem",
259 | "computador",
260 | "comum",
261 | "comunicam",
262 | "comunidade",
263 | "comvest",
264 | "concedida",
265 | "concentrar",
266 | "conde",
267 | "conduzido",
268 | "conduzindo",
269 | "conforme",
270 | "congresso",
271 | "conhecida",
272 | "conquistas",
273 | "consegue",
274 | "conseguem",
275 | "conseguiu",
276 | "conselho",
277 | "consiste",
278 | "consta",
279 | "conta",
280 | "contas",
281 | "continua",
282 | "continuar",
283 | "contou",
284 | "contra",
285 | "contratado",
286 | "contrato",
287 | "contratos",
288 | "contratou",
289 | "controlar",
290 | "controle",
291 | "conversa",
292 | "conversas",
293 | "conviver",
294 | "convocados",
295 | "cor",
296 | "corda",
297 | "cortar",
298 | "cortou",
299 | "cosme",
300 | "costa",
301 | "costumam",
302 | "covid",
303 | "cozinham",
304 | "crescer",
305 | "criada",
306 | "criador",
307 | "criar",
308 | "criatura",
309 | "criaturas",
310 | "crise",
311 | "cronograma",
312 | "cruzeiro",
313 | "cruzeiros",
314 | "cuidado",
315 | "cuidados",
316 | "cujos",
317 | "cultural",
318 | "cursos",
319 | "custos",
320 | "dados",
321 | "damos",
322 | "dan",
323 | "das",
324 | "data",
325 | "datas",
326 | "decidiu",
327 | "declarou",
328 | "dedicar",
329 | "definido",
330 | "definir",
331 | "definiu",
332 | "dei",
333 | "deixa",
334 | "deixando",
335 | "deixar",
336 | "deixassem",
337 | "deixou",
338 | "dela",
339 | "dele",
340 | "delegacia",
341 | "deles",
342 | "delivery",
343 | "demais",
344 | "democratas",
345 | "demonstrar",
346 | "dentro",
347 | "denunciou",
348 | "depende",
349 | "dependem",
350 | "dependeu",
351 | "dependura",
352 | "depois",
353 | "deram",
354 | "descanso",
355 | "descartou",
356 | "descobriu",
357 | "descrita",
358 | "desde",
359 | "desejo",
360 | "desloca-se",
361 | "despesas",
362 | "dessas",
363 | "desses",
364 | "desta",
365 | "destaca",
366 | "destacou",
367 | "destaque",
368 | "deste",
369 | "destruir",
370 | "determinou",
371 | "deu",
372 | "deveria",
373 | "deveriam",
374 | "devido",
375 | "dez",
376 | "dezenas",
377 | "dia",
378 | "dias",
379 | "diferente",
380 | "dificultam",
381 | "digital",
382 | "diminui",
383 | "dinheiro",
384 | "diretor",
385 | "dirige",
386 | "dispersas",
387 | "disse",
388 | "distraia",
389 | "distribuir",
390 | "diversos",
391 | "divulgada",
392 | "divulgadas",
393 | "divulgou",
394 | "diz",
395 | "doador",
396 | "documento",
397 | "documentos",
398 | "dois",
399 | "dona",
400 | "dono",
401 | "donos",
402 | "doou",
403 | "dos",
404 | "duas",
405 | "durante",
406 | "economia",
407 | "ela",
408 | "elas",
409 | "ele",
410 | "eleitorais",
411 | "eleitoral",
412 | "elementos",
413 | "eles",
414 | "embalagens",
415 | "embalar",
416 | "emergiu",
417 | "empregar",
418 | "empregos",
419 | "empresa",
420 | "empresas",
421 | "encaramos",
422 | "encher",
423 | "encontrar",
424 | "energia",
425 | "enfiados",
426 | "enfrentar",
427 | "enorme",
428 | "enormes",
429 | "enquanto",
430 | "ensino",
431 | "entrada",
432 | "entrar",
433 | "entraram",
434 | "entre",
435 | "entrega",
436 | "entregou",
437 | "entregues",
438 | "entrou",
439 | "enviar",
440 | "envie",
441 | "envolve",
442 | "envolvem",
443 | "eptv",
444 | "equilibrar",
445 | "equipes",
446 | "era",
447 | "eram",
448 | "escola",
449 | "escolar",
450 | "escolas",
451 | "escolha",
452 | "escrevi",
453 | "escutar",
454 | "esferas",
455 | "espera",
456 | "espera-se",
457 | "esperando",
458 | "esportivos",
459 | "esposo",
460 | "esquinas",
461 | "esse",
462 | "estado",
463 | "estados",
464 | "estadual",
465 | "estalidos",
466 | "estamos",
467 | "estar",
468 | "estava",
469 | "estavam",
470 | "este",
471 | "esteja",
472 | "estende",
473 | "estradas",
474 | "estranham",
475 | "estresse",
476 | "estruturas",
477 | "estudantes",
478 | "estudar",
479 | "estudo",
480 | "estudos",
481 | "esvaziou",
482 | "eua",
483 | "evento",
484 | "evita",
485 | "evitar",
486 | "ex-mulher",
487 | "exame",
488 | "exata",
489 | "exceto",
490 | "exclusivo",
491 | "executive",
492 | "exemplo",
493 | "exibem",
494 | "existia",
495 | "expandir",
496 | "explica",
497 | "explicou",
498 | "extensas",
499 | "facilitar",
500 | "faixa",
501 | "falavam",
502 | "falso",
503 | "falta",
504 | "faltaram",
505 | "fase",
506 | "fato",
507 | "favor",
508 | "faz",
509 | "fazem",
510 | "fazendo",
511 | "fazer",
512 | "fechada",
513 | "fechados",
514 | "fechamento",
515 | "fechando",
516 | "fechar",
517 | "fecharam",
518 | "federais",
519 | "federal",
520 | "feita",
521 | "feitas",
522 | "feito",
523 | "fica",
524 | "ficam",
525 | "ficar",
526 | "ficaram",
527 | "ficavam",
528 | "ficou",
529 | "filha",
530 | "filho",
531 | "filhotes",
532 | "fim",
533 | "final",
534 | "fiscais",
535 | "fizeram",
536 | "floresta",
537 | "florestas",
538 | "flutuantes",
539 | "foca-comum",
540 | "focas",
541 | "foco",
542 | "foi",
543 | "fonte",
544 | "for",
545 | "fora",
546 | "foram",
547 | "forem",
548 | "forma",
549 | "formado",
550 | "formando",
551 | "formato",
552 | "fornecedor",
553 | "fornecer",
554 | "fornecida",
555 | "forte",
556 | "fortemente",
557 | "fotografar",
558 | "fracassou",
559 | "francisco",
560 | "frandino",
561 | "freitas",
562 | "frente",
563 | "fronteira",
564 | "fronteiras",
565 | "frota",
566 | "frutas",
567 | "fugia",
568 | "fugindo",
569 | "funcionam",
570 | "futuro",
571 | "gabriele",
572 | "gadu",
573 | "ganhou",
574 | "gastos",
575 | "gato",
576 | "geladas",
577 | "geleiras",
578 | "gente",
579 | "georgetown",
580 | "geradas",
581 | "geral",
582 | "gerentes",
583 | "gestor",
584 | "getty",
585 | "gigantesca",
586 | "glacier",
587 | "gorjetas",
588 | "governo",
589 | "grande",
590 | "grandes",
591 | "gritos",
592 | "grupo",
593 | "grupos",
594 | "habitadas",
595 | "habitat",
596 | "harmonia",
597 | "hart",
598 | "haviam",
599 | "heidi",
600 | "helder",
601 | "hidrofone",
602 | "hidrofones",
603 | "holland",
604 | "homem",
605 | "homenagem",
606 | "hora",
607 | "horas",
608 | "houve",
609 | "human",
610 | "humana",
611 | "humano",
612 | "idade",
613 | "idades",
614 | "igarassu",
615 | "imaginei",
616 | "imigrantes",
617 | "impacto",
618 | "impedidos",
619 | "impedir",
620 | "importante",
621 | "imposta",
622 | "incinerar",
623 | "incluindo",
624 | "indevido",
625 | "indica",
626 | "informados",
627 | "informou",
628 | "ingressos",
629 | "inhibition",
630 | "inicial",
631 | "iniciativa",
632 | "initial",
633 | "insetos",
634 | "inspirado",
635 | "instituto",
636 | "inteiras",
637 | "interior",
638 | "internet",
639 | "isso",
640 | "itens",
641 | "jade",
642 | "jairo",
643 | "janeiro",
644 | "jardim",
645 | "jen",
646 | "jesus",
647 | "joe",
648 | "jogar",
649 | "jogos",
650 | "johnson",
651 | "jovem",
652 | "jubartes",
653 | "juiz",
654 | "juneau",
655 | "junto",
656 | "justa",
657 | "karla",
658 | "kelly",
659 | "kurth",
660 | "lacerda",
661 | "lado",
662 | "lados",
663 | "lamentou",
664 | "lara",
665 | "largou",
666 | "latas",
667 | "laura",
668 | "lauro",
669 | "lavando",
670 | "legais",
671 | "legal",
672 | "lei",
673 | "levados",
674 | "levando",
675 | "levar",
676 | "lhe",
677 | "liberado",
678 | "lidar",
679 | "liga",
680 | "ligado",
681 | "limitariam",
682 | "linguagem",
683 | "linhas",
684 | "litros",
685 | "locais",
686 | "loja",
687 | "lojas",
688 | "longa",
689 | "longo",
690 | "lontras",
691 | "lugar",
692 | "luiz",
693 | "luxo",
694 | "macho",
695 | "madeiras",
696 | "magistrado",
697 | "maio",
698 | "maior",
699 | "maiores",
700 | "mais",
701 | "majestosa",
702 | "malharia",
703 | "manda",
704 | "mandioca",
705 | "manter",
706 | "mantinham",
707 | "marcada",
708 | "marcar",
709 | "margem",
710 | "margens",
711 | "maria",
712 | "marido",
713 | "marinha",
714 | "marinho",
715 | "martinson",
716 | "mas",
717 | "massa",
718 | "matas",
719 | "materiais",
720 | "maycoth",
721 | "mede",
722 | "medida",
723 | "medir",
724 | "meio",
725 | "melhor",
726 | "melhoram",
727 | "melhorar",
728 | "menina",
729 | "menores",
730 | "menos",
731 | "mentais",
732 | "mental",
733 | "mercado",
734 | "merece",
735 | "mesa",
736 | "meses",
737 | "mesma",
738 | "mesmas",
739 | "mesmo",
740 | "metros",
741 | "meu",
742 | "michael",
743 | "michele",
744 | "michelle",
745 | "migram",
746 | "mil",
747 | "milhares",
748 | "militar",
749 | "minha",
750 | "minutos",
751 | "mirante",
752 | "mobilizar",
753 | "momento",
754 | "montado",
755 | "monte",
756 | "mora",
757 | "moradores",
758 | "morando",
759 | "moreira",
760 | "mostrou",
761 | "moto",
762 | "motora",
763 | "motores",
764 | "mudar",
765 | "mudou",
766 | "muita",
767 | "muitas",
768 | "muito",
769 | "muitos",
770 | "mulher",
771 | "mundo",
772 | "municipal",
773 | "muro",
774 | "nacional",
775 | "nadavam",
776 | "nas",
777 | "nathan",
778 | "navegam",
779 | "navio",
780 | "navios",
781 | "negar",
782 | "negou",
783 | "negro",
784 | "nem",
785 | "nenhuma",
786 | "nesses",
787 | "neste",
788 | "neto",
789 | "ninho",
790 | "ninhos",
791 | "nitai",
792 | "noite",
793 | "nome",
794 | "normandia",
795 | "norte",
796 | "norwegian",
797 | "nos",
798 | "nossa",
799 | "nossas",
800 | "nosso",
801 | "nossos",
802 | "notas",
803 | "notou",
804 | "nova",
805 | "novas",
806 | "nove",
807 | "novembro",
808 | "novo",
809 | "num",
810 | "numa",
811 | "nunca",
812 | "objetivo",
813 | "observa",
814 | "observados",
815 | "ocorre",
816 | "ocorreu",
817 | "ocos",
818 | "ocultos",
819 | "oficial",
820 | "oito",
821 | "oliveira",
822 | "onde",
823 | "opera",
824 | "operar",
825 | "orienting",
826 | "outra",
827 | "outras",
828 | "outro",
829 | "outros",
830 | "ouvido",
831 | "ouvindo",
832 | "ouvir",
833 | "ovos",
834 | "pacaraima",
835 | "pacientes",
836 | "pagamento",
837 | "pagamentos",
838 | "pagar",
839 | "pagos",
840 | "pagou",
841 | "palmeiras",
842 | "pandemia",
843 | "para",
844 | "parada",
845 | "parar",
846 | "parceiros",
847 | "parecem",
848 | "parede",
849 | "paredes",
850 | "pares",
851 | "parou",
852 | "parque",
853 | "parques",
854 | "parte",
855 | "partes",
856 | "participou",
857 | "partido",
858 | "partir",
859 | "passado",
860 | "passam",
861 | "passaporte",
862 | "passar",
863 | "passeio",
864 | "passou",
865 | "pausa",
866 | "pedestre",
867 | "pedido",
868 | "pedindo",
869 | "pediram",
870 | "pela",
871 | "pelas",
872 | "pelo",
873 | "pelos",
874 | "penhascos",
875 | "pensaram",
876 | "pequena",
877 | "pequeno",
878 | "pequenos",
879 | "percorreu",
880 | "perdeu",
881 | "pereira",
882 | "perguntas",
883 | "perguntei",
884 | "permanecem",
885 | "permaneceu",
886 | "permitam",
887 | "permite",
888 | "permitir",
889 | "permitiu",
890 | "perna",
891 | "perri",
892 | "perto",
893 | "perturbam",
894 | "pesa",
895 | "pesquisa",
896 | "pessoas",
897 | "pico",
898 | "picos",
899 | "pilhas",
900 | "placa",
901 | "planeja",
902 | "planejando",
903 | "plugin",
904 | "pode",
905 | "podem",
906 | "poder",
907 | "poderia",
908 | "poderiam",
909 | "podia",
910 | "podiam",
911 | "pollyana",
912 | "ponta",
913 | "ponte",
914 | "pontes",
915 | "pontuada",
916 | "por",
917 | "porque",
918 | "portas",
919 | "porte",
920 | "porto",
921 | "portos",
922 | "portuguesa",
923 | "positiva",
924 | "possuem",
925 | "possui",
926 | "posto",
927 | "postos",
928 | "potencial",
929 | "poucas",
930 | "pouco",
931 | "poucos",
932 | "pousa",
933 | "povoados",
934 | "pra",
935 | "praticamos",
936 | "prazo",
937 | "precisa",
938 | "precisam",
939 | "precisamos",
940 | "precisos",
941 | "prefeito",
942 | "prefeitura",
943 | "prepara",
944 | "presidente",
945 | "prestar",
946 | "prestarem",
947 | "primeira",
948 | "primeiro",
949 | "primeiros",
950 | "principais",
951 | "principal",
952 | "problemas",
953 | "processar",
954 | "processo",
955 | "processos",
956 | "procurada",
957 | "procurador",
958 | "produzir",
959 | "professor",
960 | "professora",
961 | "profundas",
962 | "promete",
963 | "promotor",
964 | "propostas",
965 | "protege",
966 | "proteger",
967 | "prova",
968 | "provas",
969 | "provocada",
970 | "provocaram",
971 | "publicado",
972 | "pureza",
973 | "quadro",
974 | "quais",
975 | "qual",
976 | "qualquer",
977 | "quando",
978 | "quantas",
979 | "quantidade",
980 | "quanto",
981 | "quantos",
982 | "quase",
983 | "quatro",
984 | "que",
985 | "queda",
986 | "querem",
987 | "quero",
988 | "quintal",
989 | "quis",
990 | "rara",
991 | "reais",
992 | "reajuste",
993 | "realizada",
994 | "realizadas",
995 | "realizado",
996 | "realizar",
997 | "realmente",
998 | "recebe",
999 | "receber",
1000 | "recebeu",
1001 | "recebidas",
1002 | "recebidos",
1003 | "receitas",
1004 | "recente",
1005 | "recibo",
1006 | "recolher",
1007 | "reconhece",
1008 | "recorde",
1009 | "recuperar",
1010 | "recurso",
1011 | "recursos",
1012 | "rede",
1013 | "redes",
1014 | "redor",
1015 | "reduzido",
1016 | "reeleito",
1017 | "regenerem",
1018 | "regional",
1019 | "registrado",
1020 | "registrou",
1021 | "regras",
1022 | "reis",
1023 | "relatam",
1024 | "relataram",
1025 | "relatava",
1026 | "relativa",
1027 | "relatos",
1028 | "repensarem",
1029 | "repente",
1030 | "repleta",
1031 | "representa",
1032 | "reserva",
1033 | "resolveu",
1034 | "responde",
1035 | "respondeu",
1036 | "resposta",
1037 | "resto",
1038 | "restou",
1039 | "resultados",
1040 | "retirada",
1041 | "retomada",
1042 | "retornar",
1043 | "retornarem",
1044 | "retorno",
1045 | "reunindo",
1046 | "revelar",
1047 | "revelava",
1048 | "revigorar",
1049 | "revista",
1050 | "rio",
1051 | "riscos",
1052 | "ritmo",
1053 | "rock",
1054 | "roda",
1055 | "rodovia",
1056 | "roraima",
1057 | "rosalina",
1058 | "rosilene",
1059 | "royal",
1060 | "rua",
1061 | "ruas",
1062 | "rugido",
1063 | "rural",
1064 | "sabe",
1065 | "sai",
1066 | "sair",
1067 | "saiu",
1068 | "salas",
1069 | "saltando",
1070 | "san",
1071 | "sangue",
1072 | "seattle",
1073 | "sede",
1074 | "seguinte",
1075 | "segundo",
1076 | "seguro",
1077 | "sei",
1078 | "seis",
1079 | "sejam",
1080 | "seletivo",
1081 | "sem",
1082 | "semana",
1083 | "semanas",
1084 | "sempre",
1085 | "senador",
1086 | "sendo",
1087 | "senso",
1088 | "senta",
1089 | "sentirem",
1090 | "sequer",
1091 | "ser",
1092 | "serenade",
1093 | "seria",
1094 | "seriedade",
1095 | "servir",
1096 | "setembro",
1097 | "seu",
1098 | "seus",
1099 | "show",
1100 | "sidney",
1101 | "sido",
1102 | "significa",
1103 | "silencioso",
1104 | "simulados",
1105 | "sindicato",
1106 | "sistema",
1107 | "slogan",
1108 | "soares",
1109 | "sobem",
1110 | "sobre",
1111 | "sobretudo",
1112 | "sobrinha",
1113 | "sociais",
1114 | "solicita",
1115 | "solicitar",
1116 | "som",
1117 | "somos",
1118 | "sonora",
1119 | "sonoro",
1120 | "sou",
1121 | "sousa",
1122 | "souvenires",
1123 | "sua",
1124 | "suas",
1125 | "suave",
1126 | "sucessos",
1127 | "sudeste",
1128 | "suficiente",
1129 | "sul",
1130 | "suntuosas",
1131 | "surgiram",
1132 | "suspeito",
1133 | "suspendeu",
1134 | "suspensa",
1135 | "suspensos",
1136 | "sustenta",
1137 | "sydnei",
1138 | "tais",
1139 | "tamanho",
1140 | "tamanhos",
1141 | "tanque",
1142 | "tanto",
1143 | "tantos",
1144 | "tarde",
1145 | "tarefa",
1146 | "taxa",
1147 | "telmo",
1148 | "tem",
1149 | "temos",
1150 | "tempo",
1151 | "temporada",
1152 | "tempos",
1153 | "tenha",
1154 | "tenhamos",
1155 | "tenho",
1156 | "tentando",
1157 | "tentar",
1158 | "ter",
1159 | "terminal",
1160 | "terra",
1161 | "teve",
1162 | "text",
1163 | "the",
1164 | "tinha",
1165 | "tinham",
1166 | "tintas",
1167 | "tio",
1168 | "tipo",
1169 | "tirando",
1170 | "tirar",
1171 | "tivemos",
1172 | "tiverem",
1173 | "toda",
1174 | "todas",
1175 | "todo",
1176 | "todos",
1177 | "toma",
1178 | "tomar",
1179 | "toneladas",
1180 | "tornaram",
1181 | "torno",
1182 | "tours",
1183 | "trabalha",
1184 | "trabalhava",
1185 | "trabalho",
1186 | "tranquilo",
1187 | "transforme",
1188 | "transporta",
1189 | "transporte",
1190 | "trave",
1191 | "traz",
1192 | "trazem",
1193 | "tribunal",
1194 | "triciclo",
1195 | "trilha",
1196 | "trinity",
1197 | "triste",
1198 | "tudo",
1199 | "turismo",
1200 | "turistas",
1201 | "tutelar",
1202 | "tutoriais",
1203 | "uma",
1204 | "umas",
1205 | "unicamp",
1206 | "unidos",
1207 | "usarem",
1208 | "usava",
1209 | "usinas",
1210 | "uso",
1211 | "utilizados",
1212 | "utilizando",
1213 | "vai",
1214 | "vale",
1215 | "valem",
1216 | "valor",
1217 | "valores",
1218 | "vamos",
1219 | "vandulti",
1220 | "varas",
1221 | "variavam",
1222 | "veja",
1223 | "velhos",
1224 | "velocidade",
1225 | "vem",
1226 | "venceu",
1227 | "vendas",
1228 | "vende",
1229 | "vendeu",
1230 | "vendidos",
1231 | "venezuela",
1232 | "ver",
1233 | "verde",
1234 | "vereador",
1235 | "vestibular",
1236 | "vez",
1237 | "vezes",
1238 | "via",
1239 | "viajar",
1240 | "viajassem",
1241 | "viam",
1242 | "vida",
1243 | "videogames",
1244 | "viram",
1245 | "visitam",
1246 | "visitantes",
1247 | "visitaram",
1248 | "visitava",
1249 | "vista",
1250 | "visto",
1251 | "vistos",
1252 | "visuais",
1253 | "vive",
1254 | "vivem",
1255 | "vivendo",
1256 | "vizinhos",
1257 | "voando",
1258 | "volta",
1259 | "voltaram",
1260 | "voltou",
1261 | "volume",
1262 | "voo",
1263 | "voos",
1264 | "zona"
1265 | ]
--------------------------------------------------------------------------------