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

    −1

    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
    35. 35
    36. 36
    37. 37
    38. 38
    n = int(input())
    matrix = [[0] * n for i in range(n)]
    num = 1
    end = n
    start = 0
    while num != num**2:
        for i in range(start, end):
            if num == num**2:
                break
            for j in range(start, end):
                if num == num**2:
                    break
                matrix[i][j] = num
                num += 1
                if j + 1 == end:
                    for k in range(start+1, end):
                        if num == num**2:
                            break
                        matrix[k][j] = num
                        num += 1
                        if k + 1 == end:
                            for l in range(-end+1, -start):
                                if num == num**2:
                                    break
                                matrix[k][l] = num
                                num += 1
                                if l + 1 == start:
                                    for m in range(-end+1, -start-1):
                                        if num == num**2:
                                            break
                                        matrix[m][l] = num
                                        num += 1
            end -= 1
            start += 1
    for i in range(n):
        for j in range(n):
            print(matrix[i][j], end='\t')
        print()

    у меня на выходе только нули, не понимаю где нагадил,вот условие:

    Выведите таблицу размером n×n, заполненную числами от 1 до n**2 по спирали, выходящей из левого верхнего угла и закрученной по часовой стрелке, как показано в примере (здесь n=5):
    Sample Input:
    5
    Sample Output:
    1 2 3 4 5
    16 17 18 19 6
    15 24 25 20 7
    14 23 22 21 8
    13 12 11 10 9

    Запостил: reznik, 05 Сентября 2017

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

    • показать все, что скрытоизменил на это, теперь time limit

      n = int(input())
      matrix = [[None] * n for i in range(n)]
      num = 1
      end = n
      start = 0
      while num != n**2:
          for i in range(start, end): # 0,5
              if num == n**2:
                  break
              for j in range(start, end): # 0,5
                  if num == n**2:
                      break
                  matrix[i][j] = num
                  num += 1
                  if j + 1 == end:
                      for k in range(start+1, end): # 1,5
                          if num == n**2:
                              break
                          matrix[k][j] = num
                          num += 1
                          if k + 1 == end:
                              for l in range(-end+1, -start): # -4,0
                                  if num == n**2:
                                      break
                                  matrix[k][l] = num
                                  num += 1
                                  if l + 1 == start:
                                      for m in range(end-2, start): # 3,-1
                                          if num == n**2:
                                              break
                                          matrix[m][l] = num
                                          num += 1
              end -= 1
              start += 1
      for i in range(n):
          for j in range(n):
              print(matrix[i][j], end='\t')
          print()
      Ответить
    • > не понимаю где нагадил
      Везде.
      https://ideone.com/cJ77bA
      Ответить
    • https://ideone.com/wAFLe3
      Ответить
    • показать все, что скрытоЛаба
      Ответить
    • предложу ноивное решение https://ideone.com/PeYnl9
      Ответить
      • Ох, давно это было
        https://habrahabr.ru/post/210796/#comment_7258676
        Ответить
        • Как лаконично выглядит в комплексных числах...

          А решение какой-нибудь задачи в кватернионах случайно не завалялось?
          Ответить
          • > А решение какой-нибудь задачи в кватернионах случайно не завалялось?

            https://code.google.com/codejam/contest/6224486/dashboard#s=p2
            Ответить
          • > А решение какой-нибудь задачи в кватернионах случайно не завалялось?
            Эта задачка про манхэттонскую метрику, а кватернионы задают преобразования в евклидовом пространстве. Поэтому не думаю, что они тут как-то сильно помогут.

            Мой высер: https://ideone.com/4wXmF6
            Ответить
      • А почему прогоамма вывела циферки, а не "борманд май вайфу"? Похоже ты недостаточно любишь бормондяшу.
        Ответить
    • Что это за ненужная хуйня?
      Почему питон?
      Ответить
    • https://ideone.com/7w6vLE
      from itertools import count, tee, cycle, chain
      
      def fill(n):
          matrix = [[0 for x in range(n)] for y in range(n)]
          direction = cycle([(0, 1), (1, 0), (0, -1), (-1, 0)])
          distance = chain([n-1], *zip(*tee(range(n-1, 0, -1), 2)), [1])
          x = y = 0
          value = count(1)
          for (dy, dx), steps in zip(direction, distance):
              for step in range(steps):
                  matrix[y][x] = next(value)
                  y += dy
                  x += dx
          return matrix
              
      matrix = fill(9)
      
      for row in matrix:
          for item in row:
              print('{:02}'.format(item), end=' ')
          print()
      Ответить
    • И ещё видоизменённый вариант: https://ideone.com/tq2uq5
      import numpy as np
      from itertools import cycle
      
      def distances(n):
          yield n-1
          for i in range(n-1, 0, -1):
              yield i
              yield i
          yield i
          
      def matrix(n):
          x = y = value = 0
          m = np.ndarray([n, n], dtype=int)
          directions = cycle([(0, 1), (1, 0), (0, -1), (-1, 0)])
          for (dy, dx), steps in zip(directions, distances(n)):
              for step in range(steps):
                  value += 1
                  m[y, x] = value
                  y += dy
                  x += dx
          return m
              
      print(matrix(9))
      Ответить
      • мда

        даже на пистончике можно писать некрасиво и неаккуратно
        Ответить

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