দৃশ্যমান বিল্ডিং


15

এই ধাঁধাটি কোডিনগেম সামসির "হার্ট অফ দ্য সিটি" ধাঁধা থেকে উদ্ভূত হয়েছে ।

বিবরণ

আপনি একটি n* nটাইল শহরে হাঁটতে এবং সেন্টার টাইলে যাওয়ার সিদ্ধান্ত নিয়েছেন । সমস্ত বিল্ডিং অসীম ছোট, তবে আপনার কাছে সুপার ভিশন রয়েছে এবং কাছাকাছি এবং দূরে সমস্ত কিছু দেখতে পাবেন।

সীমাবদ্ধতাসমূহ

n সর্বদা অদ্ভুত

আপনি যে কোনও বিল্ডিং দেখতে পাচ্ছেন যা অন্য একটি দ্বারা সরাসরি বাধাগ্রস্ত হয় না

কার্য

প্রতিটি বিল্ডিং সাথে দৃশ্যমান চিহ্নিত করুন *। দর্শনটির ঠিক একই লাইনে অন্য বিল্ডিং দ্বারা এটি অবরুদ্ধ না করা থাকলে ভবনটি দৃশ্যমান।

অন্য কথায়, যদি @এটি উত্স হয় তবে বিল্ডিং দৃশ্যমান হয় যদি x- স্থানাঙ্ক এবং y- স্থানাঙ্ক একে অপরের সহ-প্রধান হয়।

উদাহরণ ইনপুট এবং আউটপুট

ইনপুট:

7

আউটপুট:

 ** **
* * * *
*******
  *@*
*******
* * * *
 ** **

*একটি দৃশ্যমান বিল্ডিং, একটি অদৃশ্য বিল্ডিং এবং @আপনি যেখানে রয়েছেন।

স্কোরিং

মনে রাখবেন, এটি , তাই কমপক্ষে বাইটস সহ উত্তরটি জেতে।

var QUESTION_ID=91394,OVERRIDE_USER=59057;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}*{font-family:"Helvetica",sans-serif}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>


আউটপুট কীভাবে উত্পন্ন হয় তা আপনি পরিষ্কার করতে পারেন?
লিকি নুন

আমি মনে করি যে 5 টির চেয়ে বেশি ইনপুট যেহেতু উদাহরণস্বরূপ রয়েছে এটির পক্ষে ভাল হবে, যেহেতু 5 এর আউটপুটটি বিশেষ
চিত্রণযোগ্য

আমরা কি সবসময় কেন্দ্রে থাকি? ইনপুট সমান হলে কী হবে?
লিকি নুন

1
@ লেকিউন "এন সর্বদা অদ্ভুত"
Sp3000

@ ল্যাকিয়ুনুন আপনার ইচ্ছা অনুযায়ী আউটপুট তৈরি করা যেতে পারে তবে এটির ফলাফল আউটপুট অনুসরণ করতে হবে। আমি কি 7x7 ইনপুট / আউটপুট দিয়ে সঠিক করছি?
সোরেন

উত্তর:


8

এক্সেল-ভিবিএ, (47 * n ^ 2) বাইট এবং 121 বাইট

নির্দেশ:

এক্সেল এই চ্যালেঞ্জের জন্য খুব কার্যকর বলে প্রমাণিত হয়েছে এবং প্রদত্ত ইনপুটটির জন্য ওপি'র দেখানো হিসাবে সঠিক প্যাটার্নটি পেতে এক্সেল সূত্রগুলির সংমিশ্রণ রয়েছে। ভাগ্যক্রমে আমার পক্ষে যথেষ্ট, এক্সেলের একটি জিসিডি ফাংশন রয়েছে - ইতিবাচক পূর্ণসংখ্যার সর্বসাধারণের সাধারণ বিভাজক ফেরত দেওয়ার জন্য একটি অন্তর্নির্মিত সূত্র যাতে আমাকে ইউক্লিডিয়ান অ্যালগরিদম ব্যবহার করে কোনও তৈরি করতে হবে না । আমার এখানে কেন একটি জিসিডি ফাংশন দরকার? এটি কারণ দুটি সংখ্যাকে কপিরাইম বলা হয়, যদি তাদের বৃহত্তম সাধারণ বিভাজক 1 হয় । এখানে সংখ্যার অবস্থানের তুল্য হয়, xএবং y, মূল আপেক্ষিক, @। এখানে এক্সেল সূত্রটি দেওয়া হল

