1. Pascal / Говнокод #14394

    +141

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    //у стены - нахождение клеток "у стены"
    procedure useny(var vsten:bulArr);
    var i,i2:integer;
      function sh(x,y,n:integer):boolean; // n-номер сдвига n=[2..5]
      begin
      if vsten[x+sdx[n],y+sdy[n]] then sh:=true
                                  else
        if sten[x+sdx[n],y+sdy[n]] then sh:=false
                                   else
          if sten[i2+sdx[n-1],i+sdy[n-1]]or sten[i2+sdx[n+1],i+sdy[n+1]]
            then sh:=sh(x+sdx[n],y+sdy[n],n)
            else sh:=false;
      if result then vsten[x,y]:=true;
      end;
    begin
      for i:=0 to ny do
        for i2:=0 to nx do
          if not(sten[i2,i]) then
            if (sten[i2+1,i] or sten[i2-1,i])and(sten[i2,i+1] or sten[i2,i-1]) then
              begin
              vsten[i2,i]:=true;
              sh(i2,i,2);sh(i2,i,3);sh(i2,i,4);sh(i2,i,5);
              end;
    end;

    Попытка написать решатель Сокобана (Какая-то неведомая функция)

    Примечания или то, что я узнал у владельца
    1 useny - судя по всему УСтЕНЫ
    2 vsten - массив клеток Возле СТЕН
    3 sten - сами стены
    4 sh - скорее всего Шаг, но автор не уверен.
    5 sdx и sdy - СДвиг по Х и СДвиг по Y

    Запостил: kegdan, 22 Января 2014

    Комментарии (2) RSS

    • it's alive!
      Ответить
    • Сокобан не-НП-полный... при чем очень сильно неполный. Тут как бы решатель на голом интузиазме только для очень маленьких досок можно...
      Ответить

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