একটি স্ট্রিংকে উইন্ডমিলে পরিণত করুন


14

এই সাইটের কোডটি দ্রুত হ্রাস পাচ্ছে। আমাদের পুনর্নবীকরণযোগ্য স্ট্রিংগুলিতে বিনিয়োগ করতে হবে। সুতরাং আপনাকে অবশ্যই এমন একটি প্রোগ্রাম লিখতে হবে যা একটি স্ট্রিং নেয় এবং এটিকে একটি উইন্ডমিলে রূপান্তর করে।

চ্যালেঞ্জ

একটি উদাহরণ হিসাবে একটি সাধারণ উইন্ড-মিল স্ট্রিং নেওয়া যাক। স্ট্রিং নিন abcপিভট কেন্দ্র চরিত্র, এই ক্ষেত্রে হয় b। যেহেতু স্ট্রিং 3 টি অক্ষর দীর্ঘ, যে আউটপুট হবে ঠিক তিন লাইন লম্বা এবং তিন অক্ষর চওড়া। পদক্ষেপ ১ এ আপনার আউটপুটটি এখানে রয়েছে (

অ আ ক খ

পরবর্তী পদক্ষেপটি পেতে, প্রতিটি অক্ষর পিভটকে ঘড়ির কাঁটার দিকে ঘোরান। এখানে পদক্ষেপ 2:

একটি
 খ
  গ

এখানে 3-8 পদক্ষেপ রয়েছে:

 একটি
 খ
 গ
  একটি
 খ
গ
সিবিএ

গ
 খ
  একটি
 গ
 খ
 একটি
  গ
 খ
একটি

এবং নবম ধাপে, এটি মূল স্ট্রিংয়ের সম্পূর্ণ বৃত্তের চারপাশে আসে:

অ আ ক খ

নোট করুন যে bপুরো সময় একই স্থানে রয়েছেন। এটি হ'ল bপিভট চরিত্র। আপনাকে অবশ্যই এমন একটি প্রোগ্রাম বা ফাংশন লিখতে হবে যা স্ট্রিংটিকে ইনপুট হিসাবে গ্রহণ করে এবং প্রোগ্রামটি বন্ধ না হওয়া অবধি এই ক্রমটি বার বার মুদ্রণ করে।

ব্যাখ্যা

  • সমস্ত ইনপুট স্ট্রিংগুলিতে একটি বিজোড় সংখ্যক অক্ষর থাকবে। (যাতে প্রতিটি উইন্ডমিলের একটি পিভট থাকে)

  • চ্যালেঞ্জটি সহজ রাখার জন্য, সমস্ত স্ট্রিংয়ে কেবল উচ্চ এবং ছোট হাতের বর্ণমালা থাকবে।

  • আউটপুট অবশ্যই len(input_string)অক্ষর প্রশস্ত এবং লম্বা হবে।

  • আপনি যে ক্রমটির কোন ধাপটি শুরু করবেন তা বিবেচনাধীন নয়, যতক্ষণ আপনি চিরকাল ঘুরান এবং লুপিং চালিয়ে যান।

আরও পরীক্ষা আইও:

পোস্টটি ইতিমধ্যে বেশ লম্বা হওয়ায় এখানে "উইন্ডমিল" এর আউটপুটটির লিঙ্ক রয়েছে :

সাইড নোট:

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


উত্তর:


7

এমএটিএল , 35 33 21 বাইট

jtn2/kYaG1$Xd`wtD3X!T

নিম্নলিখিতটি উইন্ডমিলটি সঞ্জীবিত করবে ( 26 বাইট )

jtn2/kYaG1$Xd`wtXxDlY.3X!T

অনলাইন ডেমো

এই সংস্করণে, Xxপ্রদর্শনটি সাফ করার জন্য নির্দিষ্ট করে এবং এটি 1Y.হল 1 সেকেন্ড বিরতি।

ব্যাখ্যা

মূল ধারণাটি হ'ল আমরা ইনপুটটির দুটি সংস্করণ তৈরি করতে চাই। একটি "অर्थোগোনাল" সংস্করণ

+-----+
|     |       
|     |
|abcde|
|     |
|     |
+-----+

এবং একটি "তির্যক" সংস্করণ

+-----+
|a    |
| b   |
|  c  |
|   d |
|    e|
+-----+

আমরা এই দুটি সংস্করণ স্ট্যাকের দিকে ঠেলাচ্ছি। লুপের মাধ্যমে প্রতিবার, আমরা স্ট্যাকের ক্রমটি স্যুইচ করি এবং শীর্ষটিকে এক ঘড়ির কাঁটার দিকে ঘোরান।

j       % Grab the input as a string
t       % Duplicate the input

%--- Create the "orthogonal" version ---%

n2/     % Determine numel(input) / 2
k       % Round down to nearest integer
Ya      % Pad the input string with floor(numel(input)/2) rows above and below 

%--- Create the "diagonal" version ---%

G       % Grab the input again
1$Xd    % Place the input along the diagonal of a matrix    

`       % do...while loop   
  w     % Flip the order of the first two elements on the stack
  t     % Duplicate the top of the stack

  %--- OCTAVE ONLY (converts NULL to space chars) ---%

  O       % Create a scalar zero
  32      % Number literal (ASCII code for ' ')
  XE      % Replaces 0 elements in our 3D array with 32 (' ')

  %--- END OCTAVE ONLY ---%

  D     % Display the element     
  3X!   % Rotate this element 90 degrees counter-clockwise 3 times (clockwise)
  T     % Explicit TRUE to create an infinite loop
        % Implicit end of while loop

8

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

r=a=>{w.textContent=a.map(a=>a.join``).join`
`;for(i=j=h=a.length>>1;j++,i--;){t=a[i][i];a[i][i]=a[h][i];a[h][i]=a[j][i];a[j][i]=a[j][h];a[j][h]=a[j][j];a[j][j]=a[h][j];a[h][j]=a[i][j];a[i][j]=a[i][h];a[i][h]=t}}
s=w=>{a=[...w=[...w]].map(_=>w.map(_=>' '));a[w.length>>1]=w;setInterval(r,1000,a)}
s("windmills")
<pre id=w>


আপনি ওজন সময় হ্রাস করে কিছু বাইট গল্ফ দূরে করতে পারেন না?
মেয়রমন্টি


5

রুবি, 122 119 বাইট

->n{c=0
loop{i=[l=n.size,m=l+1,m+1,1][3-c=c+1&7]*(3.5<=>c)
s=(' '*l+$/)*l
l.times{|j|s[m*l/2-1+(j-l/2)*i]=n[j]}
$><<s}}

ঘুমের সাথে পরীক্ষামূলক প্রোগ্রামে অসম্পূর্ণ সংস্করণ

পুরো কনসোল উচ্চতায় ঘোরাটি খুব বিশ্বাসযোগ্য নয়। তবে আপনি যদি ইনপুট স্ট্রিংয়ের দৈর্ঘ্যে উচ্চতা হ্রাস করেন তবে ঘূর্ণনটি অনেক বেশি বিশ্বাসযোগ্য।

f=->n{
  c=0                                     #loop counter
  m=1+l=n.size                            #l=string length. m=l+1
  loop{                                   #start infinite loop
    s=(' '*l+$/)*l                        #make a string of l newline-terminated lines of l spaces. Total m characters per line.              
    i=[m-1,m,m+1,1][3-c=c+1&7]*(3.5<=>c)  #array contains positive distance between characters in string 1=horizontal, m=vertical, etc.
                                          #c=c+1&7 cycles through 0..7. Array index 3..-4 (negative indices count from end of array, so 3=-1, 0=-4 etc)
                                          #(3.5<=>c) = 1 or -1. We use to flip the sign. This is shorter than simply using 8 element array [m-1,m,m+1,1,1-m,-m,-m+1,-1]  
    l.times{|j|s[m*l/2-1+i*(j-l/2)]=n[j]} #for each character in n, write the appropriate space character in s to the character in n
    puts s                                #print s
    sleep 1                               #sleep for 1 second
  }
}

f[gets.chomp]                             #get input, remove newline, call function

3

এমএটিএল , 47 44 বাইট

' 'jntX"tGtnXyg(wGtnQ2/Y(XJDXKD`J@_X!DK3X!DT

এটি অনলাইন চেষ্টা করুন! (তবে তাৎক্ষণিকভাবে এটি হত্যা করুন, অসীম লুপ)

1 সেকেন্ড বিরতি দিয়ে: 56 বাইট

' 'jntX"tGtnXyg(wGtnQ2/Y(XJD1Y.XKD1Y.`J@_X!D1Y.K3X!D1Y.T

এটি অনলাইন চেষ্টা করুন! (আবার, অসীম লুপ)


3

পাইথন 3 , 193 বাইট

ডিফ সি (ক): ই = ''; এস = লেন (ক); ল = ইনট (এস / ২); বি = রেঞ্জ (গুলি); এম = '\ এন' * এল; প্রিন্ট (এম, এ, এম) ); এক্স ইন বি এর জন্য: মুদ্রণ (ই * এক্স, এ [এক্স]); এক্স ইন বি এর জন্য: প্রিন্ট (ই * এল, এ [এক্স]); এক্স ইন বি: মুদ্রণ (ই * (এস -১- এক্স), একটি [X]); a = ইনপুট (); যখন সত্য: গ (ক); সি (এ [:: - 1]);

