cubing / cubing.js

🛠 A library for displaying and working with twisty puzzles. Also currently home to the code for Twizzle.
https://js.cubing.net/cubing/
GNU General Public License v3.0
231 stars 42 forks source link

puzzle-geometry-bin is inconsistent with twsearch samples #152

Open andydude opened 2 years ago

andydude commented 2 years ago

To Reproduce Steps to reproduce the behavior:

  1. for i in 2 3 4 5 6 7 8 9; do node ./dist/bin/puzzle-geometry-bin.js --ksolve --optimize ${i}x${i}x${i} > ${i}x${i}x${i}-pg.tws; done
  2. for i in 2 3 4 5 6 7 8 9; do diff ${i}x${i}x${i}-pg.tws ../twsearch/samples/${i}x${i}x${i}.tws; done

Expected behavior I would expect that the CORNER orbit, which is common to all big cubes, should be the same for all sizes. But instead, I seem to get random orders of CORNER pieces. Below is the output that I get when compared to twsearch samples/ directory.

# condensed output of ./twsearch --describesets $FILE | fgrep CORN
FUR FDR BUR FDL BDR BUL FUL BDL samples/2x2x2
FUR FDR BUR FDL BDR BUL FUL BDL samples/3x3x3
FUR FDR BUR FDL BDR BUL FUL BDL samples/4x4x4
FUR FDR BUR FDL BDR BUL FUL BDL samples/5x5x5
FUR FDR BUR FDL BDR BUL FUL BDL samples/6x6x6
FUR FDR BUR FDL BDR BUL FUL BDL samples/7x7x7
FUR FDR BUR FDL BDR BUL FUL BDL samples/8x8x8
FUR FDR BUR FDL BDR BUL FUL BDL samples/9x9x9
FUR BUR BUL FUL FDR FDL BDL BDR mysamples/2x2x2
FUR BUR BUL FUL FDR FDL BDL BDR mysamples/3x3x3
FUL FUR FDL FDR BUR BDL BDR BUL mysamples/4x4x4
FDL FUL FDR BDL FUR BDR BUL BUR mysamples/5x5x5
FDL FUL FDR BDL FUR BDR BUL BUR mysamples/6x6x6
FDR FDL BDR FUL BDL BUR FUR BUL mysamples/7x7x7
FDL FUL FDR BDL FUR BDR BUL BUR mysamples/8x8x8
FUL FUR FDL FDR BUR BDL BDR BUL mysamples/9x9x9
rokicki commented 2 years ago

Someone's using twsearch! Awesome!

Yes, the samples are out of date. I plan to update them all (change them to be consistent with the current cubing.js). I'd recommend not becoming dependent on cubie order or orientation if at all possible. Instead you can infer cubie location and orientation by examining which moves move which cubies. Also, the undocumented --describesets on twsearch will tell you what moves affect which cubies (so you don't have to dig it out yourself).

You will also notice move names have changed and likely a few other things. This is all a work in progress. If you let me know what you are trying to do I might have some helpful suggestions. I recommend using pg-bin-generated tws files where possible and not using the samples supplied with twsearch.

andydude commented 2 years ago

I tried using pg-bin to generate a 19x19x19 and the "Solved" block was missing edges and corners, but that might be a different issue.

I used this puzzle geometry: "c f 0.8947368421052632 f 0.7894736842105263 f 0.6842105263157895 f 0.5789473684210527 f 0.47368421052631576 f 0.3684210526315789 f 0.2631578947368421 f 0.15789473684210525 f 0.05263157894736842"

andydude commented 2 years ago

Also, what I was doing was highly dependent on cubie order, because I was using an external script to generate "Scramble" blocks, which I suppose I could convert to Reid order, and stop using pg-bin generated puzzles. On another note, is there some general way (which supports big cubes) to specify cubie order (and possibly even facelet order) when using pg-bin?

rokicki commented 2 years ago

Heh. 19x19x19 is huge. I don't think twsearch will be able to do anything useful with that large a puzzle.

It won't be missing edges and corners. This is what I get.

Make a geometric description:

@.*** cubing.js % perl ~/bigcube.pl 19 c f 0.0526 f 0.1579 f 0.2632 f 0.3684 f 0.4737 f 0.5789 f 0.6842 f 0.7895 f 0.8947

Generate a tws file:

@. cubing.js % node dist/bin/puzzle-geometry-bin.js --ksolve perl ~/bigcube.pl 19 > 191919.tws @. cubing.js % wc 191919.tws 3082 36449 104315 191919.tws

List cubies (list will be huge):

@.*** cubing.js % ~/twsearch/twsearch --describesets 191919.tws

This is twsearch 0.2 (C) 2020 Tomas Rokicki.

/Users/rokicki/twsearch/twsearch --describesets 191919.tws

Created new moves F2 F' 2F2 2F' 3F2 3F' 4F2 4F' 5F2 5F' 6F2 6F' 7F2 7F' 8F2 8F' 9F2 9F' 9B2 9B' 8B2 8B' 7B2 7B' 6B2 6B' 5B2 5B' 4B2 4B' 3B2 3B' 2B2 2B' B2 B' D2 D' 2D2 2D' 3D2 3D' 4D2 4D' 5D2 5D' 6D2 6D' 7D2 7D' 8D2 8D' 9D2 9D' 9U2 9U' 8U2 8U' 7U2 7U' 6U2 6U' 5U2 5U' 4U2 4U' 3U2 3U' 2U2 2U' U2 U' L2 L' 2L2 2L' 3L2 3L' 4L2 4L' 5L2 5L' 6L2 6L' 7L2 7L' 8L2 8L' 9L2 9L' 9R2 9R' 8R2 8R' 7R2 7R' 6R2 6R' 5R2 5R' 4R2 4R' 3R2 3R' 2R2 2R' R2 R' State size is about 3.10279 x 10^1382 log2 4592.54 Requiring 6162 bits 772 bytes per entry; 1188 from identity. Found 55 canonical move states. Calculated canonical states in 0.040375 CORNERS 1 F U R CORNERS 2 F D R CORNERS 3 B U R CORNERS 4 F D L CORNERS 5 B D R CORNERS 6 B U L CORNERS 7 F U L CORNERS 8 B D L EDGES 1 F U 2R EDGES 2 F 2D R EDGES 3 2B U R EDGES 4 F D 2R EDGES 5 F D 2L EDGES 6 B 2D R EDGES 7 2B D R EDGES 8 B U 2L EDGES 9 F 2U R EDGES 10 F 2D L EDGES 11 B D 2R EDGES 12 F 2U L EDGES 13 2F D R EDGES 14 B D 2L EDGES 15 B 2D L EDGES 16 2B D L EDGES 17 B 2U R EDGES 18 2F U L EDGES 19 F U 2L EDGES 20 B U 2R ...

On Sun, Sep 26, 2021 at 2:43 PM Andrew Robbins @.***> wrote:

I tried using pg-bin to generate a 19x19x19 and it was missing edges and corners, but that might be a different issue.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/cubing/cubing.js/issues/152#issuecomment-927376641, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAMOLS22ASFJJ47ZEFKV5TLUD6HYFANCNFSM5EY6PJLA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

--

rokicki commented 2 years ago

There is no good way to specify cubie order. The best I can offer is --describesets to get cubie order (by listing moves that move specific cubies). Note that for odd cubes if there is not a move for a specific dimension on a cubie, it's a central slice in that dimension.

-tom

On Sun, Sep 26, 2021 at 2:47 PM Andrew Robbins @.***> wrote:

Also, what I was doing was highly dependent on cubie order, because I was using an external script to generate "Scramble" blocks, which I suppose I could convert to Reid order, and stop using pg-bin generated puzzles. On another note, is there some general way (which supports big cubes) to specify cubie order (and possibly even facelet order) when using pg-bin?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/cubing/cubing.js/issues/152#issuecomment-927377086, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAMOLS6LCAGG4YEVC22PLD3UD6IHLANCNFSM5EY6PJLA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

--

andydude commented 2 years ago

I understand that the edges and corners show up in every move definition, but they're missing from the "Solved" block. Also, the centers in the "Solved" block appear to be incorrect.

rokicki commented 2 years ago

Ahh, yeah, because if they are the identity permutation and all zeros I'm eliding them. If you think I should add them back I'm happy to do so.

On Sun, Sep 26, 2021 at 2:56 PM Andrew Robbins @.***> wrote:

I understand that the edges and corners show up in every move definition, but they're missing from the "Solved" block.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/cubing/cubing.js/issues/152#issuecomment-927378591, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAMOLS2BEM5VM3JP2X5AFKTUD6JHDANCNFSM5EY6PJLA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

--

andydude commented 2 years ago

Here is an excerpt from what I get when I run pg --ksolve --optimize 4x4x4

