Я тоже на компьютере перебрал все варианты квадратов.
Я тоже сперва на компьютере тупым перебором, но потом пересчитал и вручную все 10-12 (или сколько их там) вариантов. Сошлось.
(Оффтоп)
На компьютере примерно так:
Код:
type vector = array[1..4] of byte;
var aa: array[1..256] of vector;
num, all, i,k, i1,i2,i3,i4: integer;
a1,a2,a3,a4: vector;
begin
num:=0;
for i1:=0 to 3 do
for i2:=0 to 3 do
for i3:=0 to 3 do
for i4:=0 to 3 do
if i1+i2+i3+i4=3 then begin
inc(num);
aa[num][1]:=i1; aa[num][2]:=i2;
aa[num][3]:=i3; aa[num][4]:=i4;
writeln(num:3, ' ', aa[num][1]:2, aa[num][2]:2,
aa[num][3]:2, aa[num][4]:2);
end;
readln;
all:=0;
for i1:=1 to num do
for i2:=1 to num do
for i3:=1 to num do
for i4:=1 to num do begin
a1:=aa[i1]; a2:=aa[i2]; a3:=aa[i3]; a4:=aa[i4];
if a1[1]+a2[1]+a3[1]+a4[1]<>3 then continue;
if a1[2]+a2[2]+a3[2]+a4[2]<>3 then continue;
if a1[3]+a2[3]+a3[3]+a4[3]<>3 then continue;
if a1[4]+a2[4]+a3[4]+a4[4]<>3 then continue;
(*
k:=0;
for i:=1 to 4 do if a1[i]=2 then inc(k);
for i:=1 to 4 do if a2[i]=2 then inc(k);
for i:=1 to 4 do if a3[i]=2 then inc(k);
for i:=1 to 4 do if a4[i]=2 then inc(k);
if k<>4 then continue;
(**)
inc(all);
writeln;
writeln(all:5, ' ', a1[1]:2, a1[2]:2, a1[3]:2, a1[4]:2);
writeln('':5, ' ', a2[1]:2, a2[2]:2, a2[3]:2, a2[4]:2);
writeln('':5, ' ', a3[1]:2, a3[2]:2, a3[3]:2, a3[4]:2);
writeln('':5, ' ', a4[1]:2, a4[2]:2, a4[3]:2, a4[4]:2);
end;
readln;
end.
(глючит паскалевский парсер)