├── .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 | [![MIT License](https://img.shields.io/apm/l/atomic-design-ui.svg?)](https://github.com/tterb/atomic-design-ui/blob/master/LICENSEs) 2 | 3 | # Typing Game 4 | 5 | [![!Typing Game](http://i3.ytimg.com/vi/cRFJZ80jxX4/maxresdefault.jpg)](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 React. Esse repositório e o video têm fins educativos. 14 |

15 | 16 | Emerson Broga Logo Pink 17 | 18 | #### Se ainda não segue, veja minhas outras Redes Sociais 19 | 20 | [![instagram.com/emersonbrogadev](https://github.com/emersonbroga/social-media-snippets/blob/master/static/instagram.png?raw=true)](https://emersonbroga.com/instagram) 21 | [![youtube.com/c/emersonbrogadev](https://github.com/emersonbroga/social-media-snippets/blob/master/static/youtube.png?raw=true)](https://emersonbroga.com/youtube) 22 | [![facebook.com/emersonbrogadev](https://github.com/emersonbroga/social-media-snippets/blob/master/static/facebook.png?raw=true)](https://emersonbroga.com/facebook) 23 | [![twitter.com/emersonbrogadev](https://github.com/emersonbroga/social-media-snippets/blob/master/static/twitter.png?raw=true)](https://emersonbroga.com/twitter) 24 | [![github.com/emersonbroga](https://github.com/emersonbroga/social-media-snippets/blob/master/static/github.png?raw=true)](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 |
  1. {word}
  2. 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 | ] --------------------------------------------------------------------------------