Подведены итоги конкурса «Шифровальщик», который прошел 12 декабря 2020 года.
В конкурсе приняли участие 56 учащихся из учреждений общего среднего, профессионально-технического, среднего специального и дополнительного образования области.
Максимальное количество баллов этого конкурса составляет 16 баллов, так как задание № 5 по решению жюри не учитывается из-за ошибки в условии (лишняя звёздочка в примере).
На основании Положения о проведении областного «ТехноМарафона 2.1» жюри было определено количество победителей конкурса «Шифровальщик» областного «ТехноМарафона 2.1» в количестве 6 участников и решено наградить дипломами 1 степени – 2 участников, 2 степени – 2 участников, 3 степени – 2 участников:
I степени:
Стрешко Элеонора Валерьевна, учащаяся ГУО «Средняя школа №22 г.Гродно»;
Скорина Валерия Дмитриевна, учащаяся ГУО «Средняя школа №22 г.Гродно»;
II степени:
Кетко Татьяна Олеговна, учащаяся ГУО «Гимназия №1 г.Дятлово»;
Шумель Владислав Иосифович, учащийся ГУО «Гимназия №6 г.Гродно»;
III степени:
Цидик Валерий Иосифович, учащийся ГУО «Средняя школа № 23 г. Гродно»;
Тарасевич Владислав Андреевич, учащийся ГУО «Средняя школа № 36 г. Гродно с польским языком обучения».
Победители online-конкурса «Шифровальщик» областного «ТехноМарафона 2.1» награждаются дипломами государственного учреждения образования «Гродненский областной центр технического творчества».
Все дипломы и общий протокол (без указания ФИО участника, но с указанием времени ответа) можно скачать здесь.
В некоторых заданиях нужно было дать полный ответ с пояснением. Публикуем примеры нескольких ответов к заданию № 8, которые радуют грамотными логическими рассуждениями (сохраняем авторскую стилистику и грамматику).
Примеры «красивых» ответов к заданию № 8.
4 + 6 + 7 + 6 = 23;
Пусть х — основание системы счисления, у — целое число. Составим уравнение.
23 = х * у + 7;
х = 16/у, т.к. в примере есть число 7, то х > 7. Х может быть равен 8 или 16.
Допустим, что х = 16. Выполним сложение: 6 + 7 + 6 + 4 = 23, оставляем 7 и переводим единицу в следующий разряд: 5 + 0 + 5 + 2 + 1 = 13 = D, т.к. в примере нет D, то х = 8.
Восьмеричная система счисления.
Восьмеричная система счисления.
6+7+6+4= 23(10)=27(8) (23:8=2 (ост. 7) – значит на первой позиции от конца в результате имею 7, 2 в памяти,
5+0+5+2=12(10)=14(8) (12:8=1 (ост. 4) + 2 из памяти , значит на второй позиции от конца в результате имею 6, 1 в памяти.
7+3+4=14(10)= 16(8) (14:8=1 (ост. 6) +1 из памяти, значит на третьей позиции от конца в результате имею 7, 1 в памяти.
2+1 из памяти , значит на четвертой позиции от конца в результате имею 3.
В восьмеричной системе счисления. Для записи чисел использованы цифры от 0 до 7, значит основание системы счисления не меньше 8.
6+7+6+4=23, 5+0+5+2+2=14, 7+3+4+1=15, 2+1=3. При переводе этих десятичных чисел в восьмеричную систему счисления соответственно получим 27, 16, 17, 3. Последние цифры чисел, записанные в обратном порядке, и дают искомое число 3667.
Данное сложение находится в восьмеричной системе счисления, ибо:
1)6 + 7 + 6 + 4 = 8 + 8 + 7 в десятичной и = 27 в восьмеричной, записываем 7, 2 держим в уме.
2)5 + 0 + 5 + 2 + 2 = 8 + 6 в десятичной и = 16 в восьмеричной, записываем 6, 1 держим в уме.
3)7 + 3 + 4 + 1 = 8 + 7 в десятичной и = 17 в восьмеричной, записываем 7, 1 держим в уме.
4) 2 + 1 = 3 в десятичной и в восьмеричной. На выводе 3767
В восьмеричной. Для записи чисел использованы цифры не выше 7, следовательно основание системы счисления не меньше 8. Проверим вычисления в восьмеричной СС:
756(8)=494(10), 307(8)=199(10), 2456(8)=1326(10), 24(8)=20(10). Сложим числа в десятичной СС, получим 494+199+1326+20=2039(10). Переведем данное число в восьмеричную СС, получим 2039(10)=3767(8), что и требовалось доказать (т.к. 3767(8)=38^3+78^2+68^1+78^0=1536+448+48+7=2039(10) )
Если пример содержит цифру 7, то система счисления должна иметь основание более 7.
Десятичная 8 в восьмеричной системе счисления это 10.
Тогда 6+7+6+4= 23, десятичное 23 (8+8+7) в восьмеричной системе счисления это 27. При сложении единиц пишу 7, 2 переношу на десятки.
Разряд десятков: 5+0+5+2=12, десятичное 12 (8+4) в восьмеричной системе счисления это 14. Прибавляю 2 из памяти. Записываю 6, 1 переношу на сотни.
Разряд сотен: 7+3+4=14, десятичное 14 (8+6) в восьмеричной системе счисления это 16. Прибавляю 1 из памяти. Записываю 7, 1 переношу на тысячи.
Разряд тысяч: 2+1=3 в восьмеричной системе счисления.
Мы также решили опубликовать несколько программ, выполненных участниками конкурса к заданию № 11. У каждого из нас свой неповторимый стиль во всём, в том числе и в программировании. Тем, кто пишет коды, думаем, будет интересно увидеть, как другие выполнили ту же задачу и, возможно, взять себе на заметку интересные приёмы.
Публикуемые ответы не обязательно являются ответами победителей. В некоторых программах, например, не учтён вывод данных в нужном формате, за что сняты баллы, но решение в целом, рациональное и/или интересное.
Примеры программ на Паскале к заданию № 11
const a:array[1..44] of char=('Й','М','К','Н','Б','А','Л','А','Ы','Е','И','Р','Й','Т','Н','Я','Х','Н','Ш','Д','У','Р','П','А','Е','С','Д','Ь','И','А','В','Е','Н','И','О','О','О','В','У','Д','Г','Л','Н','Д');
var
b:array[1..4,1..11] of char;
k:char;
i,j,s:integer;
begin
s:=1;
for i:=1 to 4 do
for j:=1 to 11 do begin
b[i,j]:=a[s];s:=s+1;end;
for i:=1 to 4 do
for j:=1 to 5 do begin
k:=b[i,j];b[i,j]:=b[i,12-j];b[i,12-j]:=k;end;
j:=1;
while j<=11 do begin
for i:=1 to 2 do begin
k:=b[i,j];
b[i,j]:=b[5-i,j];
b[5-i,j]:=k;
end;j:=j+2; end;
for i:=1 to 4 do begin
for j:=1 to 11 do begin
write(b[i,j]:1);end; writeln;end;
end.
var a1,a2: array [1..4,1..11] of char;
s:string;
i,j,k,l:integer;
begin
s:='ЙМКНБАЛАЫЕИРЙТНЯХНШДУРПАЕСДЬИАВЕНИОООВУДГЛНД';
k:=1;
// Writeln ('шаг 1');
for i:=1 to 4 do
for j:=1 to 11 do
begin
a1[i,j]:=s[k];
k:=k+1;
end;
// writeln('шаг 2');
for i:=1 to 4 do
for j:=1 to 11 do
begin
a2[i,j]:=a1[i,11-j+1];
end;
// writeln ('шаг 3');
for j:=1 to 11 do
for i:=1 to 4 do
begin
if j mod 2 =1 then a1[i,j]:=a2[4-i+1,j]
else a1[i,j]:=a2[i,j];
end;
for i:=1 to 4 do
begin
for j:=1 to 11 do
write(a1[i,j]);
writeln;
end;
end.
program pr1;
var n,i,j,p:integer;
a,s:string;
str:array[1..4] of string;
str1:array[1..4] of string;
begin
str[1]:= 'ЙМКНБАЛАЫЕИ';
str[2]:= 'РЙТНЯХНШДУР';
str[3]:= 'ПАЕСДЬИАВЕН';
str[4]:= 'ИОООВУДГЛНД';
for i:= 1 to 4 do
begin
a:= str[i];
p:= length(a);
s:= '';
for j:= p downto 1 do
s:= s + a[j];
str[i]:= s;
str1[i]:= s;
end;
for i:= 1 to 11 do
begin
if i mod 2 > 0 then
begin
str1[1][i]:= str[4][i];
str1[2][i]:= str[3][i];
str1[3][i]:= str[2][i];
str1[4][i]:= str[1][i];
end;
end;
writeln(str1[1],str1[2],str1[3],str1[4])
end.
// PascalABC doesn't like russian letters :)
// PascalABC.NET - solution
Var s:array[1..4, 1..11] of string;
obm:string;
i, j:integer;
Begin
obm := 'ЙМКНБАЛАЫЕИРЙТНЯХНШДУРПАЕСДЬИАВЕНИОООВУДГЛНДВ';
for i := 1 to 4 do
for j := 1 to 11 do
s[i,j] := obm[(i-1) * 11 + j];
for i := 1 to 4 do
for j := 1 to 5 do
Begin
obm := s[i,j];
s[i,j] := s[i, 11 - (j-1)];
s[i, 11 - (j-1)] := obm;
End;
for j := 1 to 11 do
Begin
if j mod 2 = 1 then
for i := 1 to 2 do
Begin
obm := s[i,j];
s[i,j] := s[4 - (i-1),j];
s[4 - (i-1),j] := obm;
End;
End;
for i := 1 to 4 do
Begin
for j := 1 to 11 do
write(s[i,j], ' ');
writeln;
End;
End.
program pr1;
var i,j:integer;
z,x,c,v,res:string;
list,listres:array[1..4] of array[1..11] of string;
begin
z:= 'ЙМКНБАЛАЫЕИ';
x:= 'РЙТНЯХНШДУР';
c:= 'ПАЕСДЬИАВЕН';
v:= 'ИОООВУДГЛНД';
for i:= 11 downto 1 do
begin
list[1][12-i]:=z[i];
list[2][12-i]:=x[i];
list[3][12-i]:=c[i];
list[4][12-i]:=v[i];
end;
res:='';
listres:=list;
i:=1;
while i < 12 do
begin
listres[1][i]:=list[4][i];
listres[2][i]:=list[3][i];
listres[3][i]:=list[2][i];
listres[4][i]:=list[1][i];
i:=i+2;
end;
for i:= 1 to 4 do
for j:= 1 to 11 do
begin
res:= res + listres[i][j];
end;
writeln(res);
end.
program shipr;
const
n = 4;
m = 11;
type
mas = array[1..n,1..m] of char;
var a:mas;
i,j,p:integer;
chiprtext: string;
begin
chiprtext:='ЙМКНБАЛАЫЕИРЙТНЯХНШДУРПАЕСДЬИАВЕНИОООВУДГЛНДВ';
p:=1;
i:=1;
j:=1;
for i:=1 to n do
for j:=1 to m do
begin
a[i,j]:= ' ';
end;
j:=m;
while a[1,1] = ' ' do
begin
if j=0 then
j:=m;
if (j mod 2 = 0) then
begin
i:=1;
while a[i,j] <> ' ' do
inc(i);
end
else if (j mod 2 = 1) then
begin
i:=4;
while a[i,j] <> ' ' do
dec(i);
end;
a[i,j]:=chiprtext[p];
inc(p);
dec(j);
end;
for i:=1 to n do
for j:=1 to m do
begin
write(a[i,j])
end;
end.
Можете откликнуться в комментариях, если увидели своё решение)👍 Интересен ли вам такой формат с просмотром решений участников конкурса?