경계 상자 강조 표시, 2 부 : 6 각형 그리드


24

당신은 문자의 육각형 격자를 제공하고 있습니다 .#다음과 같이 :

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

당신의 작업은 전체 축 정렬 경계 상자 채우는 것입니다 #추가로를 #:

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

축 정렬 경계 상자는 모든을 포함하는 가장 작은 볼록한 육각형 모양입니다 #. 6 각형 그리드의 경우 고려해야 할 축 이 3 개 있습니다 (W / E, SW / NE, NW / SE).

여기에 이미지 설명을 입력하십시오

다음은 일부 경우 하나 이상의면에 하나만 포함됨을 보여주는 다른 예입니다 #.

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

변이있는면이있는 육각형으로 보거나 위에서 설명한 것처럼 주변에 경계 상자를 그릴 수 있습니다.이 경우 여전히 육각형입니다.

여기에 이미지 설명을 입력하십시오

너무 열심히? 파트 I을보십시오!

규칙

당신은 어떤이 사용할 수 별개 의 장소에서 비 공간 인쇄 가능한 ASCII 문자 (0x7E가에 0x21, 포함)를 #하고 .. 나는 그들을 참조 계속 것입니다 #.하지만 사양의 나머지.

입력 및 출력은 단일 줄 바꿈으로 구분 된 문자열이거나 문자열 목록 (각 줄마다 하나씩) 일 수 있지만 형식은 일관되어야합니다.

입력에 하나 이상이 #있고 모든 행의 길이가 같다고 가정 할 수 있습니다 . 공백 또는 비 공백으로 시작하는 두 가지 다른 "종류"행 이 있으므로 입력이 항상 같은 유형으로 시작한다고 가정 하지 않을 수도 있습니다 . 경계 상자가 항상 주어진 격자 안에 맞는다고 가정 할 수 있습니다.

당신은 쓸 수 있습니다 프로그램이나 기능을 하고, 우리의 사용 표준 방법 입력을 수신하고 출력을 제공합니다.

모든 프로그래밍 언어를 사용할 수 있지만 이러한 허점 은 기본적으로 금지되어 있습니다.

이것은 이므로 바이트 단위로 측정 된 가장 짧은 유효한 답변이 이깁니다.

테스트 사례

각 테스트 케이스에는 서로 옆에 입력 및 출력이 있습니다.

#    #

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

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

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

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

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

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

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

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

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

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

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

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

1
명백한 패턴을 찾으려고 고개를 돌리고있다. 당신은 '육각형'이라고 말했지만 테스트 케이스에는 육각형으로 두 개의 입력 만 있습니다. 나는 길을 잃었다.
Anastasiya-Romanova 秀

1
@ Anastasiya-Romanova 秀 만약 당신이 외형의 중심을 지나가는 모양을 그리면, 어떤 육각형은 변이 생길 것입니다 (사각형 격자처럼 직사각형이 줄로 변하는 경우를 얻을 수 있습니다). 그러나 문자 주위 에 사각형을 그리면 (다이어그램에서 한 것처럼) 모든 예제는 육각형입니다 (일부는 매우 짧은면이 있습니다).
Martin Ender

1
@ Anastasiya-Romanova 秀 새로운 도표가 도움이됩니까?
Martin Ender

3
나는! 안경을 잘못 착용하면 II처럼 보입니다 ..
Neil

1
@ 닐 또는 아시다시피 너무 많은 알코올;)
ThreeFx

답변:


7

Pyth , 82 71 바이트

L, hbebMqH @ S + GH1KhMyJs.e, Lkfq \ # @ bTUb.zA, ySm-FdJySsMJj.es.eXW && gKkgG-kYgH + kYZ \. \ # bz
MqH @ S [hGHeG) 1j.es.eXW && ghMJs.e, Lkfq \ # @ bTUb.zkgSm-FdJ-kYgSsMJ + kYZ \. \ # bz

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

설명

  • A는 y 좌표가 가장 낮은 지점이고 B는 y 좌표가 가장 높은 지점으로 지정하십시오.

  • C를 가장 낮은 점 (x 값에서 y 값을 뺀 값)으로, D를 가장 높은 점으로 지정하십시오.

  • E를 가장 낮은 점 (x- 값 + y- 값)으로, F를 가장 높은 점으로 지정하십시오.

