ТехноМарафон 2.1. Подведены итоги конкурса «Шифровальщик»

ТехноМарафон 2.1

Подведены итоги конкурса «Шифровальщик», который прошел 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.

Можете откликнуться в комментариях, если увидели своё решение)👍 Интересен ли вам такой формат с просмотром решений участников конкурса?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *