Математическое кодирование
AI Prompting
Примеры ИИ Запросов
Закодируем число (например, текст "347") с помощью математической формулы и параметров к ней.
Само знание о том, какая формула использована и в какой позиции числовой последовательности имеется только на стороне отправителя и получателя.
Передаются только параметры для вычисления.
Сделаем это с помощью ИИ промпта
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=yes">
<title>Полярные параметры прямой (высокая точность)</title>
<style>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
background: linear-gradient(145deg, #f0f4fa 0%, #e6ecf5 100%);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 16px;
}
.card {
background: rgba(255,255,255,0.9);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border-radius: 32px;
padding: 24px 20px;
box-shadow: 0 20px 40px rgba(0,10,30,0.15), 0 4px 12px rgba(0,0,0,0.05);
width: 100%;
max-width: 520px;
border: 1px solid rgba(255,255,255,0.5);
}
h2 {
font-size: 1.8rem;
font-weight: 700;
background: linear-gradient(135deg, #1e293b, #2d3b55);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
margin-bottom: 20px;
padding-bottom: 8px;
border-bottom: 3px solid #3478ff;
}
.section {
background: white;
border-radius: 24px;
padding: 20px 16px;
margin: 18px 0;
box-shadow: 0 4px 12px rgba(0,0,0,0.02);
border: 1px solid #eef2f6;
}
.param-grid {
display: flex;
flex-wrap: wrap;
gap: 12px;
justify-content: space-between;
}
.param-item {
flex: 1 1 calc(50% - 12px);
min-width: 140px;
background: #f8fafd;
border-radius: 18px;
padding: 14px;
border: 1px solid #dde3ed;
}
.param-label {
font-size: 0.85rem;
text-transform: uppercase;
letter-spacing: 0.5px;
color: #4a5a72;
margin-bottom: 8px;
}
.param-value {
font-family: 'SF Mono', 'Fira Code', monospace;
font-size: 1.4rem;
font-weight: 600;
color: #0b1e3c;
line-height: 1.2;
word-break: break-word;
}
.polar-block {
background: linear-gradient(120deg, #eef4ff, #ffffff);
border-radius: 28px;
padding: 20px;
margin: 24px 0;
border: 2px solid #bfd3ff;
}
.polar-title {
font-size: 1rem;
font-weight: 600;
color: #2c3e66;
margin-bottom: 16px;
display: flex;
align-items: center;
gap: 8px;
}
.polar-title span {
background: #3478ff;
color: white;
padding: 4px 12px;
border-radius: 40px;
font-size: 0.85rem;
}
.number-box {
background: #0b1424;
color: #e3e9ff;
padding: 20px 18px;
border-radius: 20px;
font-family: 'SF Mono', monospace;
font-size: 1.8rem;
font-weight: 500;
letter-spacing: 2px;
word-break: break-all;
text-align: center;
border: 1px solid #2e3f66;
box-shadow: inset 0 2px 8px rgba(0,0,0,0.5);
margin: 12px 0;
}
.highlight {
background: #f7d44c;
color: #1a1e2b;
padding: 0 6px;
border-radius: 14px;
font-weight: 800;
border: 1px solid #e5b800;
}
.digits-hint {
background: #d9e5ff;
border-radius: 30px;
padding: 12px 18px;
font-size: 1rem;
color: #001b44;
border: 1px solid #9bb2e0;
margin-top: 12px;
}
.footnote {
font-size: 0.85rem;
color: #4a5f7c;
text-align: center;
margin-top: 20px;
border-top: 1px dashed #b5c6dd;
padding-top: 16px;
}
.badge {
background: #3478ff10;
border-radius: 16px;
padding: 8px 16px;
font-size: 0.9rem;
color: #0047ab;
border: 1px solid #3478ff30;
}
.error-badge {
background: #ff4d4d10;
color: #b30000;
border: 1px solid #ff4d4d40;
border-radius: 16px;
padding: 8px 16px;
font-size: 0.9rem;
margin-top: 10px;
}
.tooltip {
background: #eef2f6;
border-radius: 12px;
padding: 6px 12px;
font-size: 0.8rem;
color: #3a4c66;
}
</style>
</head>
<body>
<div class="card">
<h2>🎯 Полярные параметры прямой</h2>
<!-- Исходные коэффициенты -->
<div class="section">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 14px; flex-wrap: wrap; gap: 8px;">
<div class="badge">Ax + By + C = 0</div>
<div class="tooltip">p > 0, "347" на позициях 3-5</div>
</div>
<div class="param-grid">
<div class="param-item">
<div class="param-label">A</div>
<div class="param-value" id="paramA">3</div>
</div>
<div class="param-item">
<div class="param-label">B</div>
<div class="param-value" id="paramB">4</div>
</div>
<div class="param-item">
<div class="param-label">C</div>
<div class="param-value" id="paramC">-0.173946</div>
</div>
</div>
<div id="errorMessage" style="display: none;" class="error-badge"></div>
</div>
<!-- Полярные параметры -->
<div class="polar-block">
<div class="polar-title">
<span>⍴</span> Полярное расстояние p (высокая точность)
</div>
<div class="number-box" id="polarDistance">0.0347892000000</div>
<div class="digits-hint">
🔍 Позиции 3-5 (индексы 3,4,5):
<strong class="highlight" id="highlightedPart">347</strong>
(выделено желтым выше)
<div style="font-size:0.85rem; margin-top:6px; color:#2c3e66;">
строка: "<span id="fullString">0.0347892000000</span>"
</div>
</div>
<div style="display: flex; gap: 16px; margin-top: 24px; flex-wrap: wrap;">
<div style="flex: 1; min-width: 130px;">
<div class="param-label">cos φ (точно)</div>
<div class="param-value" id="cosPhi">-0.6</div>
</div>
<div style="flex: 1; min-width: 130px;">
<div class="param-label">sin φ (точно)</div>
<div class="param-value" id="sinPhi">-0.8</div>
</div>
</div>
<div style="margin-top: 16px; color:#2a3f66; background:#dee9ff; border-radius: 18px; padding: 12px; font-size:0.95rem;">
⚡ φ — угол нормали (cos φ = ±A/√(A²+B²), sin φ = ±B/√(A²+B²))<br>
знак выбран так, чтобы p ≥ 0
</div>
</div>
<div class="footnote">
p = |C| / √(A² + B²) | x·cosφ + y·sinφ - p = 0
</div>
</div>
<script>
(function() {
// 1. Функция для вычисления полярных параметров с проверкой на вырожденность
function polarParametersFromLine(A, B, C) {
// Проверка на вырожденную прямую
if (Math.abs(A) < 1e-12 && Math.abs(B) < 1e-12) {
throw new Error("Ошибка: A и B не могут одновременно равняться 0 (вырожденная прямая)");
}
// Нормализующий множитель с высокой точностью
const norm = Math.sqrt(A * A + B * B);
// Полярное расстояние p = |C| / norm (всегда положительное)
const p = Math.abs(C) / norm;
// Выбираем знак нормали так, чтобы p было положительным в уравнении x·cosφ + y·sinφ - p = 0
// Если C ≥ 0, оставляем знак (A,B), если C < 0, берём (-A,-B)
let cosPhi, sinPhi;
if (C >= 0) {
cosPhi = A / norm;
sinPhi = B / norm;
} else {
cosPhi = -A / norm;
sinPhi = -B / norm;
}
// Возвращаем с высокой точностью (без округления)
return {
p: p,
cosPhi: cosPhi,
sinPhi: sinPhi,
norm: norm
};
}
// 2. Подобранные параметры для "347" на позициях 3-5 (индексы 3,4,5)
// Чтобы получить p = 0.0347892... нужно |C|/√(A²+B²) = 0.0347892
// Берём A=3, B=4 → √(9+16)=5, тогда |C| = 5 * 0.0347892 = 0.173946
// Берём C = -0.173946 (отрицательное, чтобы показать смену знака нормали)
const A = 3;
const B = 4;
const C = -0.173946; // точно даёт p = 0.0347892
try {
// Вычисляем полярные параметры
const polar = polarParametersFromLine(A, B, C);
let p = polar.p;
const cosPhi = polar.cosPhi;
const sinPhi = polar.sinPhi;
// Для большей точности и гарантии "347" на нужных позициях,
// используем формат с фиксированной точностью (12 знаков)
// Но чтобы точно получить "347" на индексах 3,4,5, немного скорректируем p
// при отображении, сохраняя математическую корректность
// Точное значение p = 0.173946 / 5 = 0.0347892
// Но из-за двоичного представления может быть 0.0347891999999...
// Принудительно форматируем как строку с нужными цифрами
// Создаём строку с фиксированным количеством знаков, чтобы гарантировать "347"
const pString = p.toFixed(15); // "0.034789200000000"
// Находим позицию десятичной точки
const dotIndex = pString.indexOf('.');
// Формируем строку, где после точки идут цифры, и на индексах 3,4,5 от начала строки
// находится "347". Для p=0.0347892... индексы:
// 0:'0', 1:'.', 2:'0', 3:'3', 4:'4', 5:'7', 6:'8', ...
// Функция подсветки подстроки с индекса start по end
function highlightSubstring(str, start, end) {
if (str.length <= start) return str;
const before = str.slice(0, start);
const highlightPart = str.slice(start, end + 1);
const after = str.slice(end + 1);
return `${before}<span class="highlight">${highlightPart}</span>${after}`;
}
// Подсвечиваем символы с индексами 3,4,5 (позиции 3-5)
const highlightedP = highlightSubstring(pString, 3, 5);
// Получаем подстроку "347" для отображения в подсказке
const highlightedSubstr = pString.slice(3, 6);
// Отображаем параметры
document.getElementById('paramA').innerText = A;
document.getElementById('paramB').innerText = B;
document.getElementById('paramC').innerText = C;
document.getElementById('polarDistance').innerHTML = highlightedP;
document.getElementById('highlightedPart').innerText = highlightedSubstr;
document.getElementById('fullString').innerText = pString;
// cosφ и sinφ с высокой точностью (12 знаков)
document.getElementById('cosPhi').innerText = cosPhi.toFixed(15);
document.getElementById('sinPhi').innerText = sinPhi.toFixed(15);
// Скрываем сообщение об ошибке
document.getElementById('errorMessage').style.display = 'none';
console.log('Полярные параметры:', {
p: p,
pString: pString,
highlighted: highlightedSubstr,
cosPhi: cosPhi,
sinPhi: sinPhi
});
} catch (error) {
// Показываем ошибку
document.getElementById('errorMessage').style.display = 'block';
document.getElementById('errorMessage').innerText = error.message;
// Устанавливаем значения по умолчанию
document.getElementById('paramA').innerText = A;
document.getElementById('paramB').innerText = B;
document.getElementById('paramC').innerText = C;
document.getElementById('polarDistance').innerHTML = 'Ошибка';
document.getElementById('cosPhi').innerText = '—';
document.getElementById('sinPhi').innerText = '—';
// https://github.com/vallshmeleff/oflameron-obfuscation-language
}
})();
</script>
</body>
</html>
https://chat.deepseek.com/share/k2gg7hne1rs6s78mj9
AI Code Generation
https://oflameron.myfilebase.site/

Комментарии
Отправить комментарий