Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # SideRiderSolver by Qon
- # This is Free Open Source Software! Please be so kind and copy left (GPLv3) :>
- ROUNDING = 6 # round output numbers to 6 digits. I tried 4 with a really, really long solution sequence and there was no noticable error at all. Using 6 for now though. 2 to 4 might be reasonable numbers.
- import re
- def bend(var, pos, k):
- return (str(round(k, ROUNDING)) +
- (
- "*(" + var
- +("" if pos == 0 else ("-"+str(round(pos, ROUNDING))))
- +"+|"+var
- +("" if pos == 0 else ("-"+str(round(pos, ROUNDING))))
- +"|)" if not k == 0 else ""
- )
- )
- def bendMulti(var, list):
- first = True
- bstr = ""
- for b in list:
- tpos, kval = b
- if first:
- bstr += bend(var, tpos, kval)
- else:
- _, prevkval = prevb
- bstr += "+" if (kval-prevkval >= 0) else ""
- bstr += bend(var, tpos, kval - prevkval)
- first = False
- prevb = b
- return "("+bstr+")/2"
- def posMulti(list, func='x^8'):
- first = True
- xstr = ""
- ystr = ""
- time = 0
- previtem = (0,0,0)
- retxlist, retylist = [], []
- for item in list:
- xpos, ypos, delay = item
- prevxpos, prevypos, prevdelay = previtem
- retxlist.append( (time, (xpos-prevxpos)/delay) )
- retylist.append( (time, (ypos-prevypos)/delay) )
- time += delay
- previtem = item
- x_movement = bendMulti('t', retxlist)
- y_movement = bendMulti('t', retylist)
- return re.sub(r"(?<![a-zA-Z])x(?![a-zA-Z])", "(x- " + x_movement +")",func) + " + " + y_movement
- def bendSmoothTanh(var, b):
- # (-1*(tanh(x+2)+1) +3*(tanh(x-6)+1))/2
- # (-1*(tanh(x*4-2)+1) )/2
- timeStart, delay, posStart, posEnd = b
- timeEnd = timeStart + delay
- return str(posEnd - posStart) + (
- "*(tanh( (" + var + "-" + str(round(timeStart + delay/2, ROUNDING)) + ")/" + str(round(delay/4, ROUNDING)) + ")+1)" if not posEnd == posStart else ""
- )
- def bendMultiSmooth(var, list):
- first = True
- bstr = ""
- for b in list:
- if first:
- bstr += bendSmoothTanh(var, b)
- else:
- _,_,posStart,posEnd = b
- bstr += "+" if (posEnd >= posStart) else ""
- bstr += bendSmoothTanh(var, b)
- first = False
- prevb = b
- return "("+bstr+")/2"
- def posMultiSmooth(list, func='x^8'):
- first = True
- x_movement ,y_movement = '', ''
- retxlist, retylist = [], []
- prevx, prevy = 0, 0
- time = 0
- for item in list:
- xpos, ypos, delay = item
- retxlist.append( (time, delay, prevx, xpos) )
- retylist.append( (time, delay, prevy, ypos) )
- time += delay
- prevx, prevy = xpos, ypos
- first = False
- x_movement = bendMultiSmooth('t', retxlist)
- y_movement = bendMultiSmooth('t', retylist)
- return re.sub(r"(?<![a-zA-Z])x(?![a-zA-Z])", "(x- " + x_movement +")",func) + " + " + y_movement
- print(" Uncategorized_A 1.8s\n" + posMulti([(0,-8, .01), (8,-8, 1.7), (8,0, .2)]))
- print(" Uncategorized_B 2.2s\n" + posMulti([(0,-8, .01), (8,-8, 1.7), (-8,-8, .5), (-8,-8, 1)]))
- print(" Uncategorized_C 7.1s\n" + posMulti([(-4,-4,1.7), (8,8,1), (-12,-12,3), (12,12,1.5)]))
- print(" Uncategorized_D 4.8s\n" + posMulti([(0,-8,1.7), (8,0,1), (-8,0,1.3), (0,8,1)]))
- print(" Uncategorized_D 3.3s\n" + posMulti([(0,-8,1.7), (8,0,.5), (-9,-128,.7), (-9,-1,.001), (0,8,.5)]))
- print(" Uncategorized_E 3.7s\n" + posMulti([(0,-8,0.01), (8,-8,1.5), (16,-8,1), (24,-16,1.3)]))
- print(" Uncategorized_F 4.2s\n" + posMulti([(16,-4,1.3), (0,-8,1.3), (16,-12,1.7)]))
- print(" Uncategorized_G 1.3s\n" + posMulti([(16,0,1), (8,4,0.4)]))
- print(" Uncategorized_H 1.8s\n" + posMulti([(16,-8,1), (8,-8,.8)]))
- print(" Uncategorized_I 4.5s\n" + posMulti([(0,2.5,.2), (0,-8,1.4), (0,6.5,.5), (0,-4,1)]))
- print(" Uncategorized_J 7.9s\n" + "x^2*t/5-9")
- # print(" Uncategorized_K 4.2s\n" + posMulti([(8,-8,1.8), (8,-2,0.3), (-8,-8,1.8), (-8,-2,.3)]))
- print(" Uncategorized_K Smooth 4.1s\n" + posMultiSmooth([(8,-8,1.8), (8,-2,0.3), (-8,-8,1.8), (-8,-2,.3)]))
- print()
- # print(" Qonvergence_0 2.2s\n" + "x^2*t/10")
- print(" Qonvergence_0 1.6s\n" + "x^2*t/10+t^6")
- print(" Qonvergence_1 1.5s\n" + "x^2*t/10+t*10")
- print(" Qonvergence_2 4.6s\n" + "x^2/200-30+x^4/100000")
- print(" Qonvergence_3 3.6s\n" + "-cos(x/16)*16+cos(x/4)*2+x^2/100")
- print(" Qonvergence_4 3.4s\n" + "-10+sin(x/2.3+0.2)+x/10+x^2*t/40")
- print(" Qonvergence_5 3.1s\n" + "((7<x)*(x<9)*(abs(x-8)*7)*(t<1.2) + (-17<x)*(x<-14)*(abs(x+16)*(7+t*150))*(t<.3)) +x^2*t/10")
- print()
- print(" OutOfOrder_0 1.7s\n" + posMulti([(0,2,.1), (16,0,1), (8,0,.7)]))
- print(" OutOfOrder_1 3.2s\n" + posMulti([(24,0,1), (24,0,.5), (16,1.5,.5), (8,-1,.8), (16,-2,.4)]))
- print(" OutOfOrder_2 7.9s\n" + posMulti([(12,2,1), (24,0,1), (16,2,1), (8,0,1.2), (20,1,1), (32,0,1.2), (16,0,1.6)]))
- print(" OutOfOrder_3 9.1s\n" + posMulti([(-2,3,.2), (-16,0,2), (0,4,2), (16,0,2), (-8,0,3)]))
- print()
- print(" Pause_0 8.0s\n" + posMulti([(0,8,.01), (0,8,8)]))
- # print(" Pause_1 9.8s\n" + "(16*(t+abs(t))-16*(t-0.2+abs(t-0.2))-16*(t-4.2+abs(t-4.2))+16*(t-4.65+abs(t-4.65)))/2")
- print(" Pause_1 8.9s\n" + posMulti([(0,4.5,.01), (0,4.5,3.1), (0,-5,0.1), (0,-5,10)]))
- print(" Pause_2 8.1s\n" + posMulti([(0,4,.01), (0,4,8.02), (0,8,.03), (0,8,.03)], ''))
- # # print(" Pause_3 13.3s\n" + "-(+sin(t/3)-sin(t/3)^3/2+sin(t/3)^5/6-sin(t/3)^7/10)*7+(x-8)^9.5-x/2")
- # print(" Pause_3 7.3s\n" + posMulti([(8,0, .5),(8,.5, 2), (8,-8, 0.01), (8,-8, 3)]))
- print(" Pause_3 7.2s Smooth\n" + posMulti([(8,-1.5, .4),(8,.5, 2.05), (8,-8, 0.01), (8,-8, 3)]))
- print()
- # sineridergame.com/SineRider.html?p=AAAAAy=0e=px=0py=0cp=0ci=0ca=0cs=0o=ox=0.1oy=3.485285od=0ot=0oi=1o=ox=10.7oy=10.58529od=0ot=0oi=0o=ox=5.9oy=1.185285od=0ot=0oi=1o=ox=3.9oy=5.785285od=0ot=0oi=1o=ox=2oy=4.685285od=0ot=0oi=1o=ox=5.9oy=6.885285od=0ot=0oi=1o=ox=9.9oy=3.285285od=0ot=0oi=1o=ox=7.9oy=2.185285od=0ot=0oi=1o=ox=10.9oy=5.285285od=0ot=0oi=1o=ox=6.8oy=8.885284od=0ot=0oi=1o=ox=7.7oy=10.78528od=0ot=0oi=1o=ox=11.8oy=7.285285od=0ot=0oi=1o=ox=-2oy=2.285285od=0ot=0oi=1o=ox=-2oy=0.185285od=0ot=0oi=1o=ox=-2oy=-1.914715od=0ot=5oi=1o=ox=0.2oy=-2.014715od=0ot=0oi=1o=ox=2.4oy=-2.114715od=0ot=0oi=1o=ox=4.5oy=-1.014715od=0ot=0oi=1o=ox=14.1oy=12.18528od=0ot=0oi=0o=ox=17.7oy=13.58529od=0ot=0oi=0o=ox=19.3oy=10.88528od=0ot=5oi=0
- print(" Qave\n" + posMulti([(7,4,1.5), (12,11, 2), (17,13, 1), (19,10, 1), (19,10, 4.3), (12,5,3), (2,-3,3), (-2,-2,2), (-2,-2,4.5), (-2,2,1), (7,7,2), (8,11,1), (8,11,1)]))
- # sineridergame.com/SineRider.html?p=AAAAAy=0e=o=ox=0oy=2.999019od=0ot=0oi=8o=ox=2oy=2.999019od=0ot=0oi=1o=ox=-2oy=2.999019od=0ot=0oi=3o=ox=0oy=4.999019od=0ot=0oi=5o=ox=2oy=4.999019od=0ot=0oi=6o=ox=-2oy=4.999019od=0ot=0oi=7o=ox=0oy=6.999019od=0ot=0oi=0o=ox=2oy=6.999019od=0ot=0oi=2o=ox=-2oy=6.999019od=0ot=0oi=4
- print(" Square\n" + posMulti([(-5,0,2), (-5,9,2), (0,9,2), (0,7,2), (0,9,2), (5,9,2), (5,2,2), (2,2,2), (5,2,2), (5,7,2), (2,7,2), (0,9,2), (-5,9,2), (-5,2,2), (-2,2,2), (-5,2,2), (-5,7,2), (0,7,2), (0,5,2), (2,5,2), (-2,5,2), (0,3,2), (0,3,2)]))
- print(" SquareSmooth\n" + posMultiSmooth([(-5,0,2), (-5,9,2), (0,9,2), (0,7,2), (0,9,2), (5,9,2), (5,2,2), (2,2,2), (5,2,2), (5,7,2), (2,7,2), (0,9,2), (-5,9,2), (-5,2,2), (-2,2,2), (-5,2,2), (-5,7,2), (0,7,2), (0,5,2), (2,5,2), (-2,5,2), (0,3,2), (0,3,2)]))
- # http://www.reddit.com/r/SineRider/comments/2j1nru/fun_with_waves_custom_puzzle/
- # http://sineridergame.com/SineRider.html?p=AAAAAy=0e=o=ox=5oy=0od=0ot=0oi=-1o=ox=11oy=3od=0ot=0oi=-1o=ox=17oy=-4od=0ot=0oi=-1o=ox=30oy=2od=0ot=0oi=-1o=ox=46oy=-7od=0ot=0oi=-1o=ox=61oy=0od=0ot=0oi=-1
- print(" FunWithWaves\n" + posMulti([(5,-.3,1), (11,3,1), (17,-4,1.3), (30,2,2), (46,-7,2), (61,0,1.9)], 'x^2/3'))
- # Program output:
- # Uncategorized_A 1.8s
- # (x- (0.0+4.705882*(t-0.01+|t-0.01|)-4.705882*(t-1.71+|t-1.71|))/2)^8 + (-800.0*(t+|t|)+800.0*(t-0.01+|t-0.01|)+40.0*(t-1.71+|t-1.71|))/2
- # Uncategorized_B 2.2s
- # (x- (0.0+4.705882*(t-0.01+|t-0.01|)-36.705882*(t-1.71+|t-1.71|)+32.0*(t-2.21+|t-2.21|))/2)^8 + (-800.0*(t+|t|)+800.0*(t-0.01+|t-0.01|)+0.0+0.0)/2
- # Uncategorized_C 7.1s
- # (x- (-2.352941*(t+|t|)+14.352941*(t-1.7+|t-1.7|)-18.666667*(t-2.7+|t-2.7|)+22.666667*(t-5.7+|t-5.7|))/2)^8 + (-2.352941*(t+|t|)+14.352941*(t-1.7+|t-1.7|)-18.666667*(t-2.7+|t-2.7|)+22.666667*(t-5.7+|t-5.7|))/2
- # Uncategorized_D 4.8s
- # (x- (0.0+8.0*(t-1.7+|t-1.7|)-20.307692*(t-2.7+|t-2.7|)+20.307692*(t-4.0+|t-4.0|))/2)^8 + (-4.705882*(t+|t|)+12.705882*(t-1.7+|t-1.7|)-8.0*(t-2.7+|t-2.7|)+8.0*(t-4.0+|t-4.0|))/2
- # Uncategorized_D 3.3s
- # (x- (0.0+16.0*(t-1.7+|t-1.7|)-40.285714*(t-2.2+|t-2.2|)+24.285714*(t-2.9+|t-2.9|)+18.0*(t-2.901+|t-2.901|))/2)^8 + (-4.705882*(t+|t|)+20.705882*(t-1.7+|t-1.7|)-198.857143*(t-2.2+|t-2.2|)+127182.857143*(t-2.9+|t-2.9|)-126982.0*(t-2.901+|t-2.901|))/2
- # Uncategorized_E 3.7s
- # (x- (0.0+5.333333*(t-0.01+|t-0.01|)+2.666667*(t-1.51+|t-1.51|)-1.846154*(t-2.51+|t-2.51|))/2)^8 + (-800.0*(t+|t|)+800.0*(t-0.01+|t-0.01|)+0.0-6.153846*(t-2.51+|t-2.51|))/2
- # Uncategorized_F 4.2s
- # (x- (12.307692*(t+|t|)-24.615385*(t-1.3+|t-1.3|)+21.719457*(t-2.6+|t-2.6|))/2)^8 + (-3.076923*(t+|t|)+0.0+0.723982*(t-2.6+|t-2.6|))/2
- # Uncategorized_G 1.3s
- # (x- (16.0*(t+|t|)-36.0*(t-1+|t-1|))/2)^8 + (0.0+10.0*(t-1+|t-1|))/2
- # Uncategorized_H 1.8s
- # (x- (16.0*(t+|t|)-26.0*(t-1+|t-1|))/2)^8 + (-8.0*(t+|t|)+8.0*(t-1+|t-1|))/2
- # Uncategorized_I 4.5s
- # (x- (0.0+0.0+0.0+0.0)/2)^8 + (12.5*(t+|t|)-20.0*(t-0.2+|t-0.2|)+36.5*(t-1.6+|t-1.6|)-39.5*(t-2.1+|t-2.1|))/2
- # Uncategorized_J 7.9s
- # x^2*t/5-9
- # Uncategorized_K Smooth 4.1s
- # (x- (8*(tanh( (t-0.9)/0.45)+1)+0-16*(tanh( (t-3.0)/0.45)+1)+0)/2)^8 + (-8*(tanh( (t-0.9)/0.45)+1)+6*(tanh( (t-1.95)/0.075)+1)-6*(tanh( (t-3.0)/0.45)+1)+6*(tanh( (t-4.05)/0.075)+1))/2
- # Qonvergence_0 1.6s
- # x^2*t/10+t^6
- # Qonvergence_1 1.5s
- # x^2*t/10+t*10
- # Qonvergence_2 4.6s
- # x^2/200-30+x^4/100000
- # Qonvergence_3 3.6s
- # -cos(x/16)*16+cos(x/4)*2+x^2/100
- # Qonvergence_4 3.4s
- # -10+sin(x/2.3+0.2)+x/10+x^2*t/40
- # Qonvergence_5 3.1s
- # ((7<x)*(x<9)*(abs(x-8)*7)*(t<1.2) + (-17<x)*(x<-14)*(abs(x+16)*(7+t*150))*(t<.3)) +x^2*t/10
- # OutOfOrder_0 1.7s
- # (x- (0.0+16.0*(t-0.1+|t-0.1|)-27.428571*(t-1.1+|t-1.1|))/2)^8 + (20.0*(t+|t|)-22.0*(t-0.1+|t-0.1|)+2.0*(t-1.1+|t-1.1|))/2
- # OutOfOrder_1 3.2s
- # (x- (24.0*(t+|t|)-24.0*(t-1+|t-1|)-16.0*(t-1.5+|t-1.5|)+6.0*(t-2.0+|t-2.0|)+30.0*(t-2.8+|t-2.8|))/2)^8 + (0.0+0.0+3.0*(t-1.5+|t-1.5|)-6.125*(t-2.0+|t-2.0|)+0.625*(t-2.8+|t-2.8|))/2
- # OutOfOrder_2 7.9s
- # (x- (12.0*(t+|t|)+0.0-20.0*(t-2+|t-2|)+1.333333*(t-3+|t-3|)+18.666667*(t-4.2+|t-4.2|)-2.0*(t-5.2+|t-5.2|)-20.0*(t-6.4+|t-6.4|))/2)^8 + (2.0*(t+|t|)-4.0*(t-1+|t-1|)+4.0*(t-2+|t-2|)-3.666667*(t-3+|t-3|)+2.666667*(t-4.2+|t-4.2|)-1.833333*(t-5.2+|t-5.2|)+0.833333*(t-6.4+|t-6.4|))/2
- # OutOfOrder_3 9.1s
- # (x- (-10.0*(t+|t|)+3.0*(t-0.2+|t-0.2|)+15.0*(t-2.2+|t-2.2|)+0.0-16.0*(t-6.2+|t-6.2|))/2)^8 + (15.0*(t+|t|)-16.5*(t-0.2+|t-0.2|)+3.5*(t-2.2+|t-2.2|)-4.0*(t-4.2+|t-4.2|)+2.0*(t-6.2+|t-6.2|))/2
- # Pause_0 8.0s
- # (x- (0.0+0.0)/2)^8 + (800.0*(t+|t|)-800.0*(t-0.01+|t-0.01|))/2
- # Pause_1 8.9s
- # (x- (0.0+0.0+0.0+0.0)/2)^8 + (450.0*(t+|t|)-450.0*(t-0.01+|t-0.01|)-95.0*(t-3.11+|t-3.11|)+95.0*(t-3.21+|t-3.21|))/2
- # Pause_2 8.1s
- # + (400.0*(t+|t|)-400.0*(t-0.01+|t-0.01|)+133.333333*(t-8.03+|t-8.03|)-133.333333*(t-8.06+|t-8.06|))/2
- # Pause_3 7.2s Smooth
- # (x- (20.0*(t+|t|)-20.0*(t-0.4+|t-0.4|)+0.0+0.0)/2)^8 + (-3.75*(t+|t|)+4.72561*(t-0.4+|t-0.4|)-850.97561*(t-2.45+|t-2.45|)+850.0*(t-2.46+|t-2.46|))/2
- # Qave
- # (x- (4.666667*(t+|t|)-2.166667*(t-1.5+|t-1.5|)+2.5*(t-3.5+|t-3.5|)-3.0*(t-4.5+|t-4.5|)-2.0*(t-5.5+|t-5.5|)-2.333333*(t-9.8+|t-9.8|)-1.0*(t-12.8+|t-12.8|)+1.333333*(t-15.8+|t-15.8|)+2.0*(t-17.8+|t-17.8|)+0.0+4.5*(t-23.3+|t-23.3|)-3.5*(t-25.3+|t-25.3|)-1.0*(t-26.3+|t-26.3|))/2)^8 + (2.666667*(t+|t|)+0.833333*(t-1.5+|t-1.5|)-1.5*(t-3.5+|t-3.5|)-5.0*(t-4.5+|t-4.5|)+3.0*(t-5.5+|t-5.5|)-1.666667*(t-9.8+|t-9.8|)-1.0*(t-12.8+|t-12.8|)+3.166667*(t-15.8+|t-15.8|)-0.5*(t-17.8+|t-17.8|)+4.0*(t-22.3+|t-22.3|)-1.5*(t-23.3+|t-23.3|)+1.5*(t-25.3+|t-25.3|)-4.0*(t-26.3+|t-26.3|))/2
- # Square
- # (x- (-2.5*(t+|t|)+2.5*(t-2+|t-2|)+2.5*(t-4+|t-4|)-2.5*(t-6+|t-6|)+0.0+2.5*(t-10+|t-10|)-2.5*(t-12+|t-12|)-1.5*(t-14+|t-14|)+3.0*(t-16+|t-16|)-1.5*(t-18+|t-18|)-1.5*(t-20+|t-20|)+0.5*(t-22+|t-22|)-1.5*(t-24+|t-24|)+2.5*(t-26+|t-26|)+1.5*(t-28+|t-28|)-3.0*(t-30+|t-30|)+1.5*(t-32+|t-32|)+2.5*(t-34+|t-34|)-2.5*(t-36+|t-36|)+1.0*(t-38+|t-38|)-3.0*(t-40+|t-40|)+3.0*(t-42+|t-42|)-1.0*(t-44+|t-44|))/2)^8 + (0.0+4.5*(t-2+|t-2|)-4.5*(t-4+|t-4|)-1.0*(t-6+|t-6|)+2.0*(t-8+|t-8|)-1.0*(t-10+|t-10|)-3.5*(t-12+|t-12|)+3.5*(t-14+|t-14|)+0.0+2.5*(t-18+|t-18|)-2.5*(t-20+|t-20|)+1.0*(t-22+|t-22|)-1.0*(t-24+|t-24|)-3.5*(t-26+|t-26|)+3.5*(t-28+|t-28|)+0.0+2.5*(t-32+|t-32|)-2.5*(t-34+|t-34|)-1.0*(t-36+|t-36|)+1.0*(t-38+|t-38|)+0.0-1.0*(t-42+|t-42|)+1.0*(t-44+|t-44|))/2
- # SquareSmooth
- # (x- (-5*(tanh( (t-1.0)/0.5)+1)+0+5*(tanh( (t-5.0)/0.5)+1)+0+0+5*(tanh( (t-11.0)/0.5)+1)+0-3*(tanh( (t-15.0)/0.5)+1)+3*(tanh( (t-17.0)/0.5)+1)+0-3*(tanh( (t-21.0)/0.5)+1)-2*(tanh( (t-23.0)/0.5)+1)-5*(tanh( (t-25.0)/0.5)+1)+0+3*(tanh( (t-29.0)/0.5)+1)-3*(tanh( (t-31.0)/0.5)+1)+0+5*(tanh( (t-35.0)/0.5)+1)+0+2*(tanh( (t-39.0)/0.5)+1)-4*(tanh( (t-41.0)/0.5)+1)+2*(tanh( (t-43.0)/0.5)+1)+0)/2)^8 + (0+9*(tanh( (t-3.0)/0.5)+1)+0-2*(tanh( (t-7.0)/0.5)+1)+2*(tanh( (t-9.0)/0.5)+1)+0-7*(tanh( (t-13.0)/0.5)+1)+0+0+5*(tanh( (t-19.0)/0.5)+1)+0+2*(tanh( (t-23.0)/0.5)+1)+0-7*(tanh( (t-27.0)/0.5)+1)+0+0+5*(tanh( (t-33.0)/0.5)+1)+0-2*(tanh( (t-37.0)/0.5)+1)+0+0-2*(tanh( (t-43.0)/0.5)+1)+0)/2
- # FunWithWaves
- # (x- (5.0*(t+|t|)+1.0*(t-1+|t-1|)-1.384615*(t-2+|t-2|)+1.884615*(t-3.3+|t-3.3|)+1.5*(t-5.3+|t-5.3|)-0.105263*(t-7.3+|t-7.3|))/2)^2/3 + (-0.3*(t+|t|)+3.6*(t-1+|t-1|)-8.684615*(t-2+|t-2|)+8.384615*(t-3.3+|t-3.3|)-7.5*(t-5.3+|t-5.3|)+8.184211*(t-7.3+|t-7.3|))/2
Add Comment
Please, Sign In to add comment