Змея / Говнокод #27419 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
from enum import Enum
from dataclasses import dataclass

class Pathfind:
    __init__ = lambda self, maxmoves=9999: exec(f'self.maxmoves={maxmoves}')
    def pathfind(self, cells):
        i, found, ecords, path = 0, False, (0,0), list()
        while(not found):
            a = self.getbyval(cells, i)
            for n in [j for sub in [self.filterneighbors(self.getneighbors(cells, x[0], x[1])) for x in a] for j in sub]:
                cells[n.ccoords[1]][n.ccoords[0]].value = i+1 if cells[n.ccoords[1]][n.ccoords[0]].value>(i+1) else cells[n.ccoords[1]][n.ccoords[0]].value
                if cells[n.ccoords[1]][n.ccoords[0]].ctype == CellType.END: found, ecords = True, (n.ccoords[1],n.ccoords[0])
            if i<self.maxmoves: i+=1
            else: return False
        found, cpath = False, ecords
        while(not found):
            path.append(cpath)
            if cpath == self.getbyval(cells, 0)[0]: return path
            cell = list(filter(None, ([x if x.value==cells[cpath[0]][cpath[1]].value-1 else None for x in self.filterneighbors(self.getneighbors(cells, cpath[0], cpath[1]))])))[0]
            cpath = (cell.ccoords[1],cell.ccoords[0])
            
    listtocells = lambda self, lst: [[Cell(CellType(lst[y][x]), (x,y), 0 if lst[y][x]==2 else self.maxmoves) for x in range(len(lst[y]))] for y in range(len(lst))]
    getbyval = lambda self, cells, val: [(x, y) for x in range(len(cells)) for y in range(len(cells[x])) if cells[x][y].value == val]
    getneighbors = lambda self, cells, x, y: list(filter(None, [cells[x-1][y] if x>0 else None,cells[x+1][y] if x<len(cells)-1 else None,cells[x][y-1] if y>0 else None,cells[x][y+1] if y<len(cells[x])-1 else None]))
    filterneighbors = lambda self, cells: list(filter(lambda cell: False if (cell is None) or cell.ctype==CellType.WALL else True, cells))

class CellType(Enum):
	AIR, WALL, START, END = 0, 1, 2, 3

@dataclass
class Cell:
    ctype: CellType = CellType.AIR
    ccoords: tuple = (0,0)
    value: int = 0

Максимально уёбищная реализация волнового алгоритма.

