단순화 된 커닝 구현


24

소개

커닝 이란 텍스트 문자 사이의 간격을 조정하는 것을 의미합니다. 예를 들어, Top다음 세 가지 글리프로 작성된 단어를 고려하십시오 .

##### ..... .....
..#.. ..... .....
..#.. ..##. .###.
..#.. .#..# .#..#
..#.. .#..# .#..#
..#.. ..##. .###.
..... ..... .#...
..... ..... .#...

글리프 사이의 틈을 점으로 채우고 완성 할 수는 있지만 틈이 너무 넓게 보입니다. 대신 글리프를 왼쪽으로 밀면 거의 닿습니다.

#####........
..#..........
..#..##..###.
..#.#..#.#..#
..#.#..#.#..#
..#..##..###.
.........#...
.........#...

이것은 훨씬 좋아 보인다! 의 막대 T가의 왼쪽 테두리 위에 어떻게 표시되는지 확인하십시오 o. 이 도전에서, 당신의 임무는 그러한 직사각형 글리프에 대한 간단한 커닝 프로그램을 구현하는 것입니다.

커닝 과정

두 사각형의 2 차원 문자 배열 고려 .#같은 모양을. 간단한 커닝 과정에서 먼저 배열을 나란히 놓고 .s 열 하나 를 사이에 둡니다. 그런 다음 왼쪽과 오른쪽 배열 중 #일부 #가 직교 또는 대각선으로 인접 할 때까지 오른쪽 배열에서 각각 한 단계 씩 왼쪽 으로 이동합니다. 커닝의 결과는 인접한 s를 소개 하기 전 단계 #입니다. 당신의 임무는이 프로세스를 구현하는 것입니다.

예를 들어 보자.

Inputs:
..###
#....
#....
..##.

...#.
...##
..###
....#

Process:
..###....#.
#........##
#.......###
..##......#

..###...#.
#.......##
#......###
..##.....#

..###..#.
#......##
#.....###
..##....#

..###.#.
#.....##
#....###
..##...#

..####.
#....##
#...###
..##..#

마지막 배열에는 인접한 새로운 쌍이 #있으므로 두 번째에서 마지막 배열은 커닝 프로세스의 결과입니다.

입력과 출력

간단하게하기 위해 글리프의 커닝 만 처리하면됩니다 . 입력은 다음 형식 중 하나 인 두 개의 직사각형 2D 배열입니다.

  • 0은 .1,에 1 은 정수의 2D 배열입니다 #.
  • 의 여러 줄 문자열 .#.
  • 의 문자열 배열 .#.
  • 문자의 2D 배열 .#.

입력을 단일 문자열로 가져 오는 경우 적절한 구분 기호를 사용할 수 있습니다. 그러나 구분 기호는 두 배열 사이에 있어야합니다. 즉, 이미 쌍을 이루고있는 두 입력을 사용할 수 없습니다.

출력은이 두 배열에 적용된 커닝 프로세스의 결과이며 입력과 동일한 형식의 직사각형 2D 배열입니다. .s 의 선행 또는 후행 열을 추가하거나 제거 할 수 있지만 출력 직사각형 이어야 하며 입력과 높이가 동일 해야합니다 . 커닝 프로세스는 두 번째 입력의 왼쪽 가장자리가 첫 번째 입력의 왼쪽 가장자리 위로 미끄러지기 전에 끝나는 것이 보장됩니다.

규칙과 득점

각 프로그래밍 언어에서 가장 낮은 바이트 수가 이깁니다. 표준 규칙이 적용됩니다.

테스트 사례

복사 붙여 넣기를 돕기 위해 이러한 테스트 사례는 문자열 목록으로 제공됩니다.

