3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【電脳少女 プログラミング2088 Bランク】 ギャングのアジトをPython3で効率性や可読性を意識してコーディングしてみた

Last updated at Posted at 2025-02-23

概要

今回は、プログラミングゲームの解答コードを投稿しよう!のQiita公式イベントの記事となります。

paizaの新作プログラミングゲーム 「電脳少女プログラミング2088 ─壊レタ君を再構築─」 の「ギャングのアジト(Bランク)」に挑戦しました。本記事では、提出したコードの解説を行います。

開発方針

  • 処理時間とメモリ使用量をできるだけ抑え、効率性をあげる
  • 可読性の高いコードを心がける
  • 使用言語は、Python3を選択

問題概要

標準入力から以下のフォーマットでデータが与えられます。
1行目にピクセルアートのサイズが与えられ、2行目以降にピクセルアートの配置が記述されます。

このピクセルアートが左右対称であるかを判定し、左右対称なら「Yes」、左右非対称なら「No」と出力してください。

例1)

5
0 0 1 0 0
0 1 1 1 0
1 1 1 1 1
0 1 0 1 0
0 0 1 0 0

image.png

→ 左右対称なので「Yes」 と出力

例2)

3
0 0 0
1 1 0
0 0 1

image.png

→ 左右非対称なので「No」 と出力

処理方式

コードを書く前に、処理方式を整理しちゃいます。
今回の問題のキーとなるのは、「左右対称の判定方法」です。

配列の中身を1つずつチェックしていけば、コーディングできますが処理内容が複雑になってしまい、可読性や効率性の面では良くありません。

今回は渡されたピクセルアートを反転したものと比較することで、判定を行います。

image.png

また、行ごとにチェックし左右非対称となる場合は、その時点で処理を終了して不要な処理を省くようにします。

image.png

提出コード

コード量はこれだけです。(コーディング時間は、10分くらいでした)

# coding: utf-8
n = int(input())
for _ in range(n):
    l = list(map(int, input().split()))
    if l != l[::-1]:
        print('No')
        break
else:
    print('Yes')

コード解説

1. 標準入力の受け取り

下記コードは、ピクセルアートのサイズを取得し、あとのループ処理で使用するためint型を指定しています。

n = int(input())

下記コードは、ピクセルアートの1行分を取得する処理です。
listmapsplitなどを使っていますが、これは競技プログラミングにおける標準入力の取得方法としてよく使われる手法です。「こういうものだ」と覚えておくと便利かもしれません。

変数lにはlist型[0, 0, 1, 0, 1]といった内容が格納されます。

l = list(map(int, input().split()))

2. for-else

Python特有のfor-else構文を使って、ループ処理が正常に終わったときのみYesを出力するようにしました。

for _ in range(n):
    # ループ内の処理
else:
    print('Yes')

3. 左右非対称の判定

l[::-1] で リストを逆順にした新しいリストを作成するスライス構文です。
ここで左右非対称と判定された場合に、Noを出力したあとbreakでループ処理を抜けます。

if l != l[::-1]:
    print('No')
    break

結果

Bランクの問題なので、処理時間は余裕ですね!

image.png

終わりに

今回は、paizaのBランクの問題を解いてみました。

paizaのスキルチェックだと、どのように改善したら良いかや答えが分からなかったりするので、このようなイベントで他人のコードを確認できるのが嬉しいですね。

また、paizaの問題の画面だと、様々な標準入力のパターンを試せなかったため、paiza.io を使って試しました。ブラウザだけで様々な言語の実行が試せるのでよく使っています。プログラム初心者ほど使ったほうがいいと思うので、ぜひ触ってみてください。

ここまで読んで頂きありがとうございました。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?