বাউন্ডিং বক্সটি হাইলাইট করুন, দ্বিতীয় খণ্ড: ষড়ভুজ গ্রিড


24

আপনাকে অক্ষরের একটি ষড়ভুজ গ্রিড দেওয়া হয়েছে .এবং এর #মতো:

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

আপনার কাজটি হ'ল সম্পূর্ণ অক্ষ-সংলগ্ন বাউন্ডিং বাক্সটি #আরও সহ পূরণ করুন #:

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

অক্ষ-সংযুক্ত বাউন্ডিং বক্স হ'ল ক্ষুদ্রতম উত্তল ষড়্ভুজাকার আকৃতি যা এতে সমস্ত থাকে #। লক্ষ্য করুন যে ষড়ভুজ গ্রিডের ক্ষেত্রে রয়েছে case তিনটি অক্ষ বিবেচনা করা উচিত (ডাব্লু / ই, এসডাব্লু / এনই, এনডাব্লু / এসই):

এখানে চিত্র বর্ণনা লিখুন

এখানে দেখানোর জন্য আরও একটি উদাহরণ এখানে দেওয়া হয়েছে যে কিছু ক্ষেত্রে এক বা একাধিক পক্ষের মধ্যে কেবল একটিই থাকবে # :

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

আপনি হয় এটিকে হ্রাসাগুলি হিসাবে অধঃপতিত দিক হিসাবে দেখতে পারেন বা আপনি চারপাশে বাউন্ডিং বাক্সটি আঁকতে পারেন, যেমন আমি উপরে করেছি, সেক্ষেত্রে তারা এখনও হেক্সাগন হিসাবে রয়েছে:

এখানে চিত্র বর্ণনা লিখুন

খুব কঠিন? প্রথম খণ্ড চেষ্টা করুন!

বিধি

আপনি যে কোনো দুই ব্যবহার করতে পারেন স্বতন্ত্র স্থানে অ-স্পেস মুদ্রণযোগ্য ASCII অক্ষর (0x21 0x7E করতে, সমেত), #এবং .। যদিও তাদের নির্দিষ্টকরণের বাকী অংশ হিসাবে #এবং উল্লেখ করা চালিয়ে যাব .

ইনপুট এবং আউটপুট হয় একক লাইনফিড-বিচ্ছিন্ন স্ট্রিং বা স্ট্রিংগুলির তালিকা (প্রতিটি লাইনের জন্য একটি) হতে পারে তবে ফর্ম্যাটটি সামঞ্জস্যপূর্ণ হতে হবে।

আপনি ধরে নিতে পারেন ইনপুটটিতে কমপক্ষে একটি রয়েছে #এবং সমস্ত লাইন একই দৈর্ঘ্য। নোট করুন যে এখানে দুটি পৃথক "ধরণের" লাইন রয়েছে (একটি স্থান বা একটি স্থান ছাড়াই শুরু করা) - আপনি ধরে নিতে পারবেন না যে ইনপুটটি সর্বদা একই ধরণের সাথে শুরু হয়। আপনি ধরে নিতে পারেন যে আপনার দেওয়া গ্রিডের মধ্যে সীমাবদ্ধ বক্সটি সর্বদা ফিট করে।

আপনি কোনও প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন এবং ইনপুট গ্রহণ এবং আউটপুট সরবরাহের আমাদের মানক পদ্ধতির কোনওটি ব্যবহার করতে পারেন ।

আপনি যে কোনও প্রোগ্রামিং ভাষা ব্যবহার করতে পারেন , তবে লক্ষ্য করুন যে এই ফাঁকগুলি ডিফল্টরূপে নিষিদ্ধ করা হয়েছে।

এটি , তাই সংক্ষিপ্ততম বৈধ উত্তর - বাইটে পরিমাপ করা - জয় w

পরীক্ষার মামলা

প্রতিটি পরীক্ষার ক্ষেত্রে একে অপরের পাশে ইনপুট এবং আউটপুট থাকে।

#    #

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

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

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

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

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

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

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

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

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

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

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

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

