2022年4月28日 星期四

lambda 參考

 multiply = lambda x,y:x*y

print(multiply(3,2))


print((lambda x,y:x**y)(4,2))


numbers = list(range(20))

print(numbers)

result = list(filter(lambda x:x%2==0,numbers))

print(result)


result = list(map(lambda x:x*2,numbers))

print(result)


from functools import reduce

result = reduce(lambda x,y:x+y,numbers)

print(result)


資料來源:https://www.learncodewithmike.com/2019/12/python-lambda-functions.html

第二欄值Sort

 cars = [

    ["infiniti",2000],

    ["toyota",1000],

    ["smart",5000],

]

print(cars)

cars.sort()

# print(cars)

# print(sorted(cars,key=lambda car:car[1]))


print(cars)

n = len(cars)

for i in range(n):

    for j in range(i+1,n):

        if cars[i][1]>cars[j][1]:

            cars[i],cars[j]=cars[j],cars[i]

            

print(cars)

四捨五入自己寫

 f = '123.3456789'

def myround(f,fix):
    k =f[f.find('.')+fix+1]
    # print(k)
    if int(k) >=5:
        a = str(int(f[f.find('.')+fix])+1)
        a = f[:f.find('.')+fix]+a
    else:
        a = float(f[:f.find('.')+fix+1])
    if fix == 0:
        a = f[:f.find('.')]
    return(a)
for i in range(len(f)-f.find('.')-1):
    print(myround(f,i))

2022年4月27日 星期三

數字龍捲風

 d1 = '''

3 4 2 1 4
4 2 3 8 9
2 1 9 5 6
4 2 3 7 8
1 2 6 4 3
'''
d = [[j for j in i.split()] for i in d1.strip().split('\n')]

def go():
    global turn,ctr,r,c
    turn = turn % 4
    if turn ==0:
        c-=1
    elif turn==1:
        r-=1
    elif turn==2:
        c+=1
    elif turn ==3:
        r+=1  
    print(d[r][c],end='')
    ctr += 1
    if ctr>=n**2: exit()
turn = 0
n = 5

r,c =n//2,n//2
ctr = 0
print(d[r][c],end='')
ctr += 1
if n==1:exit()

for i in range(1,6):
    for j in range(i):
        go()
    turn +=1
    for j in range(i):
        go()
    turn +=1

Height of Tree

 class Node:

    def __init__(self,root=None,left=None,right=None):
        self.root = root
        self.left = left
        self.right = right

    def height(self):
        return 1+max(self.left.height() if self.left is not None else 0,
                     self.right.height() if self.right is not None else 0)

tree = [Node() for _ in range(1023)]
root = tree[0]

for i in range(len(tree)):
    l_child_idx,r_child_idx = (i+1)*2-1,(i+1)*2
    root_idx = (i-1)//2
    if root_idx :
        tree[i].root = tree[root_idx]
    if l_child_idx < len(tree):
        tree[i].left = tree[l_child_idx]
    if r_child_idx < len(tree):
        tree[i].right = tree[r_child_idx]

print(root.height())

資料來源:https://www.796t.com/post/N2dodnk=.html

小群體

 instr = '''

10
4 7 2 9 6 0 8 1 5 3
'''
d1 = instr.strip().split('\n')
n = int(d1[0])
r = list(range(n))
# print(r)

d = [int(i) for i in d1[1].split(' ')]
# print(d)

gs = []
t = set()
t.add(d[0])
t.add(r[0])
gs.append(t)

for j in range(1,len(d)):
    for i in gs:
        if d[j] in i or r[j] in i:
            i.add(d[j])
            i.add(r[j])
            break
        else:
            t = set()
            t.add(d[j])
            t.add(r[j])
            gs.append(t)

gs1 = []
for i in gs:
    if i not in gs1:
        gs1.append(i)
print(len(gs1))

2022年4月26日 星期二

秘密差

 d = '263541'

s1 = 0
s2 = 0
for i in range(len(d)):
    if i%2==0:
        s1+=int(d[i])
    else:
        s2+=int(d[i])
print(abs(s1-s2))

棒球遊戲III

 ins = '''

5 1B 1B FO GO 1B
5 1B 2B FO FO SO
4 SO HR SO 1B
4 FO FO FO HR
4 1B 1B 1B 1B
4 GO GO 3B GO
4 1B GO GO SO
4 SO GO 2B 2B
4 3B GO GO FO
6
'''
d1 = [ i for i in ins.strip().split('\n') ]
b = int(d1[-1])
d1.pop()
d2 = [[j for j in i.split()] for i in d1]

