1. paizaラーニングトップ
  2. レベルアップ問題集
  3. Sランクレベルアップメニュー(言語選択)
  4. 問題一覧 Python2編
  5. プログラムの実行 Python2編

Sランクレベルアップメニューのサムネイル
プログラムの実行 Python2編(paizaランク S 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

プログラムを表す文字列 s が与えられます。

また、q 個のクエリが与えられます。各クエリで、整数 l, r, x が与えられるので、文字列 s の l 文字目から r 文字目までを切り出した文字列をプログラムとして実行した場合の、変数 x の値を求めてください。

プログラムは以下のルールで与えられます。


・ プログラム全体は、「代入文;代入文; ... ;代入文;」という形式で表されます。
・ 代入は「変数=値」という形式でおこなわれ、このとき変数に値が代入されます。
・ 値とは以下のいずれかです。
1. 整数
2. 変数の値 (ただし、その変数が以前に出現していない場合は、その変数の値は 0 とみなします)
・ 英小文字からなる連続する文字列は整数型の変数を表します。

たとえば、プログラム 'a=1;b=a;c=b;a=21;' が与えられた場合、このプログラムを実行すると、変数 a は 21、変数 b は 1、変数 c は 1 となります。

入力される値

s
q
l_1 r_1 x_1
l_2 r_2 x_2
...
l_q r_q x_q


・ 1 行目に、プログラムを表す文字列 s が与えられます。
・ 2 行目に、クエリの数を表す整数 q が与えられます。
・ 続く q 行には、それぞれのクエリにおける整数 l_i, r_i, および変数名 x_i が半角スペース区切りで与えられます。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

i 行目に、文字列 s の l_i 文字目から r_i 文字目までを切り出した文字列をプログラムとして実行した場合の、変数 x_i の値を整数で出力してください。

出力の最後に改行を入れ、余計な文字、空行を含んではいけません。

条件

すべてのテストケースにおいて、以下の条件を満たします。

・ 1 ≦ |s| ≦ 30000 = 3 × 10^4 (|s| は文字列 s の長さ)
・ s に出現する変数名の長さは 1 以上 10 以下
・ s に出現する整数は 1 以上 1000000000 以下
・ 1 ≦ q ≦ 30000 = 3 × 10^4
・ 1 ≦ l_i ≦ r_i ≦ |s| (1 ≦ i ≦ q)
・ 各クエリにおいて、文字列 s の l_i 文字目から r_i 文字目までを切り出した文字列はプログラムとして正しい (1 ≦ i ≦ q)
・ l_i ≠ 1 ならば、s の l_i-1 文字目は ';' である (1 ≦ i ≦ q)
・ s の r_i 文字目は ';' である (1 ≦ i ≦ q)
・ 1 ≦ |x_i| ≦ 10 (1 ≦ i ≦ q)
・ x_i は英小文字からなる文字列 (1 ≦ i ≦ q)

入力例1

a=1;b=a;c=b;a=21;
4
1 4 a
1 8 b
1 12 c
1 17 a

出力例1

1
1
1
21

入力例2

x=1;y=2;tmp=x;x=y;y=tmp;
6
1 24 x
1 24 y
1 24 tmp
5 24 x
5 24 y
5 24 tmp

出力例2

2
1
1
2
0
0

問題一覧へ戻る

ページの先頭へ戻る