アルファベットツリーにする


14

イントロ

ほとんどのフォントでは、大文字のアルファベット文字のすべてがBDO、文字の境界矩形の4つの角のいくつかにほぼ接触する単一の行を持っていますACEFGHIJKLMNPQRSTUVWXYZ

たとえばA、キャラクターの左下隅と右下隅を「タッチ」する2本の脚。同様に、C右上隅と右下隅に触れます(少し曲がっていますが、十分に近いです)。L左上と右下の角に1本の線で触れているだけです。の左下隅Lは頂点であり、単一行の終わりではありません。

ここに、私が見ているStack Exchangeフォント(できればあなたも)によると、どのキャラクターがどのコーナーに触れるかを示した表を示します。1は左上、2右上、3左下、4右下です。

A: 3 4
C: 2 4
E: 2 4
F: 2 3
G: 2
H: 1 2 3 4
I: 1 2 3 4
J: 1 3
K: 1 2 3 4
L: 1 4
M: 3 4
N: 2 3
P: 3
Q: 4
R: 3 4
S: 2 3
T: 1 2
U: 1 2
V: 1 2
W: 1 2
X: 1 2 3 4
Y: 1 2
Z: 1 4

セットアップ

これらの角に接触する線のように、線が接触する角の方向に延びているので、グリッド上のこれらの文字の配置を「接続」できます。

たとえば、

 A
C X

接続の左下Aと右上C、および接続の右下Aと左上のXため、接続されています。

しかしながら、

CAX

接続はある文字から次の文字まで対角線方向にのみ発生するため、接続はありません。

チャレンジ

ACEFGHIJKLMNPQRSTUVWXYZ上記の規則に従って、1つの大きな完全に接続されたツリーにすべての文字を出力する、可能な限り最短のプログラム(バイト単位)を記述します。各文字は1回だけ出現する必要があります。空のスペースにはスペースを使用します。

この23文字のツリーのすべてには、上記で定義した対角線接続を介して、他のどこからでもアクセスできます。

  Q
 A J   R
C U   S Y
 I M N
E H X
 F L T
G   Z K P
     V W

ノート

  • ソリューションをハードコーディングできます。
  • 出力にはACEFGHIJKLMNPQRSTUVWXYZ、スペース、改行のみを含める必要があります。BDO使用されません。
  • すべての接続が適切に配置されている限り、前後のスペースは問題ありません。
  • 出力グリッドは、30 x 30文字(改行とスペースを含む)を超えてはなりません。
  • コーナー接続のみが考慮されます。の底はY何にも接続していません。上の表のコーナー接続を使用する必要があります。
  • すべての接続可能なコーナーが何かに接続する必要があるわけではありません。接続可能なコーナーと接続できないコーナーは、互いに接する場合があります。
  • stdoutへの出力。入力はありません。
  • Peter Taylorが行ったように、スラッシュで作成された接続グラフを含めることは便利ですが、必須ではありません。

更新:
githubhagocyteはGithubでアルファベットツリーの有効性チェッカーを作成しました


ソリューションをハードコーディングできますか?
edc65 14

2
@ edc65ソリューションをハードコーディングできます。
カルビンの趣味14

7
面白いのは、これらの2つのフレーズが1つの異なる文字しか持っていないことです
。P–テウンプロンク14

1
@githubphagocyte、それは答えではないので、答えよりも質問の補遺として良いでしょう。
ピーターテイラー14

1
素敵なゴルフ、@ Calvin'sHobbies。これは答えを見るのがとても楽しいです。
ヨルダン14

回答:


1

パイス、32

jd"QAPMFRLZ\nUINKSHXJ\n\0GTCVEWY

出力:

Q A P M F R L Z 
 U I N K S H X J 
  G T C V E W Y

接続、@ githubphagocyteのチェッカーのおかげ:

Q   A   P   M   F   R   L   Z   
 \ / \ /   / \ /   / \   \   \  
  U   I   N   K   S   H   X   J   
     / \ /   / \ /   / \ / \ /    
    G   T   C   V   E   W   Y 

@grcのnullバイトトリックとPythの非常に短い構文を組み合わせます。地獄のために独自のグリッドを作成しました。

説明:

jPythonの文字列結合です。dスペースです。\0nullバイトのエスケープシーケンスです。印刷時はNOPであるため、3行目の前にはちょうど2つのスペースがあります。また、文字列はPythでEOL終了することができ、引用符で終了することもできます。



11

Python、49

print' '.join('  MQRCNAF\n XZHLKSIP\n\0GJWVUYET')

例:

>>> print' '.join('  MQRCNAF\n XZHLKSIP\n\0GJWVUYET')
    M Q R C N A F 
   X Z H L K S I P 
  G J W V U Y E T

今は正しく接続されていると思いますが、また何かを逃したかもしれません。


F4接続されルックスG1、無効である
Tymric

@Timmyしかし、F2はA3に接続されています。それはすべて私につながっているように見えます。
カルビンの趣味14

@ Calvin'sHobbies要件を誤解したと思います。接続されていない隣接するコーナーを持つことは許可されていますか?
ティムリック14

2
@Timmyもちろん。これらの角のペアは接続されているとはみなされませんが、2つの文字は別の方法で接続されている場合があります。
カルバンの趣味14

9

Marbelous 164 158 143

Marbelousにほぼ完全に最適化されているため、bmarksのツリーを使用しました。この場合のコードは、スペースで区切られた左から右へのすべての文字(スペースおよび改行を含む)のascciコードです。

