एक सौ वर्ग!


10

बुनियादी बातों पर वापस...

स्थानीय प्राथमिक (ग्रेड?) स्कूल में एक शिक्षक के रूप में, आपको अपनी कक्षा को अपनी समय सारणी सिखाने का एक तरीका चाहिए। आपके निपटान में, आपके पास सौ वर्ग और लाल पेन का भार है। आपको अपनी कक्षा को सही उत्तर जल्दी से दिखाने में भी सक्षम होना चाहिए।

अब, आप एक प्रोग्राम लिखने के लिए पर्याप्त चतुर हैं जो कई बार टेबल कर सकते हैं, लेकिन क्या आप उन्हें एक सौ वर्ग पर खींच सकते हैं?

चुनौती

इनपुट के गुणक हैं जो संख्या में छाया करने के लिए एनी-एस्केप कोड का उपयोग करके स्टडआउट या समतुल्य के लिए एक सौ वर्ग आउटपुट ।

  • 1-100 की संख्या वाले 10x10 ग्रिड का उत्पादन करें।
    • जब तक यह निरंतर है तब तक प्रत्येक बॉक्स में 2 अंकों की संख्याओं के संरेखण में कोई फर्क नहीं पड़ता
    • 1 अंकों की संख्या के लिए, आप 2 अंकों के लिए पैड कर सकते हैं और 2 अंकों की संख्या के समान स्वरूपण का उपयोग कर सकते हैं या बॉक्स के मध्य में केंद्रित कर सकते हैं।
  • यदि बॉक्स में संख्या इनपुट का एक से अधिक है, तो पूरे बॉक्स को लाल रंग में रंग दें।
    • इसका मतलब पूरे बॉक्स है, न कि केवल संख्या भाग

उदाहरण के लिए, इनपुट को देखते हुए, दिए 3गए सौ वर्ग को प्रिंट करें

सौ वर्ग ३

यह कोड गोल्फ है इसलिए बाइट्स जीत में सबसे छोटा जवाब है!


2
क्या हम १
१.२ के

1
इसलिए मैं <table>उदाहरण के लिए उपयोग नहीं कर सकता हूं ?
निकेल

1
क्या संख्याओं का रंग मायने रखता है? यह हो सकता है whiteया grey?
बैसड्रॉप कंबरवुबबुव जुब

1
@Keatinge मैंने अभी तक निर्णय नहीं लिया है - मैं हाँ @nicael की ओर वीरिंग कर रहा हूँ, यह एनी-एस्के का उपयोग करना होगा या उत्तर एक ही खेल के मैदान पर नहीं होंगे, @BassdropCumberwubwubwub आप अलग-अलग उपयोग कर सकते हैं लेकिन जब तक आप ' cursesवैसे भी इसका उपयोग नहीं करना चाहिए - लाल वैसे भी कम है।
ब्लू

@ कीटिंग हाँ आप पैडिंग का उपयोग कर सकते हैं - लेकिन केवल शून्य और केवल एक अंक संख्या के साथ
ब्लू

जवाबों:


8

पायथन 2, 166 बाइट्स

R=range;n=input()
for y in R(21):print''.join('♥[%dm%s♥[m'%(any(5>x-k%10*4>-1<y-k/10*2<3for k in R(n-1,100,n))*41,('+---|%2d '%(x/4+y*5-4))[y%2*4+x%4])for x in R(41))

ऑक्टल 033(ANSI एस्केप कैरेक्टर) द्वारा प्रतिस्थापित ।

यहाँ छवि विवरण दर्ज करें

व्याख्या

हम आउटपुट को एक 41×21ग्रिड के रूप में मानते हैं , और प्रत्येक बिंदु पर चरित्र और रंग की सीधे गणना करते हैं।

यह है, कोड की संरचना है:

n = input()
for y in range(21):
    print ''.join(F(x, y) for x in range(41))

कुछ समारोह के लिए F

इसका परिणाम Fहमेशा निम्न रूप में होता है:

हम प्रारूप स्ट्रिंग का उपयोग करते हैं '\33[%dm%s\33[m', जहां पहला %dया तो 0 या 41 है, और %sवह चरित्र है जिसे हम प्रिंट करना चाहते हैं।