d = []
for i in range(1,6):
    for j in range(9):
        if int(d2[j][0])>= i:
            d.append(d2[j][i])

def aB(n):
    global score
    p.append(1)
    for i in range(n-1):
        p.append(0)
       
    for i in range(n):
        c = p.pop(0)    
        score = score + c        

def hr():
    global score
    global p
    score = score + sum(p)+1
    p=[0,0,0]

# main
score = 0
p = [0,0,0]
out = 0
bc = 0
for i in range(len(d)):
    cur = d.pop(0)
    if cur[0] in '123' :
        aB(int(cur[0]))
    elif cur[1]=='O':
        out+=1
        bc+=1
    elif cur == 'HR': hr()
 
    if out ==3 :
        out==0
        p = [0,0,0]  
    if b == bc: break
print(score)

棒球遊戲II

 ins = '''

5 1B 1B FO GO 1B
5 1B 2B FO FO SO
4 SO HR SO 1B
4 FO FO FO HR
4 1B 1B 1B 1B
4 GO GO 3B GO
4 1B GO GO SO
4 SO GO 2B 2B
4 3B GO GO FO
6
'''
d1 = [ i for i in ins.strip().split('\n') ]
b = int(d1[-1])
d1.pop()
d2 = [[j for j in i.split()] for i in d1]

d = []
for i in range(1,6):
    for j in range(9):
        if int(d2[j][0])>= i:
            d.append(d2[j][i])

def aB(n):
    global score
    p.append(1)
    for i in range(n-1):
        p.append(0)
       
    for i in range(n):
        c = p.pop(0)    
        score = score + c        

def hr():
    global score
    global p
    score = score + sum(p)+1
    p=[0,0,0]

# main
score = 0
p = [0,0,0]
out = 0
bc = 0
for i in range(len(d)):
    cur = d.pop(0)
    if cur == '1B': aB(1)
    if cur == '2B': aB(2)
    if cur == '3B': aB(3)
    if cur == 'HR': hr()
    if cur[1]=='O':
        out+=1
        bc+=1
   
    if out ==3 :
        out==0
        p = [0,0,0]  
    if b == bc: break
print(score)

棒球遊戲

 ins = '''

5 1B 1B FO GO 1B
5 1B 2B FO FO SO
4 SO HR SO 1B
4 FO FO FO HR
4 1B 1B 1B 1B
4 GO GO 3B GO
4 1B GO GO SO
4 SO GO 2B 2B
4 3B GO GO FO
6
'''
d1 = [ i for i in ins.strip().split('\n') ]
b = int(d1[-1])
d1.pop()
d2 = [[j for j in i.split()] for i in d1]

d = []
for i in range(1,6):
    for j in range(9):
        if int(d2[j][0])>= i:
            d.append(d2[j][i])

def a1B():
    global score
    p.append(1)
    c = p.pop(0)    
    score = score + c

def a2B():
    global score
    p.append(1)
    p.append(0)

    c = p.pop(0)    
    score = score + c

    c = p.pop(0)    
    score = score + c

def a3B():
    global score
    p.append(1)
    p.append(0)
    p.append(0)
   
    c = p.pop(0)    
    score = score + c

    c = p.pop(0)    
    score = score + c
   
    c = p.pop(0)    
    score = score + c

def hr():
    global score
    global p
    score = score + sum(p)+1
    p=[0,0,0]

# main
score = 0
p = [0,0,0]
out = 0
bc = 0
for i in range(len(d)):
    cur = d.pop(0)
    if cur == '1B': a1B()
    if cur == '2B': a2B()
    if cur == '3B': a3B()
    if cur == 'HR': hr()
    if cur == 'FO':
        out+=1
        bc+=1
    if cur == 'GO':
        out+=1
        bc+=1
    if cur == 'SO':
        out+=1
        bc+=1  

    if out ==3 :
        out==0
        p = [0,0,0]
    # print(b,bc)
    if b == bc: break
print(score)

最大和

 ins = '''

4 3
6 3 2
2 7 9
4 7 1
9 5 3
'''
a = ins.strip().split('\n')
a.pop(0)
# print(a)
d = []
for i in a:
    t = [int(j) for j in i.split()]
    d.append(t)
# print(d)
s = 0
for i in d:
    s+=max(i)
print(s)
b=[]
for i in d:
    if s%max(i)==0:
        b.append(str(max(i)))
b = ''.join(b)
if b == '':
    print(-1)
else:
    print(b)

線段覆蓋長度

 d = [0 for i in range(1000+1)]

instr = '''5

160 180

150 200

280 300

300 330

190 210'''

