Рубрики
Без рубрики

Негабаритный блинчик Flipper – Jam Jam Code Code

Мое решение проблем с изданием 2017 года. Помечено программированием, Python, GoogleCodejam.

Джем кода 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”