SystemaのパズルとプログラミングC#

様々な立体パズル(ルービックキューブ系)の解法を紹介したり何か記事を書いたりします。あと最近プログラミングの勉強も始めました。

プログラミング全然わからん

こんにちは,Systemaです。

プログラミングの勉強を始めました。Unityで2次元,3次元でのシュミレーションを作ることが目標です。UnityではC#を使うようなので,まずはC#の基本を勉強するところから始めます。ちなみにプログラミングは未経験です。今後このブログにプログラミングの疑問等を書いていくかもしれません。

フィボナッチ数列できた

これまでサンプルコードを写すだけでしたが,自分で何か書いてみようとフィボナッチ数列を出力するプログラムが書けました!私のアルゴリズム力が低すぎて少しズルをしていますが見逃してください。今後改善出来たらもっと美しくします。

using System;
class Class1
{
    static void Main()
    {
        Console.Write("フィボナッチ数列を出力します\n何項目まで?:");
        int x = int.Parse(Console.ReadLine());

        long a = 0;
        long b = 1;
        long c = 0;
        int i = 0;

        Console.Write("1\t");

        while (i <= x - 2)
        {
            c = a + b;
            a = b;
            b = c;

            i++;
            Console.Write("{0}\t", c);
        }
    }
}

↓実行結果
f:id:CubeSystema:20210201201923p:plain
やったー。
ちなみにこのCUIにデスクトップからアクセス出来るようにアプリ化するにはどうすればいいんだろうか。今はいちいちVisual Studio開いて「デバックなしで開始」してるのでめんどくさい。

メソッドってなんやねん

何やら,メソッドというものがあるようです。何度も行う計算を定義しておくことで,何度も同じコードを書かなくて良いそうです。いまいち使い方が分からなかったのですが,多分それっぽいことが出来たので忘れないように残しておきます。

using System;
class Class1
{
    private static int Sum(int x,int y)
    {
        return x + y;
    }

    static void Main()
    {
        Console.Write("1つ目の整数:");
        int a = int.Parse(Console.ReadLine());
        Console.Write("2つ目の整数:");
        int b = int.Parse(Console.ReadLine());

        int c = Sum(a, b);
        Console.WriteLine("{0}+{1}={2}",a,b,c);
    }
}

実行結果
f:id:CubeSystema:20210201131303p:plain

これはSumメソッドの定義と呼び出しがうまくいった証拠でしょうか。
ただし,private とか static とか前の単語の意味はよく分かっていません。とりあえず出来た!privateは無くても実行できました。意味分からん。
あとこれはどうでもいいんですが,「using System;」を何度も「using Systema;」とするミスを減らしていきます。

using System;
class Class1
{
    static void Main()
    {
        Console.Write("1つ目の整数:");
        int a = int.Parse(Console.ReadLine());
        Console.Write("2つ目の整数:");
        int b = int.Parse(Console.ReadLine());

        int c = Sum(a, b);
        Console.WriteLine("{0}+{1}={2}", a, b, c);
    }

    private static int Sum(int x,int y)
    {
        return x + y;
    }
}

↑試しに,先にMainメソッドを書いてからSumメソッドを書いてみましたが,これでも問題なく実行できました。
なるほど,順番は関係ないのか。

順番はどうでもいいのか!と試しに新しいクラス2を作ってSumメソッドを別のクラスに書いてみたのが下。

using System;
class Class1
{
    static void Main()
    {
        Console.Write("1つ目の整数:");
        int a = int.Parse(Console.ReadLine());
        Console.Write("2つ目の整数:");
        int b = int.Parse(Console.ReadLine());

        int c = Sum(a, b);
        Console.WriteLine("{0}+{1}={2}", a, b, c);
    }
}
class Class2
{
    static int Sum(int x, int y)
    {
        return x + y;
    }
}

これは実行できませんでした。別のクラスからメソッドは呼び出せないのか。それとも呼び出す方法があるのか。そもそもクラスとは何か。
メソッドがちょっと分かった瞬間にクラスという分からないものが増えました。あと名前空間とか。
調べてみても意味不明な単語ばかりです。
Unityに触れるのは半年後か一年後かそれとももっとかかるのか。先は長い。