1
আমার মাথা কোনও স্পষ্ট নিদর্শন সন্ধান করার চেষ্টা করছে। আপনি 'ষড়্ভুজাকাল' বলেছেন তবে পরীক্ষার ক্ষেত্রে ষড়জাগরে কেবলমাত্র দুটি ইনপুট রয়েছে। আমি শেষ.
আনাস্তাসিয়া-রোমানোভা 秀

1
@ আনাস্তাসিয়া-রোমানোভা outer যদি আপনি বাহ্যিক অক্ষরের কেন্দ্রগুলি দিয়ে যাচ্ছেন এমন আকারটি চিত্রটি দেখান তবে হ্যাঁ কিছু কিছু ষড়কোচের পক্ষগুলি অবক্ষয়িত হবে (যেমন আয়তক্ষেত্রাকার গ্রিডের মতো, যেখানে আয়তক্ষেত্রটি একটি রেখায় হ্রাস পাবে) you তবে, আপনি যদি অক্ষরের চারপাশে আয়তক্ষেত্র আঁকেন (যেমন আমি চিত্রটিতে করেছি), সমস্ত উদাহরণ হেক্সাগন (যার কয়েকটি খুব সংক্ষিপ্ত দিক রয়েছে)।
মার্টিন ইন্ডার

1
@ আনাস্তাসিয়া-রোমানোভা new নতুন চিত্রটি কী সাহায্য করে?
মার্টিন ইন্ডার

3
আমি! যদি আমার কাছে ভুল চশমা থাকে তবে II-এর মতো মনে হচ্ছে ..
নীল

1
@ নীল বা, আপনি জানেন, খুব বেশি অ্যালকোহল;)
থ্রিএফএক্স

উত্তর:


7

পাইথ , 82 71 বাইট

এল, hbebMqH @ এস + + GH1KhMyJs.e, Lkfq \ # @ bTUb.zA, ySm-FdJySsMJj.es.eXW && gKkgG-kYgH + + kYZ \। \ # BZ
MqH @ র [hGHeG) 1j.es.eXW && ghMJs.e, Lkfq \ # @ bTUb.zkgSm-FdJ-kYgSsMJ + + kYZ \। \ # BZ

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

  • সর্বনিম্ন y- স্থানাঙ্কের সাথে A বিন্দু এবং সর্বাধিক y- স্থানাঙ্কের সাথে বিন্দু হওয়া যাক।

  • সিটিকে সর্বনিম্ন (x- মান বিয়োগ y- মান) এবং পয়েন্টটি সর্বাধিক সহ বিন্দু হতে দিন।

  • E কে সর্বনিম্ন (x- মান প্লাস y- মান) এবং পয়েন্টটি সর্বোচ্চ দিয়ে দেওয়া হোক।

তারপরে এটি স্থানাঙ্কগুলি সন্ধান করার সমতুল্য যা y- স্থানাঙ্কটি A এবং B এর মধ্যে থাকে, x- মান বিয়োগের মানটি C এবং D এর মধ্যে এবং x- মান প্লাস y এর মান E এবং F এর মধ্যে হয় finding


আমি যখন প্রথমবার কোনও সমাধান পোস্ট করতে পারতাম, কেবল এসই অ্যান্ড্রয়েড অ্যাপটি যদি ট্যাব অক্ষরগুলি সঠিকভাবে পরিচালনা করতে পারে (কোনও কারণে তারা আটকানোর সময় অদৃশ্য হয়ে গেছে): /
সার্গে বর্শ