["#"] ["#"] -> ["#.#"]
["#.","..",".#"] ["##","..","##"] -> ["#..##",".....",".#.##"]
["..#","#..","#.."] ["...","..#","###"] -> ["..#..","#...#","#.###"]
["###.","##..","#...","...."] ["....","...#","..#.",".#.."] -> ["###..","##..#","#..#.","..#.."]
["..##...","#......","#......"] [".....##",".....##",".#...#."] -> ["..##..##","#.....##","#.#...#."]
["...#.",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["...#..",".....#",".#....","......","....#."]
["..#..",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["..#..","....#","#....",".....","....#"]
["######","#.....","#.....","#.....","######"] ["......",".....#",".#...#",".....#","......"] -> ["######..","#......#","#..#...#","#......#","######.."]
["######","#.....","#.....","#.....","######"] ["......","......",".#....","......","......"] -> ["######","#.....","#.#...","#.....","######"]
["#...#","#..#.","#.#..","##...","#.#..","#..#.","#...#"] ["...#.","..#..",".#...",".#...",".#...","..#..","...#."] -> ["#...#..#","#..#..#.","#.#..#..","##...#..","#.#..#..","#..#..#.","#...#..#"]
code-golf  grid  code-challenge  atomic-code-golf  code-golf  combinatorics  probability-theory  card-games  code-golf  number  geometry  code-golf  decision-problem  chess  code-golf  math  number  sequence  code-golf  string  regular-expression  code-golf  arithmetic  integer  code-golf  math  array-manipulation  code-golf  number  decision-problem  integer  code-golf  string  ascii-art  kolmogorov-complexity  code-golf  decision-problem  graph-theory  binary-matrix  code-golf  string  parsing  code-golf  string  code-golf  morse  code-golf  code-golf  string  code-golf  ascii-art  cellular-automata  code-golf  binary  base-conversion  code-golf  arithmetic  decision-problem  integer  checksum  code-golf  matrix  linear-algebra  code-golf  code-golf  game  code-golf  sequence  binary  code-golf  combinatorics  optimization  code-golf  decision-problem  quine  code-golf  rational-numbers  bitwise  code-golf  string  permutations  code-golf  kolmogorov-complexity  unicode  code-golf  ascii-art  number  code-golf  number  integer  binary  base-conversion  code-golf  array-manipulation  code-golf  chemistry  code-golf  number  sequence  fibonacci  code-golf  matrix  optimization  code-golf  number  code-golf  math  number  sequence  code-golf  math  array-manipulation  matrix  linear-algebra  code-golf  kolmogorov-complexity  cops-and-robbers  cops-and-robbers  code-golf  tips  basic  code-golf  decision-problem  binary  tiling  game  king-of-the-hill  python  code-golf  c  code-golf  ascii-art  code-golf  string  kolmogorov-complexity  alphabet  code-golf  number  code-golf  string  code-golf  number  sequence  integer  code-golf  number  permutations  restricted-complexity  restricted-time 

비주얼 . 테스트 사례 5가 잘못된 것 같습니다.
user202729

고맙습니다. 이제 수정되었습니다. 샌드 박스에서 테스트 사례를 여러 차례 수정하여 그 중 하나를 놓쳤습니다.
Zgarb

또한 두 문자가 서로 "통과"하면 프로그램은 어떻게해야합니까?
user202729

@ user202729 그렇게되지 않을 것이라고 가정 할 수 있습니다. "입력 및 출력"섹션의 마지막 문장을 참조하십시오.
Zgarb

답변:




2

레티 나 223 바이트

+`(.+)¶(¶(.+¶)*)(\W+(¶|$))
$2$1i$4
T`.`i`\.*i\.*
+`(¶(.)*#.*i.*¶(?<-2>.)*)i
$1@
+`(¶(.)*)i(.*¶(?<-2>.)*(?(2)(?!))#.*i)
$1@$3
T`i@`.`i*[#@]+i
mT`.`i`\.+i+$
msT`i`.`.*^\W+$.*
+`(\b(i+)\W+\2i*)i
$1.
+s`\bi((i+).+\b\2\b)
.$1
i

온라인으로 사용해보십시오! Link에는 테스트 케이스와 헤더 스크립트가 포함되어있어 두 줄 바꿈으로 구분 된 두 문자열의 기본 입력 형식으로 형식을 다시 지정합니다. 이것은 너무 오래 보였지만 아마도 간과 한 우연한 사례가 있지만 적어도 지금은 모든 테스트 사례를 통과합니다. 설명:

+`(.+)¶(¶(.+¶)*)(\W+(¶|$))
$2$1i$4

문자 i를 구분 기호로 사용하여 두 입력 배열을 결합하십시오 . (이것은의 사용을 허용 \W하고 \b나중에.)

T`.`i`\.*i\.*

결합시 모든을 .s로 변경하십시오 i.

+`(¶(.)*#.*i.*¶(?<-2>.)*)i
$1@

is 아래 #의 모든을 s로 변경하십시오 @.

+`(¶(.)*)i(.*¶(?<-2>.)*(?(2)(?!))#.*i)
$1@$3

is 위 #의 모든을 s로 변경하십시오 @.

T`i@`.`i*[#@]+i

모든 @s를 .s로 변경 하고i 하고 @s 또는 #s에 인접한 .

mT`.`i`\.+i+$

#후 가 없으면i 인접 항목을 .다시 다시 변경 i하십시오.

msT`i`.`.*^\W+$.*

줄이없는 경우 is 여기서 수행 할 작업이 없으므로 모든 is를 .s로 변경 하십시오.

+`(\b(i+)\W+\2i*)i
$1.

i모든 라인 에서 최소 개수를 계산하십시오 .

+s`\bi((i+).+\b\2\b)
.$1

다른 줄로 전파하십시오.

i

is를 삭제하여 필요한 커닝을 수행하십시오.

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