একটি এএসসিআইআই সিটি পুনর্নির্মাণ


17
     - + +
+ - + | | + - + + - +
| | | | | | | |
+ - + + - + + - + + - +

এএসসিআইআইভিলের লোকেরা তাদের শহরটি পুনর্নির্মাণ করছে এবং নতুন ব্লুপ্রিন্টগুলি আঁকছে। আপনার কাজ হ'ল তারা কতগুলি বিল্ডিং চান তার উপর ভিত্তি করে তাদের নতুন শহর অঙ্কন করা।

ইনপুটটি হবে কতগুলি বিল্ডিং রয়েছে। প্রতিটি বিল্ডিং ইনপুটটির অর্ধেক দৈর্ঘ্য (বিজোড় হলে বৃত্তাকার), ভবনের উপরে এবং নীচে অন্তর্ভুক্ত নয়।

এর একটি প্রাথমিক উদাহরণ আঁকুন 4

+ - + + - + + - + + - +
| | | | | | | |
| | | | | | | |
+ - + + - + + - + + - +

আপনি এখানে দেখতে পাচ্ছেন, |প্রতিটি বিল্ডিংয়ে দুটি করে আছে কারণ ইনপুট চারটি ছিল। তবে একটা ধরা আছে! (যার অর্থ উপরের উদাহরণটি ভুল, এবং এই পোস্টের শীর্ষে উদাহরণটি 4 এর আসল আউটপুট)

প্রতিটি বিল্ডিংয়ের জন্য যা প্রাথমিক সংখ্যা নয়, এর উচ্চতা এক এক করে নেমে যায়। যদি সংখ্যাটি 3 , 5 বা 10 দ্বারা বিভাজ্য হয় তবে এটি আরও একটিতে নেমে যায়। যদি এটি দুটি বা তার বেশি সংখ্যার দ্বারা বিভাজ্য হয়, তবে কাটা পরিমাণটি যোগ করে 10 ( 10 এবং 5 দ্বারা বিভাজ্য, এবং এটি একটি প্রধান নয়, সুতরাং এটি 3 দ্বারা কেটে যায় )।

এর একটি ইনপুট সহ একটি উদাহরণ তাকান 5

     - + +
+ - + | | + - + + - + + - +
| | | | | | | | | |
| | | | | | | | | |
+ - + + - + + - + + - + + - +

এখানে একটি উদাহরণ 7

     + - + + - +
+ - + | | + - + + - + + - + | |
| | | | | | | | | | + - + | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
+ - + + - + + - + + - + + + + + + + + +

এবং একটি উদাহরণ 10

     + - + + - +
+ - + | | + - + + - + + - + | | - + +
| | | | | | | | | | + - + | | | | - + +
| | | | | | | | | | | | | | | | | | - + +
| | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | |
+ - + + + + + + + + + + + + + + + + + + + + + + +

এবং ফিরে 6

     - + +
+ - + | | + - + + - + + - +
| | | | | | | | | | - + +
| | | | | | | | | | | |
+ - + + - + + - + + + + + + + + +

নিয়মাবলী:

  • যদি কোনও সংখ্যা এতটা কেটে যায় যে এর উচ্চতা শূন্যের চেয়ে কম বা সমান হয় তবে এটি প্রদর্শিত হয় না তবে এর জন্য একটি স্থান অবশিষ্ট থাকে (আমি বিশ্বাস করি না এটি সম্ভব, 6এটি শূন্যে পৌঁছানোর সবচেয়ে কাছেরতম)) ।
  • চলার জায়গাগুলি অনুমোদিত।
  • প্রতিটি বিল্ডিংয়ের প্রস্থ অবশ্যই 2 হতে হবে।
  • আপনার ইনপুট স্টিডিন থেকে বা প্রোগ্রামে এনকোড করা হতে পারে।
  • আপনার প্রোগ্রাম অবশ্যই একটি পূর্ণ প্রোগ্রাম হতে হবে , কোন কার্য নেই।
  • আপনার প্রোগ্রাম 4-15 বিল্ড সক্ষম হতে হবে। 0-3 এবং নেতিবাচক সংখ্যাগুলির প্রয়োজন হয় না এবং কিছু করার জন্য নির্দিষ্ট করা হয় না, যার অর্থ তারা ত্রুটি ফেলতে পারে, আবর্জনা মুদ্রণ করতে পারে বা কিছুই করতে পারে না।

ইউসা! শুধু নির্দিষ্ট এটা
ফেজ

1
1 কোনও মৌলিক সংখ্যা নয়। উদাহরণস্বরূপ, দেখে মনে হচ্ছে আপনি উচ্চতা থেকে 1 টি কেটে দিচ্ছেন যদি (1-ভিত্তিক) সূচক অ-মৌলিকের পরিবর্তে সংমিশ্রিত হয়।
ডেনিস

মনে রাখবেন যে একটি আদর্শ 80-অক্ষরের কনসোল উইন্ডোটি কেবল 16 টি বিল্ডিংয়ের সাথে ফিট করবে, যা 20 বিল্ডিংয়ের প্রয়োজনীয়তাটিকে কিছুটা কুৎসিত করতে পারে।
হ্যান্ড-ই-ফুড

@ হ্যান্ড-ই-ফুড উল্লেখ করার জন্য ধন্যবাদ! আমি এটি পরিবর্তন করেছি যাতে আপনি ভবনগুলিকে নতুন লাইনে স্থাপন করেন।
ফেজ

@ ডেনিস আমাকে ফিবোনাচি বা প্রাথমিক সংখ্যাগুলি করবেন কিনা তা নিশ্চিত ছিলাম না, তাই সেইটিকে সেই থেকে রাখা হয়েছিল। ঠিক এটা ঠিক!
ফেজ

