powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Относительно простые задачки
25 сообщений из 339, страница 2 из 14
Относительно простые задачки
    #39914840
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
Соколинский Борис
Если при проходе B->A выключать во всех вагонах свет, то можно обратно в B не возвращаться, просто искать не первый выключенный, а первый включенный.
так первый включенный и будет В :) то есть всё то же самое.
Первый по ходу движения.
Т.е. схема такая:
когда идем CW первый вагон в цепочке выключен, остальные проверенные включены.
когда идем CCW первый вагон включен, остальные проверенные выключены.
При возврате в точку проверки каждый раз решаем в какую сторону идти - туда где меньше проверенных вагонов, и по ходу движения либо включаем проверенные, либо выключаем.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914843
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дайте определение вагона А,

как-то не особенно очевидно, что все тут срастается.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914846
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю, тут лучше сразу на IT-шный язык перейти.
Есть закольцованная R/W цепочка битов неизвестной длины и состояния, нужно найти длину.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914848
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть машина Тьюринга которая бегает по ленте завернутой в кольцо. На ленте - только нули и единички.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914855
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... и указатель стоит на бите со значением b

поехали
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914858
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
машина Тьюринга
которая к тому же умеет считать шаги, без этого можно только включить (или выключить) свет во всех вагонах
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914860
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
mayton
машина Тьюринга
которая к тому же умеет считать шаги, без этого можно только включить (или выключить) свет во всех вагонах

Да у нее нет другой памяти кроме ленты. Но согласись. Было бы красивое решение? Да?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914867
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
... и указатель стоит на бите со значением b

поехали

Просто все. Суть в том что сзади остаются единицы и проверяется что до следующего нуля круг вперед. Если нет, то 0 становится 1.

Допустим исходное состояние
Код: plaintext
010101010
Указатель А на первый бит, выставляем его в 0, идем вперед до следующего 0 это будет Б
Код: plaintext
1.
010101010
А Б
Устанавливаем Б в 1, проверяем что А == 0, если так то продолжаем, ставим 1 в А, возвращаемся в Б и назначаем его А
Код: plaintext
1.
110101010
  А
дальше повторяем
Код: plaintext
1.
110101010
  А Б
Код: plaintext
1.
111101010
    А Б
Код: plaintext
1.
111111010
      А Б
и на следующей итерации А и Б окажутся одним и тем же битом.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914869
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: javascript
1.
2.
3.
4.
5.
6.
interface LoopTrain {
    boolean check();
    boolean set(boolean value);
    void stepRight();
    void stepLeft();
}
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914879
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Имя пользователя1
пропущено...
которая к тому же умеет считать шаги, без этого можно только включить (или выключить) свет во всех вагонах

Да у нее нет другой памяти кроме ленты. Но согласись. Было бы красивое решение? Да?
согласен.

и навскидку, такое решение есть для задачи "обнулить машиной Тьюринга все ячейки закольцованной ленты неопределенной длины".
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914883
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

спасибо
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914891
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Имя пользователя1
пропущено...
так первый включенный и будет В :) то есть всё то же самое.
Первый по ходу движения.
Т.е. схема такая:
когда идем CW первый вагон в цепочке выключен, остальные проверенные включены.
когда идем CCW первый вагон включен, остальные проверенные выключены.
При возврате в точку проверки каждый раз решаем в какую сторону идти - туда где меньше проверенных вагонов, и по ходу движения либо включаем проверенные, либо выключаем.
А все таки 4 N получается. Ибо количество шагов возврата к точке проверке и обратно не более N
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914899
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Соколинский Борис
пропущено...
Первый по ходу движения.
Т.е. схема такая:
когда идем CW первый вагон в цепочке выключен, остальные проверенные включены.
когда идем CCW первый вагон включен, остальные проверенные выключены.
При возврате в точку проверки каждый раз решаем в какую сторону идти - туда где меньше проверенных вагонов, и по ходу движения либо включаем проверенные, либо выключаем.
А все таки 4 N получается. Ибо количество шагов возврата к точке проверке и обратно не более N
не понял идею.
можно на простом примере?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914921
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,
есть два счетчика P/N: количество проверенных битов при движении вперед/назад
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
010101000 P=0 N=0
A
010101000 P=0 N=2
  B  
001101000 P=2 N=0
A
101101000 P=2 N=4
     B               
101100111 P=2 N=4
A      
111110111 P=4 N=4
     B               
Переключаем и идем в любую сторону.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914944
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cорри, не дописал две итерации

