Sınırlayıcı Kutuyu Vurgula, Bölüm II: Altıgen Izgara


24

Size karakterlerin altıgen bir ızgarası verilir .ve #bunun gibi:

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

Senin görevin tüm ekseni hizalı sınırlama kutusunu #daha fazla doldurmaktır #:

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

Eksen hizalı sınırlama kutusu, hepsini içeren en küçük dışbükey altıgen şeklidir #. Altıgen ızgara durumunda, dikkate alınması gereken üç eksen bulunduğunu unutmayın (W / E, SW / NE, NW / SE):

görüntü tanımını buraya girin

Bazı durumlarda, bir veya daha fazla tarafın yalnızca bir tane içereceğini göstermek için başka bir örnek #:

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

Bunları yozlaşmış taraflara sahip altıgenler olarak görüntüleyebilir veya sınırlayıcı kutuyu etrafına çizebilir, yukarıda yaptığım gibi, bu durumda hala altıgen olurlar:

görüntü tanımını buraya girin

Çok zor? I. Bölüm'ü deneyin!

kurallar

Herhangi iki kullanabilir ayrı yerine boşluk olmayan yazdırılabilir ASCII karakter (0x7E için 0x21 dahil), #ve .. Ancak şartnamenin geri kalanı olarak #ve onlardan bahsetmeye devam edeceğim ..

Giriş ve çıkış, tek satır besleme ile ayrılmış bir dize veya bir dizi listesi (her satır için bir tane) olabilir, ancak biçimin tutarlı olması gerekir.

Girişin en az bir içerdiğini #ve tüm satırların aynı uzunlukta olduğunu varsayabilirsiniz . Not (bir boşluk veya olmayan bir boşlukla başlayan) hatlarının iki farklı "tür" olduğunu - sen olabilir değil girişi hep aynı tip ile başlar varsayalım. Sınırlama kutusunun her zaman size verilen ızgaraya sığdığını varsayabilirsiniz.

Bir program veya fonksiyon yazabilir ve standart girdi alma ve çıktı alma yöntemlerimizden herhangi birini kullanabilirsiniz .

Herhangi bir programlama dilini kullanabilirsiniz , ancak bu boşlukların varsayılan olarak yasak olduğunu unutmayın .

Bu , yani en kısa geçerli cevap - bayt olarak ölçülen - kazanır.

Test Kılıfları

Her test durumu yan yana giriş ve çıkışa sahiptir.

#    #

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

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

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

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

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

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

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

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

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

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

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

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

1
Kafam belirgin bir desen bulmaya çalışırken dönüyor. 'Altıgen' dedin, ancak test durumlarında altıgen şeklinde sadece iki girdi var. Kayboldum.
Anastasiya-Romanova 秀

1
@ Anastasiya-Romanova the Şekli dış karakterlerin ortasından geçen şekilde resmederseniz, evet, bazı altıgenler dejenere yanlara sahip olacaktır (dikdörtgen kılavuzdaki gibi, dikdörtgenin bir çizgiye indirgendiği durumları alabileceğiniz). Bununla birlikte, dikdörtgeni karakterlerin etrafına çizerseniz (şemada yaptığım gibi), tüm örnekler altıgenlerdir (bazıları çok kısa kenarlara sahiptir).
Martin Ender

1
@ Anastasiya-Romanova 秀 Yeni diyagram yardımcı oldu mu?
Martin Ender

3
BEN! üzerinde yanlış gözlük varsa ben II gibi görünüyor ..
Neil

1
@Neil Veya, çok fazla alkol;)
ThreeFx

Yanıtlar:


7

Pyth , 82 71 bayt

L hbebMqH @ S + GH1KhMyJs.e, Lkfq \ # @ bTUb.zA, ysm-FdJySsMJj.es.eXW && gKkgG-kYgH + kız \. \ # Bz
MQH @ S [hGHeG) 1j.es.eXW && ghMJs.e, Lkfq \ # @ bTUb.zkgSm-FDJ'nin-kYgSsMJ + kız \. \ # Bz

Çevrimiçi deneyin!

