Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 29.01.2013, 23:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от Владимир Фомин
Программа, которая выводит пути обхода конём всех клеток шахматной доски по одному разу.
Попробовал сделать подобное ))) размеры поля можно менять задавая массивы HH и WW.Ваш вариант не смотрел до этого. ...
<!DOCTYPE HTML>
<html>
<head>
<meta charset="windows-1251" />
<style type="text/css">
td{
   height: 22px; width: 22px; text-align: center;
   border: solid #FFCC66 2px;
   color: #3333FF;

}
</style>
  <title></title>
</head>
<body>
<script type="text/javascript">
var WW = [1,2,3,4,5],
HH = ['a','b','c','d','e'],
w = [2, 1, -1, -2, -2, -1, 1, 2],
h = [-1, -2, -2, -1, 1, 2, 2, 1];
function   Horse(e, f) {
    for (var d = [], a = 0; a < w.length; a++) {
        var b = e + h[a],
            c = f + w[a];
             - 1 < c && (HH.length > c && -1 < b && WW.length > b) && d.push(HH[b] + WW[c])
    }
    return d
}
var obj = {};
var step = {};
var t = document.createElement("table")
for (var i=0; i< HH.length; i++)  {
var tr = t.insertRow(i)
for (var k=0; k< WW.length; k++)  {
var td = tr.insertCell(k)
td.innerHTML = HH[i]+WW[k]
td.onclick = function (a)
{
  return function() { Up(a) }
}(HH[i]+WW[k])
obj[HH[i]+WW[k]]= Horse(i,k)
}}
document.body.appendChild(t);
function Unique(a, c) {
    for (var b = 0; b < c.length; b++) if (a == c[b] || !a) return !1;
    return !0
}
function Tree (a) {
    for (var c = [], b = obj[a[a.length - 1]], d = 0; d < b.length; d++)
    Unique(b[d], a) && c.push(a.concat(b[d]));
    return c
};
function Chess(num) {
   if (step[num]) return step[num];
   var a = Tree([num]);
    for (var b = 0; b < a.length; b++) {
        for (; a[b] && WW.length * HH.length > a[b].length;) {
            var c = Tree(a[b]);
            a = a.slice(0, b).concat(c).concat(a.slice(b + 1))
        }
        if (0 == a.length) {step[num]=[];return []}
    }

    step[num] = a
    return a
};
 function Up(num)
 {
    var d = document.getElementById('show');
    d.innerHTML="Считаю, наберитесь терпения пожалуйста";
    var test = Chess(num);
    d.innerHTML= "Для "+ num + " : "+ test.length+" вариантов<br />"+test.join("<br />")
 }
</script>
<div id="show"></div>
</body>
</html>
Ответить с цитированием
  #12 (permalink)  
Старый 30.01.2013, 01:26
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Владимир Фомин
Добро пожаловать
Не так часто нас посещают столь легендарные личности.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 30.01.2013 в 02:40.
Ответить с цитированием
  #13 (permalink)  
Старый 30.01.2013, 12:33
Интересующийся
Отправить личное сообщение для Владимир Фомин Посмотреть профиль Найти все сообщения от Владимир Фомин
 
Регистрация: 21.01.2013
Сообщений: 16

Сообщение от рони Посмотреть сообщение
Попробовал сделать подобное ))) размеры поля можно менять задавая массивы HH и WW.Ваш вариант не смотрел до этого. ... :
Почему то ваша программа работает намного медленнее моей. Я ждал, что она выведет, например, 304 цветные картинки.
Могу показать более читабельный код такой программы, выполняющей вывод всех ходов с a1. Вместо массива клеток p[k] в ней определяются два массива положения по горизонтали и по вертикали на каждом шаге
x[k], y[k], 1<=k<=25; 0<=x[k]<=5; 0<=y[k]<=5;
Посмотрите, насколько быстрее работает.

<!DOCTYPE HTML>
<html>
<head>
<meta charset="windows-1251" />
<script type="text/javascript">
var n = 5;
var x = new Array();   //номер вертикали на k-м шаге, 1<=k<=n*n, 1<=x[k]<=n 
var y = new Array();    //номер горизонтали на k-м шаге, 1<=k<=n*n, 1<=y[k]<=n 
var b = new Array("0", "a", "b", "c", "d", "e");
var r = new Array();
var u;
var dx = new Array(0,  1,  2,  2,  1, -1, -2, -2, -1,  0);
var dy = new Array(0,  2,  1, -1, -2, -2, -1,  1,  2,  0);
var s = new Array();
var str;