@ সার্জবর্স আমি দুঃখিত :(
নুন

হাহ কেন, এটি এসই অ্যান্ড্রয়েড অ্যাপ্লিকেশনটি আমাকে ব্যর্থ করে দিয়েছে: ডি
সার্জে বোর্স

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

গল্ফ করার জন্য ধন্যবাদ ড্যামিয়েন f!

ইনপুটটি অক্ষরের তালিকার তালিকা হিসাবে নেওয়া হয়, আউটপুট একইভাবে সরবরাহ করা হয়।

Soo এটি লিখতে একটি জন্তু ছিল। এটি আইটেমের স্থানাঙ্কগুলিতে সর্বাধিক এবং ন্যূনতম ভিত্তিক ফিল্টারিং ব্যবহার করে Leakyun এর ধারণার উপর ভিত্তি করে।

আমি সত্যই বিস্মিত হয়েছি যে m=mapআসলে ব্যয়গুলি সংরক্ষণ করে যেহেতু এটি এত ব্যয়বহুল বলে মনে হয়।


ব্যাখ্যা:

এখানে একটি সামান্য কম butchered সংস্করণ ( সামান্য উপর জোর ):

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যে পরীক্ষা ফাংশন।

চূড়ান্ত সমাধান তারপর রচনা হয় qএবং f


1
f=z(\y->z((,).(,)y)[0..])[0..]
দামিয়েন

বাh x=z x[0..] f=h$h.curry(,)
ড্যামিয়েন

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

আইডিয়নে এটি পরীক্ষা করুন

ব্যাখ্যা (নীচে চতুর সংস্করণের জন্য):

সমস্ত প্রসেসিং কোনও রূপান্তর ছাড়াই সম্পন্ন হয়, স্পেস অক্ষরগুলি কেবল এড়িয়ে যায়।
ফাংশনটি axes_posকাল্পনিক "3 ডি" স্থানাঙ্কগুলির 3-টিউপল গণনা করে, এগুলি সমস্ত উপাদানগুলির জন্য (উপাদান অনুসারে) ন্যূনতম এবং সর্বাধিক 3-টিউপলস ( bmin, bmax) এ জমা হয় #

স্থানাঙ্কগুলি গণনা করা হয় def axes_pos(x, y): return y, x + y, lc - y + x;
যেখানে এক্স 0 থেকে ডানদিকে এবং Y গণনা করে 0 থেকে নীচে (প্রথম লাইন থেকে শেষ পর্যন্ত)।
প্রথম কাল্পনিক স্থানাঙ্কটি মূলত ওয়াই, কারণ এটি স্পষ্ট। এর কুঠারটি সবুজ সীমারেখার অরথোগোনাল (ওপির ছবিগুলিতে)
দ্বিতীয়টি লাল সীমানায় অরথোগোনাল এবং তৃতীয়টি নীল সীমানায় অরথগোনাল।

দ্বিতীয় পাসে, প্রতিস্থাপনটি সমস্ত .অক্ষরের জন্য করা হয় যা "3 ডি" স্থানাঙ্কগুলি পড়ে থাকে bmin.. bmaxপরিসীমা, উপাদান অনুসারে - এটি এই অভিব্যক্তিটিতে পরীক্ষা করা হয় all(bmin[j] <= p[j] <= bmax[j] for j in range(0, 3))

পরীক্ষা দিয়ে Ungolfed সংস্করণ এছাড়াও Ideone উপর :

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আমার নিজের দ্বারা প্রস্তাবিত আংশিক বাস্তবায়ন হয়েছে ।


আমরা কি মূলত একই অ্যালগরিদম ব্যবহার করি? আপনি একটি ব্যাখ্যা সংযোজন করতে পারেন?
লিকি নুন

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)
লিকি নুন

এছাড়াও, তালিকা বোধগম্যতা আপনাকে কিছু বাইট বন্ধ করে গল্ফ করতে সহায়তা করতে পারে।
লিকি নুন

1
আমি মনে করি আপনি পরিণত len(L)-y+xহতে পারেনx-y
লিকি নুন

1
আপনি লাইনগুলির তালিকাতে নিতে পারেন
লিকি নুন

5

জেলি , 45 35 13 42 41 বাইট

Ṁ€»\
ṚÇṚ«Çṁ"
ŒDṙZL$ÇṙL’$ŒḌ«Ç
ṚÇṚ«Ç
n⁶aÇ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

পাইথন, 237 230 বাইট

ডেনিসকে 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]

পাইথ আমার উত্তর পোর্ট ।