के लिए रंग , हम निम्न सूत्र है:

any(5>x-k%10*4>-1<y-k/10*2<3for k in R(n-1,100,n))*41

मैं इसे पूरी तरह से स्पष्ट नहीं करने जा रहा हूं, लेकिन यह मूल रूप से सभी आयतों पर लूप करता है जो कि लाल रंग का होना चाहिए, और जांचता है कि (x, y)उनमें से कोई अंदर है या नहीं।

चेयरिंग ऑपरेटर के उपयोग पर ध्यान दें: मैंने फिर -1<A<5 and -1<B<3से लिखा 5>A>-1<B<3


के लिए चरित्र , हम निम्न सूत्र है:

('+---|%2d '%(x/4+y*5-4))[y%2*4+x%4]

यदि y % 2 == 0इसके लिए है तो x = 0, 1, …उत्पन्न होगा+---+---+---…

यदि y % 2 == 1इसके लिए है तो x = 0, 1, …उत्पन्न होगा| p |p+1|p+2…


2
इन दिनों में से एक, एक चुनौती होने जा रही है जहाँ आपको वास्तव में कोड में शाब्दिक ♥ का उपयोग करने की आवश्यकता है, और हर कोई भ्रमित होगा;)
FryAmTheEggman

स्पष्टीकरण देखना पसंद करेंगे।
शौनकदे

@shaunakde मैंने कुछ लिखा (लेकिन कुछ बाइट्स को इस प्रक्रिया में सहेजा, इसलिए शायद उसका अनुसरण करना थोड़ा कठिन हो गया ... ^ ^)
लिन

1
@ लियन इस कोड को समझाने के लिए समय और ऊर्जा लेने के लिए बहुत-बहुत धन्यवाद। मैं इस स्पष्टीकरण के लिए बहुत आभारी हूं। इसने मुझे बहुत कुछ सीखने में मदद की!
शौनकड़े

1
आपका स्वागत है! :)
लिन

4

जूलिया, 219 182 169 167 बाइट्स

!n=(~j=j%n<1;k(v=j->"---",c=+,s="$c\e[m";l=~)=println([(l(j)?"\e[;;41m$c":s)v(j)for j=10i+(1:10)]...,s);i=0;k();for i=0:9 k(j->lpad(j,3),|);k(l=j->~j|~(j+10(i<9)))end)

इस तरह इस्तेमाल किया: !7

Ungolfed:

function !(n::Integer)
     for j=(1:10)     #This loop generates the top of the box
       if (j%n==0)
         print("\e[;;41m+---") #"\e[;;41m" is the ANSI escape code
                               #for red background colour in Julia
       else
         print("+\e[m---")     #"\e[m" resets to original colours
       end
     end
     println("+\e[m")
     for i=0:9
       for j=10i+(1:10)  #This loop generates the rows with the numbers
         if (j%n==0)
           print("\e[;;41m|",lpad(j,3))
         else
           print("|\e[m",lpad(j,3))
         end
       end
       println("|\e[m")
       for j=10i+(1:10)  #This loop generates the other rows
         if (j%n==0)||((j+10)%n==0&&i<9)
           print("\e[;;41m+---")
         else
           print("+\e[m---")
         end
       end
       println("+\e[m")
     end
   end

ध्यान दें कि यह बहुत ही ungolfed है, अधिकतम पठनीयता के लिए।


0

HTML + जावास्क्रिप्ट, 379

HTML:

<input id=a value=3><pre id=z>

जावास्क्रिप्ट:

for(i=0,s=`\n|`,o='+';i++<109;x=i<10?` ${i} `:i-100?' '+i:i,s+=x+'|',o+=x='---+',i%10||(o+=s+'\n+',s=`\n|`));z.innerHTML=[...o+x].map((x,i)=>`<span id=i${i}>${x}</span>`).join``;f=m=>window['i'+m].style.background='red';for(j=k=+a.value;j<=100;j+=k){p=(j/10|0)*84+((m=j%10)?(m-1)*4:-48);'000102030442434445468485868788'.match(/../g).map(x=>f(+x+p))}

jsfiddle।

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