ট্রেজার মানচিত্র অঙ্কন বট


14

আপনি আপনার বন্ধুদের জন্য একটি ট্রেজার হান্টের আয়োজন করছেন। জিনিসগুলি আরও সহজে পরিচালনা করার জন্য, আপনি যে জায়গাগুলিতে মূল্যবান জিনিসগুলি লুকিয়ে রেখেছেন সে সমস্ত জায়গার মানচিত্র আঁকতে চান।

ইনপুট

0 0উপরের বাম কোণে থাকা (ননজেটিভ) x- এবং y- সমন্বিত সমন্বিত পয়েন্টগুলির তালিকাকে চিহ্নিত করে যে কোনও ধরণের ইনপুট অনুমোদিত (নোট: আপনি নিজের উত্তরে 1-ভিত্তিক সূচকও ব্যবহার করতে পারেন, দয়া করে মন্তব্য করুন যদি আপনি এটি করেন তবে )। উদাহরণ:

1 2
3 0
0 1

চ্যালেঞ্জ

আপনার ক্রিয়াকলাপ বা প্রোগ্রামটি xআউটপুটে সারি y + 1 এবং কলাম x + 1 এ যেখানে চিহ্নটি পাওয়া গেছে সেখানে প্রতি প্রদত্ত অবস্থানকে চিহ্নিত করে একটি মানচিত্র তৈরি করতে সক্ষম হবে । চিহ্নযুক্ত অবস্থানগুলিকে একটি দ্বারা প্রতিনিধিত্ব করা হয় । মানচিত্রটিতে এমন একটি ফ্রেমও রয়েছে যেখানে কোণগুলি +s, উল্লম্ব রেখাগুলি |s এবং অনুভূমিক রেখাগুলি -s হয় s আপনার সমাধানটি ক্ষুদ্রতম ফ্রেমের আউটপুট করা উচিত। উপরের ইনপুট উদাহরণের জন্য মানচিত্র:

+----+
|   x|
|x   |
| x  |
+----+

সম্ভাব্য পরীক্ষার কেস


"0 0"
=>
+-+
|x|
+-+

"0 10
 5 5
 10 0"
=>
+-----------+
|          x|
|           |
|           |
|           |
|           |
|     x     |
|           |
|           |
|           |
|           |
|x          |
+-----------+

""
=>
++
++

"0 0
 0 2
 2 0"
=>
+---+
|x x|
|   |
|x  |
+---+

অবশ্যই, এটি , এর অর্থ হল সর্বনিম্ন বাইট গণনা সহ সমাধানটি জয়ী! আপনার সমাধানের ব্যাখ্যা উত্সাহিত করা হয়।


আসলেই নয়, তবে আমি অন্য ইনপুট ফর্ম্যাটটি সম্পর্কে সত্যিই ভাবতে পারি নি। তবে আমি যদি এটির চ্যালেঞ্জ উপকার করে তবে তা পরিবর্তন করতে আমি রাজি
রেসার 290

স্কোয়ারবিহীন মানচিত্র থাকতে পারে?
ফ্রাউনফ্রোগ

4
@ রেসার ২৯০ আমি ঠিক এমন কিছু বলার পরামর্শ the input is a list of locations (e.g. nested list, list of tuples, space & newline separated, separate inputs, ect.)
দিই

1
আউটপুট কি 2 ডি বর্ণের অ্যারে হতে পারে?
ovs

2
আমি x- এবং y- স্থানাঙ্ককে দুটি পৃথক যুক্তি হিসাবে গ্রহণ করতে পারি?
01

উত্তর:


7

জে , 37 34 বাইট

0<@|:' x'{~((i.@]e.#.~)1+>./) ::#:

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

                       1+>./          maximum for each coordinate + 1
             i.@]                     make an array with these dimensions filled with 0..x*y
                                      /* if the input is empty, 
                                         1+>./ is negative infinity
                                         and i.@] throws an error  */
                   #.~                mixed base conversion of input
                 e.                   replace the elements of i.@]
                                        with 1 if it's present in the
                                        converted input, 0 otherwise
           (                ) ::      if there's an error do the other thing instead
                                #:    "to binary", for empty input this returns a 0x0 matrix