Icosaixの解法

 

この記事は Speedcubing Advent Calendar 2020 21日目の記事です。

20日目の記事は Sinpei Arakiさんの「SCJ大会について

22日目の記事はタニシさんの「昔ちょっと頑張ってた事」です。

 

こんにちは,Systemaです。おそらく(?)BLDerです。3-styleはおろかOrozcoさえ使えない弱小M2/OP使いです。

私がキューブに初めて出会ったのは小4の頃です,ちなみに今は24歳です。誕生日プレゼントに父親から買い与えられたのがきっかけで,その頃はツクダ式→LBL法で1分程度だったと思います。クリスマスにはリベンジ(444),プロフェッサー(555)をねだりましたが,「揃えられる」ようになってからは特にキューブに触ることもなく。。。

大学時代は貧乏で,社会人になり自由に使えるお金が手に入ったことで,再びキューブに興味が向きました。ちょうど1年くらい前でしょうか。それまでメガハウスしか触ったことのない私にとってGANは時代の最先端を感じるものでした。そこから専門ストアを知り,変態立体パズルの沼にはまっていくのです。

 今回は,その立体パズルの中でも,正多面体として最多面数を誇るIcosaixを攻略することが出来たので,私の備忘録として解法を紹介したいと思います。

そんな1万円を超えるようなパズルを買う変態な人には解法なんて必要ないなんて言わないでください。

f:id:CubeSystema:20201209184537j:plain

↑ mf8 Oskar's Icosaix 私はここで買いました。

 

変態(非公式種目)パズルを解こう

今回の私の使命は,難しそうなパズルも恐れずに買ってもらうためにハードルをぎゃんぎゃん下げていくことです。他の人がどのようにパズルを解くのか知りたい,色々発信してほしい,という目論見のためです。今回紹介するIcosaix解法も信じられないぐらい脳筋解法です。自分には出来ないと思わず,いろんなパズルを買いましょう。そして紹介してください。

そのために,本題に入る前に,全てに共通する(?)Systema流変態パズルの解き方を紹介します。自己流,我流,です。真似してうまくいかなくても責任は取りません。そして,忘れてはいけないことは,今この記事を読んで下さっている方はおそらくルービックキューブが解けるということです。これは他のパズルを解く上で大きなアドバンテージになる能力だと思います。キューブを解けない人が変態パズルを解くのと,キューブを解ける人が変態パズルを解くのでは,レベルが段違いです。その解法がツクダ式だろうがLBLだろうがCFOPだろうがRouxだろうがM2/OPだろうがOrozcoだろうが3-styleだろうがです。立体パズルへの理解が少しあるだけでレベルは下がります。そしてもう一つ大事なことは,私はコミュテータなんか感じられない人種だということです。コミュテータなんて知らなくても,キューブが遅かろうがBLDが遅かろうが変態パズルは解けます!あ,ちなみにラッチキューブは放置したままです。私の方法は変形系には弱いですね。

いいよな3-style,憧れる。

手順を繰り返して観察する!

キューバーの皆さんはご存知でしょうが,任意の手順を繰り返し続けると,いずれ元の状態に戻ります。

ある手順PによってAがBの場所に,BがCの場所に,CがAの場所に移ったとき,この手順Pを3回繰り返すと元に戻ります。向きも考慮する必要があります。以下具体的に見てみます。