그런 다음 y 좌표가 A와 B 사이, x 값 빼기 y 값이 C와 D 사이, x 값과 y 값이 E와 F 사이의 좌표를 찾는 것과 같습니다.


(붙여 넣을 때 몇 가지 이유가 사라) 나는 단지 SE가 제대로 탭 문자를 처리 할 수있는 응용 프로그램을 안드로이드 경우, 이전 솔루션을 게시 할 수있는 최초의 시간 : /
사지 (Sarge) 러시아 식 수프의 일종

@SargeBorsch 죄송합니다 :(
Leaky Nun

하하, 왜 만든 그것의 SE 안드로이드 응용 프로그램은 나 실패 : D
사지 (Sarge) 러시아 식 수프의 일종

6

하스켈, 256 254 243 바이트

import Data.List
f=z(\l->(,).(,))[0..]l)[0..]
q l=m(m(\e->min(snd e).(".#"!!).fromEnum.and.z($)(m(\x y->y>=minimum x&&y<=maximum x).transpose.m b.filter((==)'#'.snd).concat$l)$b e))l
b=(m uncurry[const,(-),(+)]<*>).pure.fst
z=zipWith
m=map
q.f

골프 주셔서 감사합니다 @Damien f!

입력은 문자 목록의 목록으로 취해지고 출력은 같은 방식으로 제공됩니다.

그래서 이것은 쓸만한 짐승이었습니다. 항목 좌표에 대한 최대 및 최소 기반 필터링을 사용하는 LeakyNun의 아이디어를 기반으로합니다.

정말 놀랍습니다 m=map바이트가 너무 비싸기 때문에 실제로 바이트를 절약 .


설명:

약간 덜 정육점 버전입니다 ( 약간 강조 ).

import Data.List
f=zipWith(\y l->zipWith(\x e->((y,x),e))[0..]l)[0..]
p=map(\x y->y>=minimum x&&y<=maximum x).transpose.map b.filter((==)'#'.snd).concat
q l=map(map(\e->min(snd e).(".#"!!).fromEnum.and.zipWith($)(p$l)$b e))l
b=(map uncurry[const,(-),(+)]<*>).pure.fst
  • f 각 문자에 색인을 할당하는 함수입니다 (y-index, x-index)목록의 원래 구조를 유지하면서 을 .

  • b: 인덱싱 된 목록의 항목이 주어지면 b계산[y-index, y - x, y + x] .

  • p: 인덱싱 된 필드가 주어지면, 3 개의 함수를 반환 Int -> Bool하십시오. 첫 번째 함수 는 y- 인덱스 검사, 두 번째 차이 및 세 번째 합계입니다. min(snd e)공백을 처리합니다 (공간이 둘보다 작습니다). 이 기능은 골프 코드에 인라인되어 있습니다.

  • q인덱싱 된 필드가 지정된 경우 특정 필드 가 모든 테스트 기능 으로 돌아가는지 확인 .하여 필요한 모든 필드를 변경하십시오 .#True

최종 솔루션은 다음의 조성물 qf.


1
f=z(\y->z((,).(,)y)[0..])[0..]
Damien

또는h x=z x[0..] f=h$h.curry(,)
Damien

5

파이썬 3 380 378 348 346 바이트

들여 쓰기는 공백이 아닌 탭으로 이루어집니다.

골프 버전 :

def s(i):
    L=i.splitlines();E=enumerate;A=lambda x,y:(y,x+y,x-y);N=(2**64,)*3;X=(-2**64,)*3
    for y,l in E(L):
        for x,c in E(l):
            if c=='#':p=A(x,y);X=tuple(map(max,X,p));N=tuple(map(min,N,p))
    R=''
    for y,l in E(L):
        for x,c in E(l):
            if c!='.':R+=c
            else:p=A(x,y);f=all(N[j]<=p[j]<=X[j]for j in range(0,3));R+='.#'[f]
        R+='\n'
    return R

Ideone에서 테스트

설명 (아래에 ungolfed 버전) :