açıklama

  • A, en düşük y koordinatına sahip nokta ve B, en yüksek y koordinatına sahip nokta olsun.

  • C, en düşük (x-eksi y-değeri) olan nokta ve D en yüksek olan nokta olsun.

  • E değeri en düşük olan nokta (x değeri artı y değeri) ve F değeri en yüksek olan nokta olsun.

Daha sonra, y koordinatının A ve B arasında, x-eksi y-değeri C ve D arasında ve x-değer artı y değeri E ile F arasında olan koordinatları bulmaya eşdeğerdir.


(yapıştırılan zaman nedense onlar kayboldu) Ben sadece GD doğru sekme karakterleri kaldırabileceğinden app android eğer daha önce bir çözüm sonrası olabilir ilk kez: /
Çavuş Borsch

@SargeBorsch Üzgünüm :(
Sızdıran Rahibe

neden haha, beni başarısız yapan SE Android uygulaması: D
Sarge Borsch 15

6

Haskell, 256 254 243 bayt

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

Golf için teşekkürler @Damien f!

Girdi karakter listesi olarak alınmış, çıktı aynı şekilde sağlanmıştır.

Soo, yazması gereken bir canavardı. LeakyNun'un fikrine dayanarak, öğelerin koordinatlarında maksimum ve minimum düzeyde filtreleme kullanıyor.

m=mapÇok pahalı göründüğü için aslında baytları kurtardığı gerçeğine gerçekten şaşırdım .


Açıklama:

İşte biraz daha az kasaplı bir sürüm ( biraz üzerinde durulur ):

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)listenin orijinal yapısını koruyarak her karaktere bir dizin atayan bir fonksiyondur .

  • b: Dizinli listenin bir maddesi göz önüne alındığında, bhesaplar [y-index, y - x, y + x].

  • p: İndekslenmiş alan göz önüne alındığında, Int -> Boolilki y-indeksinin kontrolü, farkın ikincisi ve toplamın üçüncüsü olan 3 işlev döndürülür . min(snd e)boşluklarla ilgilenir (boşluk, her ikisinden de küçüktür). Bu fonksiyon golf kodunda belirtilmiştir.

  • qendeksli alan göz önüne alındığında, tüm gerekli değiştirmek .için #kontrol ederek eğer belirli alan dönüş Trueher deney işlevine.

Nihai çözelti daha sonra bileşimi qve f.


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

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

5

Python 3, 380 378 348 346 bayt

Girintinin boşluklarla değil, sekmelerle olduğunu unutmayın.

Golf versiyonu:

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

İdeone üzerinde test et

Açıklama (aşağıda ungolfed versiyonu için):

Tüm işlemler herhangi bir dönüştürme olmadan yapılır, boşluk karakterleri atlanır.
İşlev, axes_pos3 karakterlik hayali "3D" koordinatlarını hesaplar bmin, bmaxtüm #karakterler için minimum (maksimum) ve maksimum 3 katı ( , ) olarak toplanırlar .

Koordinatlar def axes_pos(x, y): return y, x + y, lc - y + x;
X, 0'dan sağa, Y ise 0'dan aşağıya sayılır (ilk satırdan sona kadar).
İlk hayali koordinat temel olarak Y'dir, çünkü bunun nedeni açıktır. Baltası yeşil sınırlara dik (OP'nin resimlerinde)
İkincisi kırmızı sınırlara dikey, üçüncüsü mavi sınırlara diktir.

İkinci geçişte, ."3B" koordinatlarının bmin.. bmaxaralığına düştüğü tüm karakterler için değiştirme yapılır , eleman bilge - bu ifade ile kontrol edilir all(bmin[j] <= p[j] <= bmax[j] for j in range(0, 3)).

Testler ile Ungolfed versiyonu da Ideone üzerinde :

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()
Güncelleme 1:

-1Hiçbir şey değişmediği için üçüncü hayali koordinat için gereksiz yere kaldırıldı

2,3 güncellemesi:

Kısmen uygulanmış iyileştirmeler Leaky Nun+ benim de önerdi .


Temel olarak aynı algoritmayı kullanıyor muyuz? Bir açıklama ekler misiniz?
Sızdıran Rahibe

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)
Sızdıran Rahibe

Ayrıca, liste kavramaları bazı baytları atmanıza yardımcı olabilir.
Sızdıran Rahibe