Ungolfed

ডিএফ সি (ক):
    ই = ''; এস = লেন (ক); এল = ইনট (এস / ২); বি = রেঞ্জ (গুলি); এম = '\ n' * এল;
    মুদ্রণ (এম, এ, এম);
    এক্স ইন বি এর জন্য: মুদ্রণ (ই * এক্স, এ [এক্স]);
    এক্স ইন বি এর জন্য: মুদ্রণ (ই * এল, এ [এক্স]);
    এক্স ইন বি এর জন্য: মুদ্রণ (ই * (এস -১-এক্স), এ [এক্স]); 
একটি = ইনপুট ();
যদিও সত্য:
    গ (ক);
    C (একটি [:: - 1]);

রিকার্সিভ, 177 বাইট

(কয়েক সেকেন্ড পরে ক্র্যাশ)

ডিফ সি (ক): ই = ''; এস = লেন (ক); ল = ইনট (এস / ২); বি = রেঞ্জ (গুলি); এম = '\ এন' * এল; প্রিন্ট (এম, এ, এম) ); এক্স ইন বি এর জন্য: প্রিন্ট (ই * এক্স, এ [এক্স]); এক্স ইন বি এর জন্য: প্রিন্ট (ই * এল, এ [এক্স]); এক্স ইন বি: মুদ্রণ (ই * (এস -১- এক্স), একটি [X]); C (একটি [:: - 1]); গ (ইনপুট ());

