এক্স স্পট চিহ্নিত


18

এক্স স্পট চিহ্নিত

আপনার লক্ষ্য হ'ল রাজধানী এক্স এর চারপাশে ক্রস-হেয়ার যুক্ত করুন:

উদাহরণ ইনপুট / আউটপুট

ইনপুট:

                mdhyyyyyyyhhhddmmm                
            mdyyssoo  oooosyyyhhhdmm              
          hsso     oossoooooyyhhdhhdmmm           
        yoooooo     oo ssysssyhhdyyyhmmmm         
      myso oso  o  oyo    hhhdhhyhyhhm mm m       
     mhsyhhys  oss      yyyhhhsosyhhmmmmdmmm
    mhyhhhy y         ssyhoho o shhdmmmmdmmmm        
    hhyyyh   s   oo syysyyhhdysso oyhdhhhmmmmm     
   dhysyys      sdysoXoyyyyhhso     syshm  mmm    
   hhyhyo       o      osss y   shhyyhd mmmmmm    
   yyhyyyss           o  oyyyydmmdmmmmmmmmm mm    
   ysyhyhhho   s     osy  sdm m  mddmmddhydmmm   
   h  oshhhyyyddhoo  ooyysshdmdohdmmdmddsshmmm    
    y   oyhhhdhhsyhsssshdddsss    hdddyyyhddm     
    dyyshyyhssyyhyyyyddhhmmdmmmdy syssoosyhdm     
     hsyyhhhhsoo sooyyhhdoohdhhyhyysoo  osdm      
      doyhhhyyyyhhhysyyy oossyyssso   osydm       
        soyhyyhhhhhhyhyyyooos       ohdddm        
         msoyyyyyyyhyyyyo ooo       syyd          
            ho oyyysooo    osso   osyd            
               dhyyysssyyyyyysoosdm               
                    mmdddddmmm                    

আউটপুট:

                mdhyyyyyyyhhhddmmm                
            mdyyssoo  oooosyyyhhhdmm              
          hsso     oossoooooyyhhdhhdmmm           
        yoooooo     oo ssysssyhhdyyyhmmmm         
      myso oso  o  oyo    hhhdhhyhyhhm mm m       
     mhsyhhys  oss   |  yyyhhhsosyhhmmmmdmmm
    mhyhhhy y        |ssyhoho o shhdmmmmdmmmm        
    hhyyyh   s   oo s|ysyyhhdysso oyhdhhhmmmmm     
   dhysyys      -----X-----hhso     syshm  mmm    
   hhyhyo       o    | osss y   shhyyhd mmmmmm    
   yyhyyyss          |o  oyyyydmmdmmmmmmmmm mm    
   ysyhyhhho   s     |sy  sdm m  mddmmddhydmmm   
   h  oshhhyyyddhoo  ooyysshdmdohdmmdmddsshmmm    
    y   oyhhhdhhsyhsssshdddsss    hdddyyyhddm     
    dyyshyyhssyyhyyyyddhhmmdmmmdy syssoosyhdm     
     hsyyhhhhsoo sooyyhhdoohdhhyhyysoo  osdm      
      doyhhhyyyyhhhysyyy oossyyssso   osydm       
        soyhyyhhhhhhyhyyyooos       ohdddm        
         msoyyyyyyyhyyyyo ooo       syyd          
            ho oyyysooo    osso   osyd            
               dhyyysssyyyyyysoosdm               
                    mmdddddmmm               

ইনপুট:

000000000000
000000000000
0000X0000000
0000000X0000
000000000000
000000000000
000000000000
000000000000
000000000000
000000000000
000000000000
000000000000

আউটপুট:

     |
 0000|00|0000
 0000|00|0000
-----X--+--00
 00--+--X-----
 0000|00|0000
 0000|00|0000
 0000000|0000
 000000000000
 000000000000
 000000000000
 000000000000
 000000000000

ইনপুট:

00000000000000000
00000000000000000
00000000000000000
00000X000X0000000
00000000000000000
00000000000000000
00000000000000000
00000000000000000
00000000000000000
00000000000000000
00000000000000000
00000000000000000   

আউটপুট:

00000|000|0000000
00000|000|0000000
00000|000|0000000
----+#+++#+----00
00000|000|0000000
00000|000|0000000
00000|000|0000000
00000000000000000
00000000000000000
00000000000000000
00000000000000000
00000000000000000    

Crosshair

আপনার ক্রস-চুলগুলি 3 লম্বা এবং 5-প্রশস্ত হওয়া উচিত:

     |
     |
     |
