점들을 이으세요


13

o점을 나타내는 일련의 s가 있으면 수직 또는 수평으로 연결하십시오.

입력:

o   o

o

산출:

o---o
|
|
o

입력:

o   o    o

    o

산출:

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

투기

  • 공백으로 채워진 입력이 직사각형을 형성하도록하려면 답에서이를 지정하십시오.

  • o입력에, 공백 및 줄 바꿈 만 있습니다 .

  • 연결할 점이 항상 있습니다
  • os가 직접 인접 하지 않습니다
  • 수직 및 수평 연결의 경우 점이 |및 로 연결되어야합니다.-
  • 도트 연결이 겹치지 않습니다

모든 합법적 인 쌍을 연결해야합니까, 아니면 점들을 하나의 구성 요소에 연결해야합니까? 점을 항상 하나의 구성 요소에 연결할 수 있습니까? " 올바로 연결하려면 최소한 두 개의 점이 있어야합니다."내가 올바르게 이해하면 더 의미가 있습니다. 몇 가지 테스트 사례로 이러한 문제를 해결할 수 있습니다.
randomra

@randomra 당신은 모든 법적 쌍을 연결하지 않습니다, 그들은 항상 하나의 구성 요소가 아닙니다
Downgoat

@Downgoat 연결이 끊어진 구성 요소와 단일 구성 요소 내의 루프를 다루는 몇 가지 테스트 사례는 어떻습니까? ;)
Martin Ender 2016

답변:


2

apt, 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

루비, 137133 바이트

->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
좋아, 나는 채워진 사각형으로 입력 할 것입니다.
Alex A.

\b대신 사용할 수 있습니까 (?=o)?
저스틴

@Justin 작동하지 않는 것 같습니다. : /
Doorknob

2

레티 나 , 80 바이트

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

입력은 채워 져야합니다.

온라인으로 사용해보십시오!

설명

첫 번째 단계는 매우 간단합니다. 모든 공백을 o같은 줄의 두 s 사이에있는 하이픈으로 바꿉니다 .

두 번째 단계는 |s를 다룹니다 . 이것은 조금 까다 롭고 균형 그룹이 필요 합니다 . 뒤돌아보기

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

o같은 열에 이전 항목 이 있는지 확인합니다 . lookbehinds는 오른쪽에서 왼쪽으로 읽어야합니다. (.)*일치하는 가로 위치를 저장하고 \D*¶, 앞 줄의 문자를 건너 뛰고 o문자 그대로 일치 하는지 확인합니다 . 그런 다음 (?(1)!)^(?<-1>.)*수평 위치 o가 같아야합니다.

예견

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

반대 방향으로 정확히 같은 일을합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.