1. Python / Говнокод #27419

    +2

    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
    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, 11 Мая 2021

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

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

          покажи какой-нить код
          Ответить
          • https://imgur.com/a/AsxLo72
            Немножко совсем. Скриншот с пылу с жару.
            Ответить
            • Выкладывай на говнокод
              Ответить
            • такой странный кодстайл: где-то есть пробел после равно, где-то нету... у тебя нет автоформатера?

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

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

          Где lambda , лист компрхжны и filter -- там функциональщина, пусть и хуёвая
          Ответить
          • Какое определение )))
            Ответить
            • Какая функциональщина -- такое и определение.
              Ответить
              • Лучший за сегод^_^
                Ответить
                • Ня — болотная топь, ил; жидкое, вязкое и топкое (заполненное тиной и грязью) дно озера или морского побережья на севере Европейской части России и в Сибири.
                  Ответить
            • другого в питоне нет)


              ну ладно. Где itertools, генераторы и partial, там уже официально это самое
              https://docs.python.org/3/library/functional.html
              Ответить
              • Питон это единственные известный мне (я знаю 2) язык в котором операторы поставляются как функции в стандартной библиотеке и Господи как же это стильно выглядит
                shit = [(1,2), (3,4)]
                sorted(shit, key=lambda x: x[0])
                sorted(shit, key=itemgetter(0))

                Похуй что букв столько же примерно
                Ответить
                • А вот в C++ тоже поставляются!
                  https://en.cppreference.com/w/cpp/utility/functional/plus

                  std::vector vec1{ 1, 2, 3, 4 };
                  std::cout << "The sum is: "
                      << std::accumulate(vec1.begin(), vec1.end(), 0, std::plus<>{}) << std::endl;
                  Ответить
                  • >std::plus<>{}

                    в с++ <> и {} это как присказка?
                    Ответить
                    • <> здесь ня нужны, а {} можня заменить ня ().
                      Ответить
                      • в каких-то кейсах вроде нужно явно {}, потому что () (без аргументов) может породить тип "функция", да?
                        Ответить
                        • В том числе да. Ну и вообще, {} обычня работает чуть менее няадекватно (правда, я уже ня помню, в чём имення ( 〃▽〃) ).
                          Ответить
                          • Я читал, что до 11 народ страдал, угу
                            Ответить
                          • > ня помню, в чём имення
                            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 может и не инициализироваться, если это сишная структура, да?
                          Ответить

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