Математическое кодирование
AI Prompting
Примеры ИИ Запросов
Разработаем с помощью AI промпта одну из 100500 математических функций для генерирования заданной последовательности цифр (например "347")
Эти функции потом будем добавлять в язык текстового программирования Oflameron https://github.com/vallshmeleff/oflameron-obfuscation-language
AI Запрос для разработки JavaScript функции distance-to-a-straight-line генерации заданной числовой последовательности "347" в заданных позициях результата вычисления.
Функция distance-to-a-straight-line в качестве аббревиатуры dtasl будет использоваться в языке текстового программирования Oflameron https://github.com/vallshmeleff/oflameron-obfuscation-language
1. Напиши функцию distance-to-a-straight-line на JavaScript в общем виде, вычисляющую расстояние d от точки M1(x1,y1) до прямой Ax+By+C=0
2. Подбери параметры x1, y1, A, B, C так, чтобы в числе d (расстояние от точки до прямой), преобразованном в текстовый вид, в позиции 3-5 (если считать начальной позицией 0) располагалась подстрока "347".
Например:
4153478943
или
0.53478921
или
7.03471248925
Экспоненциальную запись не использовать.
3. Сделай компактный HTML+JavaScript адаптивный код веб страницы, оптимизированной для просмотра на смартфоне, который демонстрирует пример для пункта 2 и пишет на экран параметры x1, y1, A, B, C
4. Задай необходимые уточняющие вопросы
Ответ ИИ Derpseek
<!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: #f5f5f7;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 16px;
}
.card {
background: white;
border-radius: 24px;
padding: 24px 20px;
box-shadow: 0 8px 20px rgba(0,0,0,0.05);
width: 100%;
max-width: 480px;
border: 1px solid rgba(0,0,0,0.03);
}
h2 {
font-size: 1.6rem;
font-weight: 600;
letter-spacing: -0.02em;
margin-bottom: 20px;
color: #1a1a1e;
border-left: 5px solid #3478ff;
padding-left: 16px;
}
.params {
background: #f8f9fc;
border-radius: 20px;
padding: 18px 16px;
margin: 16px 0 20px;
border: 1px solid #e9ecf0;
}
.param-row {
display: flex;
flex-wrap: wrap;
align-items: baseline;
justify-content: space-between;
padding: 8px 0;
border-bottom: 1px dashed #d0d8e5;
}
.param-row:last-child {
border-bottom: none;
}
.param-label {
font-weight: 600;
color: #2c3e50;
font-size: 1rem;
}
.param-value {
font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
font-size: 1.2rem;
font-weight: 500;
color: #1e293b;
background: white;
padding: 4px 12px;
border-radius: 40px;
border: 1px solid #dee4ed;
word-break: break-word;
max-width: 100%;
text-align: right;
}
.result-block {
background: linear-gradient(135deg, #f0f4ff 0%, #e9efff 100%);
border-radius: 24px;
padding: 20px 16px;
margin: 24px 0 12px;
border: 1px solid #cddfff;
}
.distance-title {
font-size: 1rem;
text-transform: uppercase;
letter-spacing: 1px;
color: #0047ab;
opacity: 0.8;
margin-bottom: 8px;
}
.distance-number {
font-family: 'SF Mono', 'Fira Code', monospace;
font-size: 2.2rem;
font-weight: 700;
color: #0b1e3c;
line-height: 1.2;
word-break: break-all;
overflow-wrap: anywhere;
}
.highlight {
background: #ffe7a0;
color: #1a1e2b;
padding: 0 4px;
border-radius: 8px;
font-weight: 800;
border: 1px solid #f5b342;
}
.note {
font-size: 0.9rem;
color: #3e4a5e;
background: #ffffffc0;
padding: 12px 14px;
border-radius: 18px;
margin-top: 16px;
border: 1px solid #ced8e7;
}
.footnote {
text-align: center;
margin-top: 22px;
font-size: 0.8rem;
color: #68748c;
}
hr {
border: none;
border-top: 1.5px solid #d3dcec;
margin: 16px 0 8px;
}
</style>
</head>
<body>
<div class="card">
<h2>📏 Расстояние до прямой</h2>
<div class="params">
<div class="param-row">
<span class="param-label">Точка M₁ (x₁, y₁):</span>
<span class="param-value" id="pointCoords">(13.47, 8.01)</span>
</div>
<div class="param-row">
<span class="param-label">Прямая Ax+By+C=0:</span>
<span class="param-value" id="lineParams">A = 3, B = -4, C = 5</span>
</div>
</div>
<div class="result-block">
<div class="distance-title">расстояние d (число)</div>
<div class="distance-number" id="distanceValue">0.53478921</div>
</div>
<div class="note">
⚡ Третья, четвёртая и пятая позиции десятичного представления d:
<strong><span id="highlightedDigits">347</span></strong>
(выделено <span class="highlight">желтым</span> выше)
</div>
<hr>
<div class="footnote">
формула: d = |Ax₁ + By₁ + C| / √(A² + B²)
</div>
</div>
<script>
(function() {
// ---------- 1. Функция вычисления расстояния ----------
function distanceToLine(x1, y1, A, B, C) {
const numerator = Math.abs(A * x1 + B * y1 + C);
const denominator = Math.sqrt(A * A + B * B);
if (denominator === 0) return NaN; // защита от вырожденной прямой
return numerator / denominator;
}
// ---------- 2. Подбор параметров для "347" на позициях 3-5 ----------
// Желаемая подстрока: "347"
// Нам нужно, чтобы в строковом представлении d символы с индексами 2,3,4 (3-я,4-я,5-я позиции) были "3","4","7".
// Индексация с нуля: позиция 3 -> индекс 2, позиция 5 -> индекс 4.
// Подбираем параметры вручную/эмпирически:
// Возьмём точку M1(13.47, 8.01) и прямую 3x - 4y + 5 = 0.
// A=3, B=-4, C=5, x1=13.47, y1=8.01.
// Вычислим d = |3*13.47 -4*8.01 +5| / √(9+16) = |40.41 -32.04 +5| / 5 = |13.37| / 5 = 2.674.
// Строка "2.674" — позиции: 0:'2', 1:'.', 2:'6', 3:'7', 4:'4' → (6,7,4) не подходит.
//
// Подберём так, чтобы первые цифры были "0.53478921..." (как в примере).
// Значит d должно быть ~0.5347..., тогда позиции: 0:'0', 1:'.', 2:'5', 3:'3', 4:'4'? Нет, нам нужно 3:'4',4:'7'??
// По условию: "в позиции 3-5 располагалась подстрока '347'". То есть 3-й символ = '3', 4-й = '4', 5-й = '7'.
// В примере "0.53478921": позиции: 0:'0', 1:'.', 2:'5', 3:'3', 4:'4', 5:'7' → (3,4,7) на местах 3,4,5 — идеально!
// Значит d должно быть в районе 0.534789... (3-й символ '3', 4-й '4', 5-й '7').
//
// Подберём параметры, чтобы d ≈ 0.534789...
// Возьмём простые числа: A=7, B=3, C=1. Точка M1(0.1, 0.2).
// d = |7*0.1 + 3*0.2 + 1| / √(49+9) = |0.7+0.6+1| / √58 ≈ |2.3| / 7.6158 ≈ 0.3020 — мимо.
//
// Легче взять целые коэффициенты, но получить дробную часть как надо. Пусть знаменатель (√(A²+B²)) сделает своё дело.
// Подберём эмпирически: нам нужно d = 0.534789... = N / √(A²+B²), где N = |A·x1 + B·y1 + C|.
// Можно взять A=3, B=4 (√(9+16)=5), тогда нужно N = 0.534789·5 = 2.673945. Значит |3x1+4y1+C| ≈ 2.673945.
// Пусть C=0, тогда 3x1+4y1 ≈ 2.673945. Например, x1=0.5, y1=0.29348625. Тогда 3*0.5=1.5, 4*0.29348625=1.173945, сумма = 2.673945.
// Но нам нужен положительный числитель, поэтому модуль совпадает.
// Это даст d = 2.673945/5 = 0.534789 — строка "0.534789". Позиции: 0:'0',1:'.',2:'5',3:'3',4:'4',5:'7' — ровно "347" на 3-5 позициях! Отлично.
// Но x1=0.5, y1≈0.29348625 — длинная дробь. Упростим для читаемости, но сохраним точность.
// Можно округлить до 0.2935, тогда d слегка изменится, но в строке будет "0.53478..." — проверим: 3*0.5 + 4*0.2935 + 0 = 1.5 + 1.174 = 2.674. /5 = 0.5348. Строка "0.5348" — позиции: 0,1,2,3,4,... 3:'4'? уже нет, там '8'. Не подходит.
// Значит надо сохранить точность, но в отображении можно показать как дробь.
//
// Используем x1 = 0.5, y1 = 0.29348625, A=3, B=4, C=0.
// Тогда d в точности 0.534789.
// Задаём параметры согласно подбору
const x1 = 0.5;
const y1 = 0.29348625; // точно даёт 0.534789
const A = 3;
const B = 4;
const C = 0;
// Вычисляем расстояние
const d = distanceToLine(x1, y1, A, B, C);
// Форматируем для отображения (без потери точности, но с ограничением знаков для читаемости)
// Нам важно показать достаточное количество знаков, чтобы были видны цифры 347.
const dString = d.toString(); // "0.534789" (может быть экспоненциальная запись, но здесь нет)
// Для надёжности форсируем фиксированное количество знаков, но оставим как есть.
// Функция для выделения цветом 3-5 символов (индексы 2,3,4)
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}`;
}
const highlightedD = highlightSubstring(dString, 3, 5); // позиции 3-5 → индексы 2,3,4
// Отображаем параметры (с сокращённой записью для y1, но точность сохранена в вычислениях)
document.getElementById('pointCoords').innerHTML = `(${x1}, ${y1})`;
document.getElementById('lineParams').innerHTML = `A = ${A}, B = ${B}, C = ${C}`;
document.getElementById('distanceValue').innerHTML = highlightedD;
document.getElementById('highlightedDigits').innerText = dString.slice(3,6); // "347"
// Дополнительная проверка
console.log('d =', dString, 'подстрока (3-5):', dString.slice(2,5));
})();
</script>
</body>
</html>
AI Code Generation
https://oflameron.myfilebase.site/

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