commit 718b4c49ff519c7d5df40dafcd1ecaaf367b0138 Author: zuma Date: Tue Jul 1 16:42:46 2025 +0200 First commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b7959a5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +debug +target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..de07f22 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,578 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "bitflags" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" + +[[package]] +name = "cfg-if" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" + +[[package]] +name = "convert_case" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb402b8d4c85569410425650ce3eddc7d698ed96d39a73f941b08fb63082f1e7" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "crossterm" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" +dependencies = [ + "bitflags", + "crossterm_winapi", + "derive_more", + "document-features", + "mio", + "parking_lot", + "rustix", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "document-features" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +dependencies = [ + "litrs", +] + +[[package]] +name = "errno" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", +] + +[[package]] +name = "include-lines" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be037b494f74d7bded0680228b3133bc268cbe50282f51c25fa46b890cfedb9" +dependencies = [ + "include-lines-proc", +] + +[[package]] +name = "include-lines-proc" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1ff2792810c5bb1b591ae8ac768bda8b0238a3b61cb546d062709f2a6a4f77" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "libc" +version = "0.2.174" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" + +[[package]] +name = "linux-raw-sys" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" + +[[package]] +name = "litrs" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" + +[[package]] +name = "lock_api" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "mio" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +dependencies = [ + "libc", + "log", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", +] + +[[package]] +name = "parking_lot" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom", +] + +[[package]] +name = "redox_syscall" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" +dependencies = [ + "bitflags", +] + +[[package]] +name = "rustix" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.59.0", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "signal-hook" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +dependencies = [ + "libc", +] + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tapote" +version = "0.1.0" +dependencies = [ + "crossterm", + "include-lines", + "rand", +] + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.2", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +dependencies = [ + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags", +] + +[[package]] +name = "zerocopy" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..8c2c29c --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "tapote" +version = "0.1.0" +edition = "2024" + +[dependencies] +crossterm = "0.29.0" +include-lines = "1.1.2" +rand = "0.9.1" diff --git a/README.md b/README.md new file mode 100644 index 0000000..c193a4d --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +![Gif d'utilisation de tapote](assets/tapote.gif) + +# Tapote + +Mon premier logiciel pour apprendre à coder en Rust. Il permet de tester ma rapidité au clavier ! +La base du code est largement inspirée de ce tutoriel [Hecto.rs](https://philippflenker.com/hecto/). + +# Instruction pour compiler +Afin de compiler le logiciel il vous faudra cargo, rustc et clippy sur votre système. Une fois installés vous pouvez compiler un executable avec : +```rust +cargo build +``` + +Et pour faire une version release il suffit d'ajouter le paramètre à la fin : +```rust +cargo build --release +``` diff --git a/assets/tapote.gif b/assets/tapote.gif new file mode 100644 index 0000000..2e76506 Binary files /dev/null and b/assets/tapote.gif differ diff --git a/data/words_english.txt b/data/words_english.txt new file mode 100644 index 0000000..dfac3fe --- /dev/null +++ b/data/words_english.txt @@ -0,0 +1,1000 @@ +the +be +and +a +of +to +in +i +you +it +have +to +that +for +do +he +with +on +this +n’t +we +that +not +but +they +say +at +what +his +from +go +or +by +get +she +my +can +as +know +if +me +your +all +who +about +their +will +so +would +make +just +up +think +time +there +see +her +as +out +one +come +people +take +year +him +them +some +want +how +when +which +now +like +other +could +our +into +here +then +than +look +way +more +these +no +thing +well +because +also +two +use +tell +good +first +man +day +find +give +more +new +one +us +any +those +very +her +need +back +there +should +even +only +many +really +work +life +why +right +down +on +try +let +something +too +call +woman +may +still +through +mean +after +never +no +world +in +feel +yeah +great +last +child +oh +over +ask +when +as +school +state +much +talk +out +keep +leave +put +like +help +big +where +same +all +own +while +start +three +high +every +another +become +most +between +happen +family +over +president +old +yes +house +show +again +student +so +seem +might +part +hear +its +place +problem +where +believe +country +always +week +point +hand +off +play +turn +few +group +such +against +run +guy +about +case +question +work +night +live +game +number +write +bring +without +money +lot +most +book +system +government +next +city +company +story +today +job +move +must +bad +friend +during +begin +love +each +hold +different +american +little +before +ever +word +fact +right +read +anything +nothing +sure +small +month +program +maybe +right +under +business +home +kind +stop +pay +study +since +issue +name +idea +room +percent +far +away +law +actually +large +though +provide +lose +power +kid +war +understand +head +mother +real +best +team +eye +long +long +side +water +young +wait +okay +both +yet +after +meet +service +area +important +person +hey +thank +much +someone +end +change +however +only +around +hour +everything +national +four +line +girl +around +watch +until +father +sit +create +information +car +learn +least +already +kill +minute +party +include +stand +together +back +follow +health +remember +often +reason +speak +ago +set +black +member +community +once +social +news +allow +win +body +lead +continue +whether +enough +spend +level +able +political +almost +boy +university +before +stay +add +later +change +five +probably +center +among +face +public +die +food +else +history +buy +result +morning +off +parent +office +course +send +research +walk +door +white +several +court +home +grow +better +open +moment +including +consider +both +such +little +within +second +late +street +free +better +everyone +policy +table +sorry +care +low +human +please +hope +TRUE +process +teacher +data +offer +death +whole +experience +plan +easy +education +build +expect +fall +himself +age +hard +sense +across +show +early +college +music +appear +mind +class +police +use +effect +season +tax +heart +son +art +possible +serve +break +although +end +market +even +air +force +require +foot +up +listen +agree +according +anyone +baby +wrong +love +cut +decide +republican +full +behind +pass +interest +sometimes +security +eat +report +control +rate +local +suggest +report +nation +sell +action +support +wife +decision +receive +value +base +pick +phone +thanks +event +drive +strong +reach +remain +explain +site +hit +pull +church +model +perhaps +relationship +six +fine +movie +field +raise +less +player +couple +million +themselves +record +especially +difference +light +development +federal +former +role +pretty +myself +view +price +effort +nice +quite +along +voice +finally +department +either +toward +leader +because +photo +wear +space +project +return +position +special +million +film +need +major +type +town +article +road +form +chance +drug +economic +situation +choose +practice +cause +happy +science +join +teach +early +develop +share +yourself +carry +clear +brother +matter +dead +image +star +cost +simply +post +society +picture +piece +paper +energy +personal +building +military +open +doctor +activity +exactly +american +media +miss +evidence +product +realize +save +arm +technology +catch +comment +look +term +color +cover +describe +guess +choice +source +mom +soon +director +international +rule +campaign +ground +election +face +uh +check +page +fight +itself +test +patient +produce +certain +whatever +half +video +support +throw +third +care +rest +recent +available +step +ready +opportunity +official +oil +call +organization +character +single +current +likely +county +future +dad +whose +less +shoot +industry +second +list +general +stuff +figure +attention +forget +risk +no +focus +short +fire +dog +red +hair +point +condition +wall +daughter +before +deal +author +truth +upon +husband +period +series +order +officer +close +land +note +computer +thought +economy +goal +bank +behavior +sound +deal +certainly +nearly +increase +act +north +well +blood +culture +medical +ok +everybody +top +difficult +close +language +window +response +population +lie +tree +park +worker +draw +plan +drop +push +earth +cause +per +private +tonight +race +than +letter +other +gun +simple +course +wonder +involve +hell +poor +each +answer +nature +administration +common +no +hard +message +song +enjoy +similar +congress +attack +past +hot +seek +amount +analysis +store +defense +bill +like +cell +away +performance +hospital +bed +board +protect +century +summer +material +individual +recently +example +represent +fill +state +place +animal +fail +factor +natural +sir +agency +usually +significant +help +ability +mile +statement +entire +democrat +floor +serious +career +dollar +vote +sex +compare +south +forward +subject +financial +identify +beautiful +decade +bit +reduce +sister +quality +quickly +act +press +worry +accept +enter +mention +sound +thus +plant +movement +scene +section +treatment +wish +benefit +interesting +west +candidate +approach +determine +resource +claim +answer +prove +sort +enough +size +somebody +knowledge +rather +hang +sport +tv +loss +argue +left +note +meeting +skill +card +feeling +despite +degree +crime +that +sign +occur +imagine +vote +near +king +box +present +figure +seven +foreign +laugh +disease +lady +beyond +discuss +finish +design +concern +ball +east +recognize +apply +prepare +network +huge +success +district +cup +name +physical +growth +rise +hi +standard +force +sign +fan +theory +staff +hurt +legal +september +set +outside +et +strategy +clearly +property +lay +final +authority +perfect +method +region +since +impact +indicate +safe +committee +supposed +dream +training +shit +central +option +eight +particularly +completely +opinion +main +ten +interview +exist +remove +dark +play +union +professor +pressure +purpose +stage +blue +herself +sun +pain +artist +employee +avoid +account +release +fund +environment +treat +specific +version +shot +hate +reality +visit +club +justice +river +brain +memory +rock +talk +camera +global +various +arrive +notice +bit +detail +challenge +argument +lot +nobody +weapon +best +station +island +absolutely +instead +discussion +instead +affect +design +little +anyway +respond +control +trouble +conversation +manage +close +date +public +army +top +post +charge +seat diff --git a/data/words_french.txt b/data/words_french.txt new file mode 100644 index 0000000..16d3dac --- /dev/null +++ b/data/words_french.txt @@ -0,0 +1,5000 @@ +un +à +en +le +et +être +de +avoir +que +ne +dans +ce +il +qui +pas +pour +sur +se +son +plus +pouvoir +par +je +avec +tout +faire +nous +mettre +autre +on +mais +leur +comme +ou +si +avant +y +dire +elle +devoir +donner +deux +même +prendre +où +aussi +celui +bien +cela +fois +vous +encore +vouloir +nouveau +aller +entre +premier +aucun +déjà +grand +mon +me +moins +quelque +lui +temps +très +savoir +falloir +voir +notre +sans +dont +raison +monde +non +monsieur +an +jour +trouver +demander +alors +après +venir +personne +rendre +part +dernier +lequel +pendant +passer +peu +depuis +suite +bon +comprendre +rester +point +ainsi +heure +année +toujours +tenir +porter +parler +seul +montrer +là +certain +fort +tu +continuer +pays +fin +penser +lieu +partie +quand +trois +contre +sous +côté +ensemble +chose +enfant +suivre +cause +place +seulement +moi +vie +politique +jusque +croire +homme +cas +connaître +commencer +compter +fait +tel +petit +question +donc +quel +général +entendre +beaucoup +chaque +droit +moment +travail +femme +attendre +remettre +jeune +permettre +occuper +gouvernement +eux +appeler +devenir +partir +décider +soit +ici +rien +plan +cours +nom +famille +effet +affaire +arriver +servir +mois +jamais +car +possible +tant +vers +besoin +revenir +sembler +moyen +groupe +problème +rapport +dès +peut-être +maintenant +pourquoi +meilleur +vue +trop +laisser +ordre +devant +recevoir +répondre +long +service +ministre +vivre +chez +te +rappeler +face +accepter +agir +simple +présenter +votre +important +présent +mieux +plusieurs +jouer +mot +reconnaître +poser +situation +offrir +près +force +national +projet +ni +choisir +toucher +train +aujourd'hui +comment +puis +gens +propre +grâce +idée +surtout +région +aimer +sens +selon +semaine +également +ci +retrouver +nombre +perdre +français +façon +quatre +compte +considérer +expliquer +ouvrir +gagner +exemple +lorsque +économique +mesure +histoire +ville +ensuite +guerre +loi +président +haut +sûr +refuser +plutôt +bureau +exister +quant +mort +mal +mauvais +réussir +marché +condition +lire +changer +oui +public +humain +international +cinq +système +travailler +souvent +vrai +représenter +madame +société +jeu +quoi +entreprise +coup +difficile +or +assurer +essayer +juste +étranger +social +million +manière +sortir +empêcher +terme +longtemps +reprendre +prix +intérêt +mener +information +courant +appartenir +liberté +assez +détail +chacun +concerner +maison +d'abord +risquer +niveau +rencontrer +ton +apprendre +créer +état +obtenir +œuvre +chercher +entrer +proposer +clair +programme +loin +ligne +apporter +libre +utiliser +atteindre +tenter +tête +enfin +différent +sorte +cependant +tard +importer +action +relation +sujet +livre +ajouter +ailleurs +vraiment +recherche +reste +début +présence +doute +produire +préparer +forme +décision +nombreux +dix +produit +américain +rôle +relever +peuple +second +minute +prochain +autant +écrire +position +développement +défendre +chef +particulier +effort +parmi +membre +tirer +économie +beau +plein +juger +éviter +ancien +personnel +titre +soir +parti +unique +souhaiter +afin +objet +malgré +période +engager +peine +parfois +lors +sérieux +aider +réaliser +terminer +base +espérer +main +voix +arrêter +retour +prêt +occasion +gros +regarder +plupart +deuxième +résultat +député +terre +valoir +dollar +intérieur +écouter +confiance +choix +prévoir +page +notamment +type +but +chance +grave +prise +européen +étude +matin +remplacer +avancer +six +nécessaire +activité +valeur +principe +entier +réponse +aide +marquer +élever +pourtant +commission +cesser +poursuivre +maintenir +principal +exprimer +ami +bas +époque +moitié +avenir +argent +imposer +mise +œil +eau +sauf +école +sécurité +milieu +presque +attention +cadre +lettre +mouvement +former +conduire +règle +poste +demande +futur +acte +disparaître +priver +constituer +centre +milliard +lier +obliger +accord +craindre +âge +déclarer +oublier +propos +passé +quitter +bout +population +troisième +responsable +route +tôt +lancer +toi +fonction +emploi +objectif +limite +journal +annoncer +lui-même +tour +voilà +volonté +envoyer +paraître +puisque +établir +changement +garder +partager +interdire +finir +placer +réalité +payer +esprit +domaine +diriger +sentir +nature +régime +charger +noter +parent +tomber +départ +mondial +court +disposer +parole +fond +public +entraîner +faux +genre +communauté +intéresser +c'est-à-dire +retenir +matière +sein +difficulté +parvenir +corps +appel +cœur +père +organisation +secteur +noir +événement +double +unité +nation +conseil +soutenir +paix +convaincre +partout +direction +manquer +actuel +opposer +nuit +journée +d'ailleurs +traiter +indiquer +signifier +technique +rapidement +autour +réduire +d'après +tuer +riche +préférer +rue +bref +violence +siècle +article +nommer +qualité +gauche +solution +voie +durer +canadien +erreur +livrer +capable +simplement +souvenir +conséquence +large +auprès +succès +élément +local +contraire +inviter +extérieur +pied +mission +été +fille +répéter +texte +débat +chambre +création +prouver +acheter +profiter +production +ignorer +directeur +santé +justice +précis +fixer +mère +croissance +risque +souffrir +estimer +endroit +comité +impossible +arme +véritable +amener +viser +retirer +preuve +image +date +travers +contrôle +total +conserver +réel +campagne +naître +énorme +tourner +participer +vieux +accorder +respecter +passage +essentiel +adopter +rapide +environ +expérience +admettre +découvrir +subir +assister +sénateur +dépasser +affirmer +couvrir +financier +processus +militaire +frais +soumettre +industrie +apparaître +responsabilité +réserver +porte +victime +territoire +pauvre +taux +posséder +matériel +cent +constater +prononcer +organiser +blanc +origine +vendre +vite +signe +dangereux +déplacer +importance +suffire +espoir +davantage +langue +énergie +réseau +mourir +faible +employer +saisir +spécial +accompagner +actuellement +union +supposer +possibilité +ceci +exiger +intervenir +fils +d'accord +fournir +différence +protéger +abandonner +discuter +battre +pire +adresser +préciser +intervention +avis +demeurer +chiffre +consacrer +attirer +divers +appliquer +frapper +peur +parlement +remplir +forcer +lutte +naturel +air +auteur +fermer +heureux +crise +numéro +résoudre +publier +opération +toutefois +pousser +quelqu'un +discours +banque +instant +reposer +opinion +classe +particulièrement +commun +compagnie +intention +autorité +anglais +échange +feu +satisfaire +observer +capacité +désigner +dépendre +neuf +construire +scène +durant +secret +plaisir +message +proposition +combien +dossier +absence +cher +plaire +derrière +connaissance +nul +entrée +signer +révéler +couper +salle +immédiatement +équipe +situer +souligner +source +pièce +crime +précédent +installer +facile +augmenter +respect +impression +octobre +médecin +fédéral +police +coût +réunir +contrat +normal +attitude +série +formation +lever +proche +direct +faute +figurer +pratique +finalement +allemand +pression +imaginer +champ +film +charge +envisager +accès +ressource +monter +promettre +motion +concentrer +commune +composer +chemin +zone +province +élection +exactement +conflit +hors +enquête +terrain +mars +tellement +usage +demain +hier +confier +remarquer +égard +supérieur +espace +condamner +capital +lien +voiture +discussion +huit +justifier +agent +sentiment +tâche +directement +limiter +raconter +décembre +développer +honorable +contact +conclure +euh +ouvert +investissement +insister +fruit +avantage +historique +probablement +voyage +sept +marche +garde +commercial +critique +ministère +baisser +vérité +culture +cacher +prêter +définir +somme +exposer +progrès +secrétaire +mer +rapporter +appuyer +client +rentrer +mémoire +caractère +détruire +civil +liste +juin +danger +complexe +commerce +transport +nécessité +institution +défense +janvier +échapper +négociation +attente +mai +septembre +environnement +séparer +réaction +franc +positif +scientifique +papier +expression +disposition +indépendant +carte +association +régler +modèle +protection +étudier +déterminer +budget +fonder +structure +commander +exercer +amour +manifester +menacer +conseiller +complet +opposition +maladie +outre +tandis +construction +bande +signal +réunion +réforme +rejeter +novembre +fonds +coûter +voisin +presse +rouge +majorité +autoriser +effectuer +reprise +central +procédure +faveur +éducation +officiel +document +bord +retourner +professionnel +aspect +animal +utile +inscrire +concurrence +déclaration +auparavant +mille +absolument +prison +armée +rejoindre +complètement +confirmer +salaire +lecture +revenu +attaquer +table +remonter +certes +contribuer +autrement +ferme +désormais +lourd +susciter +avril +dur +application +lutter +profit +contenir +république +déposer +communication +jugement +manque +modifier +traverser +transformer +engagement +frère +mardi +échec +vote +renvoyer +regretter +espèce +recommandation +consister +rencontre +surprendre +circonstance +témoin +améliorer +administration +réagir +lumière +vert +apprécier +combat +sensible +étudiant +réfléchir +malade +portée +élève +contrôler +merci +vitesse +visite +assemblée +émission +arrivée +puissance +certainement +contenter +perte +libéral +citoyen +citer +partenaire +camp +établissement +vendredi +avance +destiner +influence +nord +lundi +maître +interroger +conférence +causer +vente +ramener +soldat +collègue +provoquer +concevoir +poids +voici +acquérir +moindre +convenir +procéder +examiner +soin +mesurer +traitement +jeudi +impliquer +logique +individu +donnée +demi +combattre +violent +science +suivant +mériter +emprunter +conscience +comporter +sang +millier +emporter +initiative +nucléaire +traduire +vif +exact +exception +doubler +février +mode +industriel +musique +gestion +honneur +vaste +évoquer +tendre +étape +physique +accuser +parfaitement +méthode +fonctionner +envers +distribuer +existence +prétendre +global +professeur +crédit +tendance +chaîne +dommage +note +réserve +maximum +moteur +version +règlement +relatif +mercredi +régional +sinon +entreprendre +au-delà +étendre +couple +profond +décrire +etc +récent +télévision +retraite +sortie +frontière +égal +promesse +entretenir +habiter +quartier +art +accueillir +libérer +vivant +université +rire +avocat +crainte +commettre +précisément +soutien +facilement +urgence +clé +jeter +religieux +analyse +disponible +regard +prévenir +enlever +analyser +mariage +couleur +témoigner +sauver +bientôt +conclusion +bleu +dehors +remercier +actif +réclamer +parlementaire +récemment +fil +collectif +excellent +moral +habitude +code +puissant +recueillir +fabriquer +représentant +accident +extraordinaire +dimanche +vérifier +envie +enregistrer +rare +parc +impôt +sud +efficace +intéressant +île +cité +moderne +voter +traité +libération +nourrir +sérieusement +carrière +immédiat +exceptionnel +rechercher +palestinien +bras +producteur +garantir +geste +roman +augmentation +lendemain +policier +échelle +supplémentaire +pratiquer +pensée +facteur +néanmoins +bénéficier +vingt +revoir +extrême +défaut +précieux +retard +démocratie +renforcer +silence +perspective +qualifier +absolu +dégager +stratégie +bateau +troupe +course +exercice +fondamental +visage +printemps +machine +village +britannique +surveiller +édition +droite +organisme +leçon +décevoir +bataille +port +naissance +majeur +accomplir +hôpital +circuit +terrible +degré +exigence +rêve +froid +opérer +entièrement +chapitre +quotidien +clairement +inspirer +léger +permanent +juge +après-midi +joindre +juillet +ordinaire +candidat +rapprocher +résistance +russe +justement +habitant +formule +mur +tribunal +fier +manger +soulever +évidemment +travailleur +résolution +journaliste +marque +utilisation +offre +habituel +survivre +populaire +dirigeant +participation +évolution +totalement +gérer +constitution +informer +fou +attacher +renouveler +asseoir +samedi +transfert +renoncer +roi +soi +téléphone +oh +foi +motif +plaindre +tradition +net +victoire +arrêt +concours +vis-à-vis +institut +visiter +elle-même +démocratique +tentative +largement +aboutir +désirer +côte +génération +vent +technologie +échouer +dépit +équilibre +inquiet +obstacle +réflexion +inquiéter +affecter +revanche +ressembler +station +uniquement +supporter +catégorie +mine +législatif +ah +propriétaire +favoriser +privé +avion +minimum +criminel +photo +précéder +solide +priorité +navire +centaine +explication +transmettre +appareil +correspondre +associer +trait +référence +bois +publication +symbole +consommation +idéal +chômage +courage +identifier +entretien +encourager +kilomètre +dérouler +identité +reconnaissance +signaler +division +contexte +coupable +favorable +amendement +août +attribuer +courir +examen +personnage +obligation +inconnu +échanger +montant +éliminer +dénoncer +tableau +exclure +meurtre +exemplaire +propriété +final +site +séance +ouverture +élire +baisse +inquiétude +israélien +représentation +durée +mandat +quinze +vide +statut +essai +pareil +italien +suggérer +interrompre +au-dessus +agence +usine +unir +sourire +employé +sommet +franchir +évident +comportement +fête +rang +écarter +vague +réduction +culturel +coopération +sol +d'autant +leader +taille +vertu +distance +automne +arrière +vision +investir +diminuer +contenu +entourer +juif +considérable +conduite +convention +réfugier +prolonger +verser +évidence +essentiellement +démontrer +communiquer +approche +délai +accroître +bruit +humanité +radio +moi-même +négatif +prudent +soirée +vol +marcher +tiers +mètre +syndicat +occidental +suffisant +ciel +tromper +modeste +éloigner +aborder +malheureusement +évaluer +extrêmement +interne +voire +seconde +messieurs +effectivement +gaz +acteur +adapter +témoignage +dépense +souci +expert +sœur +relativement +comparer +cour +provenir +réellement +conscient +céder +médical +procès +colère +patient +notion +siège +hausse +diviser +traditionnel +quart +approcher +trafic +catholique +mécanisme +adulte +reprocher +métier +modification +peser +médias +foyer +définition +spécialiste +mari +supprimer +guère +douter +hiver +sexuel +consulter +renseignement +âgé +ressentir +fonctionnement +garçon +parfait +prévision +quatrième +fenêtre +incapable +hésiter +résumer +universel +jeunesse +voler +résister +profondément +menace +inutile +refus +poisson +révolution +séparation +avouer +saluer +fer +familial +cinéma +prisonnier +armé +enseignement +étonnant +dizaine +dessus +calcul +fonctionnaire +instruction +pratiquement +oser +rassembler +achever +fiscal +démarche +corriger +volume +réussite +désir +réalisation +exportation +prier +trente +âme +dominer +pur +instrument +indépendance +tort +hauteur +critiquer +autorisation +assurance +déficit +évoluer +drogue +concret +attaque +rythme +approuver +douze +juridique +espagnol +saison +percevoir +hypothèse +relier +financement +dos +consommateur +épreuve +volontaire +négocier +finance +rêver +indien +quantité +soviétique +persuader +interpréter +annuel +commentaire +marier +spectacle +pari +définitif +ouest +sexe +eh +recours +accent +introduire +communiste +célèbre +couverture +religion +appui +concert +saint +conséquent +équipement +descendre +théâtre +marge +abri +recette +généralement +vigueur +patron +soleil +électoral +ennemi +bourse +dimension +baser +dialogue +thème +circuler +porte-parole +présentation +déployer +outil +vacance +suffisamment +défi +front +suspendre +forêt +montagne +sévère +apparemment +présidence +magasin +commissaire +calme +monétaire +ouvrage +réputation +cabinet +écart +chien +écrivain +indispensable +conversation +surface +féliciter +sûrement +surveillance +efficacité +euro +phase +confusion +précision +bombe +bilan +immense +massif +chute +constant +compétence +intégrer +aérien +contrairement +pierre +socialiste +sain +régulier +boîte +financer +théorie +hôtel +nier +phénomène +là-bas +étonner +totalité +sort +accéder +église +fortement +doter +contribution +profondeur +émettre +test +récupérer +pêche +découverte +potentiel +agricole +intellectuel +essence +pencher +vice-président +coin +tension +don +artiste +fidèle +grève +achat +mentionner +exécution +uniforme +exploiter +administratif +effectif +communautaire +individuel +distinguer +original +surprise +veiller +dette +capitale +faciliter +chanter +pension +revue +clore +neige +figure +masse +maintien +étroit +goût +prestation +régner +catastrophe +ressortir +susceptible +manifestation +dormir +lit +bouche +excuse +veille +content +exploitation +triste +latin +classique +alliance +préoccupation +trace +logement +rassurer +plainte +chaud +taire +émotion +judiciaire +progresser +langage +confronter +strict +club +ouvrier +souffrance +observation +rétablir +secours +passion +rupture +office +compliquer +assumer +éprouver +immeuble +rendez-vous +argument +planète +partiel +délicat +attentat +boire +richesse +caisse +hasard +héros +maire +incident +café +annonce +régulièrement +oreille +foutre +apercevoir +refléter +bouger +foule +chrétien +isoler +pont +égalité +tenue +animer +norme +piste +préserver +hommage +inférieur +match +statistique +gouvernemental +exécuter +tragédie +distribution +scandale +pointe +chinois +bénéfice +billet +choc +proportion +irakien +briser +destruction +reculer +critère +gardien +adresse +canal +conservateur +ouais +transporter +brûler +manœuvre +monnaie +réception +quelconque +courrier +grandir +élaborer +doigt +illustrer +poche +transmission +éclater +honte +faiblesse +fédération +presser +affronter +bonheur +formuler +crier +pauvreté +bâtiment +époux +mêler +firme +élargir +électeur +plonger +véhicule +fuir +chercheur +médicament +personnalité +inventer +principalement +prudence +stade +liaison +varier +québécois +ordonner +bonjour +morale +contester +nécessairement +détermination +congrès +semblable +préoccuper +dépôt +consultation +multiplier +dame +joie +durable +faim +considération +recommander +concept +cerveau +truc +allié +excuser +arabe +diffuser +budgétaire +inquiétant +inclure +scolaire +style +combler +annuler +joueur +bloquer +interprétation +ombre +séjour +guider +spécialiser +bien +sport +climat +douleur +issue +généreux +absent +talent +normalement +amélioration +détourner +raisonnable +suprême +éventuel +blesser +orientation +remarque +secondaire +reporter +partisan +cinquième +distinction +impact +grec +compléter +mérite +naturellement +collaboration +procurer +officier +magazine +s'efforcer +tragique +anniversaire +issu +poursuite +nôtre +éclairer +remarquable +infirmier +caractéristique +dépenser +censé +fuite +conviction +nettement +consommer +évaluation +installation +innocent +fameux +cultiver +détenir +gouverner +jouir +parcourir +bloc +électrique +seuil +doux +classer +audience +multiple +minorité +phrase +croissant +hein +disparition +dynamique +renverser +trouble +désoler +provisoire +littérature +résider +adolescent +dessiner +rompre +agriculture +accélérer +aventure +armer +volet +bâtir +prime +résulter +gouverneur +japonais +emmener +alimentaire +occupation +lecteur +intermédiaire +vœu +dresser +conception +afficher +marin +satisfaction +survenir +publicité +arbre +univers +fragile +sauter +chasse +collège +garantie +morceau +aéroport +discipline +explosion +peau +commande +orienter +reproduire +salarié +radical +transférer +diffusion +spécialement +croître +paragraphe +copie +enseigner +rédiger +magnifique +initial +indice +promotion +tolérer +section +chanson +pair +contraindre +trancher +réformiste +branche +réjouir +punir +repartir +cellule +déclencher +uni +retarder +écouler +option +pétrole +laboratoire +étrange +coucher +connexion +génie +profession +rumeur +mien +drôle +plat +maman +département +célébrer +dignité +légitime +philosophie +verre +spécifique +docteur +incertitude +fréquence +urgent +trou +stratégique +mental +éditeur +provincial +hausser +probable +signature +forcément +conformément +croiser +plastique +casser +héritage +voyager +électronique +parallèle +répartir +courageux +autonome +réveiller +satellite +fondé +blessé +municipal +salut +songer +enfance +ordinateur +merveilleux +sien +commenter +inciter +prière +là-dessus +urbain +musée +pluie +précaution +anticiper +cheval +communiqué +nécessiter +rivière +avertir +rédaction +enceinte +substance +soigner +suicide +revendication +incroyable +sondage +mineur +composition +débarrasser +récit +invitation +présidentiel +concurrent +prévu +suisse +accusation +paiement +comparaison +musulman +déplacement +légal +dispositif +constitutionnel +franchement +tarder +refaire +pleurer +débattre +immigration +contrainte +lâcher +cercle +génétique +importation +tonne +dieu +cancer +perdu +obligé +visiteur +remporter +rond +étage +référendum +bébé +amitié +cinquante +zéro +drame +visible +intense +instance +cérémonie +ambition +recourir +sanction +haine +jardin +nourriture +engendrer +infrastructure +adversaire +africain +géant +mobile +significatif +circulation +cotisation +entente +royal +ralentir +cadeau +affirmation +cheveu +requérir +stabilité +louer +gars +fleur +agriculteur +poète +destination +vin +soudain +balle +inflation +sec +arrêté +enfermer +fabrication +paysan +transition +humanitaire +répandre +adoption +adorer +abattre +session +entamer +ménage +purement +enjeu +passager +transformation +appartement +misère +légèrement +écraser +enrichir +restaurant +calculer +discrimination +certitude +huile +sacré +autonomie +sac +stock +destin +compromettre +arracher +sombre +barre +contradiction +maîtriser +invoquer +souveraineté +épargner +concentration +téléphonique +remise +mec +violer +restreindre +décennie +aussitôt +officiellement +chasser +dîner +personnellement +solidarité +projeter +littéraire +présider +fortune +malheureux +numérique +fréquenter +soupçonner +merde +entrepreneur +exposition +marchand +cri +combattant +désert +vêtement +autrefois +surmonter +marchandise +autochtone +féminin +définitivement +heureusement +digne +guide +tabac +rendement +continent +pleinement +désastre +joli +promouvoir +ampleur +écho +innovation +sélection +confondre +honnête +tournant +fusion +collectivité +record +excessif +ridicule +modalité +automobile +fondation +terroriste +retrait +organe +protocole +paquet +gain +écran +sonner +protester +curieux +effacer +débuter +apparition +allusion +lancement +porteur +préalable +programmer +traîner +domicile +creuser +quarante +sacrifice +barrière +biais +feuille +délégation +épuiser +oiseau +librement +congé +taxe +onze +téléphoner +serrer +caractériser +champion +inverse +intituler +possession +rejet +enseignant +préparation +papa +collaborateur +gêner +technicien +cycle +accumuler +sauvage +s'avérer +prétexte +impressionnant +scénario +électricité +gratuit +révolutionnaire +jambe +alcool +privilège +week-end +équivalent +regrouper +invité +militant +insuffisant +blessure +privilégier +midi +disque +couche +dater +participant +inévitable +recommencer +race +vivement +beauté +atmosphère +épaule +habituer +circonscription +debout +influencer +recul +amoureux +mortel +horizon +délivrer +subvention +formel +aggraver +flux +alimenter +intelligent +équilibrer +bibliothèque +absurde +océan +quelques-uns +lait +tenant +stable +capitaine +solliciter +convoquer +prévention +dicter +utilisateur +obligatoire +terminal +choquer +primaire +vital +terrestre +patrimoine +conforme +adjoint +ultime +intégration +rarement +couler +destinée +amuser +complémentaire +satisfaisant +accueil +camion +douloureux +glisser +diversité +indication +exagérer +décès +parisien +psychologique +réviser +profil +rater +prêtre +tranquille +registre +contemporain +exclusif +performance +angle +divorce +fermeture +respectif +constamment +horreur +envahir +pétrolier +faculté +brillant +pacte +suspect +affaiblir +assistance +négliger +injuste +plaider +récompenser +suppression +coupure +lent +gare +drapeau +réparer +sensibilité +jaune +existant +procureur +informatique +glace +pacifique +bête +indicateur +racine +compenser +maritime +gravité +pénétrer +restriction +civilisation +rouler +technologique +football +décevant +législation +approprier +tactique +heurter +acceptable +surgir +prince +vidéo +semer +créateur +partenariat +thèse +chômeur +correct +cuisine +succéder +royaume +rebelle +provenance +file +dessin +viande +paramètre +gré +dessous +voyageur +réaliste +condamnation +fumer +employeur +paysage +discret +longueur +lentement +miracle +similaire +illégal +expansion +mutuel +sage +commandement +correspondant +déboucher +pause +répartition +sacrifier +chimique +compétition +combiner +touriste +ravir +grimper +filet +atomique +contribuable +progressivement +progression +nez +antérieur +pardon +progressif +adhésion +portrait +détailler +valable +coordination +inacceptable +rose +quête +compromis +investisseur +présumer +abandon +identique +sportif +mensonge +défaite +meurtrier +rigoureux +mentir +fréquent +exploser +ambassadeur +observateur +revêtir +accessoire +acquisition +tournée +tranche +œuf +inspecteur +tempête +tissu +souverain +distinct +survie +plage +repousser +plante +nuire +putain +imagination +accusé +repérer +directive +adaptation +persister +coalition +diplomatique +excellence +apparence +oriental +écriture +rural +républicain +embarquer +révolte +intéressé +formidable +tas +parcours +disputer +élite +malheur +aube +salon +infliger +repos +déjeuner +inhabituel +interdiction +consentir +variable +médecine +contradictoire +déranger +cible +détenu +volontiers +fauteuil +couloir +enthousiasme +exclusivement +éthique +révision +pointer +assassiner +optimiste +instaurer +télé +revendiquer +secouer +bizarre +abus +procédé +pêcheur +amateur +regret +isolé +trimestre +onde +spatial +brut +éventuellement +vache +accroissement +aise +agression +loisir +chaleur +ranger +partage +étoile +gris +quasi +description +serbe +biologique +universitaire +s'emparer +mystère +neutre +aîné +trahir +intelligence +admirer +licence +rigueur +maternel +dent +palais +belge +brutal +extraire +signification +filer +automatique +métal +pain +plateau +répétition +diminution +collection +gène +accrocher +reine +privatisation +correspondance +planter +strictement +permanence +compensation +lycée +con +combinaison +injustice +reportage +violation +soucier +plafond +opérateur +camarade +traduction +compréhension +réglementation +déception +mobiliser +encadrer +gentil +folie +terrorisme +illusion +portefeuille +déplorer +précipiter +clôture +piloter +agréable +télécommunication +désaccord +séduire +aliment +alimentation +pomme +ingénieur +vider +attentif +démarrer +coordonner +larme +sourd +cigarette +vallée +uranium +différer +honorer +entrevue +ressort +fixe +opportunité +artificiel +plaque +découler +décisif +piège +prédire +enterrer +robe +recouvrir +pente +album +mixte +clinique +spectateur +refuge +chasseur +chéri +peinture +déchet +axe +grand-chose +temporaire +affiche +massacre +actualité +siéger +crucial +marine +cadavre +fleuve +toit +mécanique +transparence +redevenir +détester +fondateur +charte +amorcer +succession +simplifier +briller +ambitieux +sale +consentement +productivité +calmer +mythe +alternative +soulager +scrutin +culpabilité +considérablement +bouleverser +introduction +dramatique +vaincre +chapeau +renseigner +ordonnance +aile +température +coupe +rayon +lèvre +pétition +boulot +correctement +colonne +arranger +lointain +danser +charbon +promener +colline +poésie +généraliser +transaction +extrémité +pénal +économiste +passionner +bancaire +défaire +calendrier +repas +cul +vouer +surprenant +paradis +banlieue +élu +tourisme +démonstration +gravement +infraction +tir +envoi +arrangement +transparent +collaborer +danse +tester +proclamer +genou +dominant +pardonner +préférence +vain +rentrée +coller +monopole +approfondir +incendie +péril +hélicoptère +bouteille +championnat +hériter +élémentaire +entité +souffler +proximité +mélange +pourcentage +permis +mélanger +proprement +enfoncer +clandestin +dit +encontre +syndical +deviner +tracer +sagesse +baiser +super +user +pilote +abonné +objection +correction +vocation +facture +enfer +luxe +nomination +poster +bar +tantôt +publiquement +relancer +comparable +sympathie +structurel +dispenser +copain +aligner +absorber +gueule +déroulement +dévoiler +opérationnel +freiner +rattraper +matinée +régir +compagnon +bassin +éteindre +ministériel +rage +enregistrement +débarquer +poème +énormément +respirer +dictature +acheteur +équiper +édifice +systématiquement +fondement +spirituel +fournisseur +détriment +unanime +agiter +lot +nazi +col +impressionner +accessible +résidence +dedans +élimination +loger +ouvertement +patience +stimuler +classement +arrestation +longuement +agressif +intensité +grandeur +entraînement +déborder +conducteur +pollution +islamique +ancêtre +caméra +dissimuler +chronique +ère +rappel +fabricant +utilité +ethnique +attribution +interlocuteur +spécifier +souple +rémunération +faillite +touchant +hostile +annexe +abuser +vérification +aveugle +jurer +trésor +vingtaine +séquence +imprimer +musicien +embrasser +échéance +surplus +prématuré +décrocher +rembourser +routier +défenseur +citation +reconstruction +retomber +pourvoir +systématique +adhérer +parallèlement +légume +francophone +émaner +souffle +lac +véritablement +prévaloir +sixième +enveloppe +extension +s'effondrer +apprêter +souhait +cibler +additionnel +excès +douzaine +turc +incertain +épouser +consensus +anonyme +avertissement +excédent +mondialisation +conventionnel +unanimité +romain +inégalité +chat +finale +mademoiselle +coûteux +ventre +soixante +bière +originaire +interrogation +voile +accentuer +rattacher +manuel +contracter +territorial +subsister +passif +voleur +centrale +pôle +délit +usager +musical +allumer +carré +disperser +déchirer +mépris +échantillon +continuité +fichier +conquête +quelquefois +supplément +sincère +optique +maximal +permission +méchant +contourner +interview +désespoir +humeur +demandeur +horrible +conquérir +idéologie +encouragement +motiver +plier +homologue +successif +manifestement +olympique +horaire +littéralement +propice +chèque +explorer +matériau +dépendance +nu +reproduction +abaisser +divergence +restant +détention +étouffer +inscription +poignée +approvisionnement +municipalité +consécutif +nuage +institutionnel +confédération +montée +vendeur +réplique +acquitter +intervalle +métro +coutume +quiconque +panique +abriter +variété +bulletin +flotte +décourager +poussière +fierté +fatiguer +détacher +interface +administrateur +doucement +quoique +projection +treize +épisode +tarif +remplacement +devise +optimisme +chanteur +décret +écrit +antenne +queue +durement +applaudir +sucre +prioritaire +chair +exécutif +suggestion +sable +corruption +blé +chaos +référer +obéir +fusil +taper +compétent +discrétion +odeur +identification +fêter +substantiel +asiatique +cohérent +photographie +exclusion +préconiser +tribune +bénéficiaire +historien +aspiration +tentation +gloire +vanter +coincer +silencieux +continu +chantier +seize +ennui +pompier +inspection +convertir +pouce +clientèle +croyance +atténuer +survivant +applicable +équitable +schéma +acier +vainqueur +révélation +sud-est +brancher +concession +mystérieux +assassinat +rive +dépendant +clarté +conjoint +fermement +redonner +assortir +change +tolérance +grain +compliqué +malaise +restaurer +ambassade +diplôme +miroir +star +restructuration +proie +domination +otage +moquer +allier +couvert +spectaculaire +placement +difficilement +grille +vieillir +abord +exigeant +primitif +demi-heure +mention +pertinent +brièvement +actionnaire +emprisonner +raisonnement +lune +quai +légende +spécialité +cruel +démission +quatorze +redouter +monstre +célibataire +impasse +contredire +atelier +amical +empire +redresser +médaille +ramasser +politicien +acheminer +comédie +propagande +colonie +désordre +invisible +savant +terreur +recruter +conformer +virus +reconnaissant +délibérer +infini +tunnel +cousin +puiser +géographique +réacteur +ajuster +œuvrer +inattendu +automatiquement +balance +dépression +pompe +contestation +sommeil +inconvénient +frein +candidature +armement +épargne +iranien +stupide +inspiration +surpris +interpeller +fréquemment +symbolique +pavillon +conférer +préliminaire +sensation +troubler +angoisse +générosité +chaise +pape +légitimité +emprunt +clause +clef +répression +tombe +hautement +évacuer +blocage +faille +fouiller +respectivement +dériver +intime +cerner +hostilité +manche +mathématique +gamin +éternel +temple +maîtrise +arbitrage +boucler +réparation +évêque +induire +solitude +miner +superbe +gonfler +missile +minuit +déléguer +veuf +comparaître +trame +bain +sûreté +composante +instituer +format +hiérarchie +estimation +mutation +imminent +hâte +esclave +marocain +menu +imaginaire +administrer +atteinte +héroïne +racheter +théorique +guise +scandaleux +vulnérable +démissionner +élan +nominal +manipuler +peiner +ennuyer +noble +hebdomadaire +approbation +protestant +faisceau +regagner +renouvellement +pilier +animateur +multinational +méfier +étroitement +jouet +dégât +formé +complice +toile +laver +empreinte +faillir +curiosité +passeport +creux +homosexuel +château +nous-mêmes +forum +via +coter +éclat +livraison +thé +préférable +attachement +liquide +gamme +motivation +sincèrement +demeure +adéquat +geler +défiler +peintre +volontairement +protestation +bien-être +cap +raide +maigre +artistique +aspirer +magique +quasiment +allure +deuil +énoncer +islamiste +prénom +habituellement +bilatéral +rétablissement +cynique +environnemental +constructeur +réussi +nœud +peindre +bâton +démocrate +précédemment +idiot +querelle +colonel +flic +solitaire +déceler +herbe +élevé +s'acharner +bombardement +explosif +singulier +capitalisme +suspension +mince +assimiler +plume +publicitaire +bagage +opter +habiller +trajet +sinistre +pis +reconstruire +tueur +tournoi +incarner +douane +domestique +soucieux +premièrement +complicité +décréter +cimetière +approprié +dix-huit +nouveauté +brusquement +coïncider +flamme +ménager +millénaire +alerte +déterminé +renforcement +guérir +immobilier +certificat +contaminer +pénurie +ange +perception +philosophe +planche +crédibilité +fiction +handicapé +boisson +tirage +habitation +représentatif +débrouiller +imposition +générer +ajustement +élaboration +virer +facilité +postal +perturber +répercussion +oncle +viol +princesse +gosse +équipage +carburant +canon +prometteur +apprentissage +soi-disant +culte +salarial +abolir +pâte +cohésion +ruine +percer +rassemblement +chaussure +soigneusement +pot +règne +impulsion +physiquement +minimal +malentendu +dépens +implanter +descendant +politiquement +crever +interruption +fossé +patrie +prélèvement +ex +studio +intégrité +prescrire +polonais +tribu +apaiser +sélectionner +familier +exhorter +quinzaine +globe +impatience +logiciel +visiblement +suicider +préjugé +impératif +paralyser +charme +atout +portugais +nord-ouest +affaiblissement +renvoi +peupler +cauchemar +pénible +venue +ballon +balayer +affrontement +expulser +resserrer +activement +décor +abstenir +compassion +couronne +plancher +trentaine +détresse +escalier +barrage +néant +descente +effondrement +encaisser +déduire +baptiser +incompatible +bienvenu +support +synthèse +conjoncture +défier +baie +récompense +étendue +espérance +carnet +banc +réformer +assise +énergétique +reléguer +tiens +deuxièmement +vedette +intervenant +séminaire +contrer +nerveux +assaut +architecte +arbitraire +vraisemblablement +propagation +masculin +imiter +embaucher +couteau +arbitre +manteau +implication +grand-père +reflet +primordial +décliner +rideau +fermé +manipulation +piquer +assiette +requête +rival +refermer +écu +confus +expédition +reconstituer +gigantesque +chant +diplomatie +lieutenant +réputé +indirect +apte +protégé +démentir +sud-ouest +envergure +touche +déterminant +sous-marin +acheminement +dépêcher +hôte +assassin +confirmation +tapis +corde +notable +rationnel +externe +endormir +épais +exposé +boutique +récolter +tchèque +autoroute +divin +là-dedans +différend +explicite +comté +par-dessus +maternité +tailler +apparent +s'enfuir +assistant +portion +allocation +quota +décéder +serré +enquêter +dix-sept +allonger +chauffeur +prospérité +spéculation +bourgeois +touristique +obscur +cou +invention +boucle +ambiguïté +redire +consultatif +torturer +carton +effrayer +flou +complexité +favori +noyau +brandir +repenser +timide +pitié +comptabilité +précaire +trône +insulter +saut +audition +différemment +programmation +crédible +justification +amende +transit +organisateur +galerie +aménagement +conservation +char +criminalité +masquer +masque +manifestant +festival +prôner +radicalement +franchise +ultérieur +expédier +dorénavant +propager +rectifier +tennis +avenue +axer +émouvoir +hé +génial +réduit +alléger +vierge +vengeance +rapprochement +confession +suspens +dégradation +meuble +agenda +grand-mère +phare +virtuel +gagnant +nettoyer +vingtième +poing +étiquette +tante +chemise +pile +diagnostic +citoyenneté +douceur +attester +attraper +prestigieux +kilo +ruiner +nullement +incorporer +débloquer +ficher +censure +croix +accompli +terriblement +main-d'œuvre +invasion +orange +jury +linguistique +rallier +roue +barrer +réaffirmer +assigner +bœuf +soupçon +constat +communisme +dynamisme +flagrant +souhaitable +loup +concerter +désespérer +subit +diplomate +paire +essuyer +exporter +étaler +reconduire +handicap +bonsoir +joue +autrui +bousculer +ériger +conversion +patte +planifier +casque +tardif +prédécesseur +natal +humour +défaillance +transitoire +cabine +fardeau +héritier +apport +remboursement +hélas +fondre +occurrence +authentique +attentivement +irlandais +confortable +échelon +fonctionnel +panne +adieu +entre-temps +insérer +au-dessous +litre +suivi +variation +productif +groupement +confrère +déploiement +impuissant +restauration +haïr +marée +souscrire +modernisation +suffrage +spontané +joyeux +concilier +tristesse +diable +sombrer +photographe +libanais +archives +asile +rapporteur +dix-neuvième +indemnisation +harceler +honteux +leadership +portable +précoce +qualification +insulte +planer +stage +dédier +cahier +exil +artisan +rassurant +remède +composant +carrément +hurler +yen +gras +médiatique +statue +frappe +économiquement +efficacement +golfe +ambiance +coopérer +bus +septième +industrialiser +charmant +marginal +comptable +isolement +modérer +façade +porc +appartenance +émeute +constructif +minime +volant +mobilisation +tâcher +racisme +mairie +aptitude +fumée +ralentissement +récession +convaincant +sou +analyste +prétendu +grossier +sauvetage +pervers +sensiblement +léguer +prélever +noyer +abbé +détecter +ignorance +sceptique +vôtre +problématique +voiler +nationalité +capter +s'envoler +pasteur +activer +chimie +erroné +fantôme +serment +yougoslave +explicitement +alerter +vigilance +rock +naviguer +revers +aviation +souplesse +respectueux +trahison +réconciliation +sursis +simultanément +techniquement +os +cote +débit +symptôme +délibérément +écoute +contingent +dictionnaire +émerger +instruire +inconscient +chaleureux +déguiser +fièvre +vitre +fantastique +équité +soustraire +instable +vapeur +beurre +monument +courbe +téléviser +consolider +muet +contrevenant +offensive +oral +coder +gel +rénovation +controverse +médiocre +routine +relais +opposant +aval +rubrique +préfet +provocation +filial +versant +réticence +grossesse +égyptien +timbre +découper +distributeur +élargissement +sommaire +colonial +pourparlers +incidence +béton +fiable +génocide +vingt-quatre +dégrader +indifférent +audacieux +poudre +teneur +inverser +naval +épouvantable +mécontent +vocabulaire +stabiliser +délégué +centrer +algérien +dérive +alentour +corrompre +commerçant +poitrine +couronner +relire +perpétuer +sympathique +compétitif +majesté +mouton +indifférence +omettre +typique +concurrentiel +doctrine +quotidiennement +architecture +éventualité +massacrer +réciproque +état-major +désarmement +englober +grossir +séparatiste +surcroît +sortant +plomb +s'attarder +nationaliste +exportateur +montre +ratifier +gorge +exploit +encourageant +aviser +épidémie +alarme +parier +écologique +lunette +climatique +sphère +confidentiel +sanctionner +recrutement +détendre +aisé +entourage +autobus +défavoriser +résistant +admiration +acide +banal +poulet +toilette +brigade +trembler +reçu +civiliser +relance +dose +pêcher +distorsion +octroyer +arrivant +standard +taxi +limitation +irréversible +loyer +furieux +verbal +contacter +commissariat +gai +confrontation +chier +fatal +rude +panneau +appréciation +réflexe +complément +atlantique +comédien +successeur +méfiance +replier +vérificateur +dictateur +initialement +rédacteur +avaler +extraction +banquier +prétention +stabilisation +mutuellement +légion +lacune +engin +mépriser +titulaire +idéologique +cloche +compatriote +affection +sel +majoritaire +minoritaire +paradoxe +chiffrer +catastrophique +magistrat +extrait +redressement +farce +compétitivité +enthousiaste +quarantaine +sous-sol +rat +flot +amant +partiellement +radioactif +passe +indépendamment +location +naïf +retraité +innocence +mordre +messe +coïncidence +torture +protecteur +rayonnement +récolte +bijou +danseur +expertise +minier +vitrine +ébranler +crâne +valise +vocal +unilatéral +combustible +économiser +tisser +poule +punition +anéantir +rentable +loyal +renfort +cohérence +souris +bombarder +hésitation +semestre +croyant +réalisateur +brutalement +lourdement +tente +goutte +éveiller +moine +modéré +négligeable +vice +symboliser +substituer +poussée +commandant +chuter +fidélité +basculer +gestionnaire +redoutable +subtil +polémique +alourdir +avancée +sévir +jumeau +piéger +confiant +immigrant +intact +rapidité +localité +récupération +vigoureux +rentabilité +pendre +incliner +affreux +révolter +conte +évasion +repère +delà +arrivé +ironie +serveur +bannir +insuffisance +librairie +philosophique +miser +stupéfiant +boursier +levée +déformer +menaçant +parenthèse +substitution +parer +avantageux +handicaper +filmer +délinquant +perdant +altitude +imputer +plaisanter +poétique +nord-est +desservir +connerie +sanglant +coude +ôter +report +créature +mensuel +globalement +convenable +itinéraire +purger +fâcher +repasser +aucunement +palier +prochainement +réglementaire +costume +thérapie +reproche +curé +alternatif +soulagement +dissoudre +avalanche +mark +brèche +incitation +contrôleur +éditorial +conjugal +pâle +relâcher +visa +vingt-cinq +péché +entraîneur +sécheresse +score +goûter +renier +juridiction +prostitution +fiche +déséquilibre +gendarme +entraver +sous-estimer +embargo +interdit +brouillard +syrien +jet +probabilité +occupant +ponctuel +défini +détachement +manuscrit +panier +trêve +immobile +fermeté +véhiculer +répliquer +passionnant +théologie +bouton +immigrer +tache +tendresse +privilégié +slogan +fromage +toxique +advenir +pharmaceutique +parfum +antique +controversé +instinct +incapacité +insupportable +opportun +parquet +navigation +contrarier +nouer +barreau +cinquantaine +improviser +désespéré +auto +troupeau +gendarmerie +frustration +analogue +venu +génétiquement +ironique +sonore +initier +mœurs +cessez-le-feu +bénévole +boue +sanitaire +empereur +dissiper +déclin +liquider +maintenance +prévisible +pneu +fraude +entrevoir +stipuler +remédier +flotter +fraction +coton +conditionnel +nuance +improbable +enquêteur +conjointement +éclaircir +impossibilité +impatient +versement +bosser +articuler +successivement +bordel +provision +amplifier +ceinture +intergouvernemental +délibération +mexicain +assurément +saisonnier +souterrain +merveille +restituer +démon +balancer +seigneur +infiniment +acquis +récepteur +glissement +auditeur +indigène +disponibilité +indirectement +obtention +grandissant +chagrin +prostitué +chocolat +soupe +bravo +appréhender +concitoyen +flèche +libéralisation +lumineux +signataire +ski +douanier +syndrome +météo +borner +triompher +complot +soumission +continuellement +dérober +romancier +sorcier +consigne +harmonie +concrétiser +pleuvoir +déplaire +innombrable +félicitation +inédit +lance +blond +diversifier +vélo +fatigue +instabilité +pénaliser +comte +désireux +amer +orchestre +dixième +est +envelopper +troublant +foncier +irrégulier +fouet +baigner +fixation +encadrement +déménager +photographier +insensé +moderniser +expérimental +incomber +retombée +esthétique +différencier +éventail +solde +gâcher +régiment +équivaloir +bouleversement +relater +décent +éminent +chiite +rayer +concrètement +coulisse +enchaîner +instituteur +emplacement +copier +inculper +renouveau +intégral +ratification +spécification +documentation +logiquement +spectre +néerlandais +suédois +rouvrir +débouché +croisé +fléau +traversée +harmoniser +secrétariat +mou +venger +détenteur +basque +soif +accumulation +solaire +essor +obséder +intolérable +rébellion +préventif +autoritaire +aimable +conformité +pantalon +anormal +inhérent +réconcilier +réservoir +désignation +emmerder +inondation +câble +poumon +humble +perturbation +brouiller +illustration +aveu +fermier +hanter +cordon +néfaste +lasser +influer +présentement +appliqué +stopper +kurde +amusant +tremblement +rail +fondamentalement +lampe +plate-forme +triple +supplier +multiplication +camoufler +cliché +diamant +guerrier +inchangé +comique +planification +éloge +regroupement +odieux +désastreux +figer +nocturne +configuration +escompter +intensif +scepticisme +plénier +athlète +poil +s'épanouir +minimiser +inévitablement +informé +croisière +échéant +murmurer +implantation +décerner +replacer +Islam +trottoir +vieillard +fillette +enchanter +singe +superficiel +rigide +vêtir +fourniture +taxer +milice +foire +élégant +crème +démographique +charité +borne +organique +dévouer +hâter +mobilité +exclu +boucher +mentalité +commencement +licenciement +chancelier +retenue +visée +dénonciation +bénéfique +exiler +rocher +mortalité +cruauté +regrettable +droguer +plaie +confort +compréhensible +tube +coffre +intimider +huitième +connecter +périr +notoire +graphique +annulation +acceptation +textile +forger +chirurgien +orage +boule +médiation +réprimer +hall +visuel +hormis +jadis +rémunérer +fasciner +dilemme +progressiste +semblant +ours +excéder +blâmer +duc +raciste +stress +inexistant +décharger +danois +concéder +retrancher +renfermer +vieillesse +théoriquement +traditionnellement +batterie +foie +gratuitement +incompréhensible +détour +navette +blague +mécontentement +inaugurer +repli +contrepartie +proportionnel +boulevard +triomphe +libre-échange +sincérité +serre +doré +convoi +aboutissement +psychologie +maltraiter +puits +intimité +équation +humide +bétail +prophète +terrien +gâteau +continental +réitérer +énumérer +embauche +verdict +dix-neuf +micro +frustrer +anglo-saxon +détente +questionner +injecter +préjudice +guetter +exploration +caresser +hymne +sécuritaire +famine +s'écrier +couramment +précipitation +caution +affectation +salaud +cave +bond +enclin +foudre +justesse +rente +hépatite +blindé +clan +accélération +garage +résolument +négociateur +romantique +obscurité +vulgaire +nettoyage +féroce +perpétuel +militer +jungle +case +craquer +soixante-dix +clarifier +traite +démarrage +oubli +procès-verbal +crête +formalité +distant +émetteur +montage +énergique +claquer +insensible +buter +bulle +défavorable +promoteur +albanais +obsession +exciter +simplicité +savoir-faire +sévèrement +écrasant +vendu +munition +capturer +compliment +voisinage +scandaliser +cassette +résident +s'empresser +inonder +réglementer +sonder +vigilant +allouer +cage +réglé +téléspectateur +golf +forestier +hum +ravager +rhétorique +réveil +ensuivre +relevé +ajourner +détérioration +viable +cochon +racial +atroce +civique +ancrer +raccrocher +cirque +législature +barbare +confiner +agrandir +occasionner +allégement +malin +performant +audiovisuel +cuire +raser +ha +revivre +piano +concertation +vaisseau +interaction +sérénité +sillage +synonyme +hisser +agréer +comble +pessimiste +insignifiant +décoller +solidaire +ferroviaire +dépouiller +bosniaque +aménager +agitation +exode +aire +céréale +socialisme +harmonisation +provisoirement +cocktail +moyenne +rigoler +orgueil +compression +expérimenter +détériorer +exprès +réfléchi +écrouler diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..e8381a6 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,8 @@ +#![warn(clippy::all, clippy::pedantic, clippy::print_stdout)] +mod typer; + +use typer::Typer; + +fn main() { + Typer::default().run(); +} diff --git a/src/typer.rs b/src/typer.rs new file mode 100644 index 0000000..a02d928 --- /dev/null +++ b/src/typer.rs @@ -0,0 +1,132 @@ +use crossterm::event::{read, Event, Event::Key, KeyCode::{Char, Backspace}, KeyEvent, KeyModifiers}; +mod terminal; +use terminal::{Terminal, Position}; +mod view; +use view::{View, TyperInfo, ResultInfo}; +mod words; +use words::WordList; +use std::io::Error; +use std::time::{SystemTime}; + +pub struct Typer { + should_quit: bool, + should_display_result: bool, + words_to_write: WordList, + chars_written: Vec, + current_num_of_words: u16, + wpm: u16, + errors: u16, + start_timestamp: Option, +} + +impl Typer { + pub fn default() -> Self { + + Typer{ + should_quit: false, + should_display_result: false, + words_to_write: WordList::new(50), + chars_written: Vec::new() as Vec, + current_num_of_words: 0, + wpm: 0, + errors: 0, + start_timestamp: None + } + } + + pub fn run(&mut self) { + Terminal::initialize().unwrap(); + let result = self.repl(); + Terminal::terminate().unwrap(); + result.unwrap(); + } + + fn repl(&mut self) -> Result<(), Error> { + loop { + self.refresh_screen()?; + if self.should_quit { + break; + } + let event = read()?; + self.evaluate_event(&event); + } + Ok(()) + } + + fn evaluate_event(&mut self, event: &Event) { + if let Key(KeyEvent { code, modifiers, .. }) = event { + match code { + Char('q') if *modifiers == KeyModifiers::CONTROL => { + self.should_quit = true; + } + Backspace => { + if self.chars_written.pop().unwrap() == ' ' && self.current_num_of_words > 0 { + self.current_num_of_words -= 1; + } + } + _ => { + if code.as_char().is_some() { + if self.chars_written.len() < self.words_to_write.chars.len() - 2 { + // Start the timer for WPM + if self.start_timestamp.is_none() { + self.start_timestamp = Some(SystemTime::now()); + } + + let c = code.as_char().unwrap(); + + // Add an error if the character written is not the correct. + if c != *self.words_to_write.chars.get(self.chars_written.len()).unwrap() { + self.errors += 1; + } + + // Increase the number of written words on space. + if c == ' ' { + self.current_num_of_words += 1; + } + + // Update WPM + match self.start_timestamp.unwrap().elapsed() { + Ok(elapsed) => { + if elapsed.as_secs() != 0 { + self.wpm = (f32::from(self.current_num_of_words) / (elapsed.as_secs() as f32 / 60_f32)) as u16; + } + } + Err(_e) => { + panic!("Problem with the timer"); + } + } + + self.chars_written.push(c); + } else { + self.should_display_result = true; + } + } + }, + } + } + } + + fn refresh_screen(&mut self) -> Result<(), Error> { + if self.should_quit { + Terminal::clear_screen()?; + Terminal::print("Goodbye.\r\n")?; + } else if self.should_display_result { + Terminal::clear_screen()?; + View::render_result(ResultInfo { + wpm: self.wpm, + errors: self.errors, + accuracy: 100_f32 * (1_f32 - (self.errors as f32 / self.words_to_write.chars.len() as f32)), + })?; + } else { + View::render_typer(TyperInfo { + words_to_write: self.words_to_write.words.clone(), + words_written: self.chars_written.clone(), + wpm: self.wpm, + errors: self.errors + })?; + Terminal::move_cursor_to(Position {x: 0, y: 0})?; + } + Terminal::execute()?; + Ok(()) + } +} diff --git a/src/typer/terminal.rs b/src/typer/terminal.rs new file mode 100644 index 0000000..6662ef1 --- /dev/null +++ b/src/typer/terminal.rs @@ -0,0 +1,95 @@ +use crossterm::cursor::{Hide, Show, MoveTo}; +use crossterm::queue; +use crossterm::style::{Print, ResetColor, SetForegroundColor, Color}; +use crossterm::terminal::{disable_raw_mode, enable_raw_mode, size, Clear, ClearType, EnterAlternateScreen, LeaveAlternateScreen}; +use std::io::{stdout, Error, Write}; + +#[derive(Copy, Clone)] +pub struct Size { + pub height: u16, + pub width: u16, +} + +#[derive(Copy, Clone)] +pub struct Position { + pub x: u16, + pub y: u16, +} + +pub struct Terminal; + +impl Terminal { + pub fn terminate() -> Result<(), Error> { + Self::show_cursor()?; + Self::execute()?; + Self::leave_alternate_screen()?; + disable_raw_mode()?; + Ok(()) + } + + pub fn initialize() -> Result<(), Error> { + enable_raw_mode()?; + Self::enter_alternate_screen()?; + Self::clear_screen()?; + Self::move_cursor_to(Position {x: 0, y: 0})?; + Self::hide_cursor()?; + Self::execute()?; + Ok(()) + } + + pub fn leave_alternate_screen() -> Result<(), Error> { + queue!(stdout(), LeaveAlternateScreen)?; + Ok(()) + } + + pub fn enter_alternate_screen() -> Result<(), Error> { + queue!(stdout(), EnterAlternateScreen)?; + Ok(()) + } + + + pub fn clear_screen() -> Result<(), Error> { + queue!(stdout(), Clear(ClearType::All))?; + Ok(()) + } + + pub fn reset_color() -> Result<(), Error> { + queue!(stdout(), ResetColor)?; + Ok(()) + } + + pub fn set_foreground_color(color: Color) -> Result<(), Error> { + queue!(stdout(), SetForegroundColor(color))?; + Ok(()) + } + + pub fn move_cursor_to(position: Position) -> Result<(), Error> { + queue!(stdout(), MoveTo(position.x,position.y))?; + Ok(()) + } + + pub fn hide_cursor() -> Result<(), Error> { + queue!(stdout(), Hide)?; + Ok(()) + } + + pub fn show_cursor() -> Result<(), Error> { + queue!(stdout(), Show)?; + Ok(()) + } + + pub fn print(string: &str) -> Result<(), Error> { + queue!(stdout(), Print(string))?; + Ok(()) + } + + pub fn size() -> Result { + let (width, height) = size()?; + Ok(Size { height, width }) + } + + pub fn execute() -> Result<(), Error> { + stdout().flush()?; + Ok(()) + } +} diff --git a/src/typer/view.rs b/src/typer/view.rs new file mode 100644 index 0000000..4daedcd --- /dev/null +++ b/src/typer/view.rs @@ -0,0 +1,128 @@ +use super::terminal::{Size, Position, Terminal}; +use crossterm::style::Color; +use std::io::Error; +const NAME: &str = env!("CARGO_PKG_NAME"); +const VERSION: &str = env!("CARGO_PKG_VERSION"); + +pub struct TyperInfo { + pub words_to_write: Vec, + pub words_written: Vec, + pub wpm: u16, + pub errors: u16, +} + +pub struct ResultInfo { + pub wpm: u16, + pub errors: u16, + pub accuracy: f32, +} + +pub struct View; + +impl View { + pub fn render_typer(info: TyperInfo) -> Result<(), Error> { + Self::draw_static_ui()?; + Self::draw_dynamic_ui(&info)?; + Ok(()) + } + + pub fn render_result(info: ResultInfo) -> Result<(), Error> { + Self::draw_footer()?; + + let Size{width, ..} = Terminal::size()?; + let title = "Bravo ! Voici vos résultats."; + + #[allow(clippy::cast_possible_truncation)] + Terminal::move_cursor_to(Position {x: (width - title.len() as u16) / 2, y: 5})?; + Terminal::print(title)?; + + let x_padding = width / 4; + + let min_x = x_padding; + let min_y = 7; + Terminal::move_cursor_to(Position {x: min_x, y: min_y})?; + Terminal::print(&format!("WPM: {} ", info.wpm))?; + + Terminal::move_cursor_to(Position {x: min_x, y: min_y + 1})?; + Terminal::print(&format!("Erreurs: {}", info.errors))?; + + Terminal::move_cursor_to(Position {x: min_x, y: min_y + 2})?; + Terminal::print(&format!("Précision: {:.2}%", info.accuracy))?; + + Ok(()) + } + + fn draw_static_ui() -> Result<(), Error> { + let Size{width, ..} = Terminal::size()?; + let title = "C'est parti !"; + + #[allow(clippy::cast_possible_truncation)] + Terminal::move_cursor_to(Position {x: (width - title.len() as u16) / 2, y: 5})?; + Terminal::print(title)?; + + Self::draw_footer()?; + Ok(()) + } + + fn draw_footer() -> Result<(), Error> { + let Size{width, height} = Terminal::size()?; + let version_name = NAME.to_owned() + " - " + VERSION; + + #[allow(clippy::cast_possible_truncation)] + Terminal::move_cursor_to(Position {x: width - version_name.len() as u16, y: height - 1})?; + Terminal::print(&version_name)?; + Terminal::move_cursor_to(Position {x: 0, y: height - 1})?; + Terminal::print("Appuyez sur CTRL+Q pour quitter")?; + Ok(()) + } + + fn draw_dynamic_ui(info: &TyperInfo) -> Result<(), Error> { + let Size{width, ..} = Terminal::size()?; + + let x_padding = width / 4; + + let min_x = x_padding; + let min_y = 7; + let max_x = width - x_padding; + let mut x_offset = 0; + let mut y_offset = 2; + let mut char_offset = 0; + Terminal::move_cursor_to(Position {x: min_x, y: min_y})?; + Terminal::print(&format!("Erreurs: {}", info.errors))?; + + Terminal::move_cursor_to(Position {x: min_x + 20, y: min_y})?; + Terminal::print(&format!("WPM: {} ", info.wpm))?; + + Terminal::move_cursor_to(Position {x: min_x, y: min_y + y_offset})?; + + for i in 0..info.words_to_write.len() { + let current_word = info.words_to_write.get(i).unwrap(); + #[allow(clippy::cast_possible_truncation)] + if min_x + x_offset + current_word.len() as u16 > max_x { + x_offset = 0; + y_offset += 1; + Terminal::move_cursor_to(Position {x: min_x + x_offset, y: min_y + y_offset})?; + } + for c in current_word.chars() { + if char_offset < info.words_written.len() { + if *info.words_written.get(char_offset).unwrap() == c { + Terminal::set_foreground_color(Color::White)?; + } else { + Terminal::set_foreground_color(Color::Red)?; + } + } else { + Terminal::set_foreground_color(Color::DarkGrey)?; + } + Terminal::print(&format!("{c}"))?; + char_offset += 1; + x_offset += 1; + } + Terminal::print(" ")?; + char_offset += 1; + x_offset += 1; + } + Terminal::reset_color()?; + + Ok(()) + } +} diff --git a/src/typer/words.rs b/src/typer/words.rs new file mode 100644 index 0000000..3ce6e74 --- /dev/null +++ b/src/typer/words.rs @@ -0,0 +1,38 @@ +use include_lines::{static_include_lines}; +use rand::Rng; +static_include_lines!(WORD_LIST_ENGLISH, "data/words_english.txt"); +static_include_lines!(WORD_LIST_FRENCH, "data/words_french.txt"); + +pub struct WordList { + pub words: Vec, + pub chars: Vec +} + +impl WordList { + pub fn new(num_of_words: u16) -> WordList { + let mut rng = rand::rng(); + let mut chars_to_write: Vec = Vec::new(); + let mut words_to_write: Vec = Vec::new(); + let words = Self::get_words(); + for _ in 0..num_of_words { + let i = rng.random_range(0..words.len()); + let word = words.get(i).unwrap(); + words_to_write.push(word.to_owned()); + for c in word.chars() { + chars_to_write.push(c); + } + chars_to_write.push(' '); + } + WordList{ words: words_to_write, chars: chars_to_write } + } + + fn get_words() -> Vec { + let mut words: Vec = Vec::new(); + + for word in WORD_LIST_FRENCH { + words.push(word.to_owned()); + } + + words + } +}