-----X-----
     |
     |
     |

ইনপুট

ইনপুট আকারে কমপক্ষে 12x12 অক্ষর হবে এবং এটি কেবলমাত্র ASCII অক্ষর নিয়ে গঠিত। এটি STDIN বা ফাংশন আর্গুমেন্টের মাধ্যমে নেওয়া যেতে পারে। ইনপুটটিতে সর্বদা একটি এক্স থাকে না In ইনপুটটি কোনও আকারে হবে এবং স্বতঃস্ফূর্ত পরিমাণে একটি নির্বিচার পরিমাণ থাকবে। ইনপুটের কোনো থাকবে না: +, -, #, এবং|

আউটপুট

আউটপুট STDOUT বা কোনও ফাংশনের রিটার্ন মানের মাধ্যমে হতে পারে। আউটপুটটি ক্রস-হেয়ার আঁকানো ইনপুট চিত্র হওয়া উচিত। ক্রসহায়ার আঁকার জন্য যদি পর্যাপ্ত জায়গা না থাকে তবে এটি আঁকার জন্য আপনাকে অবশ্যই লাইন / স্পেস যুক্ত করতে হবে। ওভারল্যাপিং স্পটগুলি একটি দ্বারা প্রতিস্থাপন করা উচিত +। যদি |বা -crosshairs একজন ওভারল্যাপ X, একটি পরিবর্তে +, একটি #প্রদর্শিত হওয়া উচিত।

একেবারে শেষে একক নিউলাইন বাদে হোয়াইটস্পেসের অনুসরণ করা অনুমোদিত নয় ।


এটি কোড-গল্ফ তাই বাইট জেতে সংক্ষিপ্ততম কোড!


1
১. যদি ইনপুটটি আর্গুমেন্ট হয় তবে এটি কি নতুন লাইনের দ্বারা পৃথক করা রেখাগুলির সাথে একটি স্ট্রিং হতে হবে, বা এটি স্ট্রিংগুলির একটি অ্যারে হতে পারে? ২. প্রয়োজনীয় না হলেও ডিজাইনের চারপাশে সাদা স্থান যুক্ত করা কি গ্রহণযোগ্য (যেমন সর্বদা উপরে / নীচে 3 সারি এবং বাম / ডানদিকে 5 টি কলাম যুক্ত করুন)? ৩. তৃতীয় পরীক্ষার ক্ষেত্রে ইনপুটটি অনুপস্থিত।
স্তর নদী সেন্ট

@ স্টেভেভারিল ১. এটি একটি নতুন লাইনের দ্বারা পৃথক স্ট্রিং হবে, স্ট্রিংগুলির একটি অ্যারে নয় 2. না, এটি অনুমোদিত নয়। আপনি এটি আপনার
কোডটিতে

3
কি +ওভারল্যাপিং জন্য -এবং |প্রয়োগ শুধুমাত্র যখন যারা অক্ষর crosshairs অংশ, অথবা এটি আক্ষরিক প্রভাবিত করে -এবং |পাশাপাশি ইনপুট পাওয়া যায় না?
DLosc

1
@DLosc এগুলি ইনপুটটিতে আসবে না। আমি প্রশ্নটি আপডেট করেছি
ডাউনগোট

1
#ইনপুটটিতে আক্ষরিক যদি কোনও ক্রোশায়ের মুখোমুখি হয় তবে কী হবে ? এটি কি ওভাররাইট করা হবে?
কোডোস জনসন

উত্তর:


3

কফিস্ক্রিপ্ট, 345 336   327 বাইট

Z=(s,c)->s in'X#'&&'#'||s in'-|+'&&'+'||c
X=(s)->l=u=0;o=(r.split ''for r in s.split '\n');c in'X#'&&(i-x&&(o[y][i]=Z o[y][i],'-';i<l&&l=i)for i in[x-5..x+5];i-y&&((o[i]?=[])[x]=Z o[i][x],'|';i<u&&u=i)for i in[y-3..y+3])for c,x in r for r,y in o;((o[y][x]||' 'for x in[l...o[y].length]).join ''for y in[u...o.length]).join '\n'

X কল করার ফাংশন।

ব্যাখ্যা:

# get new char. s - old char. c - '|' or '-'
Z=(s,c)->s in'X#'&&'#'||s in'-|+'&&'+'||c

