fedor-resh

Untitled

Mar 29th, 2023 (edited)
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.67 KB | Source Code | 0 0
  1. def swap(is_right, From, To, s):
  2.     if From==To and (is_right or len(trains[From])==1):
  3.         return
  4.     el = trains[From].pop(len(trains[From])-1 if is_right else 0)
  5.     if not trains[To] or el[0] != trains[To][-1][0]:
  6.         trains[To].append(el)
  7.     else:
  8.         trains[To][-1] = (el[0], trains[To][-1][1] + el[1])
  9.     length = el[1]
  10.     s[0] = 1
  11.     print('R' if is_right else 'L', length, From+1, To+1)
  12.     return True
  13. def check(char, to_place):
  14.     s = [0]
  15.     for i in range(n):
  16.         while trains[i] and trains[i][0][0] == char:
  17.             if not swap(False, i, to_place, s):
  18.                 break
  19.     for i in range(n):
  20.         while trains[i] and trains[i][-1][0] == char:
  21.             if not swap(True, i, to_place, s):
  22.                 break
  23.     return s[0]
  24. def find():
  25.     for train in trains:
  26.         if len(train) > 1:
  27.             return train[0][0]
  28.  
  29. n = int(input())
  30. trains = []
  31. for i in range(n):
  32.     cur = input()
  33.     trains.append([])
  34.     for char in cur:
  35.         if trains[i] and char == trains[i][-1][0]:
  36.             trains[i][-1] = (char, trains[i][-1][1]+1)
  37.         else:
  38.             trains[i].append((char, 1))
  39. for i in range(n):
  40.     s = 1
  41.     while s:
  42.         s = 0
  43.         for j in range(i+1):
  44.             if trains[j]:
  45.                 s+=check(trains[j][-1][0], j)
  46.             else:
  47.                 s+=check(find(), j)
  48. print(trains)
  49. # test
  50. # 19
  51. # QREUTYIUYREQOIUPIWUOIUYQPOIEWURPIYUORIEYPIORUEPOUYQEROIUPYOIUERPQ
  52. # PIUQERYOPOIQREYPYPPPPQERYOIUYPIOEURQWOIUYPQEIORUOIUYOPRIEWYPOIUTY
  53. # QTPIPQREUIEWIUOYWEYROIUYOIUREYERTRETTREQIURYOIUTRQRRRTIREUQYTOIQP
  54. # POIUERQYOIUYTOQIPEUTRPIUWOERIUYOIUYQEPROIUOWERYIUYEPORWQIUPOIUWEO
  55. # IUYOIUQIEPROIWUTWOIUYPOIQUEWEQWREQRWERQWPQWYIUEWYPORIYYPOIEYQRWPO
  56. # QEPWIRUPTOYQEROIUYPQEWOIURPOQIURETPUYPIUYPIUTYPOIUOIQEWUPIUQPTUYP
  57. # QWPEYROWIUEEEUYPIUQYQWPOIQWYEPIUYPIOTPYEWIORUPYPTRPIUYPQEWOIYRPUY
  58. # UYPQIWUEYPROIYPOIYTQEPIUYOIUQTYPOEIRUPOWIYPIQYWREIOQPWOIRYPIYQETP
  59. # POYPUIQEWTYPIUYQPREOIYPOIURPQOEWIYPOIYQEWRPOYPOITERYPIUYRPQOWIEWP
  60. # QEWPTOYPRIUEPOIUPQWUERYPOIUWQPOIEYPIWYEYEWPEROWYQPIEWYRIUWEYPTUYQ
  61. # QIUERYWOIUYORIEWYPIRYPIWEYPIYEWOEWPRIYPIOEWYPRIOUEWPOIYRPIYTPOIUQ
  62. # REPWUYOTIURTYPOIRUPUYOIUEPRYPIYUTYPQEIURPIUEROIUYOIUYTEWIURPOIREW
  63. # EWIUYWQOIUWEPOIOIEURPIYQPWEOYRIPUPOTIERWUPOYEQWROIUPOERWIPOEIURPO
  64. # UPQOEYTPIUEYWPOIUQPEWIUPQYTEPIYIOYUPPQUYREPIUYQPEWIUTYIUREWYOIYOR
  65. # QEWIYOQIURYOEWRPOYUTOEYOIEWRUYIORUEWQPOIUEOIRUWROITUYOEIQRUWPIOWE
  66. # QEWPIUTOIQUTYPOUIWPIUQPEORIIUTWYOIUYTIEUYORITUPIUORIUQYOIUWPEOIUI
  67. # QPWEROIUORYOIUTYPOIUERPQOIUPEROQUPWUWEPOIUPORTREUTPIOUPEIOQRWUOIU
  68. # UOIQYERWOIUYTPQERIUOIUEWQYOIUYQWOEIURYOQWIUWEYOEPRWEIOQRUQUIEWYER
  69. # QWRUPORIETUOIYRPOITUPIUYTRTWERTETRIUERYOIUYRIOTIYUYIRTITYEPIUTRRE
Advertisement
Add Comment
Please, Sign In to add comment