Ungolfed

ডিএফ সি (ক):
    ই = ''; এস = লেন (ক); এল = ইনট (এস / ২); বি = রেঞ্জ (গুলি); এম = '\ n' * এল;
    মুদ্রণ (এম, এ, এম);
    এক্স ইন বি এর জন্য: মুদ্রণ (ই * এক্স, এ [এক্স]);
    এক্স ইন বি এর জন্য: মুদ্রণ (ই * এল, এ [এক্স]);
    এক্স ইন বি এর জন্য: মুদ্রণ (ই * (এস -১-এক্স), এ [এক্স]);
    C (একটি [:: - 1])
গ (ইনপুট ());

আরেকটি সমাধান, 268 বাইট

i; Def w (a): e = ''; s = len (a); l = int (s / 2); t = '\ n'; m = (l-1) * t; h হিসাবে ইয়ারটুলগুলি আমদানি করুন = তালিকা (i.chain.from_iterable ((ই * x + a [এক্স], ই * এল + এ [এক্স], ই * (এস -1-এক্স) + একটি [এক্স]) এক্স এক্স রেঞ্জ (গুলি) এর জন্য )); মুদ্রণ (এম, এ, এম, t.join (জ [:: 3]), t.join (জ [1 :: 3]), t.join (জ [2 :: 3]), সেপ্টেম্বর = টি, শেষ = ''); এ = ইনপুট (); সত্য যদিও: ডাব্লু (ক); ডাব্লু (এ [:: - 1]);

