Вычисление случайного числа Фибоначчи вместо капчи
Алгоритм:
-
Генерация первых 10 чисел Фибоначчи: Числа Фибоначчи: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34
-
Скрытие случайного числа: Сначала генерируется случайный индекс в пределах от 0 до 9. После этого скрывается соответствующее число в последовательности.
-
Пользовательский интерфейс: Пользователю показывается последовательность чисел Фибоначчи с пропущенным числом и просьбой ввести недостающее число.
-
Проверка ответа: Ответ пользователя проверяется на клиенте, и если он верный, форма отправляется.
Пример кода на Rust/WebAssembly (WASM):
- Rust код для генерации последовательности:
rust
use wasm_bindgen::prelude::*;
use rand::Rng;
#[wasm_bindgen]
pub fn generate_fibonacci_with_missing() -> JsValue {
let fib = generate_fibonacci();
let mut rng = rand::thread_rng();
let missing_index = rng.gen_range(0..10);
let mut fib_with_missing = fib.clone();
fib_with_missing[missing_index] = -1;
let result = (fib_with_missing, fib[missing_index]);
JsValue::from_serde(&result).unwrap()
}
fn generate_fibonacci() -> Vec<i32> {
let mut fib = vec![0, 1];
for i in 2..10 {
fib.push(fib[i - 1] + fib[i - 2]);
}
fib
}
- JavaScript код для взаимодействия с WASM:
javascript
import init, { generate_fibonacci_with_missing } from './pkg/your_project_name.js';
async function run() {
await init();
const [fibWithMissing, missingNumber] = generate_fibonacci_with_missing();
let displaySeq = fibWithMissing.map(num => num === -1 ? '___' : num).join(', ');
document.getElementById('fibonacci-sequence').textContent = displaySeq;
document.getElementById('submit').addEventListener('click', () => {
const userAnswer = parseInt(document.getElementById('user-answer').value);
if (userAnswer === missingNumber) {
alert('Правильно!');
} else {
alert('Неправильно, попробуйте еще раз.');
}
});
}
run();
- HTML для интерфейса:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Проверка Фибоначчи</title>
<script src="path/to/your/wasm/code.js"></script>
</head>
<body>
<h1>Введите недостающее число Фибоначчи:</h1>
<p id="fibonacci-sequence"></p>
<input type="text" id="user-answer" placeholder="Введите число">
<button id="submit">Отправить</button>
</body>
</html>
Объяснение кода:
-
Rust/WASM:
- Мы генерируем последовательность из первых 10 чисел Фибоначчи.
- Скрываем одно случайное число и возвращаем его, чтобы использовать в дальнейшем для проверки ответа пользователя.
-
JavaScript:
- Загружается WASM и вызывается функция generate_fibonacci_with_missing, чтобы получить массив с пропущенным числом.
- Последовательность выводится пользователю с пропущенным числом (которое заменено на ‘___’).
- Когда пользователь вводит свой ответ, он сравнивается с правильным числом, и выводится результат.
Дальнейшие улучшения:
-
UI улучшения:
- Можно добавить подсказки или использовать стили для улучшения интерфейса.
- Также можно сделать таймер для решения задачи или добавить несколько уровней сложности (например, увеличивать количество чисел в последовательности).
-
Больше функциональности в Rust:
- Например, можно скрывать больше одного числа или изменять сложность задачи в зависимости от выбора пользователя.
-
Реализация на сервере:
- Если хотите улучшить безопасность, можно сделать проверку и на серверной стороне. Однако для простоты клиентская проверка, как предложено, будет наиболее удобной.
Комментарии могут быть опубликованы или отклонены после ручной проверки.
Если Вам нужен ответ на вопрос приватно от автора сайта, введите свой реальный email.