ASCII सिटी का पुनर्निर्माण


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

ASCIIville के लोग अपने शहर का पुनर्निर्माण कर रहे हैं और नए ब्लूप्रिंट निकाल रहे हैं। आपका काम यह है कि वे कितने भवन चाहते हैं, इस आधार पर उनके नए शहर का निर्माण करें।

इनपुट यह होगा कि कितने भवन हैं। प्रत्येक इमारत इनपुट की आधी ऊँचाई है (यदि विषम हो तो ऊपर), इमारत के ऊपर और नीचे शामिल नहीं है।

आइए इसका एक मूल उदाहरण बनाते हैं 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 तक इनपुट के लिए हार्डकोडिंग। Sp3000 द्वारा सुझाव

इसे यहाँ ऑनलाइन आज़माएँ


3

पायथन 2, 247 245 237 229 बाइट्स

I=input()
R=range
B=[(-~I/2)-(x%3<1)-(x%5<1)-(x%10<1)-(~all([x%a for a in R(2,x)]or[x==2])+2)for x in R(1,I+1)]
E='+--+'
O=['\n']*I
for r in R(I):
 for h in B:O[r]+=['|  |',' '*4,E][(r==h)+(r>=h)]
print ''.join(O[::-1])+'\n'+E*I

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

प्रायोगिक जाँच भाग @ 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इमारतों की संख्या शामिल है।
p1 तब देता है जब कोई संख्या प्रधान नहीं होती है।

मैं का उपयोग करने के लिए फाउंडेशन आयात करने की जरूरत है ceilफंक्शन करना होगा।

मैं सिर्फ पंद्रह मामलों के लिए कोड का अनुकूलन करने में कामयाब नहीं हुआ, लेकिन मैं इसे बाद में बनाऊंगा।

संपादित करें: @Kametrixom सलाह लेना और modभाग को अनुकूलित करना (मैं var नाम की लंबाई कम करना भूल गया)।


1
आप बदल सकते हैं Foundationके साथ Darwinकुछ बाइट्स को बचाने के लिए
Kametrixom

के import UIKitबजाय -1 के साथ import Darwin
C --ur
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.