есть два счетчика P/N: количество проверенных битов при движении вперед/назад
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
010101000 P=0 N=0
A
010101000 P=2 N=0
  B  
001101000 P=2 N=0
A
101101000 P=2 N=4
     B               
101100111 P=2 N=4
A      
011110111 P=4 N=4
     B               
000001111 P=4 N=4
A
100000000 P=4 N=8
A,B
011111111 P=8 N=8
A<>A
C=9
                    
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915016
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Да у нее нет другой памяти кроме ленты. Но согласись. Было бы красивое решение? Да?
думаю что в этом случае как раз память есть, а именно сколько шагов и в каком направлении мы прошли.

Хотя в твоем случае это по сути обычная машина Тьюринга.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915018
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Код: plaintext
1.
2.
3.
010101000 P=0 N=0
A
010101000 P=2 N=0
  B  
Это значит идем вправо на два вагона?
А потом возвращаемся обратно на два вагона, то есть всего 4 шага ?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915077
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin,
Долго объяснять, я запрограммировал оба варианта
Код
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
program CycleChain;
{$APPTYPE CONSOLE}
uses sysutils;
type
  TChainGenerator=class
  private
    FRandSeed: integer;
    FBits: array of Boolean;
    FIndex: integer;
    FIterCounter: integer;
    function GetState: boolean;
    procedure SetState(const Value: boolean);
  public
    procedure Init(N: integer);
    procedure Reset(AsRandom: boolean);

    property State: boolean read GetState write SetState;
    property NIter: integer read FIterCounter;
    procedure Move(FF: boolean);
  end;

{ TChainGenerator }

function TChainGenerator.GetState: boolean;
begin
  Result:=FBits[FIndex];
end;

procedure TChainGenerator.Init(N: integer);
begin
  SetLength(FBits, N);
  Randomize;
  FRandSeed:=RandSeed;
end;

procedure TChainGenerator.Move(FF: boolean);
begin
  if FF
    then FIndex:=(FIndex+1) mod length(FBits)
  else if FIndex=0
    then FIndex:=high(FBits)
    else dec(FIndex);
  inc(FIterCounter);
end;

procedure TChainGenerator.Reset(AsRandom: boolean);
var i: integer;
begin
  RandSeed:=FRandSeed;
  for i:=0 to high(FBits) do
  if AsRandom
    then FBits[i]:=random<0.5
    else FBits[i]:=odd(i);
  FIndex:=0;
  FIterCounter:=0;
end;

procedure TChainGenerator.SetState(const Value: boolean);
begin
  FBits[FIndex]:=value;
end;


//========= поиск в одном направлении =====================//
function SearchUni(CG: TChainGenerator): integer;
var
  i, CCounter: integer;
begin
  repeat
    CG.State:=false; //устанавливаем начальную позицию в 0
    CCounter:=0;     //cбрасываем счетчик
    repeat
      CG.Move(true);
      inc(CCounter);
    until not CG.State; //дошли нуля

    CG.State:=true; //переключили в 1

    for i:=CCounter-1 downto 0 do //возвращаемся назад
      CG.Move(false);

    if CG.State
      then Break; //изменился переключатель

    //перенос точки проверки
    CG.State:=true; //переключаем
    for i:=0 to CCounter-1 do //двигаемся обратно
      CG.Move(true);

  until false;
  Result:=CCounter;
end;


//========= поиск в двух направлениях =====================//
function SearchBi(CG: TChainGenerator): integer;
var
  i: integer;
  C: array[boolean] of Integer;
  FF: boolean;

begin
  C[false]:=0; C[true]:=0; FF:=true;
  repeat
    CG.State:=not FF; //устанавливаем начальную позицию в обратном направлении

    //движение без проверки
    for i:=0 to C[ff]-1 do begin
      CG.Move(FF);
      CG.State:=FF;
    end;

    //движение с проверкой
    repeat
      CG.Move(FF);
      inc(C[FF]);
      if (CG.State<>FF) then begin
        CG.State:=FF; //переключаем состояние
        Break;
      end;
    until false;

    //возврат в точку для проверки
    FF:=not FF;
    for i:=C[not FF]-1 downto 0 do begin
      CG.Move(FF);
      if i<>0
        then CG.State:=FF; //переключаем состояние для всех кроме точки проверки
    end;

    if CG.State<>FF
      then Break //изменился переключатель, нашли конец
    else begin
      //выбор направления движения
      if C[FF]>C[not FF] then
        FF:=not FF;

      //перенос точки проверки
      for i:=0 to C[FF] do begin
        CG.State:=FF;
        CG.Move(FF);
      end;
      inc(C[not FF], C[FF]);
      C[FF]:=0;
    end;
  until false;
  Result:=C[not FF];