begining(1, 1);

function begining(vertical, horizontal)
{
  u = 0; 
  x[1]=vertical; 
  y[1]=horizontal;
  s[1]=0;
  for (var i = 1; i<=n*n; i++) r[i]=false;
  r[x[1]+n*y[1]-n] = true;
  str="";
  chessknight(1);
  str=str+ "<br><br>Найдено "+u+" решений с a1";
  document.write(str);
}

function chessknight(k)
{
  if (k==n*n) 
  {
    u++;
    printing(u);
  }
  s[k]=0;
   while(s[k]<8)
   {
      s[k]=s[k]+1;
      if ((r[x[k]+dx[s[k]]+n*(y[k]+dy[s[k]])-n]==false) 
          && (x[k]+dx[s[k]]>=1) && (x[k]+dx[s[k]]<=n) 
          && (y[k]+dy[s[k]]>=1) && (y[k]+dy[s[k]]<=n))
      {
         r[x[k]+dx[s[k]]+n*(y[k]+dy[s[k]])-n] = true;  
         x[k+1] = x[k]+dx[s[k]];  
         y[k+1] = y[k]+dy[s[k]];
         chessknight(k+1);
      }
   }
   r[x[k]+n*y[k]-n] = false;
   x[k] = 0;
   y[k] = 0;
   s[k] = 0;
}

function printing(u)
{
  for (var i=1; i<=n*n; i++) str=str+b[x[i]]+y[i]+" ";
  str = str+" = решение "+u+"<br>"; 
}

</script>

</body>
</html>
Ответить с цитированием
  #14 (permalink)  
Старый 30.01.2013, 12:47
Интересующийся
Отправить личное сообщение для Владимир Фомин Посмотреть профиль Найти все сообщения от Владимир Фомин
 
Регистрация: 21.01.2013
Сообщений: 16

Сообщение от nasqad Посмотреть сообщение
Автор у вас в жизни долгое время мать играла роль авторитета или я ошибаюсь?
У вас очень однобокое мировоззрение основанное на очень маленьком опыте, и я это говорю осознавая огромную разницу в возрасте.
Нет, в телепередаче "Всюду жизнь" по телеканалу "Мир" всё наврали, будто мать играла роль авторитета. Можете прочитать (или послушать аудио) опровержение.

Почему же однобокое мировоззрение? В чём именно я не прав?
Ответить с цитированием
  #15 (permalink)  
Старый 30.01.2013, 12:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Владимир Фомин,
на всякий случай http://ateist.spb.ru/javascript/knight.htm
немного перепутано нажмите d2 и посмотрите результат
function begining(vertical, horizontal)

можно исправить поменяв тут местами vertical, horizontal.
Моя програма просто как вариант решения.
Ответить с цитированием
  #16 (permalink)  
Старый 30.01.2013, 13:09
Интересующийся
Отправить личное сообщение для Владимир Фомин Посмотреть профиль Найти все сообщения от Владимир Фомин
 
Регистрация: 21.01.2013
Сообщений: 16

Сообщение от рони Посмотреть сообщение
Владимир Фомин,
на всякий случай http://ateist.spb.ru/javascript/knight.htm
немного перепутано нажмите d2 и посмотрите результат
function begining(vertical, horizontal)

можно исправить поменяв тут местами vertical, horizontal.
Моя програма просто как вариант решения.
Спасибо, я исправил.
Ответить с цитированием
  #17 (permalink)  
Старый 30.01.2013, 13:26
Профессор
Отправить личное сообщение для l-liava-l Посмотреть профиль Найти все сообщения от l-liava-l
 
Регистрация: 14.03.2012
Сообщений: 1,808

Цитата:
var n = 5;
x = new Array(); 
y = new Array(); 
b = new Array("0", "a", "b", "c", "d", "e");
r = new Array();
u;
dx = new Array(0,  1,  2,  2,  1, -1, -2, -2, -1,  0);
dy = new Array(0,  2,  1, -1, -2, -2, -1,  1,  2,  0);
s = new Array();
str;
Лучше использовать одно слово var для всех переменных, а вместо new Array литерал - [].

