回転寿司のようなプログラム

はじめに

リストの要素を回転させて特定の要素が来たら出力するプログラムを作成した。

ソースコード

リストの回転 · ki-hi-ro/python@298e36e

conveyor_belt_sushi = [
    "サーモン",
    "マグロ",
    "いくら",
    "エビ",
    "タコ",
]

print(f'元の回転寿司リスト:' + '\n' + str(conveyor_belt_sushi))

def rotate_sushi_belt(sushi_belt, k, d):
    if d == '左':
        return sushi_belt[k:] + sushi_belt[:k]
    elif d == '右':
        return sushi_belt[-k:] + sushi_belt[:-k]

# Example usage:
k = 1
d = '左'
rotated_belt = rotate_sushi_belt(conveyor_belt_sushi, k, d)
print()
print(f'{d}方向に{k}回転した後のリスト:' + '\n' + str(rotated_belt))

d = '右'
rotated_belt = rotate_sushi_belt(conveyor_belt_sushi, k, d)
print()
print(f'{d}方向に{k}回転した後のリスト:' + '\n' + str(rotated_belt))

出力結果

元の回転寿司リスト:
['サーモン', 'マグロ', 'いくら', 'エビ', 'タコ']

左方向に1回転した後のリスト:
['マグロ', 'いくら', 'エビ', 'タコ', 'サーモン']

右方向に1回転した後のリスト:
['タコ', 'サーモン', 'マグロ', 'いくら', 'エビ']

解説

寿司の名前を要素に持つconveyor_belt_suhsiがある。

conveyor_belt_sushi = [
    "サーモン",
    "マグロ",
    "いくら",
    "エビ",
    "タコ",
]
print(f'元の回転寿司リスト:' + '\n' + str(conveyor_belt_sushi))
元の回転寿司リスト:
['サーモン', 'マグロ', 'いくら', 'エビ', 'タコ']

それを回転させるrotate_sushi_belt関数。

def rotate_sushi_belt(sushi_belt, k, d):
    if d == '左':
        return sushi_belt[k:] + sushi_belt[:k]
    elif d == '右':
        return sushi_belt[-k:] + sushi_belt[:-k]

以下のように使用している。

# Example usage:
k = 1
d = '左'
rotated_belt = rotate_sushi_belt(conveyor_belt_sushi, k, d)
print()
print(f'{d}方向に{k}回転した後のリスト:' + '\n' + str(rotated_belt))

d = '右'
rotated_belt = rotate_sushi_belt(conveyor_belt_sushi, k, d)
print()
print(f'{d}方向に{k}回転した後のリスト:' + '\n' + str(rotated_belt))

回転回数は1回。

k = 1

方向が左の場合。

d = '左'
rotated_belt = rotate_sushi_belt(conveyor_belt_sushi, k, d)
print()
print(f'{d}方向に{k}回転した後のリスト:' + '\n' + str(rotated_belt))
左方向に1回転した後のリスト:
['マグロ', 'いくら', 'エビ', 'タコ', 'サーモン']

マグロが先頭に、サーモンが最後に来ていることが確認できる。

他のお寿司は左にスライドしている。

方向が右の場合。

d = '右'
rotated_belt = rotate_sushi_belt(conveyor_belt_sushi, k, d)
print()
print(f'{d}方向に{k}回転した後のリスト:' + '\n' + str(rotated_belt))
右方向に1回転した後のリスト:
['タコ', 'サーモン', 'マグロ', 'いくら', 'エビ']

タコが先頭に来て、他の要素が右にスライドしていることが確認できる。

回転の仕組み

左方向の場合、k番目から最後 + 最初からk番目になる。

def rotate_sushi_belt(sushi_belt, k, d):
    if d == '左':
        return sushi_belt[k:] + sushi_belt[:k]
    elif d == '右':
        return sushi_belt[-k:] + sushi_belt[:-

今回の具体例で考えると、

['サーモン', 'マグロ', 'いくら', 'エビ', 'タコ']

1番目、つまり、マグロから最後のタコまでと、最初から1番目(サーモン)が足されることで、左回転が実現する。

右に行く場合、

def rotate_sushi_belt(sushi_belt, k, d):
    if d == '左':
        return sushi_belt[k:] + sushi_belt[:k]
    elif d == '右':
        return sushi_belt[-k:] + sushi_belt[:-k]

最後から-1番目から最後まで(タコ)と最初から-1番目(サーモンからエビまで)が足されることで右回転が実現する。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です