o
점을 나타내는 일련의 s가 있으면 수직 또는 수평으로 연결하십시오.
예
입력:
o o
o
산출:
o---o
|
|
o
입력:
o o o
o
산출:
o---o----o
|
o
투기
-
공백으로 채워진 입력이 직사각형을 형성하도록하려면 답에서이를 지정하십시오.
-
o
입력에, 공백 및 줄 바꿈 만 있습니다 . - 연결할 점이 항상 있습니다
- 두
o
s가 직접 인접 하지 않습니다 - 수직 및 수평 연결의 경우 점이
|
및 로 연결되어야합니다.-
- 도트 연결이 겹치지 않습니다
답변
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.
답변
루비, 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'?|','?-'
답변
레티 나 , 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)!))
반대 방향으로 정확히 같은 일을합니다.