একটি বৃত্তে পাঠ্য


19

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা নূন্যতম সম্ভাব্য ব্যাসার্ধযুক্ত পৃথক বৃত্তের চারপাশে একটি ইনপুট স্ট্রিং প্রিন্ট করে। উদাহরণস্বরূপ, ইনপুট জন্য This is an example, আপনার প্রোগ্রামের আউটপুট করা উচিত:

  a si   
 n     s 
        i
e       h
x       T
a        
m        
 p       
  le     

সার্কেল জেনারেশন

আপনি পৃথক বৃত্তের প্রতিটি পয়েন্টের স্থানাঙ্কগুলি গণনা করতে মিডপয়েন্ট বৃত্ত অ্যালগরিদম ব্যবহার করবেন । এই অ্যালগরিদম কীভাবে এই উইকিপিডিয়া পৃষ্ঠায় প্রয়োগ করা যায় তার উদাহরণ আপনি খুঁজে পেতে পারেন ।

এখানে অ্যালগরিদমের সিউডো কোডটি দেওয়া হয়েছে (উইকিপিডিয়া এর সি উদাহরণের ভিত্তিতে):

integer x = radius
integer y = 0
int decisionCriterion = 1 - x

while y <= x 
    point at coordinates (x,y) belongs to the circle   // Octant 1
    point at coordinates (y,x) belongs to the circle   // Octant 2
    point at coordinates (-x,y) belongs to the circle  // Octant 4
    point at coordinates (-y,x) belongs to the circle  // Octant 3
    point at coordinates (-x,-y) belongs to the circle // Octant 5
    point at coordinates (-y,-x) belongs to the circle // Octant 6
    point at coordinates (x,-y) belongs to the circle  // Octant 7
    point at coordinates (y,-x) belongs to the circle  // Octant 8

    y++
    if decisionCriterion <= 0
        decisionCriterion += 2 * y + 1
    else
        x--
        decisionCriterion += 2 * (y - x) + 1
end while

আপনি যদি কোনও রেডিয়াসের জন্য মিডপয়েন্ট সার্কেল অ্যালগরিদম উত্পাদন করে ঠিক একই বৃত্ত তৈরি করে তবেই আপনি আলাদা অ্যালগরিদম ব্যবহার করতে পারেন ।

চেনাশোনাতে অবশ্যই ক্ষুদ্রতম ব্যাসার্ধ থাকতে হবে যা এখনও ইনপুটটির সমস্ত অক্ষর লিখতে দেয়।

যদি বৃত্তটি স্ট্রিংয়ের অক্ষরের সংখ্যার চেয়ে বেশি পয়েন্ট দিয়ে শেষ হয়, তবে শেষটি পূরণ করার অক্ষরগুলি ফাঁকা স্থান হবে

ইনপুটটির প্রথম অক্ষরটি স্থানাঙ্কের সাথে পয়েন্টে মুদ্রিত করতে হবে (Radius,0)। পরবর্তী অক্ষরগুলি একটি অ্যান্ট্লিকওয়াল ফ্যাশনে মুদ্রিত হয়।

ইনপুট

ইনপুটটি স্থান (32) এবং টিলড ~(126) এর মধ্যে যে কোনও ASCII অক্ষরের একটি স্ট্রিং ।

আপনি ধরে নিতে পারেন ইনপুটটি সর্বদা বৈধ, 256 অক্ষরের চেয়ে কম এবং কমপক্ষে 5 টি অক্ষর দীর্ঘ হবে।

ইনপুটটি STDIN, বা কোনও ফাংশন প্যারামিটার বা অন্য জাতীয় কিছু থেকে নেওয়া যেতে পারে।

আউটপুট

আপনি ফলাফলটি হয় STDOUT এ আউটপুট করতে পারেন, বা কোনও ফাংশন থেকে স্ট্রিং হিসাবে ফিরে আসতে পারেন।

আপনার ট্রেলিং স্পেস থাকতে পারে, তবে শর্ত থাকে যে এটি লাইনটি দীর্ঘতম রেখাকে (মাঝেরটি) ছাড়িয়েছে না (যেমন, মাঝের রেখার পিছনে ফাঁকা স্থান থাকতে পারে না)।

একটি পিছনের নতুন লাইন অনুমোদিত।

পরীক্ষার মামলা

Input: Hello, World!
Output:
  ,ol  
     l 