উত্তর:


4

সিজেম, 68 66 58 55 বাইট

এটি আপাতত দীর্ঘ। তবে একটি শুরু।

ri:K"!;tK"206b4b<{S5*a*"+--+ "a:I+K)2/)"|  | "e]I+}%zN*

আপডেট: এখন অফসেট গণনার পরিবর্তে ইনপুটগুলির জন্য হার্ডকডিং 15 15 Sp3000 দ্বারা পরামর্শ

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



3

সি #, 223 205 বাইট

এটি কেবল 15 টি বিল্ডিংয়ে যাওয়ার প্রয়োজনের সুযোগ নেয়।

class P{
    static void Main(string[]a){
        int w=int.Parse(a[0]),
            h=(w+3)/2,
            b,
            x,
            y=-1;
        for(;++y<=h;)
            for(x=-2;++x<w;)
                System.Console.Write(x<0?"\n":(b=y-("012021101211102"[x]&7))<0?"     ":b>0&y<h?"|  | ":"+--+ ");
    }
}

260 বাইট

এবং আরও সাধারণ উত্তর যা কোনও সংখ্যক বিল্ডিংয়ের জন্য কাজ করবে।

class P{
    static void Main(string[]a){
        int w=int.Parse(a[0]),
            h=(w+3)/2,
            b,
            x,
            y=-1;
        for(;++y<=h;)
            for(x=-2;++x<w;){
                if(x<1)
                    b=-1;
                else
                    for(b=1;++b<x;)
                        if((x+1)%b<1)break;
                System.Console.Write(x<0?"\n":(b=y-x%3/2-x%5/4-x%10/9-(b<x?0:1))<0?"     ":b>0&y<h?"|  | ":"+--+ ");
            }
    }
}

2

পাইথন 2, 163 বাইট

n=input()
k=-~n/2
for i in range(k+2):
 s="";p=j=1
 while~n+j:a=(j%3<1)+(j%5<1)+(j%10<1)+(p%j<1);s+=" |+  -  - |+   "[(i>=a)+(i in{a,k+1})::3];p*=j*j;j+=1
 print s

Primality থেকে অংশ ধার @ xnor এর এলগরিদম পরীক্ষণ এখানে

যদি আমরা প্রথম 15 টি অফসেট হার্ডকোড করি তবে আমরা 137 বাইট পেতে পারি :

n=input()
k=-~n/2
for i in range(k+2):
 s=""
 for j in range(n):a=881740113>>2*j&3;s+=" |+  -  - |+   "[(i>=a)+(i in{a,k+1})::3]
 print s

আমি ধরে নিচ্ছি যে প্রতিটি লাইনের শেষে ফাঁকা স্থানগুলি ঠিক আছে, তবে যদি প্রশ্নটি পুরো আউটপুটের পরে স্পেস ফাঁক করে বোঝায় তবে এটির জন্য +9 বাইট রয়েছে .rstrip()


2

গ্রোভি, 234 , 225 , 223 219 বাইট

15 বিল্ডিং সীমাটি অপব্যবহার করছে

b=args[0]as int
m={n->(n!=2&(2..n-1).any{n%it==0}?1:0)+([3,5,10].sum{n%it==0?1:0})}
(9..0).each{println((1..b).collect{d=((b/2)as int)+1-m(it);(0..9).collect{it!=d&it!=0?it<d?"|  |":"    ":"+--+"}}*.get(it).join(" "))}

2

সুইফ্ট, 375 , 350 বাইট

import Darwin;let(B,u,z,d)=(4.0,1.0,0.0,2.0);let H=ceil(B/d);func p(n:Double)->Double{var D=d;while D<n{if n%D==0{return 1};D++};return n==1 ?1:0};for var h=z;h<H+2;h++ {for var b=u;b<=B;b++ {var m=b%3==0 ?u:z+b%5==0 ?1:0;m=min(2,b%10==0 ?m+1:m);m += p(b);if h<m {print("     ")}else if h==H+1||h==m {print("+--+ ")}else{print("|  | ")}};print("\n")}

এখানে ইনডেন্ট কোড রয়েছে

import Darwin
let(B,u,z,d)=(4.0,1.0,0.0,2.0)
let H=ceil(B/d)
func p(n:Double)->Double{
     var D=d
    while D<n{
        if n%D==0{
            return 1
        }
        D++
    }
    return n==1 ?1:0
}
for var h=z;h<H+2;h++ {
    for var b=u;b<=B;b++ {
        var m=b%3==0 ?u:z+b%5==0 ?1:0
        m=min(2,b%10==0 ?m+1:m)
        m += p(b)
        if h<m {
            print("     ")
        }
        else if h==H+1||h==m {
            print("+--+ ")
        }
        else{
            print("|  | ")
        }
    }
    print("\n")
}

Bবিল্ডিং সংখ্যা রয়েছে।
pসংখ্যাটি মৌলিক না হলে 1 প্রদান করে।

ceilফাংশনটি ব্যবহার করার জন্য আমার ফাউন্ডেশন আমদানি করা দরকার ।

আমি কেবল পনেরোটি মামলার জন্য কোডটি অপ্টিমাইজ করতে সক্ষম হইনি, তবে শেষ পর্যন্ত এটি তৈরি করব।

সম্পাদনা: @ কেমেট্রিক্সম পরামর্শ গ্রহণ এবং modঅংশটি অনুকূলিতকরণ (আমি বর্ণের দৈর্ঘ্য হ্রাস করতে ভুলেছি )।


1
কিছু বাইট সংরক্ষণ করতে আপনি এর Foundationসাথে প্রতিস্থাপন করতে পারেনDarwin
কামেট্রিক্সম

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