Help us understand the problem. What is going on with this article?

『エンジニアが死滅シタ世界』解答例その1

More than 1 year has passed since last update.

今回は『エンジニアが死滅シタ世界 アンドロイドとふたりぼっちで生きろ』の解答例および簡単な解説を書いてみたい。なお、今回はDランクの問題について簡単に解答例のコードを書いてみたい。

前提条件

今回はPython 3で書いた。多くの場合は他の言語でも応用は効くが、Python特有の仕様が絡む場合は特記事項として注意書きを行いたい。

解答例コード

荒れ果てた警察署

解答例

police.py
# coding: utf-8
num = 0
arr = input().split(' ')
for item in arr:
  num += int(item)

print(num % 10)

解説

今回の場合は数字Aと数字Bが半角空白を挟んで入力されるので、それを split(' ') で分割すればよい。

なお、今回の場合は以下のようにストレートに加算しても問題ないが、可変長だった場合は対応できないため、 for ループで回すのが無難である。

police_fair.py
arr = input().split(' ')
num1 = int(arr[0])
num2 = int(arr[1])
print((num1 + num2) % 10)

荒れ果てたオフィス

解答例

office.py
# coding: utf-8
times = int(input())

for i in range(times):
    pair = input().split(' ')
    if int(pair[1]) == 3:
        print(pair[0])

解説

これは、出力すべき文字列と優先度が空白を挟んで入力されるので、それを分割して、優先度が3であれば出力するというように、基本的にストレートに書けば問題ない。

アンドロドの生産工場

解答例

fab.py
# coding: utf-8
text = input()
raw = ""
for i, ch in enumerate(text):
    if i % 2 == 0:
        raw += ch
print(raw)

解説

これは、入力された文字列から(1から始めた場合)奇数の番目の文字を抽出して結果を出力するものである。Pythonにおいては、 enumerate(str) 関数でインデックスと文字がペアになって取得できるので、それを使う。

なお、Pythonに限らず、多くのプログラミング言語では、一般的な人間の感覚とは違って、配列のインデックスは0スタートであるため、人間でいう1番目は、プログラム上では0番目として扱われる。したがって、設問で書かれている「奇数文字目」は一般的な人間の感覚でのものであることから、プログラムでは「偶数文字目」を抽出するようにする必要がある。

もし以下のように人間の感覚のように奇数文字目を抽出してしまうと結果間違いになる。

fab_bad.py
# coding: utf-8
text = input()
raw = ""
for i, ch in enumerate(text):
    if i % 2 == 1:  # これだと人間の感覚でいう偶数文字目になってしまい、不正解になる
        raw += ch
print(raw)

もし、人間の感覚のように1スタートとしたい場合は、以下のようにする必要がある。

fab_alt.py
# coding: utf-8
text = input()
raw = ""
for i, ch in enumerate(text, 1):  # ここで明示的に1スタートにすることで問題が解消される
    if i % 2 == 1:
        raw += ch
print(raw)

お金が引き出せない銀行

解答例

bank.py
# coding: utf-8
balance = int(input())
withdraw = int(input())
rslt = balance - withdraw
if rslt < 0:
    print("error")
else:
    print(rslt)

解説

1行目は残高、2行目は引出額で、引出額が残高を超えていればエラーを表示、そうでなければ引出し後の額を表示するプログラムである。

なお、 if rslt < 0: およびそれ以降の部分は、 print(rslt if rslt >= 0 else "error") とすることで、よりシンプルに記載することができるが、Python 3の三項演算子は多くのプログラミング言語で使われている 条件式 ? 真の場合 : 偽の場合 とは違い、 真の場合 if 条件式 else 偽の場合となるため、要注意である。

錆びついた電波塔

解答例

radio_tower.py
# coding: utf-8
input()

success = 0
arr = input().split(' ')
for str in arr:
    if int(str) > 5:
        success += 1

print(success)

解説

Pythonでは文字列を分割できるため、最初の1行目は捨てている。

2行目を半角空白で分割し、それぞれを for ループで回して5以上なら成功として成功回数に+1すれば良い。

もし1行目の入力を使う場合は、配列の要素数チェックとして用いるのが良いだろう。

最後に

今回はDランクの問題のサンプルコードおよび解説ということで、基本的なプログラミングの考え方を知っていればすぐに理解できるだろう。今回はPython 3で書いてみたが、他のプログラミング言語でも基本的な考え方で大きく変わることはほとんどないので、Pythonに限らず他の言語だとどうなるのかを比較しながらやってみると良いだろう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした