Скажите, а для подготовки всего что выложили, вы реально использовали JS, или у вас есть аппаратно ускоренная реализация?
На чистом JS. Выкладываю пример для картинки «habr».
Здесь считает.
Запуск производится через консоль. Пишем в консоль evil(3000); и поехали. Туда же, в консоль, записываются массивы для «тепловой карты».
Считал в FireFox. Если считать автоматы с большим полем — Chrome перестает подавать признаки жизни. В FireFox появляется кнопка «Остановить это».
Тогда припадок может случиться не только у эпилептиков.
Два варианта сделал:
1. Цвет движется вместе со слоем.
2. Цвет каждого соответствующего слоя не меняется.
Можно. На вход даем двоичную последовательность. Эту последовательность можно составить комбинаторно — копируя, инвертируя и переставляя биты. На бильярдах это легко показать, но это тема для отдельной статьи.
Например, последовательность floor(n(sqrt(5)+1)%2, для n=1, 2, 3, ...:
10100101101001011010110100101101001010010110100101101011010010110100101…
Можно строить рекурсивно, не вычисляя квадратные корни и остатки от деления:
function invers(array){ //инвертируем биты
var temp=[];
var size=array.length;
for(var i=0; i<size; i++){
if(array[i]==0)
temp[i]=1;
else
temp[i]=0;
}
return temp;
}
function revers(array, s){ //берем последние s бит в обратном порядке
var temp=[];
var size=array.length;
for(var i=0; i<s; i++) temp[i]=array[size-i-1];
return temp;
}
function seqence(fn, fn1){ //fn и fn1 - числа Фибоначчи F(n) и F(n-1)
if(fn1==3) return [1];
fn1=fn-fn1;
fn=fn-fn1;
var array=seqence(fn, fn1); //рекурсия
var a0=invers(array); //инвертированные биты
var a1=[];
if(fn1%2==0) a1=[1]; //добавляем "1" бит, если F(n-1) четное
var a2=revers(array, Math.floor((fn-fn1)/2)); //биты в обратном порядке
return a0.concat(a1, a2);
}
console.log((seqence(610, 377)).join(''));
Категорически вас приветствую, поздравляю с написанием первой статьи на Хабре и получением приглашения в наше скромное сообщество.
Чтобы получить бинарную матрицу, вариант «не идёт*(-)» можно отбросить. Не идет только в тех случаях, если стороны прямоугольника x и y не являются взаимно простыми числами. Фактически, если убрать все варианты, когда «идет» и оставить только те, когда «не идет» — получим таблицу взаимно простых чисел:
(минусами отмечены числа, имеющие общий делитель)
Таблица взаимно простых чисел сама по себе очень интересная и ее можно разглядывать часами (начало координат — левый верхний угол):
600х600:
но в нашем случае, от нее лучше избавиться, чтобы она не мешала нам в поиске закономерности.
Эти соотношения сторон (не взаимно простые) можно сократить на общий делитель, чтобы получить взаимно простые числа. Например, 6 и 8 можно сократить на общий делитель 2 и получить паттерн 3х4 (или же сделать штрих размером в 2 клетки и получить тот же паттерн):
Конечно, останутся случаи, когда одна (или обе) из сторон сокращается до 1 — если одна из сторон является делителем другой (или они равны). Будем считать эти случаи неизбежным злом :)
Все паттерны для прямоугольников со сторонами от 1 до 16:
В виде графика (начало координат — левый верхний угол):
На чистом JS. Выкладываю пример для картинки «habr».
Здесь считает.
Запуск производится через консоль. Пишем в консоль evil(3000); и поехали. Туда же, в консоль, записываются массивы для «тепловой карты».
Считал в FireFox. Если считать автоматы с большим полем — Chrome перестает подавать признаки жизни. В FireFox появляется кнопка «Остановить это».
Здесь смотрим, что насчитало.
Зеленым
Помедленнее (на поле 512х512)
Два варианта сделал:
1. Цвет движется вместе со слоем.
2. Цвет каждого соответствующего слоя не меняется.
Например, последовательность floor(n(sqrt(5)+1)%2, для n=1, 2, 3, ...:
10100101101001011010110100101101001010010110100101101011010010110100101…
Можно строить рекурсивно, не вычисляя квадратные корни и остатки от деления:
n*e (число Эйлера):
До сих пор пользуюсь почтой dial-up провайдера, зарегистрированной в 2002-ом году.
У меня в статье такие паттерны (если голову на 45° наклонить)
Чтобы получить бинарную матрицу, вариант «не идёт*(-)» можно отбросить. Не идет только в тех случаях, если стороны прямоугольника x и y не являются взаимно простыми числами. Фактически, если убрать все варианты, когда «идет» и оставить только те, когда «не идет» — получим таблицу взаимно простых чисел:
(минусами отмечены числа, имеющие общий делитель)
Таблица взаимно простых чисел сама по себе очень интересная и ее можно разглядывать часами (начало координат — левый верхний угол):
600х600:
но в нашем случае, от нее лучше избавиться, чтобы она не мешала нам в поиске закономерности.
Эти соотношения сторон (не взаимно простые) можно сократить на общий делитель, чтобы получить взаимно простые числа. Например, 6 и 8 можно сократить на общий делитель 2 и получить паттерн 3х4 (или же сделать штрих размером в 2 клетки и получить тот же паттерн):
Конечно, останутся случаи, когда одна (или обе) из сторон сокращается до 1 — если одна из сторон является делителем другой (или они равны). Будем считать эти случаи неизбежным злом :)
Все паттерны для прямоугольников со сторонами от 1 до 16:
В виде графика (начало координат — левый верхний угол):