Задача о ферзях
есть поле 8 на 8 необходимо расставить двух ферзей и прощитать бьют они друг друга или нет
:help: |
<div id='foo' style='color: red'> </div> <input type='button' onclick='check();' value='узнать' /> <script type="text/javascript"> var Matrix = function ( options ) { // рисует шахматную доску options.enabled = options.enabled || '#333'; options.disabled = options.disabled || '#555'; var map = options.map, len = map.length, html = '', styles = '', i, j, cells; for ( i = 0; i < len; i++ ) { cells = map[i].length; for ( j = 0; j < cells; j++ ) { styles = 'float: left; width: 30px; height: 30px; background: ' + (map[i][j] === 0 ? options.disabled : options.enabled) + '; ' + (j === 0 ? 'clear: both;' : ''); var div = document.createElement("DIV"); div.style.cssText = styles; div.eq = [i, j]; document.getElementById( options.target ).appendChild(div); } } // document.getElementById( options.target ).innerHTML = html; }; var T1 = [0,1,0,1,0,1,0,1], T2 = [1,0,1,0,1,0,1,0]; Matrix({ map: [T1, T2, T1, T2, T1, T2, T1, T2], target: 'foo', disabled : 'white', enabled : 'black' }); var X = 0; var P = []; document.getElementById("foo").onclick = function (event) { // ставим ферзей var target = (event = event || window.event).target || event.srcElement; if (target.id !== "foo" && X < 2) { // не больше двух! target.innerHTML = "Ф"; P.push(target); X++; } }; function check() { if (X < 2) // если поставили меньше двух ферзей, выкидываем гневное сообщение return alert("расставь ферзей нормально, придурок"); var x1 = P[0].eq[0], x2 = P[1].eq[0], y1 = P[0].eq[1], y2 = P[1].eq[1]; alert( x1 == x2 || y1 == y2 || Math.abs(y1 - y2) == Math.abs(x1 - x2) ); // формула для вычисления } </script> Проверял только в Opera11. Ф-цию Matrix() брал из своего старого скрипта. В IE шахматная доска рисуется неправильно. Но условие x1 == x2 || y1 == y2 || Math.abs(y1 - y2) == Math.abs(x1 - x2) работает верно. |
мне как бы всей этой красоты не надо мне нужно ввести с клавы координаты этих ферзей и скрипт должен выдать бьют они друг друга или нет
|
Из варианта Matre вытащи условие и применяй, вот например бьют:
var x1 = 2, x2 = 4, y1 = 1, y2 = 3; alert(x1 == x2 || y1 == y2 || Math.abs(y1 - y2) == Math.abs(x1 - x2)); а вот нет: var x1 = 2, x2 = 5, y1 = 1, y2 = 2; alert(x1 == x2 || y1 == y2 || Math.abs(y1 - y2) == Math.abs(x1 - x2)); |
andrei92, вот ты сука. Гореть тебе в аду за такую подставу. Ты же сам, придурок, написал, что РАССТАВИТЬ надо ферзей на ПОЛЕ, я тебе всё сделал за бесплатно, чё ты мне паришь? Если с клавы вводить надо так и сделай так чтобы вводило хули ты мне то пишешь?? Читай там про ввод-вывод в js и пр. хватит быть дебилом который не может переменную с клавы ввести. Видел бля я таких. У меня в вузе 15 человек из 20 не умеют делать ввод вывод, а мы уже функции закончили, меня всё прося т за бесплатно, ну короче ездят на мне, я их на три буквы начал посылать потому что там лабы 3 страницы кода даже я не сразу соображаю алгоритм, теперь со мной даже за руку не всегда здороваются. Ты такой же чёрт. Жаль было время на тебя терять.
|
я джава скрип неделю изучаю что ты отменя хочеш
|
Да каждый так говорит что он новичок, пусть делают всё за него. Конечно, так проще. Алгоритм-то элементарный — ввести переменную с клавы и по готовой формуле вычислить, даже если сегодня за js сел такую вещь должен смочь сделать, если это тебе реально надо.
|
Я просто не знал как к этому алгоритму подступиться не мог вывести закономерности поэтому и попросил помощи а вопрос видать не совсем правильно сформулировал
|
Цитата:
|
andrei92, а, ты вообще новичок в программировании? Тогда ладно, извини. Беру свои слова назад.
e1f, спасибо за напоминание. |
Выташил условие из примера в некоторых вариантах работает правильно а в некоторых не хочет работать
var x1 = 1, x2 = 1, y1 = 2, y2 = 3; alert(x1 == x2 || y1 == y2 || Math.abs(y1 - y2) == Math.abs(x1 - x2)); |
Всё норм работает:
var x1 = 1, x2 = 1, y1 = 2, y2 = 2; alert(x1 == x2 || y1 == y2 || Math.abs(y1 - y2) == Math.abs(x1 - x2)); |
я подкарректировал условие не правильно записал
|
Народ а на какой математической формуле основывается решение этой задачи?
|
x1 = x2 — фигуры расположены в одном ряду
y1 = y2 — фигуры расположены в одном столбце |y1 - y2| = |x1 - x2| — расстояние между соотв. координатами равно (т. е. от одной точки можно пройти до другой, описав половину квадрата) — фигуры расположены на одной диагонали |
Какая-то слишком простенькая задача... Вообще канонической считается расстановка определённого кол-ва супер-ферзей (который ещё и как конь ходит) на доске определённого размера...
|
Часовой пояс GMT +3, время: 22:55. |