43 20 46 20 50 20 4D 20 51 20 52 20 45 20 41 14 20 58 20 48 20 4e 20 4C 20 4B 20 5A 20 49 20 53 14 47 20 59 20 56 20 20 20 55 20 4A 20 54 20 57

出力:

 C F P M Q R E A 
  X H N L K Z I S 
 G Y V   U J T W

より良いマーベラスアプローチ135 129

これは、各行の前後に1つの余分なスペースがある同じツリーを出力します。リテラルを印刷する前にスペースを印刷するサブルーチンにリテラルを供給することにより機能します。リテラルがスペース(20 HEX)の場合は、スペースを印刷します

57
54
4A
55
20
56
59
47
14
53
49
5A
4B
4C
4E
48
58
20
14
41
45
52
51
4D
50
46
43
Sp
Sp:
20 I0
.. =V

Marbelousソースコードでセル間のスペースが不要になった場合、この答えは96になります。
オーバーアクター14

1
質問を後付けにする言語または言語機能を使用することは、不正行為と見なされます。
ピーターテイラー14

4
@PeterTaylor今のところ、この回答では、質問されたときに実装された機能のみを使用しています。
オーバーアクター14

7

BrainF * ck 669

笑いのためにこれを作りました。例とまったく同じものを出力します。
後で別のソリューションを提供します。 Luaでこれを行う賢い方法は考えられないので、私はこれに固執します:)

++++[->++++++++<]>..[-->+++++<]>+.>++++++++++.[->+++<]>++.[->++<]>+.-[-->+<]>.+++++[->++<]>.--[->++++<]>...>-[--->+<]>---.>++++++++++.+[->++++++<]>+.-[-->+<]>-.>-[--->+<]>.[----->++<]>--...>-[--->+<]>--.+[--->+<]>++++.--[->+++<]>-.[->+++<]>-.[->+++<]>++.++++[->++<]>+.-[->++++<]>.++++++[->++<]>+.-----[->++++<]>.[-->+++++<]>--.>++++++++++.[->+++++++<]>-.-[-->+<]>--.++++[->++<]>.[->++++<]>.[++++>---<]>.>++++++++++.[->+++<]>++.+++[->++<]>.[-->+<]>---.++++++[->++<]>.[-->+<]>------.>-[--->+<]>-.>++++++++++.[->+++++++<]>+.+[->++++<]>...--[->+++<]>.[--->+<]>++.--[-->+++++<]>.---[->++++<]>.[-->+++++<]>.>++++++++++.[->+++<]>++.....>+[--->++<]>.+[--->+<]>+++.---[->+++<]>.

出力

  Q
 A J   R
C U   S Y
 I M N
E H X
 F L T
G   Z K P
     V W

2
codegolfがどれほどクレイジーに挑戦したとしても、ほとんど常に頭の痛い答えがあります。Gotta love it +1
ファラプ14

@AndoDaanいいえ、そうではありません。私はそれを使用しませんでした。私はいつものように自分の頭脳を作りました。私はそれをたくさん使って、BFを書くときにいつも使っているトリックのほとんどを学んだので、似ているように見えても驚かないでしょう。
テウンプロンク

似ていない、同一。両方の長さが669バイト。両方とも同じ文字を文字メソッドで使用する(まったく最適化しない)だけでなく、すべてのプラッシー記号、マイニー記号、その他の怪しい記号が行く場所と同じです。
AndoDaan

2
偶然でなければなりません。私はチャレンジの楽しさのために参加していますが、BFを生成する楽しさはわかりません。でも唯一の方法でしたあなたは発電機を自分で書いたとき、少しはある楽しいもの。
テウンプロンク

6

PHP 46

これはプログラミングというよりもパズルを解くようなものだったので、私の答えはコードというよりパズルソリューションのようなものです。ただし、有効なPHPプログラムであるため、送信しています。

C A Q S R P M J
 X Z I F K N H
G T U V W Y E L

Perlで同じものを更新します。長さはまだ46のままです。

print"CAQSRPMJ
 XZIFKNH
GTUVWYEL"=~s/\S/$& /rg

4

HTML、55

コード

<pre>C F P M Q R E A
 X H N L K Z I S
G Y V   U J T W

出力:

C F P M Q R E A
 X H N L K Z I S
G Y V   U J T W


2

スタタ63

編集:今、私自身のソリューション。すべての文字である必要があります。

di 'C F P M Q R E A' di ' X H N L K Z I S' di 'G Y V   U J T W'

 C F P M Q R E A 
  X H N L K Z I S 
 G Y V   U J T W

1

Javascript 83

ソリューションのハードコーディングから始めます

console.log('  Q\n A J   R\nC U   S Y\n I M N\nE H X\n F L T\nG   Z K P\n     V W')

alertconsole.log
マークガブリエル14

2
@MarkGabrielよりスマートな方法で短くしたいと思います。アラートには、ASCIIアートを表示するための適切なフォントがありません。
edc65 14

1
そうですか。アラートのフォーマットが異なることを忘れていました。:)
マークガブリエル14

1

PHP、69

<?php echo preg_replace("/(\w)/",'\1 ',"CAQSRPMJ
 XZIFKNH
GTUVWYEL");

与える

C A Q S R P M J 
 X Z I F K N H 
G T U V W Y E L

あなたの出力には全く斜めの接続を持っていない
edc65

@MartinBüttner-ありがとう、修正するのに1バイトかかりました。
勝利14

これに伴う問題(および他の多くの)応答が(core1024 PHPを参照)の出力は、コードよりも短いことである
edc65

正規表現を"/\w/",'\0 '
ATaco
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.