Обсуждение:197 (игра) — различия между версиями

Материал из ALL
Перейти к: навигация, поиск
(Прога для общего случая: -лишнее)
Строка 82: Строка 82:
 
   S:=W[ii];
 
   S:=W[ii];
 
   writeln('Ход компьютера: ', S);
 
   writeln('Ход компьютера: ', S);
 +
  end;
 +
ii:=ii+1;
 +
until S=W[ii-1];
 +
until S=N;
 +
writeln('Сасай, лалка!');
 +
readln;
 +
END.
 +
</poem>
 +
 +
== Прога для варианта игры с добавлением 1 или 2 квадратов ==
 +
<poem>
 +
Program WisestProf;
 +
var N, x, y, i, k, l, ww, diff, fs, first, h, S, ii, hod: integer;
 +
W: array[1..10000] of integer;
 +
label Net, No, Nicht;
 +
 +
BEGIN
 +
writeln('Добро пожаловать в "Просто добавь квадрат"! Прибавлять можно только квадраты натуральных чисел и писать сразу сумму (на первом ходу это просто квадрат). Выиграет тот, кто составит сумму, равную победному числу. Составлять сумму, превышающую это число, запрещено.');
 +
Net:
 +
write('Назови победное число (НЕ квадрат натурального): ');
 +
readln(N);
 +