모든 처리는 변환없이 이루어지며 공백 문자는 건너 뜁니다.
함수 axes_pos는 가상의 "3D"좌표의 3 튜플을 계산 하며 모든 문자에 대해 (요소 별) 최소 및 최대 3 튜플 ( bmin, bmax) 로 누적됩니다 #.

좌표는에서 계산됩니다 def axes_pos(x, y): return y, x + y, lc - y + x.
여기서 X는 0부터 오른쪽까지, Y는 0부터 아래쪽까지 (첫 번째 줄부터 마지막까지) 계산합니다.
첫 번째 허수 좌표는 기본적으로 Y입니다. 이유가 분명하기 때문입니다. 그것의 도끼는 녹색 경계에 직교한다 (OP의 그림에서)
두 번째는 붉은 경계에 직교하고, 세 번째는 푸른 경계에 직교한다.

두 번째 단계에서는 ."3D"좌표가 bmin.. bmaxrange, element wise에 해당하는 모든 문자를 대체 합니다 all(bmin[j] <= p[j] <= bmax[j] for j in range(0, 3)). 이 식은이 식에서 확인됩니다 .

Ideone 에서도 테스트를 거친 Ungolfed 버전 :

def solve(i):
    ls = i.splitlines()
    lc = len(ls)

    def axes_pos(x, y):
        return y, x + y, lc - y + x

    I = 2 ** 64
    bmin = (I, I, I)
    bmax = (0, 0, 0)

    for y, line in enumerate(ls):
        for x, char in enumerate(line):
            if char != '#': continue
            p = axes_pos(x, y)
            bmax = tuple(map(max, bmax, p))
            bmin = tuple(map(min, bmin, p))

    result = ''
    for y, line in enumerate(ls):
        for x, char in enumerate(line):
            if char != '.':
                result += char
            else:
                p = axes_pos(x, y)
                f = all(bmin[j] <= p[j] <= bmax[j] for j in range(0, 3))
                result += '#' if f else char
        result += '\n'

    return result


def run_test(a, b):
    result = solve(a)
    if result != b:
        raise AssertionError('\n' + result + '\n\nshould be equal to\n\n' + b)


def run_tests():
    run_test(
        "#\n",

        "#\n")

    run_test(
        " . . \n"
        "# . #\n"
        " . . \n",

        " . . \n"
        "# # #\n"
        " . . \n")

    run_test(
        " . # \n"
        ". . .\n"
        " # . \n",

        " . # \n"
        ". # .\n"
        " # . \n")

    run_test(
        " # . \n"
        ". . .\n"
        " . # \n",

        " # . \n"
        ". # .\n"
        " . # \n")

    run_test(
        " # . \n"
        "# . .\n"
        " . # \n",

        " # . \n"
        "# # .\n"
        " # # \n")

    run_test(
        " . # \n"
        "# . .\n"
        " . # \n",

        " # # \n"
        "# # #\n"
        " # # \n")

    run_test(
        ". . . . . . . . \n"
        " . . # . # . . .\n"
        ". . . . . . . . \n"
        " . . . # . . . .\n",

        ". . . . . . . . \n"
        " . . # # # . . .\n"
        ". . . # # . . . \n"
        " . . . # . . . .\n")

    run_test(
        ". . . . . . . . \n"
        " . . # . . . # .\n"
        ". . . . . . . . \n"
        " . . . # . . . .\n",

        ". . . . . . . . \n"
        " . . # # # # # .\n"
        ". . . # # # # . \n"
        " . . . # # # . .\n")

    run_test(
        ". . . . . . . . \n"
        " . # . . . . . .\n"
        ". . . . . # . . \n"
        " . . . . . . . .\n",

        ". . . . . . . . \n"
        " . # # # # . . .\n"
        ". . # # # # . . \n"
        " . . . . . . . .\n")

    run_test(
        ". . . . . . . . \n"
        " . # . . . . . .\n"
        ". . . . . # . . \n"
        " . . # . . . . .\n",

        ". . . . . . . . \n"
        " . # # # # . . .\n"
        ". . # # # # . . \n"
        " . . # # # . . .\n")

    run_test(
        ". . . . # . . . \n"
        " . # . . . # . .\n"
        ". . . # . . . . \n"
        " . . . . . # . .\n",

        ". . # # # # . . \n"
        " . # # # # # . .\n"
        ". . # # # # # . \n"
        " . . # # # # . .\n")