X=(s)->

  # leftmost and upmost positions
  l=u=0

  # split input into 2D array
  o=(r.split ''for r in s.split '\n')

  # for every 'X' or '#'
  c in'X#'&&(

    # for positions to left and right
    i-x&&(

        # draw horisontal line
      o[y][i]=Z o[y][i],'-'

      # update leftmost position
      i<l&&l=i

    )for i in[x-5..x+5]

    # for positions above and below
    i-y&&(

      # add row if necessary and draw vertical line
      (o[i]?=[])[x]=Z o[i][x],'|'

      # update upmost position
      i<u&&u=i

    )for i in[y-3..y+3]

  )for c,x in r for r,y in o

  # concatenate into string, replacing empty chars with spaces
  ((o[y][x]||' 'for x in[l...o[y].length]).join ''for y in[u...o.length]).join '\n'

সম্পাদনযোগ্য:


1
345 খুব ভাল! আমি কাছাকাছি যাওয়ার চেষ্টা করছি, তবে আপনি এতদূর এগিয়ে চলেছেন! আমি জানি না আমার দৃষ্টিভঙ্গি পুরোপুরি পরিবর্তন না করে আমি আরও অনেক কিছু করতে পারি কিনা ... হুম :)
ডম হেস্টিংস

কেউ সিজেএম / পাইথ / গল্ফস্ক্রিপ্ট নিয়ে আসে এবং উপ -100 তৈরি করে। কিন্তু তোমাকে ধন্যবাদ.
21 ই

হাহ .. খুব সত্য ... আমি ভাবছিলাম পাইথ শেখার জন্য আমার এই উত্সাহ হওয়া উচিত কিনা ...
ডম হেস্টিংস

4

পাইথন 3, 577 519 515 490 475 467 454 বাইট

def c(g,d):
 R,L,V,e,b=range,list,len,'-|+','#';t,g=(lambda g,d:sum([[(i,j)for j in R(V(L(g.split('\n')[i])))if g.split('\n')[i][j]==d]for i in R(V(g.split('\n')))],[]))(g,d),[L(i)for i in g.split('\n')]
 for a,r in t:
  for j in R(a-3,a+4):
   if V(g)>j>-1:n=g[j][r];g[j][r]='+'if n in e else'#'if n in(d,b)else'|'
  for j in R(r-5,r+6):
   if V(g[a])>j>-1:n=g[a][j];g[a][j]='+'if n in e else'#'if n in(d,b)else'-'
 return'\n'.join(''.join(l)for l in g)

আমি কতটা গল্ফ করতে পারি তা নিশ্চিত নই।

ব্যবহার:

c(g, d)

gইনপুট গ্রিডটি কোথায় এবং dক্রসহায়ার চিহ্নিতকরণের চরিত্র।


3

পার্ল, 370 বাইট