for x:=1 to trunc(sqrt(N) do
 +
for y:=0 to x do if x*x+y*y=N then
 +
begin
 +
writeln('Давай по новой, Миша, число хуйня');
 +
goto Net;
 +
end;
 +
 +
W[1]:=N;
 +
S:=0;
 +
i:=1;
 +
ww:=N;
 +
 +
for k:=1 to N-1 do
 +
begin
 +
diff:=0;
 +
ww:=ww-1;
 +
l:=1;
 +
  repeat
 +
  for x:=1 to trunc(sqrt(N) do
 +
  for y:=0 to x do if x*x+y*y=W[l]-ww then diff:=1;
 +
  l:=l+1;
 +
  until (diff=1) or (l>i);
 +
 +
If diff=0 then
 +
  begin
 +
  i:=i+1;
 +
  W[i]:=ww;
 +
  end;
 +
end;
 +
 +
fs:=1;
 +
first:=0;
 +
 +
repeat
 +
for x:=1 to trunc(sqrt(N) do
 +
for y:=0 to x do if x*x+y*y=W[fs] then if first=0 then
 +
begin
 +
writeln('Компьютер ходит первым.');
 +
S:=W[fs];
 +
writeln( 'Ход компьютера: ', x*x, '+', y*y, '=', S);
 +
first:=1;
 +
end;
 +
fs:=fs+1;
 +
until (first=1) or (fs>i);
 +
 +
repeat
 +
No:
 +
write('Твой ход, первый квадрат: ');
 +
readln(h);
 +
if (h>0) and (round(sqrt(h))=sqrt(h)) and (S+h<N) then S:=S+h else
 +
begin
 +
writeln('Ты неправильно походил, мудила!');
 +
goto No;
 +
end;
 +
 +
Nicht:
 +
write ('Твой ход, второй квадрат или 0: ');
 +
readln(h);
 +
if (round(sqrt(h))=sqrt(h)) and (S+h<N) then S:=S+h else
 +
begin
 +
writeln('Ты неправильно походил, мудила!');
 +
goto Nicht;
 +
end;
 +
 +
writeln('Сумма после твоего хода: ', S);
 +
 +
ii:=1;
 +
hod:=0;
 +
 +
repeat
 +
for x:=1 to trunc(sqrt(N) do
 +
for y:=0 to x do if S+x*x+y*y=W[ii] then if S<>W[ii] then if hod=0
 +
  begin
 +
  writeln( 'Ход компьютера: ', S, '+',  x*x, '+', y*y, '=', W[ii]);
 +
  S:=W[ii];
 
   end;
 
   end;
 
  ii:=ii+1;
 
  ii:=ii+1;

Версия 14:36, 21 октября 2023

ты голову то пожалей такое шедевр писать --пидарасина 16:00, 15 марта 2016 (UTC)

Проф, вам надо придумать математический анализ игр, однозначно

Отличная игра, в нее имеет смысл играть как можно больше. Komandante (обсуждение) 17:56, 18 марта 2016 (UTC)

Спасибо, постараюсь придумать ещё подобные игры. А матан и у Логика из Самары неплохо получается. Проф (обсуждение) 07:00, 19 марта 2016 (UTC)
Отлично! Кстати, вы там писали, что считаете очень профоугодной игру Hearthstone, а что вы думаете об игре, от которой это все пошло - то есть magic the gathering? Играли? Komandante (обсуждение) 10:27, 19 марта 2016 (UTC)
Не, у меня в этом плане синдром утёнка. Проф (обсуждение) 07:35, 20 марта 2016 (UTC)

Кстати, в вашей программе компьютер всегда выигрывает... Вот ведь подлый робот. Komandante (обсуждение) 10:28, 19 марта 2016 (UTC)

Ну не зря же я вручную просчитал все 50 млрд. возможных вариантов для этого. Проф (обсуждение) 07:35, 20 марта 2016 (UTC)

Великая игра от великого автора. -- (обсуждение) 18:22, 20 марта 2016 (UTC)

Прога для общего случая

Program WisestProf;
var N, i, k, l, ww, diff, fs, first, h, S, ii, c: integer;
W: array[1..10000] of integer;
label Net, No;

BEGIN
writeln('Добро пожаловать в "Просто добавь квадрат"! Прибавлять можно только квадраты натуральных чисел и писать сразу сумму (на первом ходу это просто квадрат). Выиграет тот, кто составит сумму, равную победному числу. Составлять сумму, превышающую это число, запрещено.');
 Net:
 write('Назови победное число (НЕ квадрат натурального): ');
 readln(N);
 if round(sqrt(N))<>sqrt(N) then W[1]:=N else
 begin
 writeln('Давай по новой, Миша, число хуйня');
 goto Net;
 end;

S:=0;
i:=1;
ww:=N;

for k:=1 to N-1 do
 begin
 diff:=0;
 ww:=ww-1;
 l:=1;
  repeat
  if round(sqrt(W[l]-ww))=sqrt(W[l]-ww) then diff:=1;
  l:=l+1;
  until (diff=1) or (l>i);

 If diff=0 then
  begin
  i:=i+1;
  W[i]:=ww;
  end;
end;

fs:=1;
first:=0;

repeat
if round(sqrt(W[fs]))=sqrt(W[fs]) then
 begin
 writeln('Компьютер ходит первым.');
 S:=W[fs];
 writeln('Ход компьютера: ', S);
 first:=1;
 end;
fs:=fs+1;
until (first=1) or (fs>i);

repeat
No:
write('Твой ход: ');
readln(h);
if (h>S) and (round(sqrt(abs(h-S)))=sqrt(abs(h-S))) and (h<N) then S:=h else
 begin
 writeln('Ты неправильно походил, мудила!');
 goto No;
 end;

ii:=1;
 repeat
  for c:=1 to round(sqrt((N))) do if S+c*c=W[ii] then
  begin
  S:=W[ii];
  writeln('Ход компьютера: ', S);
  end;
 ii:=ii+1;
 until S=W[ii-1];
until S=N;
writeln('Сасай, лалка!');
readln;
END.

Прога для варианта игры с добавлением 1 или 2 квадратов

Program WisestProf;
var N, x, y, i, k, l, ww, diff, fs, first, h, S, ii, hod: integer;
W: array[1..10000] of integer;
label Net, No, Nicht;

BEGIN
writeln('Добро пожаловать в "Просто добавь квадрат"! Прибавлять можно только квадраты натуральных чисел и писать сразу сумму (на первом ходу это просто квадрат). Выиграет тот, кто составит сумму, равную победному числу. Составлять сумму, превышающую это число, запрещено.');
 Net:
 write('Назови победное число (НЕ квадрат натурального): ');
 readln(N);
 for x:=1 to trunc(sqrt(N) do
 for y:=0 to x do if x*x+y*y=N then
 begin
 writeln('Давай по новой, Миша, число хуйня');
 goto Net;
 end;

W[1]:=N;
S:=0;
i:=1;
ww:=N;

for k:=1 to N-1 do
 begin
 diff:=0;
 ww:=ww-1;
 l:=1;
  repeat
  for x:=1 to trunc(sqrt(N) do
  for y:=0 to x do if x*x+y*y=W[l]-ww then diff:=1;
  l:=l+1;
  until (diff=1) or (l>i);

 If diff=0 then
  begin
  i:=i+1;
  W[i]:=ww;
  end;
end;

fs:=1;
first:=0;

repeat
for x:=1 to trunc(sqrt(N) do
for y:=0 to x do if x*x+y*y=W[fs] then if first=0 then
 begin
 writeln('Компьютер ходит первым.');
 S:=W[fs];
 writeln( 'Ход компьютера: ', x*x, '+', y*y, '=', S);
 first:=1;
 end;
fs:=fs+1;
until (first=1) or (fs>i);

repeat
No:
write('Твой ход, первый квадрат: ');
readln(h);
if (h>0) and (round(sqrt(h))=sqrt(h)) and (S+h<N) then S:=S+h else
 begin
 writeln('Ты неправильно походил, мудила!');
 goto No;
 end;

Nicht:
write ('Твой ход, второй квадрат или 0: ');
readln(h);
if (round(sqrt(h))=sqrt(h)) and (S+h<N) then S:=S+h else
 begin
 writeln('Ты неправильно походил, мудила!');
 goto Nicht;
 end;

writeln('Сумма после твоего хода: ', S);

ii:=1;
hod:=0;

 repeat
 for x:=1 to trunc(sqrt(N) do
 for y:=0 to x do if S+x*x+y*y=W[ii] then if S<>W[ii] then if hod=0
  begin
  writeln( 'Ход компьютера: ', S, '+', x*x, '+', y*y, '=', W[ii]);
  S:=W[ii];
  end;
 ii:=ii+1;
 until S=W[ii-1];
until S=N;
writeln('Сасай, лалка!');
readln;
END.