プログラミング言語によるルービックキューブ (3x3x3) ソルバ実装まとめ

raspberry-pi-cube-solver

本記事では、ルービックキューブ 3x3x3 のソルバ (解法プログラム) の実装をまとめます。同時にスクランブルジェネレータ (スクランブル生成プログラム) も紹介します。

ソルバとスクランブルジェネレータの関係

紹介の前に、ソルバとスクランブルジェネレータの関係を簡単に述べておきます。
パズルのスクランブルジェネレータはソルバに強く依存しています。 というのも、ソルバが存在すればランダムステートなパズルの状態から完成状態に至る手順Sを求めることが可能となり、Sの逆手順S’が完成状態からそのランダムステートへのスクランブルシーケンスとなるためです。逆手順を求めるのは一般に容易 (自明) であるため、ソルバが確立されればスクランブルジェネレータも同時に完成できる、と言うことができます。
よってルービックキューブパズルのソルバとスクランブルジェネレータには強い関係があります。

今回紹介する全てのソルバのアルゴリズムは、現在3x3x3ルービックキューブの最も効率的な解求アルゴリズムである “Kociemba’s Two-phase Algorithm” にもとづいています。コンピュータとルービックキューブ解求アルゴリズムについては以前記事を書いたのでよろしければそちらをご覧ください。

