বাক্সগুলিতে ASCII বাক্স আঁকুন


23

সমস্যা

প্রদত্ত ইনপুট a,b,c

যেখানে a,b,cইতিবাচক এমনকি পূর্ণসংখ্যার হয়

এবং a > b > c

মাত্রা সহ যে কোনও অনুমোদিত চরিত্রের একটি বাক্স তৈরি করুন a x a

b x bপূর্ববর্তী মধ্যে মাত্রা সহ একটি পৃথক অনুমোদিত অক্ষরের একটি বাক্সকে কেন্দ্র করুন

c x cপূর্ববর্তী মধ্যে মাত্রাগুলি সহ অন্যরকম অনুমোদিত মঞ্জুর অক্ষরের একটি বাক্সকে কেন্দ্র করুন

অনুমোদিত অক্ষরগুলি ASCII অক্ষরগুলিতে রয়েছে [a-zA-z0-9!@#$%^&*()+,./<>?:";=_-+]

ইনপুট a=6, b=4, c=2

######
#****#
#*@@*#
#*@@*#
#****#
######

ইনপুট a=8, b=6, c=2

########
#******#
#******#
#**@@**#
#**@@**#
#******#
#******#
########

ইনপুট a=12, b=6, c=2

############
############
############
###******###
###******###
###**@@**###
###**@@**###
###******###
###******###
############
############
############

বিধি

  • সংক্ষিপ্ততম কোড জিতেছে
  • মনে রাখবেন যে প্রদত্ত রেঞ্জের মধ্যে কোন চরটি মুদ্রণ করতে পারবেন তা চয়ন করতে পারেন
  • ট্রেলিং নিউলাইনগুলি গৃহীত
  • ট্রেলিং হোয়াইটস্পেস গৃহীত
  • ফাংশনগুলি নিউলাইনস, স্ট্রিং অ্যারের সাথে স্ট্রিং ফিরে আসতে পারে বা এটি মুদ্রণ করতে পারে

5
ইনপুট কি সর্বদা বৈধ হবে (অর্থাত্ প্রতিটি সংখ্যা পূর্বের তুলনায় কমপক্ষে 2 কম)? এবং প্রতিসম অঙ্কন নিশ্চিত করার জন্য সংখ্যাগুলি সর্বদা (সমস্ত সমান) বা (সমস্ত বিজোড়) থাকবে?
ছড়িয়ে ছিটিয়ে


1
@ ক্রিশ্চিয়ান প্রথম 3 লাইনগুলি সেই প্রয়োজনীয়তাগুলি সংজ্ঞায়িত করে, দয়া করে তারা আমাকে যথেষ্ট কিনা তা আমাকে জানান।
LiefdeWen

@ স্টেফানডেলপোর্ট ঠিক আপনি আছেন, আমি এটি মিস করেছি। ধন্যবাদ।
ছড়িয়ে ছিটিয়ে

উত্তর:



7

জেলি ,  20  19 বাইট

`এরিক দ্য আউটগল্ফার প্রস্তাবিত কোনও লিঙ্ক এড়ানোর জন্য দ্রুত ব্যবহার করে -1 বাইট ।

H»þ`€Ḣ>ЀHSUṚm€0m0Y

একটি সম্পূর্ণ প্রোগ্রাম [a,b,c]বাক্সগুলি মুদ্রণ করে একটি তালিকা গ্রহণ করছে a:2 b:1 c:0
... বাস্তবে, এটি 10 টি বাক্সের জন্য কাজ করবে , যেখানে অন্তঃতম বাক্সটি রয়েছে 0( উদাহরণস্বরূপ )।

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

কিভাবে?

H»þ`€Ḣ>ЀHSUṚm€0m0Y - Main link: list of boxes, B = [a, b, c]
H                   - halve B = [a/2, b/2, c/2]
    €               - for €ach:
   `                -   repeat left argument as the right argument of the dyadic operation:
  þ                 -     outer product with the dyadic operation:
 »                  -       maximum
                    - ... Note: implicit range building causes this to yield
                    -       [[max(1,1),max(1,2),...,max(1,n)],
                    -        [max(2,1),max(2,2),...,max(2,n)],
                    -        ...
                    -        [max(n,1),max(n,2),...,max(n,n)]]
                    -       for n in [a/2,b/2,c/2]
     Ḣ              - head (we only really want n=a/2 - an enumeration of a quadrant)
         H          - halve B = [a/2, b/2, c/2]
       Ѐ           - map across right with dyadic operation:
      >             -   is greater than?
                    - ...this yields three copies of the lower-right quadrant
                    -    with 0 if the location is within each box and 1 if not
          S         - sum ...yielding one with 0 for the innermost box, 1 for the next, ...
           U        - upend (reverse each) ...making it the lower-left
            Ṛ       - reverse ...making it the upper-right
             m€0    - reflect €ach row (mod-index, m, with right argument 0 reflects)
                m0  - reflect the rows ...now we have the whole thing with integers
                  Y - join with newlines ...making a mixed list of integers and characters
                    - implicit print - the representation of a mixed list is "smashed"

7

পাইথন 2, 107 103 বাইট

a,b,c=input()
r=range(1-a,a,2)
for y in r:
 s=''
 for x in r:m=max(x,y,-x,-y);s+=`(m>c)+(m>b)`
 print s

পুরো প্রোগ্রাম, সঙ্গে বাক্সে ছাপে a=2, b=1,c=0

তালিকা বোধগম্যতার সাথে সামান্য খারাপ উত্তর (104 বাইট):

a,b,c=input()
r=range(1-a,a,2)
for y in r:print''.join(`(m>c)+(m>b)`for x in r for m in[max(x,y,-x,-y)])

5

সি #, 274 232 বাইট

using System.Linq;(a,b,c)=>{var r=new string[a].Select(l=>new string('#',a)).ToArray();for(int i=0,j,m=(a-b)/2,n=(a-c)/2;i<b;++i)for(j=0;j<b;)r[i+m]=r[i+m].Remove(j+m,1).Insert(j+++m,i+m>=n&i+m<n+c&j+m>n&j+m<=n+c?"@":"*");return r;}

এমনকি সি # এর জন্য ভয়ঙ্কর অবশ্যই গল্ফ করা যেতে পারে তবে আমার মন ফাঁকা হয়ে গেছে।

সম্পূর্ণ / ফর্ম্যাট সংস্করণ:

using System;
using System.Linq;

class P
{
    static void Main()
    {
        Func<int, int, int, string[]> f = (a,b,c) =>
        {
            var r = new string[a].Select(l => new string('#', a)).ToArray();

            for (int i = 0, j, m = (a - b) / 2, n = (a - c) / 2; i < b; ++i)
                for (j = 0; j < b;)
                    r[i + m] = r[i + m].Remove(j + m, 1).Insert(j++ + m,
                        i + m >= n & i + m < n + c &
                        j + m > n & j + m <= n + c ? "@" : "*");

            return r;
        };

        Console.WriteLine(string.Join("\n", f(6,4,2)) + "\n");
        Console.WriteLine(string.Join("\n", f(8,6,2)) + "\n");
        Console.WriteLine(string.Join("\n", f(12,6,2)) + "\n");

        Console.ReadLine();
    }
}

আপনার মনে হয় আপনি নিজের মন ফিরে পেয়েছেন, j + m <= n + cহয়ে উঠতে পারেন n + c > j + m
LifdeWen

ঠিক আছে তাহলে যত i + m >= nকরারn < i + m
LiefdeWen

আপনি i+m4 বার ব্যবহার করেন , যাতে আপনি forকিছু সংরক্ষণের জন্য এটি একটি পরিবর্তনশীলতে যুক্ত করতে পারেন
LiefdeWen

এগুলি সঠিকভাবে যাচাই করা হয়নি, তবে: আপনি কখনও iবিচ্ছিন্নতায় ব্যবহার করবেন না, কেবল আরম্ভ করুন i=mএবং তুলনা করুন i<b+m; বা ... শুধু ব্যবহার i, Init i=0কিন্তু উপর লুপ i<a, তারপর যোগ r[i]=new string('#',a),পাশে j=0, এবং যাচাই করুন একটি শর্ত যোগ iজন্য সীমার মধ্যে হয় jএর লুপ (এই পরিশোধ বন্ধ, কারণ আপনি সব Linq হারান কর্তব্য)।
ভিজুয়ালমেলন


3

জাভাস্ক্রিপ্ট (ES6), 174 170 147 বাইট

a=>b=>c=>(d=("#"[r="repeat"](a)+`
`)[r](f=a/2-b/2))+(e=((g="#"[r](f))+"*"[r](b)+g+`
`)[r](h=b/2-c/2))+(g+(i="*"[r](h))+"@"[r](c)+i+g+`
`)[r](c)+e+d

চেষ্টা করে দেখুন

fn=
a=>b=>c=>(d=("#"[r="repeat"](a)+`
`)[r](f=a/2-b/2))+(e=((g="#"[r](f))+"*"[r](b)+g+`
`)[r](h=b/2-c/2))+(g+(i="*"[r](h))+"@"[r](c)+i+g+`
`)[r](c)+e+d
oninput=_=>+x.value>+y.value&&+y.value>+z.value&&(o.innerText=fn(+x.value)(+y.value)(+z.value))
o.innerText=fn(x.value=12)(y.value=6)(z.value=2)
label,input{font-family:sans-serif;}
input{margin:0 5px 0 0;width:50px;}
<label for=x>a: </label><input id=x min=6 type=number step=2><label for=y>b: </label><input id=y min=4 type=number step=2><label for=z>c: </label><input id=z min=2 type=number step=2><pre id=o>


ব্যাখ্যা

a=>b=>c=>            :Anonymous function taking the 3 integers as input via parameters a, b & c
(d=...)              :Assign to variable d...
("#"[r="repeat"](a)  :  # repeated a times, with the repeat method aliased to variable r in the process.
+`\n`)               :  Append a literal newline.
[r](f=a/2-b/2)       :  Repeat the resulting string a/2-b/2 times, assigning the result of that calculation to variable f.
+                    :Append.
(e=...)              :Assign to variable e...
(g=...)              :  Assign to variable g...
"#"[r](f)            :    # repeated f times.
+"*"[r](b)           :  Append * repeated b times.
+g+`\n`)             :  Append g and a literal newline.
[r](h=b/2-c/2)       :  Repeat the resulting string b/2-c/2 times, assigning the result of that calculation to variable h.
+(...)               :Append ...
g+                   :  g
(i=...)              :  Assign to variable i...
"*"[r](h)            :    * repeated h times.
+"@"[r](c)           :  @ repeated c times
+i+g+`\n`)           :  Append i, g and a literal newline.
[r](c)               :...repeated c times.
+e+d                 :Append e and d.


