2017-09-14 8 views
2

私はプログラミング言語Hexagonyの周りを頭で覆そうとしています。私はいくつかのサンプルプログラムを見て、入力を読み取ってHey [input]!を印刷する簡単なプログラムを書こうとしました。ここに私が持っているものがあります。六角法を学ぼうとする

 , < . . C $ 
    . . { . # . ; 
    . . . # . . 2 ' 
    . . . . # C 3 < . 
. # . # . . * . ; . 
. E . . E . ; . . >/
= . . . } y . . 3 . 
    . . . . ; . . 3 . 
    . . . e $ . ; . 
    . . ; . . @ . 
    . H . . > & 

Try it online!

予想通り、それはHey !印刷入力がない場合。しかし、どんな入力であれ、それはEE!を印刷します。私はかなり私の問題は、メモリポインタが六角形のグリッド上でどのように動作するのか分からないと確信しています。私は、入力が多すぎる文字列であれば、私のコードは値を上書きすることに問題があると仮定していますが、私はまだそれについて心配していません。 {}コマンドでエッジが選択されている正確なルールと、MPの方向がどのように影響を受けているのか混乱しました。

誰かが私にメモリがMPが

+0

レコードのために私は作業プログラムを手に入れ、サイズを小さくしました: 'H; e; 7 ... y; * 32; \ @><.....>、<。$ .. ' –

+0

最後の2つの期間を削除することができます。ヘキサゴンでは後続の期間はしばしば不必要である。また、 '* 32;'が長すぎます、 'i6;'も機能します。 – user202729

+0

[28バイト](https:// tio。実行/ ## y0itSEzPz6v8/9/DOlVPL8Y8U1 @ vRk/PQc @ 60jrTzDomXk9PX8fm /// EpGQA)。 – user202729

答えて

3

をいただければ幸いシフトして配向されている方法をどのように動作するかのより明確な説明を与えることができればここでメモリの動きが作業コマンドどのようにするための図です:

enter image description here

メモリポインタ(MP)には、位置(メモリグリッドのエッジ)とそのエッジに沿った向きがあります。この図では、MPの初期位置に赤い矢印が付いているため、現在は北を指しています。

MP移動コマンドは、常にMPの現在の位置と向きに関連しています。私は4つの隣接する辺に注釈を付けました。したがって、{はMPを前方および左側に移動し、'はそれを後方および右側に移動します。

新しい方向を理解するために、この動きは隣接する六角形の1つをMPで60度回転させたと考えることができます。だから、選択したコマンドに応じて、MPは、上図のため、次の方向を向いているでしょう:これは混乱の一部であり、念のために、また

Cmd Orientation 
{  north west 
}  north east 
"  north east 
'  north west 

、メモリグリッドは、ソースグリッドとは無関係であることを覚えておいてください(これらはコマンドを含むグリッドの辺ではありません。それは単なる別の無限の六角形のグリッドです)。

実際のプログラムでは、メモリレイアウトよりも大きな問題があるようです。何よりも、#がここで何をしているのかよくわかりません:#は、現在のメモリ値のモジュロ6に基づいて6つのIPのうちの1つに切り替わります。入力が任意であると仮定すると、おそらくあなたが望むものではありません。

TimwiのEsotericIDE(上記の図の生成にも使用しました)を試してみることをお勧めします。プログラムをステップ実行し、メモリグリッドを視覚化することができます。

言語についてさらにご質問がありましたら、in this SE chat roomもお手伝いします。

+0

ありがとう!私が探していた答え!上のプログラムの機能性に関しては、私は '#'がどのように動作するのか誤解していると思います。私は質問をしてからしばらくしていますので、私はこのことを見直さなければなりませんが、私はチャットルームであなたを探します! –