আর্কিটেক্টদের স্কাইলাইনটি কল্পনা করতে সহায়তা করুন


29

নগর পরিকল্পনা প্রকল্পের অংশ হিসাবে, আপনি কোনও প্রোগ্রাম বা ফাংশন তৈরির কাজটি অর্পণ করেছেন যা স্থপতিদের কাছ থেকে কিছু ইনপুট দেওয়া হয়েছে, যা নগর আকাশরেখা প্রদর্শন করবে। প্রকল্পটি কেবলমাত্র প্রারম্ভিক পর্যায়ে, সুতরাং একটি খুব রুক্ষ স্কেচই যথেষ্ট। সবচেয়ে সহজ পদ্ধতির অবশ্যই ASCII- আর্ট মধ্যে আকাশ লাইন আঁকা।

সমস্ত বিল্ডিং নদীর ধারে থাকবে, এইভাবে সেগুলি সব সারিবদ্ধ হয়েছে। স্থপতিরা প্রতিটি বিল্ডিংয়ের উচ্চতা ইনপুট হিসাবে দেবে এবং আপনার কোডটি আকাশরেখা প্রদর্শিত হবে display

আর্কিটেক্টদের কাছ থেকে ইনপুটটি হয় হয় পূর্ণসংখ্যা বা অর্ধ-পূর্ণসংখ্যার। সংখ্যাটি যদি পূর্ণসংখ্যার হয় তবে বিল্ডিংটির সমতল ছাদ থাকবে, যখন অর্ধ পূর্ণসংখ্যার ফলস্বরূপ একটি ছাদযুক্ত ছাদ হবে। একটি শূন্য ঠিক সমতল স্থল হবে। একটি বিল্ডিংয়ের দেয়াল 3 টি অক্ষর পৃথক, যখন একটি শূন্য একক অক্ষর প্রশস্ত হবে। সংলগ্ন ভবনগুলি দেয়াল ভাগ করে দেয়।

আউটপুট সম্পর্কিত বিশদ এবং স্পষ্টতার জন্য, দয়া করে নীচের উদাহরণগুলিতে একবার দেখুন:

N = 3
 ___
|   |
|   |
|___|

N = 3.5
  _      
 / \
|   |
|   |
|___|

N = 6
 ___
|   |
|   |
|   |
|   |
|   |
|___|

n = 0
_

উদাহরণ ইনপুট: 3 3.5 0 2

      _
 ___ / \  
|   |   |  ___
|   |   | |   |
|___|___|_|___|

উদাহরণ ইনপুট: 0 0 2.5 3 0 4 1

             ___
    _  ___  |   |
   / \|   | |   |
  |   |   | |   |___
__|___|___|_|___|___|

লুইসভিলে ,0 2 1 3.5 0 4 2 4 2 4 6 1 6 0 5 1

                                    ___     ___
                                   |   |   |   |  ___
           _    ___     ___     ___|   |   |   | |   |
          / \  |   |   |   |   |   |   |   |   | |   |
  ___    |   | |   |___|   |___|   |   |   |   | |   |
 |   |___|   | |   |   |   |   |   |   |___|   | |   |___
_|___|___|___|_|___|___|___|___|___|___|___|___|_|___|___|

ব্যবহৃত ASCII- অক্ষরগুলি হ'ল: নিউলাইন, স্পেস এবং /\_|(কোড পয়েন্ট 10, 32, 47, 92, 95, 124)।