2

ভি , 70, 44 , 42 বাইট

Àé#@aÄÀG@b|{r*ÀG@c|{r@òjdòÍ.“.
ç./æ$pYHP

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

এটা ঘৃণ্য। Eww। অনেক ভাল. এখনও সংক্ষিপ্ত নয়, তবে কিছুটা হলেও গোলাপী ol

@ Nmjmcman101 ধন্যবাদ দুটি বাইট সংরক্ষণ করা!

Hexdump:

00000000: c0e9 2340 61c4 c047 4062 7c16 7b72 2ac0  ..#@a..G@b|.{r*.
00000010: 4740 637c 167b 7240 f26a 64f2 cd2e 932e  G@c|.{r@.jd.....
00000020: 0ae7 2e2f e624 7059 4850                 .../.$pYHP

আপনি আপনার শেষ দুটি লাইন দুটি বাইট সংরক্ষণের জন্য একত্রিত করতে পারেন এটি চেষ্টা করুন অনলাইনে!
nmjcman101

@ nmjcman101 আহ, ভাল কথা। ধন্যবাদ!
ডিজেএমসিএমহেম

1

এমএটিএল , 26 23 22 20 18 বাইট

2/t:<sPtPh!Vt!2$X>

ইনপুট একটি কলাম ভেক্টর [a; b; c]। আউটপুট ব্যবহারের অক্ষর 2, 1, 0

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

একদিকে যেমন এটি কেবল তিনটি নয় দশটি বাক্সের জন্য কাজ করে, এখানে পাঁচটি বাক্সের উদাহরণ রয়েছে


1

গণিত, 49 বাইট

Print@@@Fold[#~CenterArray~{#2,#2}+1&,{{}},{##}]&

ইনপুট নেয় [c, b, a] । আউটপুট হয় a=1, b=2, c=3

কিভাবে?

Print@@@Fold[#~CenterArray~{#2,#2}+1&,{{}},{##}]&
                                                &  (* Function *)
        Fold[                        ,{{}},{##}]   (* Begin with an empty 2D array.
                                                      iterate through the input: *)
                                    &              (* Function *)
             #~CenterArray~{#2,#2}                 (* Create a 0-filled array, size
                                                      (input)x(input), with the array
                                                      from the previous iteration
                                                      in the center *)
                                  +1               (* Add one *)
Print@@@                                           (* Print the result *)

@ জেনি_মথি প্রশ্নে: * ফাংশনগুলি নিউলাইনস, স্ট্রিং অ্যারের সাথে স্ট্রিং ফিরে আসতে পারে বা এটি মুদ্রণ Gridকরতে পারে "" এটি তৈরি করে না Stringএবং তা করে Printনা
জংহওয়ান মিন

0

পিএইচপি> = 7.1, 180 বাইট

এই ক্ষেত্রে আমি ঘৃণা করি যে পরিবর্তনগুলি $পিএইচপি-তে শুরু হয়

for([,$x,$y,$z]=$argv;$i<$x*$x;$p=$r%$x)echo XYZ[($o<($l=$x-$a=($x-$y)/2)&$o>($k=$a-1)&$p>$k&$p<$l)+($o>($m=$k+$b=($y-$z)/2)&$o<($n=$l-$b)&$p>$m&$p<$n)],($o=++$i%$x)?"":"\n".!++$r;

পিএইচপি স্যান্ডবক্স অনলাইন


এই ক্ষেত্রে, প্রিন্টের আগে পেইন্ট করা অনেক কম হয়। : D নাকি আমি $argvঅ্যারে হিসাবে ব্যবহার করি কারণ ? আপনি কি চেষ্টা করেছেন? আপনি কি পৃথক তিনটি অঞ্চল চেষ্টা করেছেন?
তিতাস

@ টিটাস আমি জানি না তবে আমার এই পদ্ধতি অবৈধ বিজোড় সংখ্যার ইনপুটটি সংশোধন করে
জার্গ হালসারম্যান

0

গণিত, 173 বাইট

(d=((a=#1)-(b=#2))/2;e=(b-(c=#3))/2;z=1+d;x=a-d;h=Table["*",a,a];h[[z;;x,z;;x]]=h[[z;;x,z;;x]]/.{"*"->"#"};h[[z+e;;x-e,z+e;;x-e]]=h[[z+e;;x-e,z+e;;x-e]]/.{"#"->"@"};Grid@h)&

ইনপুট

[12,6,2]


0

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

a,_,_=t=input();r=~a
exec"r+=2;print sum(10**x/9*10**((a-x)/2)*(r*r<x*x)for x in t);"*a

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

গাণিতিকভাবে ফর্মের সংখ্যা যুক্ত করে মুদ্রণের জন্য সংখ্যাগুলি গণনা করে 111100। এখানে প্রচুর কদর্যতা রয়েছে, সম্ভবত উন্নতির সুযোগ রয়েছে।


0

জাভা 8, 265 252 বাইট

 a->b->c->{int r[][]=new int[a][a],x=0,y,t;for(;x<a;x++)for(y=0;y<a;r[x][y++]=0);for(t=(a-b)/2,x=t;x<b+t;x++)for(y=t;y<b+t;r[x][y++]=1);for(t=(a-c)/2,x=t;x<c+t;x++)for(y=t;y<c+t;r[x][y++]=8);String s="";for(int[]q:r){for(int Q:q)s+=Q;s+="\n";}return s;}

অঙ্কের সাথে অক্ষর প্রতিস্থাপন করে -13 বাইট।

একটি পৃথক পদ্ধতি ব্যবহার করে অবশ্যই গল্ফ করা যেতে পারে।

ব্যাখ্যা:

এখানে চেষ্টা করুন।

a->b->c->{                         // Method with three integer parameters and String return-type
  int r[][]=new int[a][a],         //  Create a grid the size of `a` by `a`
      x=0,y,t;                     //  Some temp integers
  for(;x<a;x++)for(y=0;y<a;r[x][y++]=0);
                                   //  Fill the entire grid with zeros
  for(t=(a-b)/2,x=t;               //  Start at position `(a-b)/2` (inclusive)
      x<b+t;x++)                   //  to position `b+((a-b)/2)` (exclusive)
    for(y=t;y<b+t;r[x][y++]=1);    //   And replace the zeros with ones
  for(t=(a-c)/2,x=t;               //  Start at position `(a-c)/2` (inclusive)
      x<c+t;x++)                   //  to position `c+((a-b)/2)` (exclusive)
    for(y=t;y<c+t;r[x][y++]=8);    //   And replace the ones with eights
  String s="";                     //  Create a return-String
  for(int[]q:r){                   //  Loop over the rows
    for(int Q:q)                   //   Inner loop over the columns
      s+=Q;                        //    and append the result-String with the current digit
                                   //   End of columns-loop (implicit / single-line body)
    s+="\n";                       //   End add a new-line after every row
  }                                //  End of rows-loop
  return s;                        //  Return the result-String
}                                  // End of method

0

জাভাস্ক্রিপ্ট (ES6), 112

একাধিক লাইনের স্ট্রিং ফেরত বেনামে ফাংশন। অক্ষর 0,1,2

(a,b,c)=>eval("for(o='',i=-a;i<a;o+=`\n`,i+=2)for(j=-a;j<a;j+=2)o+=(i>=c|i<-c|j>=c|j<-c)+(i>=b|i<-b|j>=b|j<-b)")

কম গল্ফড

(a,b,c)=>{
  for(o='',i=-a;i<a;o+=`\n`,i+=2)
    for(j=-a;j<a;j+=2)
      o+=(i>=c|i<-c|j>=c|j<-c)+(i>=b|i<-b|j>=b|j<-b)
  return o
}  

var F=
(a,b,c)=>eval("for(o='',i=-a;i<a;o+=`\n`,i+=2)for(j=-a;j<a;j+=2)o+=(i>=c|i<-c|j>=c|j<-c)+(i>=b|i<-b|j>=b|j<-b)")

function update()
{
  var [a,b,c]=I.value.match(/\d+/g)
  O.textContent=F(a,b,c)
}

update()
  
a,b,c <input id=I value='10 6 2' oninput='update()'>
<pre id=O></pre>


0

পিএইচপি> = 5.6, 121 বাইট

for($r=A;$p?:$p=($z=$argv[++$i])**2;)$r[((--$p/$z|0)+$o=($w=$w?:$z)-$z>>1)*$w+$p%$z+$o]=_BCD[$i];echo chunk_split($r,$w);

এটি দিয়ে চালান -nrবা এটি অনলাইনে পরীক্ষা করুন

সম্মিলিত লুপগুলি আবার ... আমি তাদের ভালবাসি!

ভাঙ্গন

for($r=A;                           # initialize $r (result) to string
    $p?:$p=($z=$argv[++$i])**2;)    # loop $z through arguments, loop $p from $z**2-1 to 0
    $r[((--$p/$z|0)+$o=
        ($w=$w?:$z)                     # set $w (total width) to first argument
        -$z>>1)*$w+$p%$z+$o]            # calculate position: (y+offset)*$w+x+offset
        =_BCD[$i];                      # paint allowed character (depending on $i)
echo chunk_split($r,$w);            # insert newline every $w characters and print
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.