(U' R)という手順について考えてみます。この手順によって,エッジは(UF→BR→DR→FR→UR→UB→UL→UF)と移動することが分かります。向きの捻れもなくスタート位置に戻ってきたので,この手順を7回繰り返せば,エッジは正しい位置に戻ることが分かります。コーナーは(UFR→BRD→DRF→FRU)と(UBR→ULB→UFL→BRU)の2つのループがあります。それぞれ3つのパーツの移動と向きの捻れ(3方向)があるので3×3の9回でコーナーは元に戻ることが分かります。

つまり,(U' R)はエッジ7回分とコーナー9回分の最小公倍数63回でキューブは元の状態に戻ることが分かります。また,(U' R)×7でエッジに干渉しないコーナー交換手順,(U' R)×9でコーナーに干渉しないエッジ交換手順が作れます。

まあ,実用性は皆無ですが。

以上のように,コミュテータなんて分からなくても,他種パーツに影響を及ぼさない手順はいくらでも作ることが出来るのです。パーツの動きを注意深く観察することで,うまく解決できることがあります。ただし,ほぼ神頼みです。使えない手順が量産されます。目的のパーツのみ動かすコミュテータを理解できた方が絶対にもっと楽しいと思います。コミュテータについてはこことかここを参照すればいいと誰かが言っていました。

いいよな3-style,憧れる。

怖がらずに色々なパズルを購入してみて下さい!

さて,そろそろ本題に入りましょう。

 

正多面体パズル

面に対して平行に回転し,かつ辺が3つに分割される正多面体パズルとして,

  • 正四面体→ピラミンクス
  • 正六面体→ルービックキューブ
  • 正八面体→オクタヘドロン(LanLan Face Turn Octahedron 以下 FTO)
  • 正十二面体→メガミンクス
  • 正二十面体→Icosaix(mf8 Oskar's Icosaix)

が挙げられます。そこに多少,構造・特性の違いがあるのは仕方がないとして,これらが最も有名ではないでしょうか。

今回は,mf8 Oskar's Icosaix を対象とします。

 

具体的な攻略のためのヒント

前提

  • パーツ名称の定義

下の図のように,頂点に位置するパーツを「コーナー」,辺に位置する2色パーツを「エッジ」,面に位置する1色パーツを「インナー」と呼ぶことにします。

f:id:CubeSystema:20201209195531j:plain

  • 変形

実は,Icosaixは変形します。します,というかするらしいです。難しそうなので今回は変形させないというルールの上で攻略していきます。

真面目な話をすると,内部構造がよほど複雑なのか私のIcosaixだけなのか知りませんが,時計回り回転が出来ません。無理矢理回転させることも出来ますが,内部パーツが別箇所に移動し,ロックしてしまいます。時計回り回転させたいときは,反時計回り2回で代用しています。ぶっ壊れそうな要素はなるべく排除したいだけです。なので変形させません。

  • コーナーの回転

↓ゴミ動画を撮りました。

 コーナーはピラミンクスのように独立して回転させることが出来ます。つまり,COについては考えなくても良いということになります。この性質はガンガン使っていきます。

攻略の流れ

Icosaixは,偶数分割のキューブやピラミンクス,FTOの様に中心パーツが存在しないので,コーナーから揃えることが必須でしょう。

20もある配色を覚えることなんて出来ません。

コーナー→エッジ→インナーの順で揃えていきます。

f:id:CubeSystema:20201209205852j:plain

コーナー編

解法とか言っておいていきなりですが,コーナーは自分で揃えてください。222キューブより簡単です。ガンバ!

エッジ編

FTOでは中層回しが出来るので,色々手順も考えられそうですが,Icosaixは表面しか回転しないので,以下の手順を駆使して揃えていくことになってしまいました。もちろん逆手順でエッジの逆回り3点交換が出来ます。

f:id:CubeSystema:20201209212617j:plain

 揃える順番は 上5面→中間10面→下5面 と広げていくと良いと思います。

f:id:CubeSystema:20201210093221j:plain

 また,パーツを1つ1つ目的の位置に持って行くのですが,少し工夫しないといけない場面があります。それは以下のような状態です。そのまま上の3点交換手順で目的の位置に持って行っても,エッジが反転するような場合です。この場合は,遠回りするようにパーツを移動させることで解決できます。セットアップでも解決できます。私はセットアップのミスが怖いのでほとんどやりませんでした。

f:id:CubeSystema:20201210124619j:plain

エッジ反転手順

 多分ここが一番の難所になると思います。FTOにはエッジ反転が存在しないからです。エッジ反転はゴリゴリの力技で解消します。上のエッジ3点交換手順で,反転したパーツを周りの面をぐるっと回してきます。無事解消です。あ,エッジ反転解消のために崩れてしまったエッジは適宜揃え直してください。おそらくセットアップでも解消出来るはずです。考え方はこれ以外思いつきませんでした。すみません,いい手順あれば逆に教えてください

f:id:CubeSystema:20201210132913j:plain

 インナー編

インナーパーツは以下の5点交換で1つ1つ揃えていきました。この下図左の移動する5点の内,青い2点は面を移動するので,ここに目的のパーツをセットアップすることでインナーの面移動が出来ます。もちろん逆手順でインナー逆回りの5点交換が出来ます。あと,手順数がえぐいです,目的のパーツが対面なんかにあった時には地獄です。すみません,いい手順あれば逆に教えてください

f:id:CubeSystema:20201209215637j:plain

 攻略のための必要最低限の手順はこれくらいです。時間はともかく意外に簡単に攻略できました。皆さんも購入して良い手順を発見してください。そして私に教えてください。

 

おわりに

実はこの記事を書くまでにIcosaixは2回しか揃えていません。手順を見てもらえばわかるように,最適解ではないでしょう。私はこんなゴミ解法で攻略しています,恥ずかしがらずにあなたの解法を見せて下さい,という思いで記事にしました。Icosaix所持の民は是非教えてください。twitter→@CubeSystema

 IcosaixとFTOは共通点が多いです,大きな違いは中層回しが出来るか出来ないかくらいでしょう。実際,Icosaix攻略のためにFTOを回すことの方が多かったです,Icosaixの方が圧倒的に時間はかかりましたが。FTO攻略者は値段に怖がらずに是非買ってみてください。

ここまで読んでくださった方,ありがとうございました。

ここまで読んでくださらなかった方,Icosaixを購入したのに詰んでしまったら参考にしてもらえることがあると思います。

お疲れ様でした!

 

BLDを始めてから1ヶ月半でMBLDで18Pを成功させた

まあ非公式ですけどね。

 

 どうも,最近全くMBLD(以下マルチ)をしなくなってしまったSystemaです。

 今回は,マルチで自己記録18Pを達成するまでを振り返りも込めてタラタラ書いていこうと思います。もう一度だけ確認しておきますが,非公式です。

 そんな公式記録も持ってないやつが何を書くんだと思われるかもしれませんが,ここは私のブログなので何を書こうが私の勝手なのです。

 

BLDを始めた時期

 おそらくこの日です。222のBLDから始めました。というか今計測アプリ見直してみると,この日しか2BLDやってないですね。コーナー8文字くらいをストーリーにして記憶していたような気がします。8文字を1分程度で覚えられるなら,エッジを含んで20文字になっても5分あれば記憶できる,実行も間に合うと判断してこの日で2BLDはやめたような気がします。

 あと,2と3で回すときの感覚があまりにも違うので,2に慣れすぎないようにすぐやめたような・・・?

 

3BLD練習開始

 まあここは特に何も特別なことはしていません。解法はM2OP,分析記憶はコーナー→エッジ,実行はエッジから。ひたすら計測していたような気がします。まあ3BLDについては私は遅いので何も言えない・・・

 

初マルチ

 まだマルチという競技についてあまり知りませんでした。(大会出たことないので今もよくわかっていない・・・?)見直してみると,この頃のBLD単発は3分前後です。

 目隠しを外して目の前に揃ったキューブが2つある爽快感,この日以降時間を見つけてはマルチをするようになってしまいました。

 

そして個数は増えていく・・・

 成功した回のみダイジェストでお送りしました。もちろん,これ以上に失敗していますよ。マルチって失敗したときのダメージ大きすぎませんか,あれ何とかならんのか・・・笑

 

ヒントとかコツとか

 一番書きたかったとこです。マルチについての記事はあまり見かけないので,誰かの何かのヒントになればいいですね。ただし,あくまでも私個人の考えなので,偉大な先人達の記事もご覧になってください。

単発BLDは遅くてもいい

 初マルチ挑戦時,単発は3分前後でした。単発の世界ならとんでもなく遅い人種です。ただし,マルチは基本的に成功個数(正確には成功個数ー失敗個数)を競う競技なので,時間は気にしなくて良いのです。特に実行の時間はほんとに気にする必要はないと思います。実行が速ければ速いほど記憶に費やせる時間が増える!という意見もありますが,それは個数が多くなって時間が足りないトップ層の話なので私には関係ない。それに,ある程度の個数までは,実行を速くするより復習を削る方が時間短縮としてリターンは大きいです。あと私は未だにM2OPです

とりあえずキューブを買う

 とりあえず20個くらいは買っておいていいんじゃないでしょうか。私が18P成功できたのも,多分これが一番大きいです。時間が余れば増やしてみる,というのを繰り返していると自然と個数が増えていきます。足りなくなります,個数が。

レターペアは決めておかなくていい

  これは完全に私個人の意見です。(私が勝手に弟子入りしたと思っている)Sakakiさんは,レターペアは事前に何を使うのか全て決めているそうです。私も事前に全て決めておくべきだと考えていた時期はありましたがやめました。

 個数が増えてくると,同じレターペアが出てくることが本当によくあります,例えば「おせ」の文字列が1試技中に3回出てくるとか。このとき,同じレターペアイメージを使っていると,私は実行中に記憶が正しいのか自信がなくなってくるのです。(あれ,さっきもこのレターペア出てきたぞ・・・)のような感じです。加えて,その場でレターペアを考える,というのはとても強く記憶に残ります。そんなこんなで私はレターペア表を埋めるのをやめました。

 もちろん,事前にレターペアを決めているものはあります。「ふあ」→フワちゃん,「くあ」→クワガタ,のような特殊なものですね。

記憶のコツ

・レターペアが女性の名前なら

裸にしましょう。裸の女性がイメージした場所にいる,記憶は抜群です。

・笑う,悲しむ

1つの場所にレターペアを2つ置く場合,前後関係のミスは本当に注意しないといけません。「〇〇が△△を殴った」のようにストーリーにしたとき,笑ったり悲しんだりしてイメージをすり込みます。大会会場でやっていいのかどうかは知りません。試技中にキューブを見ながら笑っていると不審人物ですが。私はやってます。

・大型化,群れ化

レターペアが「うし」だった場合,牛を思い浮かべるのですが,私はそのイメージを大型化したり群れにしたりします。イメージが強烈なのでよくやります。

 

おわりに

 こんなもんでしょうか。書きたいことは書きました。マルチはそんなに難しいものではありません。私も記憶力には自信のなかったタイプの人間です。

 今はマルチに対してのモチベが全くありません。目標だった18Pを成功させて謎の達成感を味わってしまったためです。どうしたらいいんでしょうかね。

 マルチの大会でも予定されれば死ぬ気でリハビリするんですがね笑

 

MBLDの半分は勇気で,もう半分は決心で上達する by Systema

↑でもほんとこれに尽きると思います。

 

QiYi Six Spot Cube の解法

今回は,QiYi から発売されている Six Spot Cube の解法を紹介します。

f:id:CubeSystema:20200920140644j:plain

このパズルは比較的簡単な部類に入ります。もし自力で解くことができなかった場合は以下の解法を参考にしてください。

僕はここで手に入れました。

 

大まかな解法の流れ

f:id:CubeSystema:20200920142620p:plain

①1つのコーナーパーツ(角)の周りに,3つのセンターパーツ(丸)を持ってくる。

②残りの3つのコーナーパーツの位置を合わせる。

③3つのコーナーパーツの向きを合わせる。

④センターパーツが正しい位置になければ3点交換。

 

①について

 ここについて特に述べることはありませんので,自力で頑張ってみてください。

 

②について(位置編)

f:id:CubeSystema:20200920133121p:plain
まず,①で揃えた部分を上にして持ちます。

赤矢印のように,揃えた部分を崩さないように回していけば,コーナーパーツの位置を合わせることができます。このとき,コーナーパーツの向きまで合わせる必要はありません。次の向き編で解説します。

 

③について(向き編)

次に,正しい位置に持ってきた3つのコーナーパーツの向きを合わせます。

下の図のように回すと,向かって右下のコーナーパーツのみが反時計回転します。

もし時計回りに回転させたいのであれば,下の手順を2回行ってください。

f:id:CubeSystema:20200920134446p:plain

コーナーパーツの回転手順

 

④について

最後のステップです。③まで終わったとき,センターパーツが揃わない場合があります。その時は下の手順を回して,位置を交換してください。

f:id:CubeSystema:20200920135623p:plain

センターパーツの位置交換手順

 

以上で完成です!