Запостил: Gehennom Gehennom, (Updated )

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

  • Я видел код, авторам которого, по видимому платят за строку.
    Этого автора, судя по всему, бьют кнутом за каждую строчку.
    Ответить
    • И при этом заставляют писать на питоне, где нельзя взять и написать всё в одну строчку.
      Ответить
      • Но судя по
        > __init__ = lambda self, maxmoves=9999: exec(f'self.maxmoves={maxmoves}')
        — автор очень старался (^▽^)!
        Ответить
  • нет ничего противнее питонячьей функциональщины
    Ответить
      • ты всё еще пишешь на луа, кстати?

        покажи какой-нить код
        Ответить
          • такой странный кодстайл: где-то есть пробел после равно, где-то нету... у тебя нет автоформатера?

            что такое 32?
            Ответить
            • код стаил называется: пошел нахуй. В рот ебал эти автозаполняторы и автоформаторы.
              32 размер картинки, пока не брал просто :getWidth() с картинки.
              Ответить
              • Гляжу, к конструктивной критике ты не расположен
                Ответить
                • Почему? Я не считаю это просто конструктивной критикой. Я посчитал это неуместным советом, который мне не нужен.
                  Ответить
                    • Я не хочу. Я и на работе пишу без автоформатера - хотя он в 1с есть.
                      И я не хочу этим даже запариваться.
                      Ответить
                  • ____     ___
                             ',_`""\        .---,
                                \   :-""``/`    |
                                 `;'     //`\   /
                                 /   __     |   ('.
                                |_ ./O)\     \  `) \
                               _/-.    `      `"`  |`-.
                           .-=; `                  /   `-.
                          /o o \   ,_,           .        '.
                          L._._;_.-'           .            `'-.
                            `'-.`             '                 `'-.
                                `.         '                        `-._
                                  '-._. -'                              '.
                                     \                                    `\
                                      |                                     \
                                      |    |                                 ;   _.
                                      \    |           |                     |-.((
                                       ;.  \           /    /                |-.`\)
                                       | '. ;         /    |                 |(_) )
                                       |   \ \       /`    |                 ;'--'
                                        \   '.\    /`      |                /
                                         |   /`|  ;        \               /
                                         |  |  |  |-._      '.           .'
                                         /  |  |  |__.`'---"_;'-.     .-'
                                        //__/  /  |    .-'``     _.-'`
                                              //__/   //___.--''`
                    Ответить
    • > функциональщины

      Не всё функциональщина, что с функциями...
      Ответить
      • Не всё то пиво, что желтое и пенится

        Где lambda , лист компрхжны и filter -- там функциональщина, пусть и хуёвая
        Ответить
              • Ня — болотная топь, ил; жидкое, вязкое и топкое (заполненное тиной и грязью) дно озера или морского побережья на севере Европейской части России и в Сибири.
                Ответить
            • Питон это единственные известный мне (я знаю 2) язык в котором операторы поставляются как функции в стандартной библиотеке и Господи как же это стильно выглядит
              shit = [(1,2), (3,4)]
              sorted(shit, key=lambda x: x[0])
              sorted(shit, key=itemgetter(0))

              Похуй что букв столько же примерно
              Ответить
                    • в каких-то кейсах вроде нужно явно {}, потому что () (без аргументов) может породить тип "функция", да?
                      Ответить
                      • В том числе да. Ну и вообще, {} обычня работает чуть менее няадекватно (правда, я уже ня помню, в чём имення ( 〃▽〃) ).
                        Ответить
                        • > ня помню, в чём имення
                          struct foo {
                          foo()
                          foo(int)
                          foo(string)
                          ...
                          
                          foo bar("hi"), bar2(2), bar3() /*КРОВЬКИШКИРАСПИДОРАСИЛО*/;
                          Ответить
                          • даа, bar3() тут значит совсем не то, что ожидает нормальный человек
                            Ответить
                          • Это-то по-ня-тно. Там ещё есть мелкие и няочевидные грабли, в духе:
                            uint8_t c1(257);  // ОК
                            uint8_t c2{257};  // Ошибка
                            Ответить
                            • >Ошибка
                              почему это не разрешили??

                              вдруг бы я хотел в шаблоне написть

                              T foo{F} ?
                              Ответить
                              • Потому что 257 в 8 бит не лезет. Если F — тоже uint8_t — работать будет, иначе будет жаловаться на narrowing.
                                Ответить
                                • В военное время значение синуса может достигать четырех.

                                  Почему тогда первый скомпилится и обрежеца? Для сососвместимости?
                                  Ответить
                                  • Да, в сишке так можня, а ломать совместимость для починки очевидных багов — это ня путь Крестостандартизатора (ломать совместимость ради бесполезной хер-ни разрешается).
                                    Ответить
                  • plus это шаблон, потому ему нужны <> (туда ничо не передали -- взялся тип по умолчаию)
                    template< class T = void >
                    struct plus;


                    {} это инициализатор, чтобы вызвать конструктор по умолчанию, иначе оно будет не инициализирвоано (по аналогии с няшной)

                    так вижу

                    но я не настоящий крестовик
                    Ответить
                    • > иначе оно будет не инициализирвоано (по аналогии с няшной)
                      Иняче оно не скомпилируется, потому что std::plus — это тип.
                      Ответить
                      • а, это всё равно, что написать "int", понятно

                        я думал про кейс типа

                        Foo bar; //тут bar может и не инициализироваться, если это сишная структура, да?
                        Ответить

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8