#List of algs to compare.
# later to be graphically imported
algList = [
"R U R' U' R' F R2 U' R' U' R U R' F'" ,
"(y2) L' U' L U L F' L2 U L U L' U' L F" ,
"F R U' R' U R U R2 F' R U R U' R'" ,
"(y2) B L U' L' U L U L2 B' L U L U' L'" ,
"L2 U' L2 D F2 R2 U R2 D' F2 U" ,
"R2 U' R2 D B2 L2 U L2 D' B2 U" ,
"R2' u' R2 U R2' (y) R2 u R2' U' R2 U" ,
"R2 U R2' U' R2 U' D R2' U' R2 U R2' D'" ,
"U2 r' U2 r U2 (x) U2 r U2 r' U2 R (z')" ,
"R U R' U' R2 D R' U' R' U' R U (z') U2 R' U (z)" ,
"R2 U R2 U' R2 F2 U' F2 D R2 D'" ]
#time estimations for individual moves
counts = { 'U' :.09 , "U'" :.10 , 'U2' :.15 , 'u' :.11 , "u'" :.12 , 'u2' :.17 ,
'R' :.08 , "R'" :.08 , 'R2' :.14 , 'r' :.10 , "r'" :.11 , 'r2' :.14 ,
'F' :.13 , "F'" :.14 , 'F2' :.19 , 'f' :.15 , "f'" :.17 , 'f2' :.20 ,
'D' :.11 , "D'" :.12 , 'D2' :.17 , 'd' :.13 , "d'" :.14 , 'd2' :.19 ,
'B' :.17 , "B'" :.15 , 'B2' :.22 , 'b' :.19 , "b'" :.17 , 'b2' :.24 ,
'L' :.13 , "L'" :.18 , 'L2' :.22 , 'l' :.14 , "l'" :.19 , 'l2' :.24 ,
'x' :.18 , "x'" :.18 , 'x2' :.24 ,
'y' :.18 , "y'" :.18 , 'y2' :.24 ,
'z' :.19 , "z'" :.19 , 'z2' :.24 ,
'M' :.15 , "M'" :.11 , 'M2' :.18 ,
'E' :.22 , "E'" :.25 , 'E2' :.28 ,
'S' :.22 , "S'" :.25 , 'S2' :.28 }
#get rid of dumb stuff
def filter ( alg) :
ialg = alg.replace ( '(' , '' ) #get rid of unwanted
ialg = ialg.replace ( ')' , '' ) # or otherwise unneeded characters
ialg = ialg.replace ( "2'" , '2' ) # incl. whitespace, paren., 2's
parts = ialg.split ( ) #Divide the alg up into individual moves
return parts
#Estimates the time of the algorithm
def algTime( moveList) :
return sum ( map ( counts.get , moveList) )
# Print the algs with times, sorted from fastest to slowest
for time , alg in sorted ( [ algTime( filter ( alg) ) , alg] for alg in algList) :
print "%.2f" % time , alg
I0xpc3Qgb2YgYWxncyB0byBjb21wYXJlLgojIGxhdGVyIHRvIGJlIGdyYXBoaWNhbGx5IGltcG9ydGVkCmFsZ0xpc3QgPSBbCgkiUiBVIFInIFUnIFInIEYgUjIgVScgUicgVScgUiBVIFInIEYnIiwKCSIoeTIpIEwnIFUnIEwgVSBMIEYnIEwyIFUgTCBVIEwnIFUnIEwgRiIsIAoJIkYgUiBVJyBSJyBVIFIgVSBSMiBGJyBSIFUgUiBVJyBSJyIsCgkiKHkyKSBCIEwgVScgTCcgVSBMIFUgTDIgQicgTCBVIEwgVScgTCciLAoJIkwyIFUnIEwyIEQgRjIgUjIgVSBSMiBEJyBGMiBVIiwKCSJSMiBVJyBSMiBEIEIyIEwyIFUgTDIgRCcgQjIgVSIsCgkiUjInIHUnIFIyIFUgUjInICh5KSBSMiB1IFIyJyBVJyBSMiBVIiwKCSJSMiBVIFIyJyBVJyBSMiBVJyBEIFIyJyBVJyBSMiBVIFIyJyBEJyIsIAoJIlUyIHInIFUyIHIgVTIgKHgpIFUyIHIgVTIgcicgVTIgUiAoeicpIiwKCSJSIFUgUicgVScgUjIgRCBSJyBVJyBSJyBVJyBSIFUgKHonKSBVMiBSJyBVICh6KSIsCgkiUjIgVSBSMiBVJyBSMiBGMiBVJyBGMiBEIFIyIEQnIl0KCiN0aW1lIGVzdGltYXRpb25zIGZvciBpbmRpdmlkdWFsIG1vdmVzCmNvdW50cyA9IHsJJ1UnOi4wOSwgIlUnIjouMTAsICdVMic6LjE1LCAgCSd1JzouMTEsICJ1JyI6LjEyLCAndTInOi4xNywKCQknUic6LjA4LCAiUiciOi4wOCwgJ1IyJzouMTQsICAJJ3InOi4xMCwgInInIjouMTEsICdyMic6LjE0LAoJCSdGJzouMTMsICJGJyI6LjE0LCAnRjInOi4xOSwJJ2YnOi4xNSwgImYnIjouMTcsICdmMic6LjIwLAoJCSdEJzouMTEsICJEJyI6LjEyLCAnRDInOi4xNywJJ2QnOi4xMywgImQnIjouMTQsICdkMic6LjE5LAoJCSdCJzouMTcsICJCJyI6LjE1LCAnQjInOi4yMiwJJ2InOi4xOSwgImInIjouMTcsICdiMic6LjI0LAoJCSdMJzouMTMsICJMJyI6LjE4LCAnTDInOi4yMiwJJ2wnOi4xNCwgImwnIjouMTksICdsMic6LjI0LAoJCQoJCSd4JzouMTgsICJ4JyI6LjE4LCAneDInOi4yNCwKCQkneSc6LjE4LCAieSciOi4xOCwgJ3kyJzouMjQsCgkJJ3onOi4xOSwgInonIjouMTksICd6Mic6LjI0LAoKCQknTSc6LjE1LCAiTSciOi4xMSwgJ00yJzouMTgsCgkJJ0UnOi4yMiwgIkUnIjouMjUsICdFMic6LjI4LAoJCSdTJzouMjIsICJTJyI6LjI1LCAnUzInOi4yOH0KCiNnZXQgcmlkIG9mIGR1bWIgc3R1ZmYKZGVmIGZpbHRlcihhbGcpOgogIGlhbGcgPSBhbGcucmVwbGFjZSgnKCcsICcnKQkJI2dldCByaWQgb2YgdW53YW50ZWQKICBpYWxnID0gaWFsZy5yZXBsYWNlKCcpJywgJycpCQkjIG9yIG90aGVyd2lzZSB1bm5lZWRlZCBjaGFyYWN0ZXJzCiAgaWFsZyA9IGlhbGcucmVwbGFjZSgiMiciLCAnMicpCSMgaW5jbC4gd2hpdGVzcGFjZSwgcGFyZW4uLCAyJ3MKICBwYXJ0cyA9IGlhbGcuc3BsaXQoKQkJICAgICAgICAjRGl2aWRlIHRoZSBhbGcgdXAgaW50byBpbmRpdmlkdWFsIG1vdmVzCiAgcmV0dXJuIHBhcnRzCgojRXN0aW1hdGVzIHRoZSB0aW1lIG9mIHRoZSBhbGdvcml0aG0KZGVmIGFsZ1RpbWUobW92ZUxpc3QpOgogIHJldHVybiBzdW0obWFwKGNvdW50cy5nZXQsIG1vdmVMaXN0KSkKCiMgUHJpbnQgdGhlIGFsZ3Mgd2l0aCB0aW1lcywgc29ydGVkIGZyb20gZmFzdGVzdCB0byBzbG93ZXN0CmZvciB0aW1lLCBhbGcgaW4gc29ydGVkKFthbGdUaW1lKGZpbHRlcihhbGcpKSwgYWxnXSBmb3IgYWxnIGluIGFsZ0xpc3QpOgogIHByaW50ICIlLjJmIiAlIHRpbWUsIGFsZw==