0<@|:' x'{~                           index into character string, transpose and put in a box

1
আমার অনুমান যে আউটপুট ফর্ম্যাট করা আমার প্রস্তাবিতের চেয়ে ভাল;)
রেসার 290

কেন ::emptyএত ভার্বোস? এটা কি? কেন এটি 1 বাইট বা এত সহজ করা যায় না? (জে জে আমার কোন জ্ঞান নেই)
ম্যাজিক অক্টোপাস উরন


আসলে :: খালি "" ইনপুট
কেসটি

@ ম্যাজিক অ্যাক্টোপাস ইউরান সত্যিকারের ফাঁকা বাক্স আউটপুট দেওয়ার আমি কোনও ছোট উপায় জানি না, সেগুলি ডিফল্টরূপে 1 সারি উঁচু।
ফ্রাউনফ্রোগ

4

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

[x,y]বিন্যাসে 1-সূচকযুক্ত স্থানাঙ্কের তালিকা হিসাবে ইনপুট নেয় । একটি স্ট্রিং প্রদান করে।

a=>(g=w=>y<h?' |-+x'[4*a.some(a=>a+''==[x,y])|2*(-~y%h<2)|++x%w<2]+[`
`[x=x<w?x:+!++y]]+g(w):'')((M=i=>Math.max(2,...a.map(a=>a[i]+2)))(x=y=0),h=M(1))

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


4

হাস্কেল , 127 123 বাইট

এটি অপারেটরকে সংজ্ঞায়িত করে (!)যা এক্স- কর্ডিনেটের একটি তালিকা এবং সংশ্লিষ্ট ওয়াই- কর্ডিনেটের একটি তালিকা নেয়:

x!y|l<-'+':('-'<$m x)++"+"=unlines$l:['|':[last$' ':['x'|(i,j)`elem`zip x y]|i<-m x]++"|"|j<-m y]++[l];m x=[1..maximum$0:x]

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

Ungolfed / ব্যাখ্যা

সহায়ক ফাংশন mএকটি তালিকা প্রত্যাশা করে এবং সূচকগুলি (1-ভিত্তিক) সর্বাধিক পর্যন্ত প্রদান করে, যদি তালিকাটি খালি থাকে তবে এটি ফিরে আসে []:

m x | null x    = []
    | otherwise = [1 .. maximum x]

আসল অপারেটরটি (!)কেবল একটি তালিকা-উপলব্ধি, সমস্ত স্থানাঙ্ককে অনুসরণ করে এবং একটি বা xচরিত্র চয়ন করে, যা নতুন লাইনের সাথে যুক্ত হয়:

x ! y
  -- construct the top and bottom line
  | l <- "+" ++ replicate (maximum (0:x)) '-' ++ "+"
  -- join the list-comprehension with new-lines
  = unlines $ 
  -- prepend the top line
      [l]
  -- the actual map:
    -- begin the line with | and add the correct chars for each coordinate
      ++ [ "|" ++ [ if (i,j) `elem` zip x y then 'x' else ' '
    -- "loop" over all x-coordinates
                 | i <- m x
                 ]
    -- end the line with a |
           ++ "|"
    -- "loop" over all y-coordinates
         | j <- m y
         ]
  -- append the bottom line
      ++ [l]

3

ক্যানভাস , 22 বাইট

ø╶{X;┤╋}l|*eL┤-×+e:└∔∔

এখানে চেষ্টা করুন!

1-ইনডেক্সড ইনপুট নেয়।

অবশেষে এমন একটি বাগ ঠিক করার সিদ্ধান্ত নিয়েছে যা যুগ যুগ ধরে আমাকে বিরক্ত করে চলেছে এবং এটিকে 21 বাইটে নামিয়ে দিয়েছে

ব্যাখ্যা (মনোস্পেসের জন্য অর্ধ-ASCII-fied):