d1 = [i for i in instr.strip().split()]

n = int(d1[0])

# d1.remove(d1[0])

d1.pop(0)

d1 = [int(i) for i in d1]

d2 = []

for i in range(0,len(d1),2):

    t = [d1[i],d1[i+1]]

    d2.append(t)


for i in d2:

    a,b = i[0],i[1]

    for j in range(a,b+1):

        d[j] = 1


d = [str(i) for i in d]

d = ''.join(d)

d = d.split('0')

d = [i for i in d if i!='']


s = 0

for i in d:

    t = i.split('2')

    t = [i for i in t if i!='']

    p = [i.count('1')-1 for i in t]

    s+=sum(p)

print(s)

2022年4月25日 星期一

矩陣轉換

 def tt(a):

    return a[::-1]

# a = [[1,1],

# [1,3],

# [2,1],

# [5,6],

# ]

a = [[1,1,8],

[1,3,7],

[2,1,6],

[5,6,5],

]

# a = [[1,1],

# [1,3],

# [2,1],

# ]

print(a)

cur = tt(a)

print(cur)


def rr(a):

    m = len(a[0])

    n = len(a)

    b =[ [0 for i in range(n)] for j in range(m)]

    

    for i in range(m):

        for j in range(n):

            b[i][j] = a[n-1-j][i]

    return b

    

cur = rr(cur)

print(cur)

cur = rr(cur)

print(cur)

成績指標

 import copy

n=10

a ='0 11 22 33 44 55 99 77 88 66'

a =[int(i) for i in  a.split(' ')]

print(a)

p = [i for i in a if i>=60]

np = [i for i in a if i<60]

b = a.copy()

b.sort()

print(b)

print(a)

print(p[0],np[-1])

定時K彈

 # n = 5

# m = 2

# k = 4


# a = [i+1 for i in range(5)]

# # print(a)


# i = 1

# while (len(a)>1):

#     t = a.pop(0)

#     # print(t)

#     if i%2!=0:

#         a.append(t)

#         # print(a)

#     i+=1

# print(a[0])


n = 5

m = 2

k = 4


a = [i+1 for i in range(10)]

# print(a)


i = 1

while (k>=1):

    t = a.pop(0)

    # print(t)

    if i%2!=0:

        a.append(t)

        # print(a)

    else:

        k-=1

    i+=1

print(a[0])

2022年4月21日 星期四

插入排序學習

 d = [int(i) for i in '3,5,1,4,2,7,9,6'.split(',')]

n = len(d)
print(d)

# right turn
# t = d[n-1]
# i = n-1
# while i>0:
#     d[i]=d[i-1]
#     i-=1
# d[0]=t
# print(d)

# left turn
# t = d[0]
# i = 0
# while i <n-1:
#     d[i]=d[i+1]
#     i+=1
# print(d)
# d[n-1]=t

# insert sort
# for j in range(1,n):
#     i = 0
#     while d[i] < d[j]:
#         i+=1
#     t =d[j]
#     d.remove(d[j])
#     d.insert(i,t)
# print(d)

# insert .. to right position
d.sort()
print(d)

t = 0
i = 0
if t>d[n-1]:
    d.append(t)
else:
    while d[i]<t and i<n:
        i+=1
    d.insert(i,t)
print(d)

2022年4月19日 星期二

凱撒密碼

 indata = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'

outdata = indata[3:29]

print(outdata)

rd = {}

for i in range(26):

    rd[indata[i]] = outdata[i]

print(rd)


a = 'HELLO'

for i in a:

    print(rd[i],end='')

Morse Code , Python dictionary

 r = {

'A':'·-','B':'-···','C':'-·-·','D':'-··','E':'·','F':'··-·','G':'--·',

'H':'····','I':'··','J':'·---','K':'-·-','L':'·-··','M':'--','N':'-·',

'O':'---','P':'·--·','Q':'--·-','R':'·-·','S':'···','T':'-','U':'··-',

'V':'···-','W':'·--','X':'-··-','Y':'-·--','Z':'--··'

}

a = 'HELLO'

for i in a:

    print(r[i])

2022年4月12日 星期二

Hamming distance

 d1 = '10011111'

d2 = '10111101'

d3 = [0]*8

for i in range(len(d1)):

    if  d1[i] != d2[i]:

        d3[i] = 1

print(sum(d3))

python 二進位、format、rjust

 ip = '210.70.45.3'

ip = ip.split('.')

ip1 = []

for i in ip:

    ip1.append(format(int(i),'b').rjust(8,'0'))

ip1 = '.'.join(ip1)

print(ip1)