LoginSignup
0
2

More than 1 year has passed since last update.

トランプカードを並び替え後、任意のカードを探す

Posted at

<アルゴリズム問題シリーズ(Python)>

1.はじめに

同一ファイル内で入力から出力を実施する方法としてはhttps://qiita.com/ajim/items/4d350710ba70056f5f6f を参考にしました。

import sys
import io


_INPUT = """\
5 4
1
3
4
5
"""
sys.stdin = io.StringIO(_INPUT)

sysモジュールはインタプリタで使用・管理している変数や、インタプリタの動作に深く関連する関数を定義しています。sys.stdinはインタプリタが使用する、それぞれ標準入力、標準出力、および標準エラー出力の ファイルオブジェクト であり、stdin は (input() の呼び出しも含む) すべての対話型入力に使われます。https://docs.python.org/ja/3/library/sys.html
・io モジュールは様々な種類の I/O を扱う Python の主要な機能を提供しています。StringIO オブジェクトはインメモリーのテキストストリームです。
io.StringIO(initial_value='', newline='\n')のように使用し、バッファの初期値を initial_value で与えることが出来ます。改行変換を有効にすると、改行コードは write() によってエンコードされます。ストリームはバッファの開始位置に配置されます。https://docs.python.org/ja/3/library/io.html?highlight=io#io.StringIO

2.問題

・N枚のカードが重ねられていて、上からt番目のカードにはtと書かれている。
・t回目の操作として「一番上のカードを取り除き、それを上からt番目にいれる」を行い、これをN回実施する。
・上の操作後、t個目の質問として「M_tが書かれたカードは上から何番目?」が聞かれ、その答えをA_tとする。これがK回実施される。
・N,K,Mは全て整数であり、1 <= M_t <= Nである。
この時、K個の質問の答え(A_1...A_K)をすべて出力として表示するプログラムを書け。
入力方式はsys.stdinとする。

入力

 N K
 M_1
 .
 .
 M_K

出力

 A_1
 .
 .
 A_K

入力
5 4
1
3
4
5
出力
3
5
2
4

3.解答

N,K = map(int,sys.stdin.readline().split())
lines = []    
for i in sys.stdin:
    lines.append(i.rstrip('\r\n'))
lines_int = list((map(int,lines)))   

cards = []
for i in range(1,N+1):
    cards.append(i)
for i in range(N):
    del_card = cards.pop(0)
    cards.insert(i, del_card)
for i in range(K):
    print(cards.index(lines_int[i]) + 1) 

4.実行例

import sys
import io

_INPUT = """\ #入力例
10000 10
1
2
3
4
45
543
756
4657
7333
9999
"""
sys.stdin = io.StringIO(_INPUT)
出力
6384 #1万回の操作後、1と書かれたカードが上から6384番目に存在する
2288
240
4336
1392
7360
2088
8626
4665
9997

5.メモ

リストから要素を削除する方法
1.del リスト[インデックス] / del リスト[開始インデックス:終了インデックス]
2.リスト[開始インデックス:終了インデックス] = []
3.リスト.pop() / リスト.pop(インデックス)
4.リスト.remove(値) 
5.リスト.clear() 
https://www.javadrive.jp/python/list/index8.html

リストに要素を追加する方法
1.リスト.append([6, 7]) # 要素[6, 7]を末尾に追加
2.リスト.extend([4, 5]) # リストの要素を末尾に追加
  リスト.extend(6) # TypeError
3.extendメソッドではリスト以外の反復可能オブジェクトもリスト末尾に追加できる。リスト.extend((3, 4)) # タプルの要素がリスト末尾に追加される
4.リスト.insert(5, [3.25, 3.5]) # 第2引数に指定した値は単一の要素として挿入される。 
print(リスト) # [0, 1, 2, 2.5, 3, [3.25, 3.5], 4]
https://www.atmarkit.co.jp/ait/articles/2012/11/news015.html

6.参考文献

7.ご意見・ご感想をお待ちしております

当方、未熟なプログラマーのため、よりよいコード等ありましたら教えていただけると幸いです。
皆様のメッセージをお待ちしております。

0
2
2

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
0
2