Solved
CENTERS
1 1 2 3 1 2 3 4 2 5 4 1 2 3 4 5 4 5 6 6 3 5 6 6
End

Move F
CORNERS
3 1 4 2 5 6 7 8
1 2 2 1 0 0 0 0
EDGES
12 1 3 9 2 6 7 8 19 4 11 5 13 14 15 16 17 18 10 20 21 22 23 24
CENTERS
12 1 3 4 2 6 7 8 9 10 11 5 13 14 15 16 17 18 19 20 21 22 23 24
End

If I'm not mistaken, it should be:

Solved
CORNERS
1 2 3 4 5 6 7 8
EDGES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
CENTERS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
End
rokicki commented 2 years ago

Because the Solved state of EDGES and CENTERS is the identity permutation and null orientation, they are not omitted. Twsearch knows to use the identity permutation and null orientation in this case. Is this causing problems of some sort?

-tom

On Sun, Sep 26, 2021 at 3:45 PM Andrew Robbins @.***> wrote:

Here is an excerpt from what I get when I run pg --ksolve --optimize 4x4x4

Solved CENTERS 1 1 2 3 1 2 3 4 2 5 4 1 2 3 4 5 4 5 6 6 3 5 6 6 End

Move F CORNERS 3 1 4 2 5 6 7 8 1 2 2 1 0 0 0 0 EDGES 12 1 3 9 2 6 7 8 19 4 11 5 13 14 15 16 17 18 10 20 21 22 23 24 CENTERS 12 1 3 4 2 6 7 8 9 10 11 5 13 14 15 16 17 18 19 20 21 22 23 24 End

If I'm not mistaken, it should be:

Solved CORNERS 1 2 3 4 5 6 7 8 9 EDGES 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 CENTERS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 End

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/cubing/cubing.js/issues/152#issuecomment-927385022, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAMOLS2A5LYRI6IZIN7LGMDUD6PAFANCNFSM5EY6PJLA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

--

andydude commented 2 years ago

ksolve allows omitting empty orientations, but does not allow omitting identity permutations, if twsearch is different, I was unaware. Also, if those centers are correct, then are they the non-bijective passive permutations that are documented in ksolveformat.txt?

andydude commented 2 years ago

Is this causing problems of some sort?

Not really, I'm the author of BirdF2L and I was recently looking to modify the site, perhaps to start separating by EO like ZBF2L or something. Everything is experimental at this point, but at some point, I'd like to revise BirdF2L, and perhaps revive Birdflu as well. It pains me that the largest cubing algorithm database is dead. I've run Birdflu locally, but it seems to be missing some 17 HTM algorithms from the original website.

I'd like to regenerate those algorithms, either with ksolve or twsearch but I need Ignore blocks to filter out last layer cases. Again, this should probably be a different issue.

rokicki commented 2 years ago

I just committed a change to not omit sets in Solved; I will deploy it later this evening. That should remedy this issue.

I'd be happy to help regenerate any missing algorithms. Let's close this issue and discuss how we can make all of this easiest for you, on the slack or via email.

-tom

On Sun, Sep 26, 2021 at 4:34 PM Andrew Robbins @.***> wrote:

Is this causing problems of some sort?

Not really, I'm the author of BirdF2L https://andydude.github.io/birdf2l/app/ and I was recently looking to modify the site, perhaps to start separating by EO like ZBF2L or something. Everything is experimental at this point, but at some point, I'd like to revise BirdF2L, and perhaps revive Birdflu https://github.com/larspetrus/Birdflu as well. It pains me that the largest cubing algorithm database is dead. I've run Birdflu locally, but it seems to be missing some 17 HTM algorithms from the original website.

I'd like to regenerate those algorithms, either with ksolve or twsearch but I need Ignore blocks to filter out last layer cases. Again, this should probably be a different issue.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/cubing/cubing.js/issues/152#issuecomment-927393778, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAMOLSYLWGX2QKWTCBUK75DUD6UZJANCNFSM5EY6PJLA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

--

lgarron commented 2 years ago

Is there more to do for this issue?

rokicki commented 2 years ago

Yes; I need to improve the consistency of common orbits in big cubes. Let's leave it open.

On Thu, Oct 21, 2021 at 12:13 PM Lucas Garron @.***> wrote:

Is there more to do for this issue?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/cubing/cubing.js/issues/152#issuecomment-948924215, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAMOLS2POUN5RCULE2SGYBLUIBQ6TANCNFSM5EY6PJLA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

--