রোল কেক বাক্যাংশ


17

রোল কেক হ'ল সুস্বাদু মিষ্টি যা স্পঞ্জ কেকের একটি স্তর দিয়ে তৈরি, ক্রিমের একটি স্তর (বা আইসক্রিম) সর্পিল হিসাবে ঘূর্ণিত হয়, উইকিপিডিয়া দেখুন

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

দয়া করে মনে রাখবেন যে বাক্যাংশটি স্পঞ্জ কেকের স্তর হবে এবং ক্রিম স্তরটি খালি স্থান হিসাবে উপস্থাপিত হবে।

Input: Lorem ipsum dolor sit amet, consectetu adipiscing elit, sed do eiusmod

Output with spaces ' ' represented as _

ilegnicsip
t________i
,_srolod_d
s_i____m_a
e_t_oL_u_u
d_a_r__s_t
d_m_emip_e
o_e______t
e_t,consec
i____
usmod

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

Input: Lorem ipsum dolor sit amet, consectetu adipiscing elit, sed do eiusmod

Output:

ilegnicsip
t        i
, srolod d
s i    m a
e t oL u u
d a r  s t
d m emip e
o e      t
e t,consec
i    
usmod

Input: Sandbox for Proposed Challenges

Output:

soporp
e    r
d aS o
c n  f
h dbox
a      
llenges

Input: Cake

Output:

aC 
k  
e

Input: it

Output:

ti

নিয়মাবলী:



উত্তর:


2

পাইথন 2, 202 200 বাইট

-2 বাইট লেভিটিটিংলায়নের জন্য ধন্যবাদ

c=[];s=n=0
a=input().replace(' ','')
#Calculate the ammount of rotations
l=len(a)
while s<l:s=n*(1+n)/2;n+=1
#Add trailing spaces to not break the rolling
a+=' '*(s-l)
#Add a cream layer on top and a cake layer on bottom of the cake and roll 90 degrees
for i in range(1,n):c=[' '*i]+zip(*c[::-1])+[a[:i]];a=a[i:]
#Finish the rolling to match the pattern
exec~i%4*'c=zip(*c[::-1]);'
#Serve the cake
for i in c:print''.join(i)

আপনার চারপাশের প্রথম বন্ধনী ড্রপ করতে পারেন exec: exec~i%4*'c=zip(*c[::-1]);'। এটি দুটি বাইট সংরক্ষণ করে
লেভিটিটিংলিয়ন

2

বেফুঞ্জ, 260 250 বাইট

"'"::00p09p19p35*::10p29pv
 v`*84:~<0p041p031p020p93<
v_0`!#v_^*!p04+g04:p03%4+g03:p02%4+g02:!%g04:+1pp01+%2-1g03p\3+<
>00g:: :09g\`8+0\p::19g`8+1\p20g1-2%+00p10g:::29g\`8+2\p::39g`8^
9g\-\v>29g:39g\->\:50p09g:1
$$1+\:!#@_1-55+,^>
,gg05<:+1\-1_:$#\^#

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

মূল ধারণাটি হ'ল আমরা খেলার মাঠের নীচের অর্ধেক অংশে সর্পিলটি তৈরি করি, আমরা পাশাপাশি চলার সময় ন্যূনতম এবং সর্বাধিক স্থানাঙ্কের সন্ধান করে। সমস্ত ইনপুট প্রক্রিয়া করা হয়ে গেলে, আমরা স্থানাঙ্কের পরিসীমা নিয়ে পুনরাবৃত্তি করি এবং সংরক্ষণ করা সামগ্রীটি লিখি।

বিস্তারিত ব্যাখ্যা

নোট করুন যে dx এবং dy মানগুলি 0 থেকে 3 এর মধ্যে রয়েছে যা আপেক্ষিক অফসেটের সাথে সামঞ্জস্য করে -1, 0, 1, 0। নির্দেশটি আপডেট করে এভাবে 1 যোগ করা হয়, মডেলো 4. আপেক্ষিক অফসেটে রূপান্তরকরণ দ্বারা সম্পন্ন করা হয় বিয়োগ 1, মডুলো 2।

"'"::00p09p19p      Set x, minx, and maxx to 39.
35*::10p29p39p      Set y, miny, and maxy to 15.
020p130p            Set dx to 0 (relative offset -1) and dy to 1 (relative offset 0).
140p                Set the segment length to 1.
0                   Set the index to 0 (on the stack).

                    -- The main input loop start here --
~                   Read a character from stdin.
:48*`_              If it's greater than 32 (i.e. not whitespace or EOL)...
  00g:              Get the current value of x and make a duplicate.
  ::09g\`8+0\p      If it's less than minx, update minx.
  ::19g`8+1\p       If it's greater than maxx, update maxx.
  20g1-2%           Calculate (dx-1)%2, which converts dx into the range -1 to 1.
  +00p              Add that to x and save (leaving the original x on the stack).
  10g:              Get the currrent value of y and make a duplicate.  
  ::29g\`8+2\p      If it's less than miny, update miny.
  ::39g`8+3\p       If it's greater than maxy, update maxy.
  30g1-2%           Calculate (dy-1)%2, which converts dy into the range -1 to 1.
  +10p              Add that to y and save (leaving the original y on the stack).
  p                 Store the character we read at the original x,y coordinates.
  1+                Increment the index by 1.
  :40g%!            Mod that with the current segment len; if zero it's time to turn.
  :20g+4%20p        Add the turn condition to the dx value, thus turning if needed.
  :30g+4%30p        Similarly add the turn condition to the dy value.
  :40g+40p          Also add it to the segment length, so it gets longer every turn.
  !*                Multiply the index by !turn, so it's reset to zero on every turn.
  ^                 Repeat the loop, reading another character.
0`!#v_^             If the char <= 32, we test for EOF and repeat the loop if not.

>                   If it is EOF, we start the output routine.
29g                 Initialise the y coordinate with miny.
:39g\-              Calculate maxy - miny to use as the height countdown.

                    -- The outer output loop starts here --
\:50p               Swap y to the top and save in a temporary variable.
09g                 Initialise the x coordinate with minx.
:19g\-              Calculate maxx - miny to use as our width countdown.
\                   Swap x to the top of the stack.

                    -- The inner output loop starts here --
  :50g              Take a copy of x and the y save in the temporary variable.
  g,                Read the character at those coordinate and write to stdout.
  \:_               Swap the width countdown to the top of the stack and break if zero.
  1-                Otherwise decrement the width countdown.
  \1+               Swap the x value back to the top and increment it.
  <                 Repeat the inner loop.

$$                  Clear the width countdown and x value from the stack.
1+                  Increment the y value.
\                   Swap the height countdown to the top of the stack.
:¬#@_               If it's zero, exit.
1-                  Otherwise decrement it.
55+,                Output a line break.
^                   Repeat the outer loop.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.