点を結びます


13

oドットを表す一連のsが与えられたら、それらを垂直または水平に接続します

入力:

o   o

o

出力:

o---o
|
|
o

入力:

o   o    o

    o

出力:

o---o----o
    |
    o

スペック

  • 入力をスペースで埋めて長方形を形成する場合は、回答でこれを指定してください

  • o入力には、スペース、改行のみが含まれます

  • 接続するドットのペアが常にあります
  • 2つoは直接隣接しません
  • ドットは|および-で接続する必要があり、それぞれ垂直および水平接続
  • ドット接続は重なりません

すべての法的ペアを接続する必要がありますか、それともドットを1つのコンポーネントに接続するだけですか?ドットを常に1つのコンポーネントに接続できますか?「接続するには、少なくとも2つのドットが常にあります」と正しく理解すれば、より意味があります。いくつかのテストケースでもこれらをクリアできます。
-randomra

@randomraすべての正当なペアを接続する必要はありません、それらは常に1つのコンポーネントではありません
-Downgoat

@Downgoat切断されたコンポーネントと単一のコンポーネント内のループをカバーするテストケースについてはどうですか?;)
マーティン・エンダー

回答:


2

Japt、33 29バイト

Uy eV="o +o"_rS'|} y eV,_rS'-

オンラインでテストしてください!

使い方

Uy         // Transpose rows with columns in the input.
eV="o +o"  // Set V to the regex-string "o +o", and recursively replace each match Z with:
_rS'|}     //  Z with spaces replaced with "|"s.
y          // Transpose again.
eV,        // Recursively replace matches Z of V with:
_rS'-      //  Z with spaces replaced with "-"s.

2

ルビー、 137 133バイト

->s{eval"s.split($/).map(&:chars)#{".map{|x|x.join.gsub(/o +(?=o)/){|x|x.tr' ',?|}.chars}.transpose"*2}.map(&:join)*$/".sub'?|','?-'}

これは絶対に恐ろしいことです。まだゴルフをしようとしています。

パディングされた長方形として入力してください。

「読みやすさ」の改行:

eval"s.split($/).map(&:chars)#{".map{|x|x.join.gsub(/o +(?=o)/){|x|x.tr' ',?|}
.chars}.transpose"*2}.map(&:join)*$/".sub'?|','?-'

4
申し分なく、私はパディングされた長方形として入力しますが、それはあなたがとてもうまく尋ねたからです。
アレックスA.

\b代わりに使用できます(?=o)か?
ジャスティン

@Justinは動作していないようです。:/
ドアノブ

2

網膜、80バイト

T` `-`o.+o
Tm` `|`(?<=(?(1)!)^(?<-1>.)*o\D*¶(.)*) (?=(.)*¶\D*o(?<-2>.)*$(?(2)!))

入力はパディングする必要があります。

オンラインでお試しください!

説明

最初の段階は非常にシンプルで、すべてのスペースを2つの間にあるハイフンに変えるだけです。 o同じ行ののsのです。

2番目の段階は|sをカバーします。これは少し複雑で、グループのバランスが必要です。後読み

(?<=(?(1)!)^(?<-1>.)*o\D*¶(.)*)

o同じ列に以前のものがあることを確認します。後読みは右から左に読む必要があることに注意してください。(.)*一致の水平位置を保存\D*¶し、前の行の任意の文字へのスキップをチェックし、o文字通り一致します。次に(?(1)!)^(?<-1>.)*、その水平位置がo同じます。

先読み

(?=(.)*¶\D*o(?<-2>.)*$(?(2)!))

反対方向にまったく同じことを行います。

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