28.09.09

Нелогическое программирование - 2

На этот тема нелогического программирования касается непосредственно меня. Дело в том, что этим летом я на два месяца забил на программирование. К концу августа за программинг пришлось вернуться и после возвращения в мир программинга со мной стали твориться весьма странные вещи. Я начал замечать за собой откровенно глупые куски кода, но недавний случай для меня - это из ряда вон выходящее.

С начала сентября пришлось усиленно заниматься Паскалем в целях подготовки к олимпиаде.
Несколько дней назад мне пришлось решить задачу, условие ее звучало так:

Вывести на экран все нормера "счастливых" билетов.

"Счастливый" - это шестизначный билет, у которого суммы первых трех цифр равны суммам трех последних.
Эту задачу делали всем классом и на следующий урок мне предстояло проверить у ребят решение задачи и ответить на их вопросы (да, я подрабатываю учителем по информатике =)
К сожалению, начальные знания по программированию всем дали такие слабые и размытые, что большинство в классе было не в состоянии составить нормальный алгоритм.

Но, подойдя к одному из мониторов, я увидел примерно вот это:

var a,b,c,d,e,f:integer;
begin
  for a:=0 to 9 do
   for b:=0 to 9 do
    for c:=0 to 9 do
     for d:=0 to 9 do
      for e:=0 to 9 do
       for f:=0 to 9 do
        if a+b+c=d+e+f then writeln(a,b,c,d,e,f);
end.

Я был шокирован. Это просто гениально! Я тут же опомнился и страх поразил меня. Я вспомнил исходник своей программы и понял, что написал полную фигню:

{Happy Program}
uses CRT;
var i,m:longint;m_ret:boolean;

function tryHappy(var x:longint):boolean;
var p:array [1..6] of longint;c,c2,md:longint;
begin
  for c:=1 to 6 do begin
   md:=1; for c2:=1 to c do md:=md*10;
   p[c]:=(x mod md) div (md div 10);
  end;
  if p[1]+p[2]+p[3]=p[4]+p[5]+p[6] then tryHappy:=true
  else tryHappy:=false;
end;
begin
  ClrScr;
  for i:=100000 to 999999 do begin
   if tryHappy(i) then begin write(i,' '); m:=m+1; m_ret:=false end;
   if (m mod 11=0) and not m_ret then begin writeln;m_ret:=true end;
  end;
end.

Мой одноклассник, программирующий лишь второй год, справился с задачей лучше меня.
Кажется, я тупею...

Комментарии:

Yanex - 29.09.2009 18:27
Ну, зато то решение содержит шесть (!) вложенных циклов. Это ж пипец!


vladikcomper - 06.10.2009 16:39
Да, кстати, можно было обойтись и двумя ))
Но факт остается фактом - я тупею О_о