Так будет читабельней и быстрее:
var n = 5,
u,str,
x = [], 
y = [],
s = [],
r = [],
b = ["0", "a", "b", "c", "d", "e"],
dx = [0,  1,  2,  2,  1, -1, -2, -2, -1,  0],
dy = [0,  2,  1, -1, -2, -2, -1,  1,  2,  0];
__________________
Научу себя плохому
Ответить с цитированием
  #18 (permalink)  
Старый 30.01.2013, 16:12
Интересующийся
Отправить личное сообщение для Владимир Фомин Посмотреть профиль Найти все сообщения от Владимир Фомин
 
Регистрация: 21.01.2013
Сообщений: 16

Вот так понятнее, с циклом for. Да?


<html>
<head>                                                                     
<title>Программа, которая выводит пути обхода конём всех клеток шахматной доски по одному разу.</title>
<META http-equiv=Content-Type content="text/html; charset=windows-1251">
</head>
<body>
<h3 align="center">Программа, которая выводит пути обхода конём всех клеток шахматной доски по одному разу.</h3>

<div align="center">
<form  id="knight5" action="" method = "get">
<input name="button" value="e1" onclick="begining(1,5)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="e2" onclick="begining(2,5)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="e3" onclick="begining(3,5)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="e4" onclick="begining(4,5)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="e5" onclick="begining(5,5)" type="button">
<br><br>
<input name="button" value="d1" onclick="begining(1,4)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="d2" onclick="begining(2,4)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="d3" onclick="begining(3,4)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="d4" onclick="begining(4,4)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="d5" onclick="begining(5,4)" type="button">
<br><br>
<input name="button" value="c1" onclick="begining(1,3)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="c2" onclick="begining(2,3)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="c3" onclick="begining(3,3)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="c4" onclick="begining(4,3)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="c5" onclick="begining(5,3)" type="button">
<br><br>
<input name="button" value="b1" onclick="begining(1,2)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="b2" onclick="begining(2,2)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="b3" onclick="begining(3,2)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="b4" onclick="begining(4,2)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="b5" onclick="begining(5,2)" type="button">
<br><br>
<input name="button" value="a1" onclick="begining(1,1)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="a2" onclick="begining(2,1)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="a3" onclick="begining(3,1)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="a4" onclick="begining(4,1)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="a5" onclick="begining(5,1)" type="button">
</form>
</div>                       
<div id="REZ"></div> 

<script type="text/javascript">

var n = 5;
var x = [];   //номер горизонтали на k-м шаге, 1<=k<=n*n, 1<=x[k]<=n 
var y = [];    //номер горизонтали на k-м шаге, 1<=k<=n*n, 1<=y[k]<=n 
var b = [null, "a", "b", "c", "d", "e"];
var r = [];
var u;
var dx = [null,  1,  2,  2,  1, -1, -2, -2, -1];
var dy = [null,  2,  1, -1, -2, -2, -1,  1,  2];
var solution;

function begining(horizontal, vertical)
{
  u = 0; 
  x[1]=vertical; 
  y[1]=horizontal;
  for (var i = 1; i<=n*n; i++) r[i]=false;
  r[x[1]+n*y[1]-n] = true;
  solution = "";
  chessknight(1);
  solution = solution + "<br><br>Найдено "+u+" решений с "+b[vertical]+horizontal;
  document.getElementById("REZ").innerHTML = solution; 
}

function chessknight(k)
{
  if (k==n*n) 
  {
    u++;
    printing(u);
  }
  for (var s=1; s<=8; s++)
  {
      if ((r[x[k]+dx[s]+n*(y[k]+dy[s])-n]==false) 
	    && (x[k]+dx[s]>=1) && (x[k]+dx[s]<=n) 
            && (y[k]+dy[s]>=1) && (y[k]+dy[s]<=n))
      {
         r[x[k]+dx[s]+n*(y[k]+dy[s])-n] = true;  
         x[k+1] = x[k]+dx[s];  
         y[k+1] = y[k]+dy[s];
         chessknight(k+1);
      }
   }
   r[x[k]+n*y[k]-n] = false;
   x[k] = null;
   y[k] = null;
}

function printing(u)
{
  var str="";
  for (var i=1; i<=n*n; i++) str=str+b[x[i]]+y[i]+" ";
  str = str+" = решение "+u+"<br>"; 
  solution = solution + str;
}

</script>

</body>
</html>


А почему в браузере Mozilla Firefox быстро работает, а в Internet Explorer 8 - намного медленнее. Ничего нельзя сделать, чтобы и в Internet Explorer так же быстро работало?

Код скрпита с подсветкой синтакисиса

var n = 5;
var x = [];   //номер горизонтали на k-м шаге, 1<=k<=n*n, 1<=x[k]<=n 
var y = [];    //номер горизонтали на k-м шаге, 1<=k<=n*n, 1<=y[k]<=n 
var b = [null, "a", "b", "c", "d", "e"];
var r = [];
var u;
var dx = [null,  1,  2,  2,  1, -1, -2, -2, -1];
var dy = [null,  2,  1, -1, -2, -2, -1,  1,  2];
var solution;

function begining(horizontal, vertical)
{
  u = 0; 
  x[1]=vertical; 
  y[1]=horizontal;
  for (var i = 1; i<=n*n; i++) r[i]=false;
  r[x[1]+n*y[1]-n] = true;
  solution = "";
  chessknight(1);
  solution = solution + "<br><br>Найдено "+u+" решений с "+b[vertical]+horizontal;
  document.getElementById("REZ").innerHTML = solution; 
}

function chessknight(k)
{
  if (k==n*n) 
  {
    u++;
    printing(u);
  }
  for (var s=1; s<=8; s++)
  {
      if ((r[x[k]+dx[s]+n*(y[k]+dy[s])-n]==false) 
	    && (x[k]+dx[s]>=1) && (x[k]+dx[s]<=n) 
            && (y[k]+dy[s]>=1) && (y[k]+dy[s]<=n))
      {
         r[x[k]+dx[s]+n*(y[k]+dy[s])-n] = true;  
         x[k+1] = x[k]+dx[s];  
         y[k+1] = y[k]+dy[s];
         chessknight(k+1);
      }
   }
   r[x[k]+n*y[k]-n] = false;
   x[k] = null;
   y[k] = null;
}

function printing(u)
{
  var str="";
  for (var i=1; i<=n*n; i++) str=str+b[x[i]]+y[i]+" ";
  str = str+" = решение "+u+"<br>"; 
  solution = solution + str;
}

Последний раз редактировалось Владимир Фомин, 30.01.2013 в 16:16.
Ответить с цитированием
  #19 (permalink)  
Старый 06.03.2013, 02:47
Аватар для Shaci
:-/
Отправить личное сообщение для Shaci Посмотреть профиль Найти все сообщения от Shaci
 
Регистрация: 28.09.2009
Сообщений: 1,126

Сообщение от Владимир Фомин
тобы и в Internet Explorer так же быстро работало?
версию не 8, а хотя бы 9 IE поставить, по идее побыстрее должно пойтить
Ответить с цитированием
  #20 (permalink)  
Старый 08.03.2013, 16:59
Интересующийся
Отправить личное сообщение для Владимир Фомин Посмотреть профиль Найти все сообщения от Владимир Фомин
 
Регистрация: 21.01.2013
Сообщений: 16

Сообщение от Shaci Посмотреть сообщение
версию не 8, а хотя бы 9 IE поставить, по идее побыстрее должно пойтить
Для Windows XP только Ie 8 есть, 9 уже нет вроде бы.

Кстати, есть ещё два вопроса.
Не подскажете ли проигрыватель, который воспроизводит не только mp3, а и midi?

Видите, то аудио mp3 http://ateist.spb.ru/aboutme.htm воспроизводится при открытии этой страницы, но файлы с расширением mid не воспроизводятся.

Как вставить на страницу сайта потоковое радио с адресом
http://212.124.29.69
?

Есть такой способ.

<embed type="application/x-mplayer2" name="MediaPlayer0" src="http://212.124.29.69/" autostart="1" animationatstart="0" showcontrols="1" showaudiocontrols="1" showpositioncontrols="0" autosize="0" showstatusbar="1" displaysize="0" transparentatstart="1" width="300" height="70">

Но
1) этот код невалидный;
2) радио воспроизводится только в Internet Explorer и не воспроизводится в других браузерах.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
НА мой сайт произошло нападение sergiocharm Оффтопик 20 31.01.2013 19:05
Оцените мой сайт Ru006 Ваши сайты и скрипты 8 31.07.2010 18:07
Оцените мой сайт Deemc Ваши сайты и скрипты 19 26.07.2010 17:57
Пожалуйста оцените мой сайт. DesertEagle_STALKER Ваши сайты и скрипты 13 06.04.2010 16:00
Мой сайт Barrio Ваши сайты и скрипты 3 20.11.2008 17:20