1
Sana ikna edebilecek misin len(L)-y+xiçinex-y
Çatlak Nun

1
Satır listesinde
Leaky Nun

5

Jöle , 45 35 13 42 41 bayt

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

Bu bir bağlantı listesidir; Sonuncusu çıktı üretmek için girdi üzerinde çağrılmalıdır.

G / Ç, diziliş dizileri şeklindedir; burada .boş ve @dolgulu anlamına gelir.

Çevrimiçi deneyin! veya tüm test durumlarını doğrulayın .

Arka fon

Aşağıdaki örneği ele alalım.

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

Bir çift veya paralel çizgiler çizerek - tüm doldurulmuş konumları içine alan en yakın çift - üç yönün her birinde altıgen sınırlama kutusunu belirleyebiliriz.

Uygulamada, bu iki satır arasındaki tüm karakterleri @ve bu satırların dışındaki her şeyi ., yalnızca boşluk içeren olası istisnalar dışında değiştiririz).

Yatay eksen için bu verir

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

Düşen diyagonal eksen için

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

ve yükselen diyagonal ekseni için,

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

Çünkü bunların üçünün karakter bilge minimum alarak .< @biz almak

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

Tek yapmamız gereken boşlukları restore etmek.

Nasıl çalışır

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

Python, 237 230 bayt

Dennis sayesinde 7 byte.

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'deki cevabımın limanı .

Satır dizisini girdi olarak alır, 2B karakter dizisini çıkarır.


2

Perl, 128 126 bayt

İçin +6 içerir -0F\n

STDIN'de giriş ile çalıştırın. 1Dolu, 0boş için kullanın . Satırların sonunda boşluklarla doldurulması gerekmez:

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$=--

Küp koordinatlarını kullanır. $= == 1Döngü sırasında maksimum ve minimum değerleri belirleyin ve döngüdeki bu sınırlar arasındaki koordinatları doldurur $= == 0. İlk 58 döngü anlamsız ve sadece $-satır sayısını doldurmak için oradalar


1

TSQL, 768 bayt

Bunu çözmek için bir sorgu yazdım - ki oldukça zor buldum. Tüm mükemmel kısa cevaplarla rekabet edemez. Ama yine de ilgilenenler için göndermek istedim. Cevabın uzunluğu hakkında üzgünüm - umut verici codegolf da farklı yaklaşımlar hakkında.

golfed:

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 @

Ungolfed:

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 @

Keman ungolfed


1

GNU Octave, 212 , 196 bayt

Belki de gerçekten bir golfçünün favori seçim dili değildir, ancak zorluğun sebebi budur, değil mi? M'nin bir karakter matrisi olarak alındığını varsayalım: 178 bayt tek başına ve bir işleve doldurulursa 196 .

golfed:

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

ungolfed:

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

Açıklama : bir koordinat sistemi oluşturuyoruz, 3 eksen - altıgen kenarlarına dik, her bir koordinatın maks ve minini bulduktan sonra, her yerde 1 ile başlayan ve mantıklı bir şekilde mantıksal bir maske oluşturuyoruz: kalan her "doğru" konum "#" karakterine.

Eğer test etmek istiyorsanız, sadece şöyle bir m matrisi oluşturabilirsiniz:

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

ve sonra f (m) 'yi çağırın ve her ikisinde de bir matris oluşturarak m ile karşılaştırın:

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

1
(Gecikmeli) PPCG'ye Hoşgeldiniz! Octave cevapları, açığız. :) Yine de iki şey: 1) lütfen gerçekte saydığınız kodu (gereksiz boşluk olmadan ) ekleyin , böylece insanlar puanı daha kolay kontrol edebilirler. Ayrı bir şekilde okunabilir bir sürüm ekleyebilirsiniz. 2) Gönderinizin, içinde saklanacak girişi ve saklanacak mçıkışı varsayan bir pasajı olduğu anlaşılıyor k. Cevaplar her zaman tam programlar veya çağrılabilir işlevler olmalıdır.
Martin Ender

Teşekkürler! Evet haklısınız, k ve m işlevlerini şimdi f fonksiyonuna ekledim ve doğrulama için ilk test m'yi oluşturan bir snippet ekledim.
mathreadler
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.