識別子はハッシュ値の視覚的な描写であり、多くの場合、幾何学的形状の対称的な配置から作成されます。デフォルトのStack Exchangeアバターはidenticonです。この課題は、「wordenticons」、小文字の文字列、つまり単語に適用されるIDベースの単純なテキストベースのバージョンを作成することです。
チャレンジ
文字列Sを取り込んでその単語を出力するプログラムまたは関数を作成します。Sは空でないことが保証され、小文字の英字a〜zのみが含まれます。オプションで、Sの末尾に改行があると想定できます。
Sのwordenticonは2*length(S)、スペース( )、垂直バー(|)、および水平バー(―)で構成される辺の長さのテキストの正方形グリッドです。
Sの単語を生成するには、すべての列がSの文字(通常の左から右の読み取り順序)に対応し、すべての行がSの文字に対応する(通常の上下の読み取り順序の正方形グリッドを形成します)。
たとえば、Sがfood初期グリッドの場合、次のようになります
food
f....
o....
o....
d....
どこ.単なるプレースホルダです。
.グリッド内のすべての空のポイント(すべて)に対して:
- 列文字がアルファベット順に行文字の前に来た場合は、交換してください
.と|。 - 列文字がアルファベット順に行の文字の後に来る場合は、交換してください
.と―。 - 列と行の文字が同じ場合は
.、(スペース)で置き換えます。
foodこれらの各ステップの後の例を次に示します。
の追加
|:food f...| o|..| o|..| d....の追加
―:food f.――| o|..| o|..| d―――.の追加
:food f ――| o| | o| | d―――
wordenticonを完了するには、単語を含む余分な行と列を削除します
――|
| |
| |
―――
全体を水平にミラーリングします
――||――
| || |
| || |
――― ―――
そして最後に再び垂直にミラーリングします
――||――
| || |
| || |
――― ―――
――― ―――
| || |
| || |
――||――
2*length(S)最終的な単語である横の長さのテキストグリッドになります。
例
追加の単語の例は次のとおりです。異なる単語は同一の単語エンティコンを持つことができ、いくつかの単語エンティコンは完全にスペースでできていることに注意してください(残念ながらmarkdownはそれらをレンダリングしたくない)。
food
――||――
| || |
| || |
――― ―――
――― ―――
| || |
| || |
――||――
mood
――||――
| || |
| || |
――― ―――
――― ―――
| || |
| || |
――||――
foof
―― ――
| || |
| || |
―― ――
―― ――
| || |
| || |
―― ――
fool
――――――
| || |
| || |
|―― ――|
|―― ――|
| || |
| || |
――――――
a [2*2 grid of spaces]
to
||
― ―
― ―
||
it
――
| |
| |
――
tt [4*4 grid of spaces]
abc
――――
| ―― |
|| ||
|| ||
| ―― |
――――
and
――――
| || |
|― ―|
|― ―|
| || |
――――
but
――――
| || |
|― ―|
|― ―|
| || |
――――
you
||||
― ―― ―
―| |―
―| |―
― ―― ―
||||
bob
― ―
| || |
― ―
― ―
| || |
― ―
cat
|――|
― ―― ―
|| ||
|| ||
― ―― ―
|――|
cart
|――――|
― ―――― ―
|| ―― ||
||| |||
||| |||
|| ―― ||
― ―――― ―
|――――|
todo
||||||
― | | ―
―― ―― ――
― | | ―
― | | ―
―― ―― ――
― | | ―
||||||
mice
||||||
― |||| ―
―― ―― ――
――| |――
――| |――
―― ―― ――
― |||| ―
||||||
zyxw
||||||
― |||| ―
―― || ――
――― ―――
――― ―――
―― || ――
― |||| ―
||||||
banana
|―|―||―|―|
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
|―|―||―|―|
codegolf
――――――――――――――
| ||| |||| ||| |
|― ―――――――――― ―|
|―| ―――――――― |―|
|―|| ――||―― ||―|
| ||| |||| ||| |
|―|||― || ―|||―|
|―||――― ―――||―|
|―||――― ―――||―|
|―|||― || ―|||―|
| ||| |||| ||| |
|―|| ――||―― ||―|
|―| ―――――――― |―|
|― ―――――――――― ―|
| ||| |||| ||| |
――――――――――――――
programming
―||―||||||||||||―||―
| || |||||||||||| || |
―― |―||||||||||||―| ――
――― ―|―――― ――――|― ―――
| || |||||||||||| || |
――――― ―――――――――― ―――――
―――|―| |―||―| |―|―――
―――|―| |―||―| |―|―――
―――|―|―― ―||― ――|―|―――
―――|―|||| || ||||―|―――
――― ―|―――― ――――|― ―――
――― ―|―――― ――――|― ―――
―――|―|||| || ||||―|―――
―――|―|―― ―||― ――|―|―――
―――|―| |―||―| |―|―――
―――|―| |―||―| |―|―――
――――― ―――――――――― ―――――
| || |||||||||||| || |
――― ―|―――― ――――|― ―――
―― |―||||||||||||―| ――
| || |||||||||||| || |
―||―||||||||||||―||―
abcdefghijklm
――――――――――――――――――――――――
| ―――――――――――――――――――――― |
|| ―――――――――――――――――――― ||
||| ―――――――――――――――――― |||
|||| ―――――――――――――――― ||||
||||| ―――――――――――――― |||||
|||||| ―――――――――――― ||||||
||||||| ―――――――――― |||||||
|||||||| ―――――――― ||||||||
||||||||| ―――――― |||||||||
|||||||||| ―――― ||||||||||
||||||||||| ―― |||||||||||
|||||||||||| ||||||||||||
|||||||||||| ||||||||||||
||||||||||| ―― |||||||||||
|||||||||| ―――― ||||||||||
||||||||| ―――――― |||||||||
|||||||| ―――――――― ||||||||
||||||| ―――――――――― |||||||
|||||| ―――――――――――― ||||||
||||| ―――――――――――――― |||||
|||| ―――――――――――――――― ||||
||| ―――――――――――――――――― |||
|| ―――――――――――――――――――― ||
| ―――――――――――――――――――――― |
――――――――――――――――――――――――
得点
これはcode-golfで、バイト単位の最短コードが勝ちです。Tiebreakerは以前の回答に進みます。
ノート
- コード内の水平バー(
―)のインスタンスは、実際に占める3 UTF-8バイトの代わりに1バイトとしてカウントされる場合があります。(最大10インスタンス。) - 必要に応じて
-、水平バー(―)の代わりに通常のダッシュ()を使用できます。 - wordenticonの行の末尾のスペースを削除または追加することはできません(形状が変更されていない場合でも)。正確な
2*length(S)辺の長さのテキストの正方形である必要があります。 - 出力wordenticonには、オプションで単一の末尾改行を含めることができます。
programming、andとcodegolfあなたは忘れてしまったpuzzles...