end;



//================ Вызывалка ====================================//
var
  Rnd: boolean;
  i, N: integer;
  CG: TChainGenerator;

begin
  CG:=TChainGenerator.Create;

  for rnd:=false to true do begin
    if Rnd
      then Writeln('========Random test=========')
      else Writeln('========Regular test========');

    for i:=1 to 9 do begin
      N:=i*10;
      CG.Init(i*10);
      Write(format('N=%d',[N]));
      CG.Reset(Rnd);
      Write(format(' uni N/C %d/%d',[SearchUni(CG), CG.NIter]));
      CG.Reset(Rnd);
      Writeln(format(' bi N/C %d/%d',[SearchBi(CG), CG.NIter]));
    end;
    Writeln;
  end;
  Readln;
end.



Результаты

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
========Regular test========
N=10 uni N/C 10/44 bi N/C 10/43
N=20 uni N/C 20/94 bi N/C 20/83
N=30 uni N/C 30/144 bi N/C 30/123
N=40 uni N/C 40/194 bi N/C 40/163
N=50 uni N/C 50/244 bi N/C 50/203
N=60 uni N/C 60/294 bi N/C 60/243
N=70 uni N/C 70/344 bi N/C 70/283
N=80 uni N/C 80/394 bi N/C 80/323
N=90 uni N/C 90/444 bi N/C 90/363

========Random test=========
N=10 uni N/C 10/47 bi N/C 10/46
N=20 uni N/C 20/97 bi N/C 20/90
N=30 uni N/C 30/147 bi N/C 30/128
N=40 uni N/C 40/197 bi N/C 40/169
N=50 uni N/C 50/247 bi N/C 50/220
N=60 uni N/C 60/297 bi N/C 60/258
N=70 uni N/C 70/329 bi N/C 70/300
N=80 uni N/C 80/397 bi N/C 80/346 
N=90 uni N/C 90/441 bi N/C 90/386
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915078
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
господа, вспомнился ещё паззл умеренной сложности.

На фестиваль фокусников приехало 65 участников. Так уж заведено правилами, что в любой день участник может либо выступать, либо смотреть выступления других, но нельзя и то и другое. Какое минимальное количество дней достаточно для фестиваля, чтобы каждый увидел выступление каждого? С доказательством минимальности.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915100
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сможем - ли мы посчитать площадь поверхности тора таким-же образом окрашивая клетки в 0 или 1 для
случайной поверхности где записан шум?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915102
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Сможем - ли мы посчитать площадь поверхности тора таким-же образом окрашивая клетки в 0 или 1 для
случайной поверхности где записан шум?
сначала выясним высоту, потом ширину :)

а вот как обнулить все клетки клеточным автоматом вроде двумерной машины Тьюринга, который может только записывать ячейку, смотреть ячейку, и двигаться на одну из 4 соседних, но не умеет считать - это уже интересный вопрос.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915106
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дали бы третий цвет...
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915255
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
господа, вспомнился ещё паззл умеренной сложности.

На фестиваль фокусников приехало 65 участников. Так уж заведено правилами, что в любой день участник может либо выступать, либо смотреть выступления других, но нельзя и то и другое. Какое минимальное количество дней достаточно для фестиваля, чтобы каждый увидел выступление каждого? С доказательством минимальности.
Есть какие-то ограничения на количество выступлений? Если нет, то ответ - бесконечность (Кто-то решил выступать каждый день)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915286
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Имя пользователя1
господа, вспомнился ещё паззл умеренной сложности.

На фестиваль фокусников приехало 65 участников. Так уж заведено правилами, что в любой день участник может либо выступать, либо смотреть выступления других, но нельзя и то и другое. Какое минимальное количество дней достаточно для фестиваля, чтобы каждый увидел выступление каждого? С доказательством минимальности.
Есть какие-то ограничения на количество выступлений? Если нет, то ответ - бесконечность (Кто-то решил выступать каждый день)
можно считать, что у каждого есть только один уникальный фокус, который он может показать. И все остальные должны хотя бы раз это увидеть. Он может выступать с этим фокусом хоть сколько угодно, однако нам требуется минимизировать количество дней фестиваля.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915288
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шестьдесят четыре артиста выступают в первый день для одного зрителя.
На следующий день - сольное выступление для шестидесяти четырёх зрителей.
...
Рейтинг: 0 / 0
25 сообщений из 339, страница 2 из 14
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Относительно простые задачки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]