2022年8月25日 星期四

Python a291: nAnB problem

 a291: nAnB problem

#a291: nAnB problem

'''

題目會先提供一組正確的四位數字密碼,接著會有數組猜密碼的數字,

對於每組嘗試的密碼,若有 p 個數字的值正確且在正確的位子上,輸出 pA,

另外有 q 個數字的值正確,

但不在正確的位子上,輸出 qB,將 AB 組合為 pAqB 輸出。


輸入說明

多筆輸入。

第一行有四個介於0-9之間的數字,代表正確的密碼

第二行有一個整數n,1<=n<=10000,代表接下來嘗試n組密碼

接下來有n行,每行有四個介於0-9之間的數字,每行各代表一組嘗試的密碼。


輸出說明

輸出n行。

對於每組嘗試的密碼,若有p個數字的值正確,且在正確的位子上,

另外有q個數字的值正確,但不在正確的位子上,

輸出pAqB。

範例見測資。

範例輸入 #1

1 2 3 4

4

1 1 4 5

1 2 4 3

1 1 4 4

4 3 2 1

範例輸出 #1

1A1B

2A2B

2A0B

0A4B


'''

print('a291: nAnB problem')

num = int(input('輸入測資的筆數-->'))      # 題目次數

pwd1 = [int(i) for i in input('輸入四個介於0-9之間的數字,代表正確的密碼-->').split(' ')]     

for j in range(num):    # 重複幾題

    try:    

        pwd2 = [int(j) for j in input('輸入四個介於0-9之間的數字,代表嘗試的密碼-->').split(' ')]    

       

    except:

        print('結束')              # 程式結束

    print (pwd1,pwd2)

    sum1=sum2=0

    c=list(pwd1)

    #print (c)

    

    for i in range (num):

        if(pwd2[i]==c[i]):

            sum1=sum1+1

            pwd2[i]='c',

            c[i]='c';

            

    for i in range (0,4 ):

        for j in range (0,4):

            if(c[j]==pwd2[i] and  c[j]!='c' and pwd2[i]!='c'):

                        sum2=sum2+1

                        pwd2[i]='c'

                        c[j]='c';

    

    print(sum1,'A',sum2,'B')   



>>> %Run a291.py

a291: nAnB problem

輸入測資的筆數-->4

輸入四個介於0-9之間的數字,代表正確的密碼-->1 2 3 4

輸入四個介於0-9之間的數字,代表嘗試的密碼-->1 1 4 5

[1, 2, 3, 4] [1, 1, 4, 5]

1 A 1 B

輸入四個介於0-9之間的數字,代表嘗試的密碼-->1 2 4 3

[1, 2, 3, 4] [1, 2, 4, 3]

2 A 2 B

輸入四個介於0-9之間的數字,代表嘗試的密碼-->1 1 4 4

[1, 2, 3, 4] [1, 1, 4, 4]

2 A 0 B

輸入四個介於0-9之間的數字,代表嘗試的密碼-->4 3 2 1

[1, 2, 3, 4] [4, 3, 2, 1]

0 A 4 B

>>> 

沒有留言:

張貼留言

Messaging API作為替代方案

  LINE超好用功能要沒了!LINE Notify明年3月底終止服務,有什麼替代方案? LINE Notify將於2025年3月31日結束服務,官方建議改用Messaging API作為替代方案。 //CHANNEL_ACCESS_TOKEN = 'Messaging ...