絶対に解けないルービックキューブを作った(一晩で出来たと思ったら出来てなかった)

Akira is a man who wonders what a serious blog is.

いやマジでわからん。

 

さて続けられる限り続けていきますよ。

今回は一晩でルービックキューブ(のようなもの)を作ったお話。

 

きっかけ

まずはですね。親愛なる仙台のMVP小玉さんがこんなツイートしてたんですわ。

おもしろいなーなんか作りたいなーと思いましてね(安直)

ある日寝れない夜があったので「神様が私に何か作れって言ってる!」

っていう盛大な勘違いをして作ったわけですよ。

アイデア一発で何でも作り始められるからおもしろい!

What a great solution Power Platform is!

発想

常々、collection勉強しなきゃなーって思ってたんでcollection使おう!って奮起。

これが多分失敗なのかな?

手段を先に決めて目的を「それで」完遂しようとする阿呆な話。

 

さてまぁ

順序としては

  1. 9色を6面collectionで定義しちゃう
  2. それをRand()で別collectionにぶっこんで順番をバラバラにする
  3. 最終的に立体(に見えるような)要素を各色用意してマッピング

こんな順序を頭の中で描いて、テキトーに作り出しました。

 

1.9色を6面collectionで定義しちゃう

とりあえずOnStartでClearCollectionぶちこむ(もはや定番)


  ClearCollect(
    Rbk,
    {
        id: "upper11",
        colRub: Red
    },
    {
        id: "upper12",
        colRub: Red
    },
    {
        id: "upper13",
        colRub: Red
    },
  

 みたいにテキトーにID振ってとりあえず色付きのtableできたぜ!ってします。

 

2.それをRand()で別collectionにぶっこんで順番をバラバラにする

OnStartに以下用意しておいて
Collect(
    Rbk_t,
    {
        id: "",
        ColRub: Red,
        RdmNo: 0
    }
);
Clear(Rbk_t);
Collect(
    Rbk_a,
    {
        id: 0,
        ColRub: Red
    }
);
Clear(Rbk_a)

 テキトーにボタンでも用意してcollectionを順番に

Rand()で番号振ってついでに登録順でIDを振っていく

これはスライダー用意してループ処理してあげればいいですね。

おうじゃ先輩のこのブログがわかりやすい。

zezeze.hateblo.jp

この辺は複雑なので説明する根気も実はあんまりないですけど。

 

Clear(Rbk_t);
UpdateContext({rank:0});
ForAll(
    Rbk,
    Collect(
        Rbk_t,
        {
            ColRub: colRub,
            id: id,
            RdmNo: Rand()
        }
    )
);
Clear(Rbk_a);
UpdateContext({SliderValue:0});
Reset(Slider1)
Clear(Rbk_a)

 みたいにスライダーに変数かましてぐるぐる回して

Maxの値を6色×9要素の54にしてあげれば、勝手に処理が止まる

それをid順でソートしたやつでギャラリー作ってあげると下のような動きになります。

f:id:hanakuso365:20210329150425g:plain

この時点で気づくべきだった・・・

 

最終的に立体(に見えるような)要素を各色用意してマッピング

さて突き放すか…

↓こんなん作って

f:id:hanakuso365:20210329150750p:plain

f:id:hanakuso365:20210329150846p:plain

PowerApps上で貼る!!!!(地獄か!)

 

貼ったものがコチラ↓

f:id:hanakuso365:20210329151018p:plain

うん、深夜5時にこれやってるとうっかり人生に絶望しそうになります。

 

そしてさっきの要素と紐づけて色を変えてあげればおkです。

switch使うだけですね簡単ですね。

Switch(
    LookUp(
        Rbk_a,
        id = 1
    ).ColRub,
    Black,
    black_up,
    Yellow,
    yellow_up,
    Blue,
    blue_up,
    Red,
    red_up,
    Green,
    green_up,
    White,
    white_up
)

 

雑なのはこれ作っても誰も得しないからですよー

最後に回転の仕組みを作ってあげたら終わりです。

 

例えばさっきの図

f:id:hanakuso365:20210329150425g:plain

この展開図で「横に並んでる要素の真ん中だけ回す」ってことは

f:id:hanakuso365:20210329151954p:plain

これだけの差分をidで差引してあげれば、Galleryはidでソートしてるからクルッと回ったように見えるってわけです。

なのでそれを全てボタンで定義!

ボタン配置してOnSelectプロパティに以下ぶっこむ

Switch(
    UpdateIf(
    Rbk_a,
    id = 13,
    {id: id + 9},
    id = 14,
    {id: id + 9},
    id = 15,
    {id: id + 9},
    id = 22,
    {id: id + 9},
    id = 23,
    {id: id + 9},
    id = 24,
    {id: id + 9},
    id = 31,
    {id: id + 9},
    id = 32,
    {id: id + 9},
    id = 33,
    {id: id + 9},
    id = 40,
    {id: id - 27},
    id = 41,
    {id: id - 27},
    id = 42,
    {id: id - 27}
)
)

 

 はい、これを

横回し×3段×左右

縦回し×3段×上下

奥回し×3段×前後

合計18個ボタンを定義しましょう♪

地獄かよ…

 

なんやかんやできたのが下図です。

 

いやぁ満足だ!ルービックキューブ解いた事ないけど遊んでみようかな!

 

落とし穴

落とし穴っていうか、ルービックキューブつよつよ勢なら最初から知ってたことだと思いますけど、これ

絶対に解けないんですよね。

理由はこちら↓

 

真ん中に同じ色が来たら一生解けないwww

(隅も真ん中も同上)

 

これあれなんだな。

マッピングきちんと考えなきゃだな。

 

当たり前だけど、パーツバラバラにして配置すればいいわけじゃなかったんや。

まずは楽器と同じくルービックキューブ買うべきやったんや。

勉強って大事。

改良方法検討

募集中!

てか昨日一晩で作ったからまだ改良予定が立っていない!

誰かモノ好きはこれ見て挑戦してみてくださいな。

 

おわりに

遊びも突き詰めると形になるんですよね。

そりゃ「ルービックキューブなんて買えばいいじゃん!」って言われたらそうですわ。

「何当たり前のこと言ってんの?」

って返します。

だけど、

Excelでドラクエ作ったり、

PowerAppsでボンバーマン作ったり

ビジネスアプリで楽器作ったり

別にいいじゃないか!

 

「大人だって全力で遊ぶのが好きなんだぜ!」

 

やってみなよ、楽しいから。

世間が厳しいとか甘くないとか、楽しんでないやつの言い訳なんさ。

この世界はなんて素晴らしいんだ!

それを意味不明なことに夜を徹して向き合ったカスに言われることが恥だと思わないかな?

 

Master one thing!

Have fun!