নিয়মাবলী:

  • এটি এমন একটি প্রোগ্রাম তৈরি করা alচ্ছিক যা কেবলমাত্র সমস্ত সংখ্যাকে দুই দ্বারা গুণিত করে ইনপুট হিসাবে পূর্ণসংখ্যা গ্রহণ করে। সুতরাং, গ্রহণের পরিবর্তে 3 3.5 2, আপনার প্রোগ্রামটি নিতে পারে 6 7 4। যদি দ্বিতীয় ইনপুট ফর্ম্যাটটি চয়ন করা হয় তবে 6 এর ইনপুটটির ফলে 3 তলা বিল্ডিং হওয়া উচিত, 7 টি পিচ ছাদ ইত্যাদির সাথে 3 তলা বিল্ডিং হওয়া উচিত etc.
  • আউটপুটটি উপরে বর্ণিত ঠিক মতো হওয়া উচিত, তবে স্থানের স্থান এবং নিউলাইনগুলি ঠিক আছে।
  • ইনপুটটির সঠিক বিন্যাসটি alচ্ছিক। আপনার ভাষায় যা কিছু ভাল।
  • ফলাফলটি অবশ্যই পর্দায় প্রদর্শিত হবে, যাতে স্থপতিরা এটি দেখতে পারেন।
  • আপনি ধরে নিতে পারেন সেখানে কমপক্ষে একটি পূর্ণসংখ্যা দেওয়া হবে এবং কেবলমাত্র বৈধ ইনপুট দেওয়া হবে।

এটি কোডগল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি।


1
0.5 উচ্চতার একটি বিল্ডিং দেখতে কেমন হবে?
টম কার্পেন্টার

সত্যিই ভাবেন নি। সর্বাধিক সুস্পষ্ট পছন্দটি কেবল একটি ছাদযুক্ত ছাদ হবে, প্রায় হবিট বাড়ির মতো :-) তবে আপনি চয়ন করতে পারেন বা আপনি অনুমান করতে পারেন যে ইনপুটটি কখনই 0.5 হবে না ...
স্টিভি গ্রিফিন

1
দেওয়াল না থাকায় এই মুহূর্তে অদ্ভুত জিনিসগুলি ঘটেছিল (আমি ধরে নিয়েছিলাম 0.5 উঁচু উপস্থিত নেই), তাই আমাকে আমার উত্তরটি নিয়ে কিছুটা কাজ করতে হবে।
টম কার্পেন্টার

আমি আপনার কোডটি মাত্র উচ্চতা 0.5 দিয়ে চেষ্টা করেছি এবং আমি সম্মত হয়েছি, "অদ্ভুত" একটি খুব বর্ণনামূলক শব্দ = পিআই এর মাধ্যমে বিস্তারিতভাবে যায় নি, তাই আমি নিশ্চিত নই যে কী চলছে ... যাইহোক, আপনি উত্তর দিচ্ছেন পুরোপুরি বৈধ, আপনি অনুমান করতে পারেন কোন 0.5 ভবন ... নও
Stewie গ্রিফিন

উত্তর:


5

পাইথন 2, 199 193 188 185 বাইট

a=map(int,raw_input().split())
l=max(a)+1|1
while~l:print''.join((x%2*'/  _\\ '[x<l::2]*(x<=l<x+4)or'_ '[x|1!=l>1]*3)[x<1:x+2]+'| '[x<=l>=y]*(x+y>0)for x,y in zip([0]+a,a+[0]))[1:];l-=2

এটি একটি সম্পূর্ণ প্রোগ্রাম যা পূর্ণসংখ্যাকে ইনপুট হিসাবে গ্রহণ করে। উদাহরণ ইনপুট


চমৎকার! ভবিষ্যতের গল্ফগুলির জন্য আমাকে এই কৌশলগুলি কিছু চুরি করতে হবে ...
কুইন্টোপিয়া

5

ম্যাটল্যাব, 219 209 203 বাইট

i=input('');x=1;c=0;m(1:4*numel(i))='_';for a=i;b=fix(a);m(1:b,x)='|';s=95;if a~=b;m(b+2,x+2)=95;s='/ \';end;m(b+1,x+(1:3))=s;x=x+(a>0)*3+1;m(1:b,x)='|';x=x+(a<1&c>0);c=a;end;disp(flipud(m(:,1:x-(a<1))))

দুর্ভাগ্যক্রমে এটি অষ্টাভে কাজ করে না । পুরোপুরি নিশ্চিত নয় কেন, মনে হয় যে ডিসপ্লে / ফ্লিপড বিটটি ভেঙে যায় তার সাথে কিছু করার আছে।

এছাড়াও, বর্তমানে একটি 0.5 উচ্চতার বিল্ডিংটি দেখতে কেমন তার কোনও সংজ্ঞা নেই এবং সেগুলির কোনও উল্লেখ নেই, সুতরাং এই কোডটিতে আমি ধরে নিই যে তারা অনুমোদিত নয়।