ø╶{X;┤╋}l|*eL┤-×+e:└++  full program, implicitly outputting ToS at the end
ø                       push an empty Canvas - the map
 ╶{    }                for each array in the input array
   X                      push "X"
    ;┤                    and push the two coordinates separately on the stack
      ╋                   and overlap the "X" there in the map
        l               get the vertical length of the map
         |*             repeat "|" vertically that many times
           e            encase the map in two of those vertical bars
            L           get the horizontal length of the map
             ┤          subtract 2 (leave place for the "+"es)
              -×        repeat "-" that many times
                +e      encase that line in "+"es
                  :└    push a copy of that below the map
                    ++  and join the 3 items vertically

3

পাইথন 2 , 151 140 138 বাইট

-2 বাইট জো কিংকে ধন্যবাদ জানায়।

ইনপুটটি 1-সূচকযুক্ত।

m=input()
w,h=map(max,zip((0,0),*m))
b=['+'+'-'*w+'+']
M=b+['|'+' '*w+'|']*h+b
for x,y in m:M[y]=M[y][:x]+'x'+M[y][x+1:]
print'\n'.join(M)

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


আমি সন্দেহ করি যে আপনি 1-ভিত্তিক সূচক ব্যবহার করছেন, দয়া করে চ্যালেঞ্জের হিসাবে বর্ণিত হিসাবে আপনার উত্তরটিতে একটি নোট রেখে দিন।
রেসার 290

2

কাঠকয়লা , 37 বাইট

≔E²⁺²⌈Eθ§λιηB⊟⮌η⊟ηFθ«J⊟⮌ι⊟ιx

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। 1-ইন্ডেক্স। ব্যাখ্যা:

¿¬LθUR²+«

এর 2x2 আয়তক্ষেত্র অঙ্কন করে বিশেষ ক্ষেত্রে খালি ইনপুট +

≔E²⁺²⌈Eθ§λιη

ইনপুটটি স্থানান্তর করুন, প্রতিটি কলামের সর্বাধিক (এখন সারি) নিন এবং কাঠকয়লা সমন্বয়গুলিতে বাক্স আকার পেতে 2 যুক্ত করুন।

B⊟⮌η⊟η

বাক্স আঁকো।

Fθ«

প্রতিটি সমবায় উপর লুপ।

J⊟⮌ι⊟ι

তার অবস্থানে ঝাঁপ দাও।

x

একটি ক্রস দিয়ে চিহ্নিত করুন।



@ ওয়াস্তল ধন্যবাদ, আমি একটি পরিশ্রম নিয়ে এসেছি।
নিল

2

স্ট্যাক্স , 32 31 24 বাইট

╩╠ee%╙æM■↓^⌐╧ΩΓ¡c¥èf¢○ [

এটি চালান এবং এটি ডিবাগ করুন

[y, x]জোড়ার অ্যারে হিসাবে 0-ভিত্তিক সূচকগুলি নেয় ।

ব্যাখ্যা:

zs'X&|<cM%'-*'+|S]s{'||Smn++m Unpacked program, implicit input
zs                            Tuck empty array under input
  'X                          Push "X"
    &                         Assign element at all indices (create map)
                                As the indexing arrays are an array of arrays, treat them as a path to navigate a multidimensional array.
                                Extend array if needed.
     |<                       Left-align all to the length of the longest.
       cM%                    Copy, transpose, length (width)
          '-*                 Repeat "-"
             '+|S             Surround with "+"
                 ]s           Make a singleton and tuck it below the map
                   {    m     Map:
                    '||S        Surround with "|"
                         n++  Surround with the above/below border (built above)
                            m Map:
                                Implicit output

1
সুন্দরভাবে সম্পন্ন. |Sআশেপাশের নির্দেশাবলী এবং একটি পিছনের শর্টহ্যান্ড মানচিত্রের বাইরে আপনি আরও কিছুটা মাইলেজ পেতে পারেন । ( m) চারপাশে লাগে aএবং bস্ট্যাক থেকে এবং উত্পাদন b+a+b। এবং আপনি সারিগুলিতে পুনরাবৃত্তি করতে এবং আউটপুট উত্পাদন করতে mফাইনালের পরিবর্তে ব্যবহার করতে পারেন |Jউদাহরণস্বরূপ
21:58

1
আরও একটি জিনিস: আপনি প্রতিস্থাপন করতে পারেন z]n+H%সঙ্গে cM%। এটি সেই টুকরা যা মানচিত্রের প্রস্থ পায়, তবে খালি মানচিত্রের জন্য এটি একটি বিশেষ ক্ষেত্রে রয়েছে। আপনি যদি মানচিত্রটি পরিমাপ করার আগে স্থানান্তরিত করেন তবে বিশেষ ক্ষেত্রে চলে যায়।
21:58