Thumbnail of ルービックキューブをアルゴリズムで解くということルービックキューブをアルゴリズムで解くということ
terabo.net
ルービックキューブを解くアルゴリズムについて書きます.この記事では具体的なアルゴリズムの話はありません.(情報工学的アプローチでの見方です.ルービックキューブを解くアルゴリズムは「群論」とも深く関わりがありますが,私は情報工学系の人間なので...

それでは、ルービックキューブ (3x3x3) ソルバ / スクランブルジェネレータをプログラミング言語ごとに紹介していきます。

Read more »

Insertion Finder コンパイル方法 (CentOS 6)

FMCer にはおなじみの Insertion Finder (通称 IFたん)。
ソースコード公開されてないかなって思ってたら、@uesyuu さんに教えてもらいました (見つけてくれました)。

(古い) Insertion Finderhttp://xuanyan.ws/cube/insertionfinder/

2016-08-01 追記:
上に書いたURLはもう使われていないようです。最新版のソースコードはGitHubにアップされています。
https://github.com/xuanyan0x7c7/insertionfinder

Linux 32bit/64bit 向けにバイナリも配布されていますが、自分で機能を追加したり、カスタマイズすることを考えて自分でコンパイルできるようにしておきたいです。
本記事では、Insertion Finder のコンパイル方法を説明します。 環境は CentOS 6.7 ですが、CentOS 6 なら他のバージョンでも多分同じようにいけるはずです。

2016-10-21 追記:
Cygwinでのインストール方法の記事を書きました。
Insertion Finder コンパイル方法 (CentOS 6)

Read more »

Python ライブラリ “pandas, scikit-image” を Windows にインストール

前回の記事 Pythonの機械学習・数値計算環境 (NumPy, SciPy, matplotlib, scikit-learn) をWindowsにインストール :: terabo.net に引き続き、Windows 環境に pandas, scikit-image をインストールします。

Pythonの機械学習・数値計算環境 (NumPy, SciPy, matplotlib, scikit-learn) をWindowsにインストール

上に張ったリンクの作業は済んでいるものと仮定します。 Pandas と scikit-image のインストールは非常に簡単です。

Read more »

[iOS] Javascript でクリップボードにアクセスすることは不可能… ではどうするか

clipboard-97590_1280

Web アプリを制作していて気づいた。Javascript で「クリップボードにコピーする」等の操作を簡単に書けると思ったら、全然そんなことなかった。 でもそういうサイトみたことあるよーって思うかもしれない。私もそう思ってたから簡単にできるものだと思ってた。しかしそれらは javascript ではなかった。

本記事では、Web ブラウザでどうすれば「クリップボードへコピー」を実現できるか考えようと思う。

じゃあどうすれば良いか。

Read more »

Pythonの機械学習・数値計算環境 (NumPy, SciPy, matplotlib, scikit-learn) をWindowsにインストール

あることをきっかけに機械学習に触れてみることになりました。 私の開発環境は OS が Windows 7 (64bit) です。 今回は Python 2.7 をインストールしようと思います。
Python の機械学習ライブラリ (具体的には、NumPy, SciPy, matplotlib, scikit-learn) をインストールするのに 何回かつまずいたので、自分が後々いつか再構成できるように環境構築をメモしておきます。
この記事を読まれた方の参考にもなれば幸いです。

インストール原則

大事です。これを守らないと大体失敗します。私は何度も失敗しました。繰り返さないように書いておきます。

  1. Python は 32bit 版を用いる! たとえマシンが64bit、OSが64bit、cygwin (64bit) を使用するとしても!
  2. Python 本体は cygwin のパッケージマネージャ等でインストールしない! Windows 用のバイナリをダウンロードしてインストールする!
  3. Python のライブラリ (NumPy, SciPy, matplotlib) は easy_installpip を用いずに、Windows 用バイナリからインストールする!

これに気をつければ問題は起きにくいです。逆に守らないとどっかでこけます。
1 は NumPy や SciPy が 64bit 対応してないからです。
2 は Python 単体で使用するのであれば cygwin のパッケージマネージャからインストールで問題ありませんが、Windows バイナリからインストールする方が無難です。
3 はライブラリのインストール時に、例えば SciPy は依存性があるらしく、うまくコンパイルできませんでした (下の記事を参考)。

Read more »

「へごへごへごちん!」【ブックマークレット版】 作った

以前、「へごへごへごちん!」を作った。
これをブックマークレット化した。

どんなページも簡単にすばやくいつでもどこでもへごることができる。
YES!! YES!! YES!! へごちん is always with you.

前回の記事: 「へごへごへごちん!」作った :: terabo.net

Read more »

あらゆるページの埋め込みコードを提供してくれるWebサービス『Embedly』を試してみる

embedly-powered-large-light

今まで記事内にリンクを埋め込むときは、自作の TeraShare を使用していた。
以下に示すのは、自作の埋め込みコード作成ツールの紹介記事である。

ブログカード風にリンクを表示するWordPressプラグイン「TeraShare」を作った ブログカード風リンク表示WordPressプラグイン「TeraShare」をアップデートしました (v0.2)

ところが先日、『はてなブログカードをやめて Embedly に移行してもいいんじゃないか。公式ボタンもあるし。ブックマークレットも作った。』という記事を発見した。
Embedly という Web サービスが紹介されていたので、早速使ってみるテスト。

Read more »

nvmをインストール後SFTP接続できなくなったら

console4
Icons made by Freepik from www.flaticon.com is licensed by CC BY 3.0

Linuxサーバにnvmインストール後、FileZilla等のアプリケーションでSFTP接続ができなくなったら……
それは .bashrc にnvm用に追記した箇所に原因があります。

通常、nvmをインストール後は、node.jsの特定バージョンへパスを通す自動化のために .bashrc にだいたい以下のような記述をすると思います。

source ~/.nvm/nvm.sh
nvm use 0.12.2

しかし、この状態ではSFTP接続ができないことがあります。少なくともFileZillaではコネクション確立できないことが確認済みです。

Read more »

GitHub push/pull時に「403 Forbidden while accessing」エラーが出たら…

Octocat

GitHubへpush または GitHubからpull時に 以下のような403エラーが出現することがあります。

Error: The requested URL returned error: 403 while accessing
https://github.com/user/repo.git/info/refs
fatal: HTTP request failed

Read more »

Web上でルービックキューブをアニメーションする CSS/javascript まとめ

Algorithm: Superflip -> Solved-State

Webブラウザ上でルービックキューブをアニメーション表示する方法まとめです.
ルービックキューブをアニメーションする CSS/javascript ライブラリやサイトを紹介します.私の知る限りすべて書いています (2015-03-18 時点 6個掲載)
Web上にルービックキューブをアニメーションを表示することで,文字列だけでは不足するアルゴリズムの視覚化,デモンストレーションによるWebサイトの装飾等が実現可能となります.

CSS/javascript でルービックキューブをアニメーションするといっても,手順を表示するのが目的であったり,ユーザがキューブを操作して画面上のキューブを完成させることが目的であったり,単に回転するキューブを表示させることが目的であったりと,ライブラリ/サイトによって目的は様々ですが,CSS/javascript でアニメーションを実現するというくくりで本まとめではまとめて紹介します.ご自身のやりたいことに合うように適切なものを選択して,それをベースにカスタマイズしてご使用ください.ただしライセンスには気をつけてください.

私も実際にトップページにキューブのアニメーションを配置してみました.後述するRoofpigを使用しています.

ここでは,例えばキューブ画像を表示するライブラリとして有名な VisualCube [1] のように回転アニメーションを伴わないもの,環境によって表示が不可になるjavaアプレットを使用したようなもの [2, 3, 4, 5] ,非常に完成度の高いCSSで実現されているがオープンソースでないもの [6] 等は対象外です.

[1] VisualCube (v0.5.2), http://cube.crider.co.uk/visualcube.php
[2] Virtual Cubes Rubik’s Cube | Instructions | Instructions, http://www.randelshofer.ch/rubik/virtual_cubes/rubik/instructions/instructions.html
[3] Rubik’s Cube Java Applet, http://www.schubart.net/rc/
[4] Jelinek’s Java Applet for the Rubik’s Cube Animation, http://software.rubikscube.info/AnimCube/
[5] Rubik’s Cube Java Applet program, http://ruwix.com/the-rubiks-cube/rubiks-cube-java-applet-software-program-josef-jelinek-animating-rubix/
[6] Rubik’s Cube – Google, http://www.google.com/doodles/rubiks-cube

それでは,紹介していきます.
新たなライブラリ/サイトが公開された等の情報が更新され次第,できるだけ随時このページを更新します.

Read more »