=IF(GCD(ABS(COLUMN()-m),ABS(m-ROW()))=1,"*","")

যেখানে mএকটি রেফারেন্স সেলটির নাম এবং এটি n/2সিলিং ( n/2) এর চেয়ে বড় বা সমান ক্ষুদ্রতম পূর্ণসংখ্যার সমান , যেখানে nইনপুটটির জন্য একটি রেফারেন্স সেলটির নাম। এ সূত্রটি কক্ষ এ 1 এ আটকান, তারপরে আকারের সাথে সমস্ত পরিসীমা টানুন n x n। সূত্রটির দৈর্ঘ্য 47 বাইট তবে আপনাকে এটি n x nবার বার প্রতিলিপি করতে হবে , সুতরাং এটি (47 * n ^ 2) বাইটের সমান।

প্রক্রিয়াটি স্বয়ংক্রিয় করতে এবং অক্ষরের ব্যবহার হ্রাস করতে, আমরা ভিবিএ ব্যবহার করতে পারি যেহেতু এটি এক্সেলের সাথে সংহত হয়েছে। প্রথমত, নিম্নলিখিতগুলির মতো একটি কার্যপত্রক এক্সেল সেট করুন:

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

তারপরে তাত্ক্ষণিক উইন্ডোতে নিম্নলিখিত কোডটি রাখুন

n=[A1]:m=Int(n/2)+1:Range("A1",Cells(n,n))="=IF(GCD(ABS(COLUMN()-"&m &"),ABS("&m &"-ROW()))=1,""*"","""")":Cells(m,m)="@"

কোডটি অবহিত করা:

Sub A()
    n = [A1]
    m = Int(n / 2) + 1
    Range("A1", Cells(n, n)) = "=IF(GCD(ABS(COLUMN()-" & m & "),ABS(" & m & "-ROW()))=1,""*"" ,"""")"
    Cells(m, m) = "@"
End Sub