ইনপুট হিসাবে লাইনগুলির অ্যারে নেয়, 2D অক্ষরের আউটপুট দেয়।


2

পার্ল, 128 126 বাইট

জন্য +6 অন্তর্ভুক্ত -0F\n

এসটিডিনে ইনপুট দিয়ে চালান। খালি জন্য 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

টিএসকিউএল, 768 বাইট

আমি এটিকে সমাধান করার জন্য একটি ক্যোয়ারী লিখেছি - যা আমি বেশ কঠিন বলে মনে করেছি। এটি সমস্ত দুর্দান্ত সংক্ষিপ্ত উত্তরের সাথে প্রতিযোগিতা করতে সক্ষম নয়। তবে যারা আগ্রহী তাদের জন্য এটি পোস্ট করতে চেয়েছিলেন। উত্তরের দৈর্ঘ্য সম্পর্কে দুঃখিত - আশা করি কোডগল্ফ বিভিন্ন পদ্ধতির বিষয়েও।

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 @

ফিডল উজ্জীবিত


1

জিএনইউ অকটাভ, 212 , 196 বাইট

সম্ভবত কোনও গল্ফারের পছন্দের পছন্দের ভাষা নয়, তবে এটিই চ্যালেঞ্জ তৈরি করে, তাই না? ধরে নেওয়া মিটিকে একটি চর ম্যাট্রিক্স হিসাবে নেওয়া হয়: 178 বাইট একা দাঁড়িয়ে এবং যদি কোনও ফাংশনে স্টাফ করা হয় তবে 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

ব্যাখ্যা : আমরা একটি সমন্বিত সিস্টেম তৈরি করি, 3 টি অক্ষ - ষড়ভুজ পক্ষগুলিতে অরথগোনাল, প্রতিটি স্থানাঙ্কের সর্বাধিক এবং নূন্যতম সন্ধান করি, তারপরে সর্বত্র 1 টি এবং যৌক্তিকভাবে শুরু করে একটি লজিক্যাল মাস্ক তৈরি করুন এবং: প্রতিটি স্থানাঙ্কের সর্বোচ্চ এবং ন্যূনতম সীমাবদ্ধতা অবশেষে পুনরায় সেট করা "#" চরে প্রতিটি "সত্য" অবস্থান।

আপনি যদি এটি পরীক্ষা করতে চান তবে আপনি এম এম এর মতো ম্যাট্রিক্স তৈরি করতে পারেন:

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

এবং তারপরে এফ (এম) কল করুন এবং তাদের উভয়ের সাথে একটি ম্যাট্রিক্স তৈরি করে মি এর সাথে তুলনা করুন:

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

1
(বিলেট) পিপিসিজিতে আপনাকে স্বাগতম! অক্টাভা উত্তরগুলি স্বাগত অপেক্ষা বেশি। :) যদিও দুটি জিনিস: ১) দয়া করে আপনি যে কোডটি গণনা করেছেন (অবশ্যই অপ্রয়োজনীয় সাদা জায়গা ছাড়াই) অন্তর্ভুক্ত করুন, যাতে লোকেরা আরও সহজে স্কোরটি পরীক্ষা করতে পারে। আপনি আলাদাভাবে একটি পঠনযোগ্য সংস্করণ অন্তর্ভুক্ত করতে পারেন। 2) দেখে মনে হচ্ছে আপনার জমা একটি স্নিপেট যা অনুমান ইনপুট সংরক্ষণ করা হয় mএবং আউটপুট সংরক্ষণ করার জন্য kউত্তরগুলি সর্বদা পূর্ণ প্রোগ্রাম বা কলযোগ্য ফাংশন হওয়া উচিত।
মার্টিন এন্ডার

ধন্যবাদ! হ্যাঁ আপনি ঠিকই বলেছেন, আমি এখন একটি ফাংশনে কে এবং এম এমবেড করেছি এবং যাচাইকরণের জন্য একটি প্রথম পরীক্ষা এম তৈরির একটি স্নিপেট যুক্ত করেছি।
ম্যাথ্রেডলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.