if __name__ == '__main__':
    run_tests()
업데이트 1 :

-1아무것도 변경하지 않기 때문에 세 번째 허수 좌표에 불필요한 제거

업데이트 2,3 :

Leaky Nun+ 나 자신도 제안한 개선 사항을 부분적으로 구현했습니다 .


기본적으로 같은 알고리즘을 사용합니까? 설명을 추가해 주시겠습니까?
Leaky Nun

1
def A(x,y):return y,x+y,len(L)-1-y+x->A=lambda x,y:(y,x+y,len(L)-1-y+x)
Leaky Nun

또한, 리스트 이해력 은 당신이 몇 바이트 떨어져 골프를 치는 데 도움이 될 수 있습니다.
Leaky Nun

1
나는 당신이 설정할 수 있습니다 생각 len(L)-y+xx-y
새는 수녀

1
줄 목록에 추가 할 수 있습니다
Leaky Nun

5

젤리 , 45 35 13 42 41 바이트

Ṁ€»\
ṚÇṚ«Çṁ"
ŒDṙZL$ÇṙL’$ŒḌ«Ç
ṚÇṚ«Ç
n⁶aÇo⁶

링크 목록입니다. 출력을 생성하려면 입력에서 마지막을 호출해야합니다.

I / O는 문자열 배열의 형태로, .비어 @있음을 나타내고 채워짐을 나타냅니다.

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

배경

다음 예제를 살펴 보겠습니다.

. . . . . . . . 
 . @ . . . . . .
. . . . . @ . . 
 . . @ . . . . .

채워진 모든 위치를 둘러싸는 가장 가까운 쌍인 쌍 또는 평행선을 세 방향으로 각각 그려서 육각 경계 상자를 결정할 수 있습니다.

구현에서는 공백 만 포함하는 대각선을 제외 @하고 두 줄 사이의 모든 문자를로 바꾸고이 줄 밖의 모든 문자를 .로 바꿉니다.

가로축의 경우

................
@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@

떨어지는 대각선 축의 경우

..@@@@@@@......
...@@@@@@@......
....@@@@@@@.....
 ....@@@@@@@....

상승 대각선 축의 경우

....@@@@@@@@@...
...@@@@@@@@@....
..@@@@@@@@@....
.@@@@@@@@@.... .

.< 이후로 @, 세 가지 모두의 문자 별 최소값을 취함으로써

...............
...@@@@@@@......
....@@@@@@@....
 ....@@@@@.... .

남은 일은 공간을 복원하는 것입니다.

작동 원리

n⁶aÇo⁶           Main link. Argument: A (array of strings)

n⁶               Not-equal space; yield 0 for spaces, 1 otherwise.
  aÇ             Take the logical AND with the result the 4th helper link.
                 This will replace 1's (corresponding to non-space characters) with
                 the corresponding character that result from calling the link.
    o⁶           Logical OR with space; replaces the 0's with spaces.
ṚÇṚ«Ç            4th helper link. Argument: A

Ṛ                Reverse the order of the strings in A.
 Ç               Call the 3rd helper link.
  Ṛ              Reverse the order of the strings in the resulting array.
    Ç            Call the 3rd helper link with argument A (unmodified).
   «             Take the character-wise minimum of both results.
ŒDṙZL$ÇṙL’$ŒḌ«Ç  3rd helper link. Argument: L (array of strings)

ŒD               Yield all falling diagonals of L. This is a reversible operation,
                 so it begins with the main diagonal.
   ZL$           Yield the length of the transpose (number of columns).
  ṙ              Shift the array of diagonals that many units to the left.
                 This puts the diagonals in their natural order.
      Ç          Call the helper link on the result.
        L’$      Yield the decremented length (number of columns) of L.
       ṙ         Shift the result that many units to the left.
                 This puts the changed diagonals in their original order.
           ŒḌ    Undiagonal; reconstruct the string array.
              Ç  Call the 2nd helper link with argument L (unmodified).
             «   Take the character-wise minimum of both results.
ṚÇṚ«Çṁ"          2nd helper link. Argument: M (array)