W     e
o     H
r      
 l     
  d!   


Input: 4 8 15 16 23 42
Output:
  51   
     8 
1      
6     4

 2   2 
  3 4  


Input: Programming Puzzles & Code golf
Output:
     gnim    
  uP     ma  
 z         r 
 z         g 
l           o
e           r
s           P

&            

 C           
  od     f   
    e Gol    


Input: Ash nazg durbatuluk, ash nazg gimbatul, ash nazg thrakatuluk agh burzum-ishi krimpatul.
Output:
            zan hsa ,           
           g         ku          
        ig             lu        
      bm                 ta      
     a                     b     
    t                       r    
   u                         u   
   l                         d   
  ,                              
                              g  
 a                             z 
 s                             a 
h                               n

n                               h
a                               s
z                               A
g                                

t                                
h                                
 r                               
 a                             . 
  k                           l  
  a                           u  
   t                         t   
   u                         a   
    l                       p    
     u                     m     
      k                  ri      
        ag              k        
          h          hi          
            burzum-is            

স্কোরিং

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins

উত্তর:


1

গণিত, 359 357 354

(L=Length;T=Tuples;c=Characters@#;For[r=1,L[p=RotateRight[SortBy[#,ArcTan@@N@#&]+r+1,L@#/4+1]&@(f=1-r;X=1;Y=-2r;x=0;y=r;q={{0,r},{0,-r},{r,0},{-r,0}};While[x<y,If[f>0,y--;f+=Y+=2];x++;f+=X+=2;q=Join[q,T@{{x,-x},{y,-y}},T@{{y,-y},{x,-x}}]];Union@q)]<L@c,r++];R=2r+1;s="";Do[s=s<>({u,v}/.Thread[p~Take~L@c->c]/.{_,_}->" ")<>If[v==R,"\n",""],{u,R},{v,R}];s)&

Ungolfed:

(
  L = Length;
  T = Tuples;
  c = Characters@#;
  For[r = 1,
   L[
     p = RotateRight[
         SortBy[#, ArcTan @@ N@# &] + r + 1, L@#/4 + 1
         ] &@(
        f = 1 - r;
        X = 1;
        Y = -2 r;
        x = 0;
        y = r;
        q = {{0, r}, {0, -r}, {r, 0}, {-r, 0}};
        While[x < y,
         If[f > 0,
          y--;
          f += Y += 2
          ];
         x++;
         f += X += 2;
         q = Join[q, T@{{x, -x}, {y, -y}}, T@{{y, -y}, {x, -x}}]
         ];
        Union@q
        )] < L@c,
   r++];
  R = 2 r + 1;
  s = "";
  Do[s = s <> ({u, v} /. Thread[p ~ Take ~ L@c -> c] /. {_, _} -> " ") <>
      If[v == R, "\n", ""],
   {u, R}, {v, R}];
  s
  ) &

3

সি, 367 বাইট

#include<math.h>
main(){char*m="12345678",b[9999];int p,i,n,q,c,l=strlen(m),r=1,d,f=0;float o,s;for(;!f;r++){f=0;q=r*r;c=r/4;o=6.3,s=o/99.;memset(b,0,q);for(i=0;i<l;i++){p=1;f=0;while(p&&o>0){d=(c-1+(int)(sin(o)*c))*r+c-1+(int)(cos(o)*c);f+=p=b[d];if(!p)b[d]=m[i];o-=s;}}if(f){for(n=p=0;n<q;n++){p+=c=b[n];putchar(c?c:32);if(n%r==r-1){if(!p)n=q;putchar(10);p=0;}}}}}

এখানে পরীক্ষা

আমি নিশ্চিত এটি আরও চালিত হতে পারে তবে এটি আমার মাথা ব্যাথা শুরু করে।

সি, 324 বাইট

ছোট কোড তবে ফলাফলগুলি ওপির মতো নয়

#include<math.h>
main(){char*m="12345678",b[9999];int q,c,l=strlen(m),r=1,d,i=0;float o;for(;i<l;r++){i=0;c=r/2;q=r*r;memset(b,0,q);for(o=6.28;o>=0&&i<l;o-=0.001){d=(c-1+(int)(sin(o)*c))*r+c-1+(int)(cos(o)*c);if(!b[d]){b[d]=m[i++];}}}for(d=i=0,--r;d<q;d++){i+=c=b[d];putchar(c?c:32);if(d%r==r-1){putchar(10);d=i?d:q;i=0;}}}

       an hsa ,k
      gz       ulu
    ig           ta
   bm             br
  ta               ud
 lu                  g
 ,                   z
a                    an
s
h                     h
                      s
n                     A
a
z
g                     l
 t                   tu
 h                   a
 ra                 mp
  ka               ri
   tu              k
    lu           hi
     k a       -is
       gh burzum

3
আপনি void5 বাইটের জন্য ড্রপ করতে পারেন এবং আরও কিছু বাইটের জন্য বৈশ্বিক স্কোপটিতে কিছু পূর্ণসংখ্যা ঘোষণা করতে পারেন , যেহেতু কোনও প্রকার ছাড়াই বৈশ্বিক স্কোপে ভেরিয়েবলগুলি ধরে নেওয়া হয় intএবং এটি স্বয়ংক্রিয়ভাবে আরম্ভ হয় 0
মেগো

1
দেখা যাচ্ছে আপনি লগ আউট করার সময় একটি বেনামে সম্পাদনা করেছেন। আমি এগিয়ে গিয়ে এটি অনুমোদিত করেছি, তবে সাধারণভাবে আপনার সম্পাদনাগুলি করার জন্য আপনার লগ ইন করা উচিত। ;)
অ্যালেক্স এ।

1

সি, 494 বাইট

এটির আসল মিডপয়েন্ট সার্কেল অ্যালগোরিদম ব্যবহার করে:

void main(){char s[]="12345678";int a[9999],b[9999],f=0,c,h,x,y,e,q,t,u,v,g,i,d,l,r=0,k=strlen(s);for(;f<k;r++){c=r;e=r*2+1;q=e*e;memset(b,0,q*4);f=0;l=0;for(i=0;i<8;i++){x=r;y=0;d=1-x;for(x=r,y=0,d=1-x;y<=x;y++,d+=2*d>0?y- --x:y+1){t=(i+1)%4>1;u=t?y:x;v=t?x:y;h=(c+v*(i>3?1:-1))*e+(c+u*(i>1&&i<6?-1:1));if(!b[h])b[h]=f<k?s[f]:0,a[f]=h,f++;}if(i%2){for(g=0;g<(f-l)/2;g++)t=b[a[l+g]],b[a[l+g]]=b[a[f-1-g]],b[a[f-1-g]]=t;}l=f;}}for(i=0;i<q;i++){c=b[i];putchar(c?c:32);if(i%e==e-1)putchar(10);}}

ডি-গল্ফ কোড:

void main() {
    char text[]="Ash nazg durbatuluk, ash nazg gimbatul, ash nazg thrakatuluk agh burzum-ishi krimpatul.";

    char points[9999];
    int pos[9999];

    int sl = strlen(text);
    int r = 0;
    int pc = 0; // point count
    int lc = 0; // last count

    int c, h, x, y, e, q, t, u, v, g, i, d;

    // increase radius until number of points => strlen(text)
    for(; pc<sl; r++) {
        c = r;
        e = r * 2 + 1;
        q = e * e;
        memset(points,0,q);
        pc = 0;
        lc = 0;

        // loop through the octants
        for(i=0; i<8; i++) {

            // midpoint loop
            x = r;
            y = 0;
            d = 1 - x;
            while (y <= x) {

                // calc index of point
                t = (i + 1) % 4 > 1;
                u = t ? y : x;
                v = t ? x : y;
                h = (c + v * (i > 3 ? 1 : -1)) * e + (c + u * (i > 1 && i < 6 ? -1 : 1)); 

                // add point if space is empty
                if(!points[h]) { 
                    points[h] = pc < sl ? text[pc] : 0;
                    pos[pc] = h;
                    pc++;
                }

                y++;
                d += 2 * d > 0 ? y- --x : y + 1;
            }

            if(i % 2) {
                // reverse point order for odd octants
                for(g=0; g<(pc-lc)/2; g++)
                {
                    t = points[pos[lc + g]];
                    points[pos[lc + g]] = points[pos[pc - 1 - g]];
                    points[pos[pc - 1 - g]] = t;
                }
            }
            lc = pc;
        }
    }

    // write output
    for(i=0;i<q;i++)
    {
        c = points[i];
        putchar(c ? c : 32);
        if(i % e == e - 1)
            putchar(10);
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.