নীচে কিছুটা আরও পঠনযোগ্য পদ্ধতিতে কোডটি দেওয়া হল:

i=input(''); %e.g. [0 0 2 1 3.5 0 4 2 4 2 4 6 1 6 0 5 1 0 0 1 0]
x=1;
c=0;
m(1:4*numel(i))='_';
for a=i;
    b=fix(a);
    m(1:b,x)='|';
    s=95;
    if a~=b;
        m(b+2,x+2)=95;
        s='/ \';
    end;
    m(b+1,x+(1:3))=s;
    x=x+(a>0)*3+1;
    m(1:b,x)='|';
    x=x+(a<1&c>0);
    c=a;
end;
disp(flipud(m(:,1:x-(a<1))))

প্রথমে আমরা অ্যারে হিসাবে একটি ইনপুট নিই এবং কিছু পরিবর্তনশীল সূচনা করি।

i=input(''); %e.g. [0 0 2 1 3.5 0 4 2 4 2 4 6 1 6 0 5 1]
x=1;
c=0;

যেহেতু শূন্য উচ্চতার বিল্ডিংগুলি একটি ব্যথা - এগুলি মূলত একটি প্রস্থের সাথে শেষ হয় যা তারা পরবর্তীগুলির উপর নির্ভর করে (যদিও মুদ্রিত যা পরিবর্তিত হয় না), আমরা সমস্ত বিল্ডিংয়ের জন্য পর্যাপ্ত স্থল অঙ্কন করে জিনিসগুলি সহজ করি। আমরা ধরে নিই যে প্রতিটি বিল্ডিং 4 টি অক্ষর প্রশস্ত হবে (কারণ সংলগ্ন বিল্ডিংগুলি একত্রিত হয়ে যায়) - শূন্য উচ্চতার কোনওটি নয়, তবে অতিরিক্তটি পরে ছাঁটা হবে।

m(1:4*numel(i))='_';

এখন আমরা প্রতিটি বিল্ডিং ঘুরে দেখি।

for a=i

প্রথমে আমরা উচ্চতার পূর্ণসংখ্যার অংশ পাই কারণ এটি নির্ধারণ করবে কতজন '|' আমাদের দরকার.

    b=fix(a);

এখন এই বিল্ডিংয়ের জন্য প্রাচীর আঁকুন - যদি দুটি সংলগ্ন ভবন থাকে তবে এই নতুনটির জন্য প্রাচীরটি শেষেরটি থেকে প্রাচীরের মতো একই কলামে থাকবে।

    m(1:b,x)='|';

এটি অর্ধেক উচ্চতার বিল্ডিং কিনা তা দেখুন। যদি এটি হয় তবে ছাদটি আলাদা হবে। অর্ধেক উচ্চতার জন্য, ছাদটি / \পুরো উচ্চতার মতো হবে যেখানে এটি হবে ___(মতলব স্পষ্টতই এটি একটি একক আন্ডারস্কোর থেকে প্রতিলিপি তৈরি করবে, তাই সেখানে কয়েকটা বাইট সংরক্ষণ করুন)। অর্ধ উচ্চতা ভবনের জন্য এক সারিতে আরও একটি বাড়ির ছাদ রয়েছে, যাতে এটি যুক্ত করা হয়।

    s=95;
    if a~=b;
        m(b+2,x+2)=95;
        s='/ \';
    end;

ছাদে আঁকুন

    m(b+1,x+(1:3))=s;

এখন পরবর্তী বিল্ডিংয়ের শুরুতে যান এবং ভাগ করা প্রাচীরটি আঁকুন (যদি দেয়ালটি এই মুহুর্তে খুব ছোট হয়, তবে পরবর্তী বিল্ডিংটি আঁকলে এটি আরও বড় করা হবে)। নোট করুন যে শূন্য উচ্চতার বিল্ডিংগুলি 1 প্রশস্ত, সাধারণ বিল্ডিং 4 প্রশস্ত, সুতরাং আমরা অন্যথায় কী বলব তা সরল করে বলি (a> 0) দশমিক সংখ্যা হিসাবে বুলিয়ান নয় not

    x=x+(a>0)*3+1;
    m(1:b,x)='|';

