Size: a a a

Сообщество Python Программистов

2021 March 14

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
raw = [...]
sudoku = [
 [int(s) if s in "1234567890" else None for s in line]
 for line in raw
]
def guess(x, y, sudoku):
   numbers = set(range(1,10))
   x_axis = set(sudoku[y])
   y_axis = {line[x] for line in sudoku}
   cube = set(n for (y_,line) in enumerate(sudoku) for (x_, n) in enumerate(line) if x%3==x_%3 and y%3==y%3)
   variants = numbers - (x_axis | y_axis | cube)
   return variants
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Бензофуран Гетероцикл
raw = [...]
sudoku = [
 [int(s) if s in "1234567890" else None for s in line]
 for line in raw
]
def guess(x, y, sudoku):
   numbers = set(range(1,10))
   x_axis = set(sudoku[y])
   y_axis = {line[x] for line in sudoku}
   cube = set(n for (y_,line) in enumerate(sudoku) for (x_, n) in enumerate(line) if x%3==x_%3 and y%3==y%3)
   variants = numbers - (x_axis | y_axis | cube)
   return variants
Дальше guess гонять в вайлтру и заполнять
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Andrew Dakhnovsky
а здесь у тебя зип не создает дополнительный список?
zip - итератор
источник

AD

Andrew Dakhnovsky in Сообщество Python Программистов
а, ну да
источник

E

Egor in Сообщество Python Программистов
Бензофуран Гетероцикл
for i in range(len(lst)):
   lst[i] = lst[i]**2
border = None
for i, (prev, next) in enumerate(zip(lst, lst[1:])):
   if prev > next:
       border = i
   else:
       break

   
Дальше уже мерж с известным бордером, писать впадлу
Опа, создал список на lst[1:]
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Egor
Опа, создал список на lst[1:]
Могу и функцию написать для парной итерации без создания списка
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Делов-то
источник

E

Egor in Сообщество Python Программистов
Бензофуран Гетероцикл
Могу и функцию написать для парной итерации без создания списка
да забей, я же не всерьез
источник

E

Egor in Сообщество Python Программистов
можно и без функции сговнокодить
источник

Д

Дмитрий in Сообщество Python Программистов
Бензофуран Гетероцикл
raw = [...]
sudoku = [
 [int(s) if s in "1234567890" else None for s in line]
 for line in raw
]
def guess(x, y, sudoku):
   numbers = set(range(1,10))
   x_axis = set(sudoku[y])
   y_axis = {line[x] for line in sudoku}
   cube = set(n for (y_,line) in enumerate(sudoku) for (x_, n) in enumerate(line) if x%3==x_%3 and y%3==y%3)
   variants = numbers - (x_axis | y_axis | cube)
   return variants
Ипать конечно...
источник

E

Egor in Сообщество Python Программистов
Бензофуран Гетероцикл
for i in range(len(lst)):
   lst[i] = lst[i]**2
border = None
for i, (prev, next) in enumerate(zip(lst, lst[1:])):
   if prev > next:
       border = i
   else:
       break

   
Дальше уже мерж с известным бордером, писать впадлу
-3, -2, -1, 0, 1, 2, 3
источник

E

Egor in Сообщество Python Программистов
бенз, устроился бы на работу уже с такими скиллами
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Бензофуран Гетероцикл
raw = [...]
sudoku = [
 [int(s) if s in "1234567890" else None for s in line]
 for line in raw
]
def guess(x, y, sudoku):
   numbers = set(range(1,10))
   x_axis = set(sudoku[y])
   y_axis = {line[x] for line in sudoku}
   cube = set(n for (y_,line) in enumerate(sudoku) for (x_, n) in enumerate(line) if x%3==x_%3 and y%3==y%3)
   variants = numbers - (x_axis | y_axis | cube)
   return variants
while not all(all(*line) for line in sudoku):
   for y, line in enumerate(sudoku):
       for x, value in enumerate(line):
           if value is None: continue
           variants = guess(x,y,sudoku)
           if len(variants)>1: continue
           else:
               sudoku[y][x] = variants.pop()
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Бензофуран Гетероцикл
while not all(all(*line) for line in sudoku):
   for y, line in enumerate(sudoku):
       for x, value in enumerate(line):
           if value is None: continue
           variants = guess(x,y,sudoku)
           if len(variants)>1: continue
           else:
               sudoku[y][x] = variants.pop()
Должно работать, если я там не опечатался нигде
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
20 минут на решение, вполне укладывается в теорию "возьми предполагаемое время и умножь на 2"
источник

Д

Дмитрий in Сообщество Python Программистов
Бензофуран Гетероцикл
20 минут на решение, вполне укладывается в теорию "возьми предполагаемое время и умножь на 2"
погодь, дай хоть потестить...
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Дмитрий
погодь, дай хоть потестить...
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Бензофуран Гетероцикл
20 минут на решение, вполне укладывается в теорию "возьми предполагаемое время и умножь на 2"
Ну и ещё столько же времени на дебаг
источник

Д

Дмитрий in Сообщество Python Программистов
именно
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Дмитрий
погодь, дай хоть потестить...
Я ж грил что задача изичная, ну
источник