Ṛ                Reverse the rows of M.
 Ç               Call the 1st helper link on the result.
  Ṛ              Reverse the rows of the result.
    Ç            Call the 1nd helper link with argument M (unmodified).
   «             Take the minimum of both results.
     ṁ"          Mold zipwith; repeat each character in the result to the left
                 as many times as needed to fill the corresponding row of M.
Ṁ€»\             1st helper link. Argument: N (array)

Ṁ€               Take the maximum of each row of N.
  »\             Take the cumulative maxima of the resulting characters.

2

파이썬, 237230 바이트

Dennis 덕분에 7 바이트.

def f(a):i=range(len(a[0]));j=range(len(a));b,c,d=map(sorted,zip(*[[x,x+y,x-y]for y in i for x in j if"?"<a[x][y]]));return[[[a[x][y],"#"][(a[x][y]>" ")*(b[0]<=x<=b[-1])*(c[0]<=x+y<=c[-1])*(d[0]<=x-y<=d[-1])]for y in i]for x in j]

Pyth 내 대답의 포트 .

라인 배열을 입력으로 받아서 2D 문자 배열을 출력합니다.


2

펄, 128 126 바이트

에 +6 포함 -0F\n

STDIN의 입력으로 실행하십시오. 빈 채로 1채워 사용하십시오 0. 줄 끝에 공백을 채울 필요는 없습니다.

perl -M5.010 hexafill.pl
 0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0 
 0 1 1 1 1 1 0 0
0 0 1 1 1 1 1 0 
 0 0 1 1 1 1 0 0
0 0 0 0 0 0 0 0 
^D

hexafill.pl

#!/usr/bin/perl -0F\n
$-=map{s%$=%$=^!map{/$/;grep{pos=$`;$=?$_|="!"x$`.1:!/\b.*\G./}${--$@}}@F-$-+pos,$-+pos,$-%eeg;--$-;$=||say}@F while$=--

큐브 좌표를 사용합니다. $= == 1루프 동안 최대 및 최소를 결정하고 루프 동안 이러한 경계 사이의 좌표를 채 웁니다 $= == 0. 처음 58 개의 루프는 무의미하며 $-라인 수로 채울 수 있습니다.


1

TSQL, 768 바이트

나는 이것을 해결하기 위해 쿼리를 작성했다. 모든 짧은 답변과 경쟁 할 수는 없습니다. 그러나 관심있는 사람들을 위해 어쨌든 게시하고 싶었습니다. 답변의 길이에 대해 죄송합니다. codegolf가 다른 접근 방식에 있기를 바랍니다.

골프 :

DECLARE @ varchar(max)=
'
. . . . # . . . 
 . # . . . # . .
. . . # . . . . 
 . . . . . # . .
. . . . . . . . 
'

;WITH c as(SELECT cast(0as varchar(max))a,x=0,y=1,z=0UNION ALL SELECT SUBSTRING(@,z,1),IIF(SUBSTRING(@,z,1)=CHAR(10),1,x+1),IIF(SUBSTRING(@,z,1)=CHAR(10),y+1,y),z+1FROM c WHERE LEN(@)>z)SELECT @=stuff(@,z-1,1,'#')FROM c b WHERE((exists(SELECT*FROM c WHERE b.y=y and'#'=a)or exists(SELECT*FROM c WHERE b.y<y and'#'=a)and exists(SELECT*FROM c WHERE b.y>y and'#'=a))and a='.')and(exists(SELECT*FROM c WHERE b.x<=x-ABS(y-b.y)and'#'=a)or exists(SELECT*FROM c WHERE b.x<=x+y-b.y and a='#'and b.y<y)and exists(SELECT*FROM c WHERE b.x<=x+b.y-y and a='#'and b.y>y))and(exists(SELECT*FROM c WHERE b.x>=x+ABS(y-b.y)and'#'=a)or exists(SELECT*FROM c WHERE b.x>=x-y+b.y and b.y<y and'#'=a)and exists(SELECT*FROM c WHERE b.x>=x-b.y+y and a='#'and b.y>y))OPTION(MAXRECURSION 0)PRINT @

언 골프 드 :

DECLARE @ varchar(max)=
'
. . . . # . . . 
 . # . . . # . .
. . . # . . . . 
 . . . . . # . .