শূন্য উচ্চতার বিল্ডিংয়ের সাথে কাজ করার জন্য সামান্য হ্যাকারি আসে। মূলত এটি যা বলে তা যদি এই বিল্ডিংটি শূন্য উচ্চতা হয়, এবং এর আগে একটি না ছিল, এর অর্থ পরবর্তী বিল্ডিংয়ের স্থানটি 1 দ্বারা বাড়ানো দরকার কারণ অন্য দুটি ভবনের মধ্যে শূন্য উচ্চতার একটি বিল্ডিং কার্যকরভাবে দ্বিগুণ প্রশস্ত হয় - এটি অতিরিক্ত প্রাচীরের জন্য অ্যাকাউন্ট যা সাধারণত একটি সংলগ্ন বিল্ডিংয়ের সাথে ভাগ করা হয়। পরের বারে এই চেকটি করার জন্য আমরা এই বিল্ডিংয়ের উচ্চতার উপর নজর রাখি।

    x=x+(a<1&c>0);
    c=a;
end;

একবার হয়ে গেলে, বিল্ডিং ম্যাট্রিক্সটিকে সঠিক উপায়ে ফ্লিপ করুন এবং এটি প্রদর্শন করুন। নোট করুন যে আমরা এখানে অতিরিক্ত কোনও স্থলও ছাঁটাই করছি।

disp(flipud(m(:,1:x-(a<1))))

সুতরাং, যখন আমরা এই স্ক্রিপ্টটি রান করি তখন আমাদের কাছে আমাদের ইনপুট জিজ্ঞাসা করা হয়, উদাহরণস্বরূপ:

[0 0 2 1 3.5 0 4 2 4 2 4 6 1 6 0 5 1 0 0 1 0]

এরপরে এটি বিল্ডিং উত্পন্ন করে ফলাফলটি প্রদর্শন করে। উপরের ইনপুটটির জন্য, নিম্নলিখিতটি উত্পন্ন হয়:

                                     ___     ___                   
                                    |   |   |   |  ___             
            _    ___     ___     ___|   |   |   | |   |            
           / \  |   |   |   |   |   |   |   |   | |   |            
   ___    |   | |   |___|   |___|   |   |   |   | |   |            
  |   |___|   | |   |   |   |   |   |   |___|   | |   |___    ___  
__|___|___|___|_|___|___|___|___|___|___|___|___|_|___|___|__|___|_

অনেক ভালো করেছ!
স্টিভি গ্রিফিন

4

কোটলিন, 447 442 বাইট

val a={s:String->val f=s.split(" ").map{it.toFloat()}.toFloatArray();val m=(f.max()!!+1).toInt();for(d in m downTo 0){var l=0f;for(c in f){val h=c.toInt();print(if(h==d&&d!=0)if(h<l-0.5)"|" else{" "}+if(c>h)"/ \\" else "___" else if(h<d)if(d<l-0.5)"|" else{" "}+if(h==0)" " else if((c+0.5).toInt()==d)" _ " else "   " else{if(h==0)if(l<1)"  " else "| " else "|   "}.replace(' ',if(d==0)'_' else ' '));l=c;};if(d<l-0.5)print("|");println();}}

অবরুদ্ধ সংস্করণ:

val ungolfed: (String) -> Unit = {
    s ->

    val floats = s.split(" ").map { it.toFloat() }.toFloatArray()
    val maxH = (floats.max()!! + 1).toInt()

    for (drawHeight in maxH downTo 0) {
        var lastBuildingH = 0f
        for (f in floats) {
            val buildingH = f.toInt()
            if (drawHeight == 0) {
                // Baseline
                if (buildingH == 0)
                    if (lastBuildingH.toInt() == 0) print("__")
                    else print("|_")
                else print("|___")
            } else if (buildingH == drawHeight) {
                // Ceiling
                if (buildingH < lastBuildingH - 0.5) print("|")
                else print(" ")
                if (f > buildingH) print("/ \\")
                else print("___")
            } else if (buildingH < drawHeight) {
                // Above building
                if (drawHeight < lastBuildingH - 0.5) print("|")
                else print(" ")
                if (buildingH == 0) print(" ")
                else {
                    if ((f + 0.5).toInt() == drawHeight) print(" _ ")
                    else print("   ")
                }
            } else {
                if (buildingH == 0) print("| ")
                else print("|   ")
            }
            lastBuildingH = f;
        }
        if (drawHeight < lastBuildingH - 0.5) print("|")
        println()
    }
}