Ungolfed

আমি হিসাবে itertools আমদানি;
ডিএফ ডাব্লু (ক):
    ই = ''; এস = লেন (ক); এল = ইনট (এস / ২); টি = '\ এন'; এম = (এল -1) * টি;
    এক্স = রেঞ্জ (গুলি) এর জন্য h = তালিকা (i.chain.from_iterable ((e * x + a [x], e * l + a [x], e * (s-1-x) + a [x]) )))
    মুদ্রণ (এম, এ, এম, t.join (জ [:: 3]), t.join (জ [1 :: 3]), t.join (জ [2 :: 3]), সেপ্টেম্বর = T, শেষ = '');
একটি = ইনপুট ();
যদিও সত্য:
    W (ক);
    W (ক [:: - 1]);

আমি কি এই ধার নিতে পারি?
ফাঁস নুন


এছাড়াও, আপনি শেষে (প্রথম স্তরের-ইন্ডেন্টেশন) স্ট্রিংটি বিপরীত করতে ভুলে গেছেন।
ফাঁস নুন

এই আউটপুটটি অবৈধ। এক এবং পাঁচটি ধাপে নেতৃস্থানীয় হোয়াইটস্পেস অনুপস্থিত।
জেমস

পরিবর্তন! @ আমারহ্যামডিজে
পি 1714825

2

পাইথ, 48 বাইট

JlzK/J2#*btKz*btKM+*dG@zHVJgNN)VJgKN)VJg-JNN)=_z

এটি অনলাইন চেষ্টা করুন! (দ্রষ্টব্য: এটি এমন একটি সংস্করণ যা চিরকালের জন্য লুপ করে না কারণ এটি দোভাষীকে ক্র্যাশ করবে))

পাইথন 3 সমাধান থেকে নির্লজ্জভাবে অনুবাদ করেছেন @ বাইএইচএইচ দ্বারা ।

কিভাবে এটা কাজ করে:

JlzK/J2#*btKz*btKM+*dG@zHVJgNN)VJgKN)VJg-JNN)=_z
                                                 assign('z',input())
Jlz                                              assign("J",Plen(z))
   K/J2                                          assign("K",div(J,2))
       #                                         loop-until-error:
        *btK                                      imp_print(times(b,tail(K)))
            z                                     imp_print(z)
             *btK                                 imp_print(times(b,tail(K)))
                                                  @memoized
                 M                                def gte(G,H):
                  +*dG@zH                          return plus(times(d,G),lookup(z,H))
                         VJ   )                   for N in num_to_range(J):
                           gNN                     imp_print(gte(N,N))
                               VJ   )             for N in num_to_range(J):
                                 gKN               imp_print(gte(K,N))
                                     VJ     )     for N in num_to_range(J):
                                       g-JNN       imp_print(gte(minus(J,N),N))
                                             =_z  assign('z',neg(z))

এই আউটপুটটি অবৈধ। এক এবং পাঁচটি ধাপে নেতৃস্থানীয় হোয়াইটস্পেস অনুপস্থিত।
জেমস

এখন কি এটা ঠিক আছে???
ফাঁস নুন

হ্যাঁ দুর্দান্ত দেখাচ্ছে। ;)
জেমস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.