@ রিসার্সিভ আমি চারপাশের মতো কিছু সন্ধান করছিলাম, তবে আমি ভুল কীওয়ার্ডগুলি অনুসন্ধান করেছিলাম
মিনিটে wastl

আপনি এই অপারেশনটিকে স্বাভাবিকভাবে কী বলবেন? আমি এটি ডক্সে যুক্ত করতে পারি যাতে পরবর্তী ব্যক্তি এটি খুঁজে পেতে পারে।
পুনরাবৃত্ত

@ রিসার্সিভ আমি মনে করি না এটি কী ছিল, এবং আমি স্বাভাবিকভাবেই এখন এটি ঘিরে
বলব

2

আর , 133 125 122 বাইট

function(m)cat(z<-c("+",rep("-",u<-max(m[,1])),"+","
"),rbind("|",`[<-`(matrix(" ",u,max(m[,2])),m,"x"),"|","
"),z,sep="")

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

1-ইন্ডেক্স। যুক্তি হিসাবে একটি ম্যাট্রিক্স গ্রহণ করে। 8 ডিগ্রিমেল সমস্ত ধন্যবাদ বাইট সংরক্ষণ করা হয়েছে, 3 জিউসেপ্পকে ধন্যবাদ! ব্যাখ্যা (কোডের পূর্ববর্তী সংস্করণ):

function(m){                           #x and y are the 1st and 2nd col of m
s=matrix(32,u<-max(m[,1]),max(m[,2]))  #s (treasure map) has dim max(x), max(y) 
s[m]=120                               #place the X's on the map
cat(                                   #print:
    z<-c("+",rep("-",u),"+","\n"),     #the top line
    intToUtf8(rbind(124,s,124,13)),    #the map
    z,                                 #the bottom line.
    sep="")
}

আপনি UTF8 কোডের পরিবর্তে স্বাভাবিক অক্ষর ব্যবহার করেন তাহলে আপনি 8 টি অক্ষর সংরক্ষণ করুন: tio.run/##ZU7NDoIwDL7zFEu9tKEzDONF4UkMhzmGchgYNhKC@uwIaozRpG36/...
digEmAll

[<-বন্ধনীগুলি সরানোর জন্য সরাসরি ব্যবহার করে 122 বাইট
জিউসেপ

@ জিউস্পেপ! আমি জানতাম একটি উপায় আছে।
জাইসি

1

[y, x] ফর্ম্যাটটির নেওয়া সমন্বয়গুলি

জাভাস্ক্রিপ্ট (নোড.জেএস) , 191 184 বাইট

c=f=a=>{a.map(([y,x])=>(c[M<++y?M=y:y]=c[y]||[])[m<++x?m=x:x]="x",M=m=0)
m++
M++
s=""
for(i=0;i<=M;s+=`
`,i++)for(j=0;j<=m;j++)s+=(c[i]||0)[j]||(j%m?i%M?" ":"-":i%M?"|":"+") 
return s}

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


আমি মনে করি আপনি দুর্ঘটনাক্রমে কোথাও x- এবং y- স্থানাঙ্ক পরিবর্তন করেছেন ..
রেসার 290

@ racer290 আপনি কি আরও নির্দিষ্ট হতে পারেন?
ড্যানিয়েলইন্ডি

আপনার সমাধানটি চেষ্টা করে দেখতে পেলাম যে পরীক্ষার ক্ষেত্রে x স্থানাঙ্ক পরিবর্তন করার ফলে স্থানাঙ্কের উল্লম্ব দিক পরিবর্তন হয়েছিল। আমি অনুমান করি বাগটি প্রথম সারিতে রয়েছে ( a.map(([y,x]))
রেসার 290

তবে
এক্সটি

2
সুতরাং আপনার সমাধানে আপনি প্রথমে y স্থানাঙ্ক গ্রহণ করবেন? আমি মনে করি আপনার উত্তরে তখন একটি নোট রেখে দেওয়া ভাল।
রেসার 290

1

জাভাস্ক্রিপ্ট, 180 বাইট

F = 

s=>s.map(([x,y])=>(t[y]=t[Y<y?Y=y:y]||[])[X<x?X=x:x]='x',t=[X=Y=0])&&[...t,0].map((_,y)=>[...Array(X+2)].map((_,x)=>[(t[y]||0)[x]||' ',...'-|+'][!(y%~Y)+2*!(x%~X)]).join``).join`
`


console.log(F([[1,11],[6,6],[11,1]]))


1

জাভা 10, 238 223 বাইট

c->{var r="";int w=0,h=0,x,y;for(var l:c){w=(x=l.get(0))>w?x:w;h=(y=l.get(1))>h?y:h;}for(w++,h++,x=-1;++x<=w;r+="\n")for(y=-1;++y<=h;)r+=x%w+y%h<1?"+":x%w<1?"-":y%h<1?"|":(c+"").contains("["+x+", "+y+"]")?"x":" ";return r;}

1 সূচকযুক্ত স্থানাঙ্ক।

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

ব্যাখ্যা:

c->{                      // Method with 2D Lists as parameter and String return-type
  var r="";               //  Result-String, starting empty
  int w=0,h=0,            //  Width and height, starting at 0
      x,y;                //  Temp x,y coordinates
  for(var l:c){           //  Loop over the Inner Lists containing the coordinates
    w=(x=l.get(0))>w?x:w; //   Determine width based on max x-coordinate
    h=(y=l.get(1))>h?y:h;}//   Determine height based on max y-coordinate
  for(w++,h++,            //  Increase both the width and height by 1
      x=-1;++x<=w;        //  Loop `x` in the range [0, width]
      r+="\n")            //    After every iteration: append a new-line to the result
    for(y=-1;++y<=h;)     //   Inner loop `y` in the range [0, height]
      r+=                 //    Append the following character to the result-String:
        x%w+y%h<1?        //    If it's one of the corners:
          "+"             //     Append "+"
        :x%w<1?           //    Else-if it's the top or bottom row:
          "-"             //     Append "-"
        :y%h<1?           //    Else-if it's the right or left column:
          "|"             //     Append "|"
        :(c+"").contains("["+x+", "+y+"]")? 
                          //    Else-if the current `x,y` is part of the input-coordinates
          "x"             //     Append "x"
        :                 //    Else:
          " ";            //     Append " "
  return r;}              //  Return the result-String

rwhxy; lcwxlgetw? xw; hylgeth? yh; forwhxxwr। foryyhrxwyh? xwyhcxy? xr।
ম্যাজিক অক্টোপাস উরন

@ MagicOctopusUrn আপনি সমস্ত ভেরিয়েবল এবং get/ এর নামকরণ কী forকরছেন? : এস এক্সডি
কেভিন ক্রুইজসেন

1

সি (জিসিসি) , 246 234 বাইট

পরামর্শের জন্য সিলিংক্যাট ধন্যবাদ।

শূন্য-ইন্ডেক্স। ফাংশনটি কো-অর্ডিনেটস এবং বাফারগুলির একটি তালিকা নেয়, সর্বাধিক এক্স এবং ওয়াইয়ের মানগুলি সন্ধান করে, বাফারগুলিকে শূন্যস্থান পূরণ করে, ফ্রেম উত্পন্ন করে এবং তারপরে x এর প্লট করে।

f(int*a,char*c){int*b=a,x,y=x=-1,i=0;for(;~*b;*++b>y?y=*b:0,++b)*b>x?x=*b:0;for(x+=4,y+=3,memset(c,32,x*y);++i<x;c[i]=c[y*x-i]=45);for(i=0;i<y;c[x*++i-1]=10*(i<=y))c[x*i]=c[x*i+x-2]=i&&y/i?124:43;for(b=a;~*b;b+=2)c[*b+1-~b[1]*x]='x';}

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



1

05AB1E , 44 42 বাইট

ζεZ}>`UX'-×'+.ø©,F'|NVXF¹YN‚.å„ xè}'|J,}®,

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


 ζεZ}>`                                     # Push the max of X and Y to the stack +1.
       UX                                   # Store the max X.
         '-×'+.ø©,                          # Print the top border.
                  F                     }   # From 0 to Y...
                   '|                       # Push left border.
                     NV                     # Store current Y in Y.
                       XF          }        # From 0 to X...
                         ¹                  # Push input.
                          YN‚               # Group current X and Y.
                             .å             # Exists in original input ? 1 : 0
                               „ xè         # Exists ? 'X' : ' '
                                    '|J,    # Right border, join, print.
                                         ®, # Print bottom border.

এক্স এবং ওয়াই বিপরীত হতে পারে, এটি আদৌ গুরুত্বপূর্ণ কিনা তা জানতেন না।


আমি মনে করি এটি আমার কাছে কম বাইটে রয়েছে তবে আমরা দেখতে পাব ... না।

ζεZ}>`D'-×'+.øUð×'|.øs.D)X.ø©svy>`s®sUXès'xsǝXǝ}