. . . . . . . . 
'
;WITH c as
(
  SELECT 
    cast(0as varchar(max))a,x=0,y=1,z=0
  UNION ALL
  SELECT
    SUBSTRING(@,z,1),IIF(SUBSTRING(@,z,1)=CHAR(10),1,x+1),
    IIF(SUBSTRING(@,z,1)=CHAR(10),y+1,y),
    z+1
  FROM c
  WHERE LEN(@)>z
)
SELECT @=stuff(@,z-1,1,'#')FROM c b
WHERE((exists(SELECT*FROM c WHERE b.y=y and'#'=a)
or exists(SELECT*FROM c WHERE b.y<y and'#'=a)
and exists(SELECT*FROM c WHERE b.y>y and'#'=a)
)and a='.')
and 
(exists(SELECT*FROM c WHERE b.x<=x-ABS(y-b.y)and'#'=a)
or exists(SELECT*FROM c WHERE b.x<=x+y-b.y and a='#'and b.y<y)
and exists(SELECT*FROM c WHERE b.x<=x+b.y-y and a='#'and b.y>y))
and(exists(SELECT*FROM c WHERE b.x>=x+ABS(y-b.y)and'#'=a)
or exists(SELECT*FROM c WHERE b.x>=x-y+b.y and b.y<y and'#'=a)
and exists(SELECT*FROM c WHERE b.x>=x-b.y+y and a='#'and b.y>y))
OPTION(MAXRECURSION 0) 
PRINT @

골퍼가없는 바이올린


1

GNU 옥타브, 212 , 196 바이트

아마도 골퍼가 가장 좋아하는 언어는 아닐지 모르지만 그것이 도전이되는 것입니까? m이 char 행렬로 가정하면 178 바이트 는 독립형이며 196은 함수에 포함 된 경우 .

골프 :

function k=f(m)[a,b]=size(m);[y,x]=ndgrid(1:a,1:b);t={y,y+x,x-y};k=m;s=x>0;for j=1:3l{j}=unique(sort(vec(t{j}.*(m==['#']))))([2,end]);s&=(l{j}(1)<=t{j})&(l{j}(2)>=t{j});endk(s&mod(x+y,2))=['#']end

언 골프 :

function k=f(m)
[a,b]=size(m);[y,x]=ndgrid(1:a,1:b);t={y,y+x,x-y};k=m;s=x>0;
for j=1:3
  l{j}=unique(sort(vec(t{j}.*(m==['#']))))([2,end]);
  s&=(l{j}(1)<=t{j})&(l{j}(2)>=t{j});
end
k(s&mod(x+y,2))=['#']
end

설명 : 좌표계, 3 축-육각형 측면에 직교하고 각 좌표의 최대 및 최소를 찾은 다음 모든 곳에서 논리적으로 1부터 시작하여 논리 좌표를 작성합니다. 각 좌표 최대 및 최소 제약 조건을 설정하고 마지막으로 재설정 각각의 "true"위치는 "#"문자입니다.

테스트하고 싶다면 다음과 같이 m 행렬을 만들 수 있습니다.

m = [' . . . . . . . .. . . . # . . .  . # . . . # . .. . . # . . . .  . . . . . # . .. . . . . . . . ']; m = reshape(m,[numel(m)/6,6])';

그런 다음 f (m)을 호출하고 둘 다로 행렬을 작성하여 m과 비교하십시오.

['     before           after      ';m,ones(6,1)*'|',f(m)]

1
PPCG에 오신 것을 환영합니다! 옥타브 답변은 환영 이상입니다. :) 그러나 두 가지 : 1) 사람들이 점수를 더 쉽게 확인할 수 있도록 실제로 계산 한 코드 (필요한 공백없이 ) 를 포함하십시오 . 읽기 가능한 버전을 별도로 포함 할 수 있습니다. 2) 귀하의 제출물은 입력이 저장되고 m출력 이 저장되는 것으로 가정하는 스 니펫 인 것으로 보입니다 k. 답은 항상 완전한 프로그램이거나 호출 가능한 함수 여야합니다.
Martin Ender

감사! 네, 맞습니다. 지금 함수 f에 k와 m을 포함시키고 유효성 검사를 위해 첫 번째 테스트 m을 구성하는 스 니펫을 추가했습니다.
mathreadler
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.