sub r{$h=pop;($=[$n=pop].=$"x(1+"@_"-length$=[$n]))=~s!(.{@_})(.)!"$1".($2=~/[-|+]/?'+':$2=~/[X#]/?'#':$h)!e}map{chop;push@c,[$-,pos]while/X/g;$-++}@==<>;($x,$y)=@$_,3-$x>$a?$a=3-$x:0,$x+5-@=>$b?$b=$x+5-@=:0,6-$y>$c?$c=6-$y:0 for@c;@==($",@=)for 1..$a;$_=$"x$c.$_ for@=;map{($x,$y)=@$_;$_&&r$y+$c+$_-1,$x+$a,'-'for-5..5;$_&&r$y+$c-1,$x+$_+$a,'|'for-3..3}@c;print@=,$,=$/

ব্যবহার, উপরে সংরক্ষণ করুন xmarks.pl:

perl xmarks.pl <<< 'X'

আমি এটি কতটা ছোট করতে পারি তা নিশ্চিত নই, তবে আমি নিশ্চিত যে পরে এটিতে ফিরে আসব! যদি কেউ আগ্রহী হয় তবে আমি একটি ব্যাখ্যা পোস্ট করতে পারি।

Xপাশাপাশি এখন স্কোয়ারবিহীন ইনপুটগুলি পরিচালনা করে ।


2

পাইথন 2, 755 706 699 694 678 626 বাইট

একটি পেছনের নতুন লাইন সহ স্টিডিনে ইনপুট আশা করে। ইনপুটটির শেষটি ট্রিগার করে cmd+d

import sys;a=sys.stdin.readlines();b=max;c=len;d=enumerate;e=c(b(a,key=lambda x:c(x)))-1;a=[list(line.replace('\n','').ljust(e))for line in a];R=range;f=lambda:[[i for i,x in d(h)if x=='X']for h in a+[[]]*4];q=lambda y,z:'#'if z=='X'else'+'if z in'|-+'else y;g=f();h=j=k=l=0
for m,n in d(g):
 if n:h=b(3-m,h);l=b(abs(n[0]-5),l);j=b(m-c(a)+4,j);k=b(n[-1]-e+6,k)
o=[' ']*(l+k+e);a=[o for _ in R(h)]+[[' ']*l+p+[' ']*k for p in a]+[o for _ in R(j)];g=f()
for m,x in d(a):
 for i in[3,2,1,-1,-2,-3]:
    for r in g[m+i]:x[r]=q('|',x[r])
 for r in g[m]:
    for i in R(5,0,-1)+R(-1,-6,-1):x[r+i]=q('-',x[r+i])
for s in a:print''.join(s)

সম্পূর্ণ প্রোগ্রাম:

import sys

lines = sys.stdin.readlines()

# pad all lines with spaces on the right
maxLength = len(max(lines, key=lambda x:len(x))) - 1 # Subtract the newline
lines = [list(line.replace('\n', '').ljust(maxLength)) for line in lines]


def findX():
    global xs
    xs = [[i for i, ltr in enumerate(line) if ltr == 'X'] for line in lines+[[]]*4]

# add sufficient padding to the edges to prevent wrap
findX()
top,bottom,right,left=0,0,0,0
for ind, item in enumerate(xs):
    if item:
        top = max(3-ind, top)
        left = max(abs(item[0]-5), left)
        bottom = max(ind-len(lines)+4, bottom)
        right = max(item[-1]-maxLength+6, right)
clear = [' '] * (left+right+maxLength)
lines = [clear for _ in range(top)] + [[' ']*left + line + [' ']*right for line in lines] + [clear for _ in range(bottom)]



findX()
def chooseChar(expected, curr):
    return '#' if curr == 'X' else ('+' if curr in '|-+' else expected)

for ind, x in enumerate(lines):
    # try:
        for i in [3, 2, 1, -1, -2, -3]:
            for elem in xs[ind+i]:
                x[elem] = chooseChar('|', x[elem])
        for elem in xs[ind]:
            for i in [5, 4, 3, 2, 1, -1, -2, -3, -4, -5]:
                x[elem+i] = chooseChar('-', x[elem+i])
    # except:f



for line in lines: print(''.join(line))

আমি নিশ্চিত যে এটিতে আরও অনেক গল্ফিং করা যেতে পারে (যেহেতু আমি এখনও পাইথন শিখছি), তাই কোনও সাহায্যের প্রশংসা করা হয়েছে।

সম্পাদনাগুলি

  1. findXবোঝার জন্য ব্যবহার করে প্রায় 50 বাইট শেভ করেছেন Sha
  2. rangeআক্ষরিক অ্যারের পরিবর্তে ব্যবহার সম্পর্কে @ mbomb007 এর পরামর্শের জন্য 7 বাইট সংরক্ষণ করা হয়েছে
  3. findXল্যাম্বডায় পরিবর্তন করে 5 বাইট সরানো হয়েছে
  4. xs4 টি বাড়িয়ে এবং try-exceptব্লকটি সরিয়ে 15 বাইট সংরক্ষণ করা হয়েছে
  5. ফাঁকা জায়গাগুলির পরিবর্তে ট্যাব ব্যবহার করে আরও 2 টি শেভ করা হয়েছে
  6. h=i=j=k=l=0পরিবর্তে ব্যবহার করে 5 বাইট সরানো হয়েছেh,j,k,l=0,0,0,0
  7. @ Mbomb007 কে ধন্যবাদ, আমি এ থেকে আরও 40 টি বাইট সরিয়েছি chooseChar

1
আপনার R=rangeব্যাপ্তিগুলি সংক্ষিপ্ত করতে সংজ্ঞায়িত করা উচিত । তারপরে for i in[5,4,3,2,1,-1,-2,-3,-4,-5]:for i in R(5,0,-1)+R(-1,-6,-1):
আপনিও

ধন্যবাদ! আমি এটি করার বিষয়ে ভেবেছিলাম তবে মনে হয়েছিল এটি আরও দীর্ঘ হবে।
জে আতকিন

ছাঁটাই ভাল কাজ! আপনি টিপস থ্রেড দেখেছেন কিনা তা নিশ্চিত নই, তবে আপনি এখানে থেকে পেতে পারেন এমন কয়েকটি সংক্ষিপ্তসার থাকতে পারে: কোডগল্ফ.স্ট্যাকেক্সেক্সঞ্জ
ডম হেস্টিংস

আমি কিছুদিন আগে করেছি, তবে কিছু জিনিস ভুলে গিয়েছিলাম।
জে আতকিন

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