3

পাইথন 2, 357 306 299 294 287 281 276 বাইট

def s(l):
 d=len(l)+1;l=[0]+l+[0];h=(max(l)+3)/2;o=''
 for i in range(d*h):
  a=l[i%d+1];c=l[i%d];b=2*(h-1-i/d);o+="|"if(a>b+1)+(c>b+1)else" "*(a+c>0);o+=" _/__  _\\"[a-b+1::3]if b*(1>=abs(a-b))else" "*(1+2*(a>0))
  if b==0:o=o.replace(" ","_")
  if i%d==d-1:print o[:-1];o=''

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

সম্পাদনা: এক্সসট এর চেয়ে ভাল

ব্যাখ্যা:

d=len(l)+1;l=[0]+l+[0];m=max(l);h=m/2+m%2+1;o=''

dঅ্যারের দৈর্ঘ্যের তুলনায় 1 আরও বেশি, কারণ আমরা তালিকার প্রতিটি প্রান্তে শূন্যকে দ্বিতীয় উপাদান থেকে শুরু করে শূন্য পর্যন্ত যোগ করতে যাচ্ছি আমরা শেষে। hঅঙ্কন উচ্চতা হয়। (এই গণনায় আমাদের 2 দ্বারা বিভাজন করতে হবে কারণ আমরা দ্বিগুণ প্রতিনিধিত্ব ব্যবহার করছি, যা আমরা পুরো জায়গা জুড়ে ints এ ভাসমান কাস্ট করা এড়াতে বিশেষভাবে ব্যবহার করি so এত অদ্ভুত উচ্চতা ভাগ করার আগেও আমরা 1 যুক্ত করি - বিন্দু বিল্ডিং-- নিয়মিত ধরণের চেয়ে একটু বেশি ছাড়পত্র পান)) oআউটপুট স্ট্রিং।

 for i in range(d*h):

লুপের জন্য একটি একক মধ্যে লুপের জন্য একটি ডাবল ভাঙ্গার জন্য একটি স্ট্যান্ডার্ড ট্রিক। একবার আমরা করি:

  a=l[i%d+1];c=l[i%d];b=2*(h-1-i/d)

আমরা এখন যেমনটি সম্পন্ন করেছি:

for b in range(2*h-2,-2,-2):
 for j in range(d):
  a=l[j+1];c=l[j]

তবে এমন এক উপায়ে যা আমাদের দশটি বাইট সঞ্চয় করেছে (নীচের লাইনে সাদা স্থান সহ)।

  o+="|"if(a>b+1)+(c>b+1)else" "*(a+c>0)

এখানে কমপক্ষে একটি বিল্ডিং সীমানা যতক্ষণ না বর্তমান বিল্ডিং বা পূর্ববর্তী বিল্ডিংয়ের উচ্চতা বর্তমান লাইনের চেয়ে লম্বা যে কোনও সময় কোনও দেয়াল আটকে দিন। এটি নিম্নলিখিত শর্তাধীন সমতুল্য:

  o+=("|" if a>b+1 or c>b+1 else " ") if a or c else ""

খ যেখানে বর্তমান স্ক্যানের উচ্চতা, একটি বর্তমান বিল্ডিং উচ্চতা এবং সিটি পূর্ববর্তী বিল্ডিং উচ্চতা। শর্তসাপেক্ষের পরবর্তী অংশটি মাটির জায়গাগুলির মধ্যে দেয়াল স্থাপন করা বাধা দেয়।

  o+=" _/__  _\\"[a-b+1::3]if b*(1>=abs(a-b))else" "*(1+2*(a>0))