ব্যাখ্যা:

  1. n = [A1] : এনটিকে ইনপুট হিসাবে সেট করুন এবং সেল এ 1 এর মান n তে নির্ধারণ করুন।
  2. m = Int(n / 2) + 1: আর্গুমেন্টের জন্য সিলিং ফাংশন হিসাবে একই আউটপুট ফেরত দেওয়ার কাস্টম উপায় n/2
  3. Range("A1", Cells(n, n)) = "=IF(GCD(ABS(COLUMN()-" & m & "),ABS(" & m & "-ROW()))=1,""*"" ,"""")": n x nঘর এ 1 থেকে শুরু করে আকারের সীমার প্রতিটি কক্ষে উপরের সূত্রটি আটকান ।
  4. Cells(m, m) = "@" : একটি চরিত্রের সাথে পরিসীমাটির কেন্দ্র নির্ধারণ করুন @

আউটপুট:

নীচের চিত্রটি ইনপুটটির উদাহরণ আউটপুট n = 11

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

ফন্টের রঙটিকে আরও আকর্ষণীয় করে তুলতে আমি লালটিতে সেট করেছি। আর ভালো

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


আপনি কেন সূত্রটি সরাসরি ভিবিএ ফাংশনে গণনা করার পরিবর্তে প্রতিটি কক্ষে সূত্রটি "পেস্ট" করেন?
উপত্যকা

@ ভ্যালে কারণ লুপিং স্টেটমেন্ট, আইএফ স্টেটমেন্ট, ওয়ার্কশিট ফাংশন ইত্যাদি ব্যবহার করতে হবে বলে এটি দীর্ঘতর হবে।
আনাস্তাসিয়া-রোমানোভা 秀

তবে আপনার বাইট কাউন্টে আপনি 47 * n ^ 2 রেখেছেন ...?
উপত্যকা

@ ভাল আপনি সম্ভবত এটি পড়েন নি: " সূত্রটির দৈর্ঘ্য 47 বাইট তবে আপনাকে এটি n x nবার বার প্রতিলিপি করতে হবে , সুতরাং এটি আমার উত্তরে (47 * n ^ 2) বাইটের সমান "। উগোরেনের উত্তরের মন্তব্য বিভাগেও আলোচনাটি দেখুন । আমি আশা করি এটি বিষয়টিকে আরও পরিষ্কার করে দেবে।
আনস্তাসিয়া-রোমানোভা 秀

@ আনাস্তাসিয়া-রোমানোভা convention কনভেনশন অনুসারে, এই সমাধানের সঠিক বাইট গণনাটি 121 bytesকেবলমাত্র প্রোগ্রাম হিসাবেই বাইটোকন্টে অবদান রাখবে। আপনি যে ক্ষেত্রে উল্লেখ করেছেন, অবশ্যই উত্সটি অনুলিপি করতে হবে এবং প্রতিটি পৃথক কোষে আটকানো হবে, তবে আপনার সমাধানে যা সমস্ত প্রোগ্রামযুক্তভাবে করা হয়।
টেলর স্কট 21

4

জেলি , 16 বাইট

:2ạḶgþ`«2ị“* @”Y

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

কিভাবে এটা কাজ করে

:2ạḶgþ`«2ị“* @”Y  Main link. Argument: 2n + 1

:2                Perform integer division by 2, yielding n.
   Ḷ              Yield [0, ..., 2n].
 ạ                Take the absolute difference of the result to both sides.
                  This yields A := [n, ... 0, ... n].
      `           Call the quicklink to the left with left and right argument A.
     þ              Table; call the link to the left for all x in A and all y in A.
    g                 Yield the GCD of x and y.
       «2         Truncate the GCD at 2, leaving 0 for the origin, 1 for coprime
                  coordinates, and 2 otherwise.
         ị“* @”   Index into that string, mapping [1, 2, 0] to ['*', ' ', '@'].
               Y  Join, separating by linefeeds.

আপনি কি কোডটির একটি প্রসারিত, মন্তব্য করা ভিউ যুক্ত করতে পারবেন?
সোরেন

আমি ইতিমধ্যে করে ফেলেছি. এটি কিছু অনুপস্থিত?
ডেনিস

আমি কোনও কারণে এটি দেখতে পাচ্ছিলাম না ... এটি এখন ভাল দেখাচ্ছে!
সোরেন


3

পার্ল 6 , 77 বা 74 বাইট

সম্পূর্ণ প্রোগ্রাম (77 বাইট) :

my \h=Int(get/2);say |map {$_|$^j??2>$j gcd$_??'*'!!' '!!'@'},-h..h for -h..h

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

যদি 1-বর্ণচিহ্নযুক্ত স্ট্রিংয়ের (74 বাইট) তালিকার তালিকা হিসাবে ল্যাম্বডা থেকে আউটপুটটি ফিরে দেওয়া গ্রহণযোগ্য হয় :

{my \h=$_ div 2;map {map {$^i|$_??2>$i gcd$_??'*'!!' '!!'@'},-h..h},-h..h}

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


3

সিলোস , 236 বাইট

GOTO s
funcg
if q p
r=p
return
lblp
t=p
t%q
p=q
q=t
GOSUB g
return
lbls
readIO
m=i
m/2
a=i
lbla
a-1
a-m
b=i
lblb
b-1
b-m
p=a
p|
q=b
q|
GOSUB g
r-1
A=r
A|
r/A
r*-1
r+1
p=r
r*r
r*6
p*4
r+p
r+32
printChar r
b+m
if b b
printLine 
a+m
if a a

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

সি আমার উত্তর পোর্ট ।


15 এর আউটপুট আকর্ষণীয়
রোহান ঝুনঝুনওয়ালা

3

সি, 147 145 135 133 বাইট

ডেনিসকে 2 বাইট ধন্যবাদ

10 বাইট ধন্যবাদ আর্নল্ডকে।

এইচ ওয়াল্টার্সকে 2 বাইট ধন্যবাদ

r,m,i,j;g(a,b){r=b?g(b,a%b):a;}main(n){scanf("%d",&n);for(m=n/2,i=-m;i<=m;putchar(r?r*r-1?32:42:64),i+=++j%n<1&&puts(""))g(i,j%n-m);}

আইডিয়ন!

গল্ফিং পরামর্শ সর্বদা হিসাবে স্বাগত জানাই।


আমি তোমাকে আরেকটা বিশ্বব্যাপী পরিবর্তনশীল (বলুন সংজ্ঞায়িত x) এবং না x=পরিবর্তে returnমধ্যে g()ফাংশন, তারপর আমার মনে হয় আপনি কি করতে পারেন {g(i,j-m);putchar(x?x*x-1?32:42:64);}এবং 7 বাইট সংরক্ষণ। (অথবা আপনি যদি লাইন ব্রেকটিও সরিয়ে দেন তবে 8 বাইট। এটি কি সত্যই প্রয়োজন?)
আর্নাউল্ড

@ আরনাউল্ড ধন্যবাদ, আপডেট হয়েছে
লিকি নুন

হুম। আপনার m,i,jদু'বার ঘোষণার দরকার নেই , তাই না?
আর্নল্ড

@ আরনাউল্ড স্পষ্টতই আমি একজন বোকা।
লিকি নুন

1
পরিবর্তন ++jকরার জন্য ++j%n(+2 বাইট), এবং j-mথেকে j%n-m(+2 বাইট)। তারপরে আপনি ,j%=n(-5 বাইট) মুছে ফেলতে পারেন ।
এইচ ওয়াল্টাররা

3

জাভাস্ক্রিপ্ট (ES6), 114 113 105 বাইট

এটি লিকি নুনের সি সংস্করণের একটি বন্দর হিসাবে শুরু হয়েছিল এবং এরপরে আরও অনুকূলিত হয়েছিল। বেশিরভাগ অপটিমাইজেশন জেএসের জন্য নির্দিষ্ট।

n=>(r=j=>i<n?('*@*'[1+(g=(i,j)=>j?g(j,i%j):i)(i-m,j-m)]||' ')+(++j<n?'':(i++,`
`))+r(j%n):'')(i=0,m=n>>1)

উদাহরণ:

let f =
n=>(r=j=>i<n?('*@*'[1+(g=(i,j)=>j?g(j,i%j):i)(i-m,j-m)]||' ')+(++j<n?'':(i++,`
`))+r(j%n):'')(i=0,m=n>>1)

console.log(f(7))


2

পাইথ, 40 বাইট

L@"@* "hS[b2)jsMcQyM.aMiM*.**2[r_/Q2h/Q2

আমি পাইথের কাছে খুব নতুন, তাই সম্ভবত এটি আরও গল্ফ করা যেতে পারে।

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

কিভাবে এটা কাজ করে

L@"@* "hS[b2)jsMcQyM.aMiM*.**2[r_/Q2h/Q2   

L@"@* "hS[b2)                              Lambda y. Input: b
L                                          Declare lambda
         [b2)                              List [b, 2]
        S                                  Sort ascending
       h                                   Head. Yield first element a, clamping to max 2
  "@* "                                    String literal "@* "
 @                                         Index into string with a, yielding string[a]

             jsMcQyM.aMiM*.**2[r_/Q2h/Q2   Program. Input: Q
                                _/Q2 /Q2   -Q//2 and Q//2
                                    h      Head. Q//2+1
                               r           Range [-Q//2, Q//2+1]
                              [            List
                            *2             Duplicate
                          .*               Splat. Unpack
                         *                 Cartesian product. Yield all coordinate pairs
                       iM                  Map GCD over above
                    .aM                    Map absolute value over above
                  yM                       Map y over above, yielding required characters
                cQ                         Chunk. Split above into Q pieces
              sM                           Map concatenate over above
             j                             Join on newlines
                                           Implicitly print


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.