Джем кода Google
Если вы программист, и вы не знаете Google Code Варенье Вы должны определенно пойти и проверить это. Это в основном кодирующая конкуренция, мне нравится называть это «программированием Олимпиады».
Участвую, что это около 4 или 5 лет, я люблю это, потому что это бросает вызов моим навыкам кодирования, и я не говорю о «создании циклов для цикла».
В этом году я хочу поделиться своими решениями проблем, давайте начнем с первого и самого простого.
Эта проблема
Здесь полная проблема текста Отказ
У вас есть ряд блинов и странный флиппер, вы должны найти правильную комбинацию, чтобы заставить их показать их счастливая сторона .
Сначала я подумал, что это может быть легко: просто переверните несчастные Блинчики и посмотрите, что происходит.
«Это соревнование, решение не может быть так просто!» – мой внутренний голос сказал. Поэтому я приступил к другой проблеме, чтобы увидеть, были ли они проще, после того, как они вернулись.
Решение
Столкнувшись к проблеме снова, у меня не было других идей, а первым. Я решил попробовать.
Вы можете найти код здесь , но позвольте мне объяснить часть этого.
Чтобы облегчить следующие шаги, я получаю первую часть ввода line.split () [0]
И я преобразую блинную строку в список бинарных элементов.
# ... pancake_row = [p == '+' for p in line.split()[0]] # ...
Понимание списка говорит что-то вроде «Для каждого персонажа в строке создайте элемент с True
Значение, если символ равен +
, False в противном случае « Понимание списка очень мощно, вот код без него:
pancake_row = list() for p in line.split()[0]: pancake_row.append(p == '+')
Затем я проходил через список, ищу блин, чтобы перевернуть, теперь, когда каждый предмет – булевой, я могу проверить их простым Если
:
# ... pan_size = int(line.split()[1]) # ... while i < (len(pancake_row) - pan_size + 1): if not pancake_row[i]: # ...
Теперь я положил флипбур, начиная с первого несчастный блинчик а затем перевернуть.
pancakes: ---+-++- flipper: *** flipped: ++++-++-
Чтобы сделать это в коде, я просто должен не
Предметы: не ложь
:
# ... while i < (len(pancake_row) - pan_size + 1): if not pancake_row[i]: for j in range(i, i + pan_size): pancake_row[j] = not pancake_row[j] # ...
Я думаю, что я мог бы сделать это, используя нарезка :
# ... while i < (len(pancake_row) - pan_size + 1): if not pancake_row[i]: j = i + pan_size pancake_row[i:j] = [not p for p in pancake_row[i:j]] # ...
Продолжая с примером, эволюция блинного ряда должна быть следующей:
---+-++- *** ++++-++- *** +++++--- *** ++++++++
С помощью этого примера нам повезло, потому что в конце все блины – счастливый . Мы можем проверить его, используя специальную функцию Python (вам не нужно изобретать колесо):
# ... all(pancake_row) # ...
все()
Вернуть Истинный
Если все элементы утечтимы верны
Если блины не все на счастливой стороне, мы можем утверждать, что это невозможно: несчастные Блин должен быть в конце ряда, никто не переворачивает их без переворачивания предыдущих блинов.
Что я узнал
Моя интуиция была прав … Я был прав! (не мой внутренний голос).
Поэтому в следующий раз я могу попробовать рано.
Оригинал: “https://dev.to/greenkey/oversized-pancake-flipper—google-code-jam”