এটি সেই অংশ যা সঠিক ছাদ আঁকে, বর্তমান স্ক্যানের উচ্চতার সাথে বিল্ডিংয়ের উচ্চতা তুলনা করে ছাদের অংশগুলি নির্বাচন করে। যদি কোনও ছাদ এখানে না যায়, তবে এটি উপযুক্ত জায়গাগুলির মুদ্রণ করে (3 এটি যখন প্রকৃত বিল্ডিং, যেমন, এ> 0, অন্যথায় 1)। মনে রাখবেন যে আমরা যখন স্থল স্তরে থাকি, এটি কখনই ছাদ আঁকার চেষ্টা করে না, যার অর্থ 0.5 মাপের বিল্ডিংগুলি বিন্দু ছাদ পায় না। আচ্ছা ভালো.

  if b==0:o=o.replace(" ","_")

যখন আমরা স্থল স্তরে থাকি, আমরা ফাঁকা জায়গাগুলির পরিবর্তে আন্ডারস্কোর চাই। আমরা তাদের এখানে একবারে প্রতিস্থাপন করব।

  if i%d==d-1:print o[:-1];o=''

আমরা পরের লাইনে প্রক্রিয়া শুরু করার ঠিক আগে, বর্তমান একটি মুদ্রণ করুন এবং আউটপুট লাইন সাফ করুন। আমরা শেষ চরিত্রটি কেটে ফেলি কারণ এটি ফাংশনের শুরুতে একটি শূন্য যুক্ত করে আমরা যুক্ত স্থল জায়গার সাথে সম্পর্কিত "_"। (আমরা এই শূন্যটিকে সংযুক্ত করেছি সুতরাং ডান প্রাচীর সন্নিবেশ করার জন্য আমাদের কোনও বিশেষ কেস যুক্ত করতে হবে না, যদি এটি বিদ্যমান থাকে, যা আমরা 0 যোগ করে "_" কেটে দেওয়ার চেয়ে আরও বেশি কোড যুক্ত করতে পারি।)


কার-golfing। কি দারুন. (এছাড়াও +1)
হাততালির শব্দ

2

পাইথন ঘ

725 বাইট

608 বাইট

গল্ফ কোড:

import sys,math;
m,l,w,s,bh,ls,ins,r,a="|   |","___","|"," ",0,[],[],range,sys.argv[1:]
def ru(n):return math.ceil(n)
def bl(h,n):
    if(n>ru(h)):return(s*5,s)[h==0]
    if(h==0):return"_"
    if(n==0):return w+l+w
    if(n<h-1):return m
    return("  _  "," / \ ")[n==ru(h)-1]if(h%1)else(s+l+s,m)[n==h-1]
for arg in a:
    f=ru(float(arg))
    if(bh<f):bh=f
for i in r(bh,-1,-1):
    ln=""
    for bld in a:ln+=bl(float(bld),i)
    ls.append(ln)
for i in r(len(ls[-1])-1):
    if(ls[-1][i]==ls[-1][i+1]==w):ins.append(i-len(ins))
for ln in ls:
    for i in ins:ln=(ln[:i]+ln[i+1:],ln[:i+1]+ln[i+2:])[ln[i]==w]
    print(ln)

এখানে অবারিত কোড রয়েছে। কিছু মন্তব্য আছে তবে মূল ধারণাটি হ'ল দ্বিগুণ প্রাচীর সহ ভবনগুলি তৈরি করা, সুতরাং নীচের অংশটি দেখতে:

_|___||___|_|___||___|

তারপরে সেই দ্বিগুণ প্রাচীরের সূচি পেতে এবং সেই কলামগুলি সরাতে যাতে আমরা পাই:

_|___|___|_|___|___|

কোড:

import sys
import numbers
import math

mid="|   |";
l="___";
w="|";
s=" ";

def printList(lst):
    for it in lst:
        print(it);

# h = height of building
# l = line numeber starting at 0
def buildingline(h,n):
    #if (h==0):
    #   return " " if(n>math.ceil(h)) else "   ";
    if(n>math.ceil(h)):
        return s if(h == 0) else s*5;
    if(h==0): return "_";
    if(n==0): return w+l+w;
    if(n<h-1): return mid;
    if(h.is_integer()):
        return mid if(n==h-1) else  s+l+s;
    else:
        return " / \ " if (n==math.ceil(h)-1) else "  _  "; 
# max height
bh=0;

for arg in sys.argv[1:]:
    f = math.ceil(float(arg));
    if(bh<f):bh=f;

# lines for printing
lines = []

for i in range(bh,-1,-1):
    line="";
    for bld in sys.argv[1:]:
        bld=float(bld);
        line += buildingline(bld,i);
        #lh = bld;
    lines.append(line);

#for line in lines:
#   print(line);
#printList(lines);


# column merging
#find indexes for merging (if there are | | next to each other)
indexes = [];
for i in range(len(lines[-1])-1):
    if (lines[-1][i]=='|' and lines[-1][i+1] == '|'):
        indexes.append(i-len(indexes));

#printList(indexes);

#index counter
for line in lines:
    newLine = line;
    for i in indexes:
        if newLine[i] == '|' :
            newLine=newLine[:i+1] + newLine[i+2:];
        else : newLine = newLine[:i] + newLine[i+1:];
    print(newLine);

কিছু গল্ফ করার সময়!


আপনি এখানে একবার দেখতে চান । আমার মনে হয় এখানে প্রচুর গল্ফিংয়ের সম্ভাবনা রয়েছে =) আমি কেবল বেসিক পাইথনটি জানি, তাই আমি যে নির্দিষ্ট ভয় পেয়েছি তা নির্দিষ্ট করতে পারি না ...
স্টিভি গ্রিফিন

আমার কাছে দেখে মনে হচ্ছে আপনি স্থানগুলি মুছে ফেলেছেন এবং ভেরিয়েবলের নামগুলি সংক্ষিপ্ত করে রেখেছেন, তবে বাকিগুলি অপরিবর্তিত রেখেছেন। আপনার যেমন কয়েকটি লুপ থেকে মুক্তি পাওয়া, কম তুলনা ইত্যাদি ব্যবহার করার জন্য চতুর উপায়গুলি সন্ধান করার চেষ্টা করা উচিত অবশ্যই ru(n):return math.ceil(n)গল্ফিং হিসাবে গণনাগুলির মতো জিনিস , তবে এখনও ... দয়া করে এটি নেতিবাচক উপায়ে গ্রহণ করবেন না, আমি একটি নই আমি নিজেই ভাল গল্ফার, এবং নিশ্চিত নরক হিসাবে কোনও ভাল প্রোগ্রামার নয়। আমি আপনাকে কিছুটা উন্নত করার চেষ্টা করার পরামর্শ দিচ্ছি ... আপনি একবার যদি এটি সংক্ষিপ্ত করে পরিচালনা করেন বুঝতে পারছেন এটি আসলে মজাদার। কিছু দিন আগে আমি অনেকগুলি থেকে 120 থেকে 55 তে গিয়েছিলাম। সুতরাং আপনি এটি নতুন হয়ে থাকলেও এটি সম্ভব।
স্টিভি গ্রিফিন

@ স্টেভিগ্রিফিন এই লিঙ্কটির জন্য আপনাকে ধন্যবাদ! আমি কোড-গল্ফিংয়ের জন্য সত্যিই নবাগত তাই এটি আমার জন্য কোড-গল্ফিংয়ের চেয়ে প্রকৃত কাজটি সম্পন্ন করার বিষয়ে আরও বেশি। তবে বিভিন্ন ভাষার সম্ভাবনাগুলি আবিষ্কার করা আশ্চর্যজনক
Cajova_Houba

এফটিআর: আরও কিছু জটিল চ্যালেঞ্জগুলির জন্য যেমন এই একটি, আমি নিজেই এটি শেষ করে খুশি হব =)
স্টিভি গ্রিফিন

2

পিএইচপি, 307 297 293 বাইট

<?$r=str_pad("",$p=((max($argv)+1)>>1)*$w=4*$argc,str_pad("\n",$w," ",0));for(;++$i<$argc&&$r[$p++]=_;$m=$n)if($n=$argv[$i]){$q=$p+=!$m;eval($x='$r[$q-1]=$r[$q]=$r[$q+1]=_;');for($h=$n>>1;$h--;$q-=$w)$r[$q-2]=$r[$q+2]="|";$n&1?($r[$q-1]="/")&($r[$q-$w]=_)&$r[$q+1]="\\":eval($x);$p+=3;}echo$r;

