Задача 7: Количество строк для записи строки

Напишите определение функции numberOfLines(widths, s), которая принимает два аргумента:

  1. widths — массив из 26 целых чисел, где widths[0] соответствует ширине буквы 'a', widths[1] — ширине буквы 'b' и так далее.
  2. s — строку, состоящую из строчных букв английского алфавита.

Функция должна определить, как строка s может быть записана по строкам, где каждая строка имеет ширину не более 100 пикселей. Она должна вернуть массив result длиной 2:

  • result[0] — общее количество строк.
  • result[1] — ширина последней строки в пикселях.

Пример 1:

Ввод:
widths = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],
s = "abcdefghijklmnopqrstuvwxyz"

Вывод:
[3, 60]

Объяснение:
Строка записывается следующим образом:

abcdefghij  // 100 пикселей
klmnopqrst  // 100 пикселей
uvwxyz      // 60 пикселей

Итого: 3 строки, последняя строка имеет ширину 60 пикселей.


Пример 2:

Ввод:
widths = [4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],
s = "bbbcccdddaaa"

Вывод:
[2, 4]

Объяснение:
Строка записывается следующим образом:

bbbcccdddaa  // 98 пикселей
a            // 4 пикселя

Итого: 2 строки, последняя строка имеет ширину 4 пикселя.

0

Комментарии

Filaret_avatar
Filaret
,
5 дней назад

Проверьте, пожалуйста, проверку этой задачи. С ней явно что-то не так. Написал два решения, которые полностью прошли проверку, при этом вот это:

def numberOfLines(widths, s):
  lines = 1
  cnt = 0
  for i in range(len(s)):
    if cnt + widths[ord[i] - ord['a']] > 100:
      lines += 1
      cnt = 0
    else:
      cnt += widths[ord[i] - ord['a']]
  return [lines, cnt]

 даже не должно было скомпилироваться (я это понял только через пару минут после его запуска), а второе:

def numberOfLines(widths, s):
  summa = sum([widths[ord(i) - ord('a')] for i in s])
  return [summa // 100, summa % 100]

должно было запороться на втором тесте.

Дополнение: проходит даже решение

def numberOfLines(widths, s):
  return None
0

Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии