ভবনের ছায়া আঁকুন


23

ইনপুট:

1
      X                                
      X                                
      X                                
      X      XX    XXXXXX     X X X    
      X      XX    XXXXXX     X X X    
XXX   X      XX    XXXXXX     X X X    
XXX   X      XX    XXXXXX     X X X    

আউটপুট:

      X.                               
      X..                              
      X...                             
      X....  XX.   XXXXXX.    X.X.X.   
      X..... XX..  XXXXXX..   X.X.X..  
XXX.  X......XX... XXXXXX...  X.X.X... 
XXX.. X......XX....XXXXXX.... X.X.X....

ইনপুট:

2
         XX
         XX
         XX
         XX
         XX
     XX  XX
     XX  XX
     XX  XX
     XX  XX

আউটপুট:

        .XX
       ..XX
      ...XX
     ....XX
    .....XX
   ..XX..XX
  ...XX..XX
 ....XX..XX
.....XX..XX

স্পেসিফিকেশন:

  • আপনাকে অবশ্যই ইনপুট হিসাবে নিতে হবে
    1. উপরের বাম বা উপরে ডান দিক থেকে আলো আসছে কিনা তা নির্দেশ করে একটি পতাকা। এটি উভয় পতাকা পূর্ণসংখ্যার যতক্ষণ না আপনার পক্ষে উপযুক্ত 1বা এটি 2, -1বা 1, 0বা 65536, বা যা কিছু সুবিধাজনক হতে পারে ।
    2. উভয় Xবা একই বর্ণের সমান দৈর্ঘ্যের সমন্বয়ে সারিগুলি (অর্থাত্ প্যাডযুক্ত )
      • সমস্ত Xগুলি হয় শেষ সারিতে থাকবে বা Xতাদের নীচে থাকবে (যার অর্থ কোনও ভাসমান বিল্ডিং নেই)
  • ছায়া যুক্ত যুক্ত আপনাকে অবশ্যই সারিগুলি (বিল্ডিংগুলি) আউটপুট করতে হবে। এটি নিম্নলিখিত পদ্ধতি দ্বারা সম্পন্ন করা হয়:
    • আলো যদি উপরের বাম দিক থেকে আসতে থাকে .তবে বিল্ডিংয়ের উচ্চতা হিসাবে একই উচ্চতা এবং প্রস্থের সাথে একটি ডান ত্রিভুজ আঁকুন, এর একটি ডান দিকের প্রান্ত থেকে একটি স্থান থেকে শুরু করে ডানদিকে যেতে হবে।
    • অন্যথায়, যদি এটি উপরের ডানদিকে থেকে থাকে তবে একই জিনিসটি করুন তবে তার বাম প্রান্তটি এবং বাম দিকে নির্দেশ করে একটি স্থান থেকে শুরু করুন।
    • মনে রাখবেন, এসগুলিকে Xএসগুলিতে পরিবর্তন করে পরিবর্তন করবেন না .; তাদের যেমন আছে তেমন ছেড়ে দিন।
    • আপনার ছায়ার জন্য সর্বদা "ঘর" থাকবে, অর্থাত্ যদি কোনও 3-স্পেস লম্বা বিল্ডিং এর শেষে থাকে তবে এর পরে কমপক্ষে 3 স্পেস প্যাডিং থাকবে।
  • এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে!

1
আমি কি ব্যবহার করতে {}এবং {-1*}পতাকা মান হিসাবে করতে পারি ?
জন ডিভোরাক

@ জন হ্যাঁ, হ্যাঁ আপনি পারেন। আপনি এমনকি ব্যবহার করতে পারে potatoএবং while(1){}। প্রশ্নে উদ্ধৃত হিসাবে, "যা কিছু সুবিধাজনক।"
Doorknob

2
:( আমি এটি (। নেট-স্বাদযুক্ত) রেজেক্সে সমাধান করতে যাচ্ছিলাম তবে আমি মনে করি যে আমি একটি বাগ পেয়েছি Regex.Replaceযার মধ্যে আমি প্রায় কাজ করতে পারি না ... আমার এখন কী দুটি সমস্যা আছে?
মার্টিন এেন্ডার

3
@ ডুরকনব কেউ ইনপুটটিতে তাদের সম্পূর্ণ কোড রাখার জন্য এই বিধিটিকে অপব্যবহার করছে।
0uʎs

2
@ সায়েন্টেটিকা এটি "স্ট্যান্ডার্ড
ডুরকনব

উত্তর:


6

গল্ফস্ক্রিপ্ট, 67 টি অক্ষর

n%(~:S\zip\%.0=\{.' '3$);+{{\(@[\].~<=}%+}:M~'X'/'.'*@@M}%S%zip\;n*

ডান / বাম দিকে ছায়ার জন্য 1 / -1। অনলাইনে উদাহরণ চালান :

      X.                               
      X..                              
      X...                             
      X....  XX.   XXXXXX.    X.X.X.   
      X..... XX..  XXXXXX..   X.X.X..  
XXX.  X......XX... XXXXXX...  X.X.X... 
XXX.. X......XX....XXXXXX.... X.X.X....

11

পার্ল - 85

BEGIN{$d=-<>}$d?s/X /X./g:s/ X/.X/g;s/ /substr($p,$+[0]+$d,1)eq'.'?'.':$&/ge;$p=$_;

সম্পাদনা: -pপতাকাটি চালানোর প্রয়োজনটি আমি পুরোপুরি ভুলে গিয়েছিলাম । চর গণনায় 2 টি যোগ করা হয়েছে।
প্রথম লাইনে নির্দিষ্ট করা পতাকাটি 0ছায়াগুলির বাম দিকে যেতে এবং 2ছায়াগুলির ডানদিকে যাওয়ার জন্য।


4

পাইথন 3 - 233

ঠিক আছে, এটি প্রত্যাশার চেয়ে দীর্ঘ হয়েছে ...

ডানদিকে যাচ্ছেন ছায়ার জন্য 1, বামদিকে ছায়ার জন্য 1

d,x=int(input()),[1]
while x[-1]:x+=[input()]
x,o,l,h=list(zip(*x[1:-1]))[::d],[],0,len(x)-1
for i in x:o+=[''.join(i[:len(i)-l])+''.join(i[len(i)-l:]).replace(' ','.')];l=max(l-1,i.count('X'))
for i in zip(*o[::d]):print(''.join(i))

সম্পাদনা: নিয়মে উভয় পাশের প্যাডিং দেখেনি। Ehehe। ^^ '


3

জাভাস্ক্রিপ্ট - 14

eval(prompt())

প্রথম লাইনের পতাকাটি for(p='';l=prompt();)console.log(p=l.replace(/ /g,function(a,b){return p[b+1]=='.'||p[b]=='.'||l[b+1]=='X'?'.':a}));বাম দিকে for(p='';l=prompt();)console.log(p=l.replace(/ /g,function(a,b){return p[b-1]=='.'||p[b]=='.'||l[b-1]=='X'?'.':a}));ছায়ার জন্য বা ডানদিকে ছায়ার জন্য।

এটি পতাকাটির জন্য "আপনার পক্ষে যা কিছু উপযুক্ত" নিয়মটি আপত্তিজনক হতে পারে : পি


সম্পাদনা করুন: অপব্যবহার ছাড়াই (127):

c=prompt();for(p='';l=prompt();)console.log(p=l.replace(/ /g,function(a,b){return p[b+c]=='.'||p[b]=='.'||l[b+c]=='X'?'.':a}));

এর জন্য পতাকাটি হয় 1বা-1


ভাল, আমি নিয়ম স্থির। :
ডুরকনব্ব

আও, এটি কোনও মজাদার নয় :-( এটি "উভয় পতাকা পূর্ণসংখ্যা হয়" আপনার মন্তব্যের সাথে বিরোধ করে "আপনি এমনকি ব্যবহার করতে পারেন potato...", যদি potatoকোনও পূর্ণসংখ্য না হয়: :
পি

c=+prompt()অন্যথায় b+cএকটি স্ট্রিং হিসাবে সংমিশ্রণ হবে।
nderscore

কয়েকটি জিনিস অপ্টিমাইজ করে এটিকে 119 এ নামিয়েছে: for(c=p=+(P=prompt)(d='.');l=P();)console.log(p=l.replace(/ /g,function(a,b){return p[b]==d|p[b+=c]==d|l[b]=='X'?d:a})) (ডেমো)
nderscore

cপরিবর্তে বিয়োগ করে একটি সংখ্যায় রূপান্তর করতে অন্য বাইট সংরক্ষণ করুন । b-cবা b-=cআমার কোড উপরে। (ডেমো)
nderscore

1

পাইথন 2.7 - 229

p,s,M,J,L=input(),__import__('sys').stdin.readlines(),map,''.join,len
n,s,r,f=L(s),M(str.strip,M(J,zip(*s[::-1]))),0,[]
for l in s[::p]:f,r=f+[(l+'.'*(r-L(l))+' '*n)[:n]],max(r-1,L(l))
print'\n'.join(M(J,zip(*f[::p])[::-1]))

অবহেলিত সংস্করণ

def shadow(st, pos):
    _len = len(st)
    st = map(str.strip, map(''.join,zip(*st[::-1])))
    prev = 0
    res = []
    for line in st[::[1,-1][pos-1]]:
        res +=[(line+'.'*(prev-len(line)) + ' '*_len)[:_len]]
        prev = max(prev - 1, len(line))
    return '\n'.join(map(''.join,zip(*res[::[1,-1][pos-1]])[::-1]))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.