কমান্ড লাইন থেকে * 2 টি আর্গুমেন্ট নেয়। ফাইল এ সংরক্ষণ করুন, সাথে চালান php <filename> <parameters>

ভাঙ্গন

// initialize result    
$r=str_pad("",              // nested str_pad is 3 bytes shorter than a loop
    $p=                     // cursor=(max height-1)*(max width)=(start of last line)
    ((max($argv)+1)>>1)     // max height-1
    *
    $w=4*$argc              // we need at least 4*($argc-1)-1, +1 for newline
    ,
    // one line
    str_pad("\n",$w," ",0)  // (`str_pad("",$w-1)."\n"` is one byte shorter,
);                          // but requires `$w+1`)

// draw skyline
for(;
    ++$i<$argc              // loop through arguments
    &&$r[$p++]=_                // 0. draw empty ground and go one forward
    ;
    $m=$n                       // 7. remember value
)
    if($n=$argv[$i])            // if there is a house
    {
        $q=                         // 2. copy $p to $q
        $p+=!$m;                    // 1. go one forward if there was no house before this
        // offset all further positions by -2 (overwrite empty ground, share walls)
        eval($x=                    // 3. draw floor
        '$r[$q-1]=$r[$q]=$r[$q+1]=_;'
        );
        for($h=$n>>1;$h--;$q-=$w)   // 4. draw walls
            $r[$q-2]=$r[$q+2]="|";
        $n&1                        // 5. draw roof
            ?($r[$q-1]="/")&($r[$q-$w]=_)&$r[$q+1]="\\"
            :eval($x)               // (eval saved 7 bytes)
        ;                           // (ternary saved 6 bytes over `if`)
        $p+=3;                      // 6. go three forward (5-2)
    }

// output
echo$r;

1

সি ++, অবারিত

(বা হতে পারে অবারিত)

ধরে নিই যে এখানে 100 টিরও কম উপাদান রয়েছে এবং প্রতিটি উপাদান 100 এরও কম sbuildings

#include <iostream>
using namespace std;
int main()
{
float a[100];
int i,j,s;
cin>>s;
for(i=0;i<s;++i)
 cin>>a[i];
for(i=100;i>=1;--i)
{
for(j=0;j<s;++j)
{
if((a[j]>=i)||(a[j-1]>=i))
 cout<<"|";
else
 cout<<" ";
if(i==1)
 cout<<"___";
else if(a[j]+1==i)
 cout<<"___";
else if(a[j]+1.5==i)
 cout<<" _ ";
else if(a[j]+0.5==i)
 cout<<"/ \\";
else cout<<"   ";
}
if(a[s-1]>=i)
 cout<<"|";
cout<<endl;
}
}

আউটপুটটিতে কয়েকটি ত্রুটি রয়েছে ... স্থলটি 3 টি অক্ষর প্রশস্ত (এটি কেবল 1 টি হওয়া উচিত) এবং শেষ প্রাচীরটি অনুপস্থিত।
স্টিও গ্রিফিন

@ স্টেভিগ্রিফিন আমি পোস্ট করার পরে আমি ত্রুটিগুলি বাছাই করছি। 1. আমি শেষ প্রাচীর যুক্ত করেছি। 2. স্থলটি 3 টি অক্ষর প্রস্থ হতে হবে, কারণ স্লেন্টেড ছাদ / _ 3 3 অক্ষর প্রশস্ত।
ভূত_স_ই_কোড

1
* ভবনগুলির মধ্যে মাটি , ভিতরে নয়।
স্টিভি গ্রিফিন

আপনি যদি এখনও এটিতে কাজ করে থাকেন তবে আপনি অপেক্ষা করতে চাইতে পারেন, তবে আপনি নতুন লাইনগুলি এবং ইনডেন্টেশনটি সরিয়ে ফেললে আপনি অনেকগুলি বাইট থেকে মুক্তি পেতে পারেন । আমি মাটিতে সমস্যা সংশোধন করেন নি, তবে এই কাজ করে পরিবর্তে .346 বাইট 401.
Stewie গ্রিফিন

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