1
এটা অনেক না, কিন্তু আপনাকে প্রথমে পরিবর্তন করে 1 বাইট সংরক্ষণ করতে পারবেন Fকরার Lv, সরানোর NVএবং পরিবর্তন Yকরার y41 বাইট
কেভিন ক্রুইজসেন

1
উল্লেখ হিসাবে @Emigna চ্যাটে , εZ}হতে পারেন €à
কেভিন ক্রুইজসেন

মোবাইলে এটির ঘৃণা সম্পাদনা পিসির কাছাকাছি অপেক্ষা করবে।
ম্যাজিক অক্টোপাস উরান

1
@ কেভিন ক্রুজসেন Ývনা Lv, তবে এখনও একটি ভাল সম্পাদনা :)।
ম্যাজিক অক্টোপাস উরন

আহ, আপনি ঠিক বলেছেন। Ývপরিবর্তে Lv। আমার খারাপ।
কেভিন ক্রুইজসেন

0

সি (জিসিসি) , 229 220 216 বাইট

-9 বাইট সিলিংক্যাট ধন্যবাদ

শূন্য-ইন্ডেক্স। সংখ্যার তালিকা হিসাবে স্থানাঙ্ক গ্রহণ করে, এমনকি সংখ্যাগুলি এক্স এবং বিজোড় সংখ্যাগুলি হ'ল

X,Y,i,j,k,x,z;f(l,n)int*l;{for(X=Y=0,i=n*=2;i--;X=fmax(l[i],X))Y=fmax(l[i--],Y);n&&X++-Y++;for(--i;i++<Y;puts(""))for(j=-1;j<=X;z=i<0|i==Y,putchar(j++<0|j>X?z?43:'|':x?z?45:32:'x'))for(x=k=n;k--;)x*=l[k--]-i|l[k]-j;}

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


@ সেলিংক্যাট চিয়ার্স!
গ্যাস্ট্রোপনার

সুপারিশ for(n&&X++-Y++;i<=Y;i+=puts(""))পরিবর্তেn&&X++-Y++;for(--i;i++<Y;puts(""))
ceilingcat
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.