অক্ষরগুলি স্ট্রিং গো রাউন্ড এবং রাউন্ডে


23

( ফিলোনেটপি'র ফ্র্যাক্টাল লাইন চ্যালেঞ্জের একটি প্রাথমিক খসড়া দ্বারা অনুপ্রাণিত ।)

আপনাকে প্রস্থ W > 1, উচ্চতা H > 1এবং 2(W+H-2)মুদ্রণযোগ্য ASCII অক্ষর সমন্বিত স্ট্রিং দেওয়া হয়েছে । কাজটি হল এই স্ট্রিং প্রদত্ত প্রস্থ এবং উচ্চতার আয়তক্ষেত্রের চারপাশে মোড়ানো, ঘড়ির কাঁটার দিক দিয়ে শীর্ষে বাম কোণে শুরু করে print আয়তক্ষেত্রের অভ্যন্তরে স্থানগুলি পূর্ণ হয়। পরীক্ষার কেসগুলি আশা করি এটি খুব স্পষ্ট করে দেওয়া উচিত।

আপনি STDIN (অথবা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিয়ে কোনও প্রোগ্রাম বা ফাংশন লিখতে পারেন এবং ফলাফলটি STDOUT (বা নিকটতম বিকল্প) এ মুদ্রণ করে বা স্ট্রিং হিসাবে ফিরিয়ে দিতে পারেন।

এখানে কোনও শীর্ষস্থানীয় বা চলমান স্থান থাকতে হবে না (ইনপুট স্ট্রিংয়ের মধ্যে থাকা এগুলি বাদে)। আপনি allyচ্ছিকভাবে একটি একক পেছনের নতুন লাইন আউটপুট করতে পারেন।

এটি কোড গল্ফ, তাই সংক্ষিপ্ততম জমা (বাইটে) জিতেছে।

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

প্রতিটি পরীক্ষার কেস "String" W Hপ্রত্যাশিত আউটপুট দ্বারা অনুসরণ করা হয়।

"Hello, World! "
5 4
Hello
    ,
!    
dlroW

"+--+|||+--+|||"
4 5
+--+
|  |
|  |
|  |
+--+

">v<^"
2 2
>v
^<

"rock beats scissors beats paper beats "
11 10
rock beats 
          s
s         c
t         i
a         s
e         s
b         o
          r
r         s
epap staeb 

Note that the following string contains an escaped '"'.
"!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
46 3
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN
~                                            O
}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQP

লিডারবোর্ড

নিয়মিত লিডারবোর্ড এবং ভাষার দ্বারা বিজয়ীদের একটি সংক্ষিপ্ত বিবরণ উভয়ই তৈরি করতে এখানে একটি স্ট্যাক স্নিপেট।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

# Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

# Ruby, <s>104</s> <s>101</s> 96 bytes


8
আপনার লিডারবোর্ডগুলি এত দুর্দান্ত।
অ্যালেক্স এ।

2
আপনি কি আপনার লিডারবোর্ড স্ক্রিপ্ট গল্ফ করেছেন?
mbomb007

2
@ mbomb007 না, আমি কোডটি মিনিফায়ারের মাধ্যমে চালিয়েছি, তাই প্রসারিত হওয়ার পরে এটি খুব বেশি জায়গা গ্রহণ করবে না। (আমি মনে করি লাইন ব্রেকগুলি অপসারণ করা যথেষ্ট ছিল)) আমি এখনও আমার হার্ড ড্রাইভে একটি অনির্দিষ্ট সংস্করণ পেয়েছি।
মার্টিন ইন্ডার

2
আপনি যদি এর নামটি "স্ট্রিং গো রাউন্ড এবং রাউন্ডে দ্য চার্স" রাখেন তবে এটি গানের তালকে আরও ভাল ফিট করে।
জাস্টিন

উত্তর:


9

সিজেম, 27 বাইট

Nl~:L/(os\2-{)L2-S*@(N@}*W%

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

ক্রমে ইনপুট নেয়

H "String" W

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


10

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

s,m,n=input()
print s[:n]
for i in range(m-2):print s[~i]+' '*(n-2)+s[n+i]
print s[1-m::-1][:n]

প্রথম লাইনটি, তারপরে দুটি উল্লম্ব রেখা, তারপরে শেষ রেখাটি মুদ্রণ করবে।

printতিনবার লেখার চেয়ে ছোট কিছু হতে পারে তবে আমি ভ্যারিয়েবলের সাথে সঞ্চয় করে এতদূর চেষ্টা করেছি এবং '\n'.joinদীর্ঘতর হয়েছি ।


আপনি পাইথন 3 এ পরিবর্তন করতে পারেন এবং ভেরিয়েবলের মুদ্রণ সঞ্চয় করতে পারেন ...
ওমর

1
@ ওমর এটি দীর্ঘায়িত হবে কারণ আপনাকে ইনপুটটিতে ব্যবহার করতে হবে evalএবং মুদ্রণ বিবৃতি বন্ধন করতে হবে ।
FryAmTheEggman

ওহ, আমি আমলে নিই নি eval! printপাইথন 2-তে এর পরে একটি জায়গার প্রয়োজন হওয়ায় প্যারেনথেসিসটি খুব বেশি সমস্যা হওয়া উচিত নয় । থেকে যাওয়া print blahথেকে p(blah)এখনো 3 টি অক্ষর পরিমাণ সঞ্চয় হয়।
ওমর

9

সিজেম, 31 30 বাইট

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

l~:H;:V/(N@s{)V2-S*@(N@}H2-*W%

প্রশ্নে প্রদত্ত একই ক্রমে ইনপুট নেয়:

"Hello, World! " 5 4

এটি এখানে পরীক্ষা করুন।

একটি বাইট অপটিমাইজারকে ধন্যবাদ সংরক্ষণ করেছে।

ব্যাখ্যা

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

l~                             "Read and evaluate the input.";
  :H;                          "Store the height in H and discard it.";
     :V/                       "Store the width in V and split the input into chunks of size V.";
        (N                     "Slice off the first such chunk and push a newline.";
          @s                   "Pull up the other chunks and join them back together.";
            {          }H2-*   "Repeat this block H-2 times, printing the sides.";
             )                 "Slice off the last character of the string.";
              V2-S*            "Push V-2 spaces.";
                   @(          "Pull up the remaining string and slice off the first character.";
                     N@        "Push a newline and pull up the remaining string.";
                            W% "Reverse the remainder of the string, which is the bottom row.";

যেহেতু আমরা স্ট্রিংয়ের দৈর্ঘ্য পেতে পারি এবং আমাদের ভি আছে তাই এইচ সংরক্ষণ করার দরকার নেই কেবলমাত্র ভ অক্ষরগুলি অবধি অবধি ব্লকটি পুনরাবৃত্তি করুন। l~;:V/(N@s{)V2-S*@(N@_,V-}gW%1 চর সঞ্চয় করে
ডকম্যাক্স

@ ডকম্যাক্স দুর্ভাগ্যক্রমে, এটি উচ্চতা ২ এর জন্য কাজ করে না a যদিও এটি একটি ভাল ধারণা, আমি এটি অন্যভাবে কোনওভাবে ব্যবহার করতে পারি কিনা তা আমি খতিয়ে দেখব।
মার্টিন ইন্ডার

ডি আহা! এমনকি আপনি এইচ = 2 সমস্যার কথা উল্লেখ করেছেন এবং আমি এখনও এর বিরুদ্ধে রক্ষা করতে ভুলে গেছি।
ডকম্যাক্স

9

পাইথ, 47 46 45 40 37 36 বাইট

এটি পাইথের মধ্যে বাস্তবায়িত স্পষ্ট পদ্ধতির। এটি সূচকের মাধ্যমে প্রথম লাইনটি 0:widthএবং তারপরে মাঝখানে, তারপরে প্রিন্ট করে ।

ব্যবহার করে টিপ জন্য @Jakube ধন্যবাদ zএবং Qদুই ইনপুট জন্য এবং ব্যবহার p

AkYQ<zkV-Y2p*d-k2@zt_N@z+kN;<_<z-2Yk

স্ট্রিন থেকে স্ট্রিং হিসাবে এবং মাত্রার একটি দ্বিগুণ হিসাবে ইনপুট নেয়, নিউলাইন পৃথক:

Hello, World! 
5, 4

এবং stdout লেখেন।

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

A              Double assignment
 kY            The vars k and Y
 Q             The dimension tuple
<zk            Prints out first line by doing z[:width]
V-Y2           For N in height-2
 p             Print out everything
  *d           Repeat " "
   -k2         Width-2 times
  @z           Index z
   -_N1        At index -N-1
  @z           Index z
   +kN         At index k+N
;              Close out loop
<_<z-2Yk       Print last line

zস্ট্রিং পড়ার জন্য ব্যবহার করা যথেষ্ট অক্ষর সাশ্রয় করে। এছাড়াও t_Nএকই জিনিস -_N1
জাকুবে

37 অক্ষর আমাদের পদ্ধতির মাধ্যমে সম্ভব।
জাকুবে

@ জাকুব টিপস জন্য ধন্যবাদ!
মালটিসেন

আরও একটি চর সঞ্চয়। পরিবর্তে ++ব্যবহার pএবং সুইচ zt_Nসঙ্গে *d-k2
জাকুবে

5

জে, 61 বাইট

পদ্ধতি:

(height-2)*(width-2)ফাঁকা জায়গাগুলির একটি ব্লক থেকে শুরু করে আমরা স্ট্রিংয়ের শেষে থেকে প্রয়োজনীয় পরিমাণে অক্ষর নিয়ে এটি বর্তমান ব্লকে যুক্ত করি। আমরা এই 4 বার পুনরাবৃত্তি। মোট 5 টি রাজ্য উদাহরণ সহ চিত্রিত হয়েছে 'Hello, World! ' 5 4( Xপাঠযোগ্যতার জন্য গুলি দ্বারা স্থানগুলি স্থান করা হয়েছে):

XXX   !_   orld   ,_W   Hello
XXX   XX   XXX!   XXo   _XXX,
      XX   XXX_   XXr   !XXX_
      XX          XXl   dlroW
                  _!d   

কোড:

4 :'|:>{:((}.~{:@$);({.~{:@$)|.@|:@,])&>/^:4(|.x);'' ''$~y-2'

সুস্পষ্ট ফাংশন সংজ্ঞা। দ্বি-অপারেন্ড ফাংশনটি বাম আর্গুমেন্ট হিসাবে একটি স্ট্রিং এবং ডান আর্গুমেন্ট হিসাবে দুটি পূর্ণসংখ্যার একটি তালিকা গ্রহণ করে।

ব্যবহারের উদাহরণ:

   wrap_on=.4 :'|:>{:((}.~{:@$);({.~{:@$)|.@|:@,])&>/^:4(|.x);'' ''$~y-2'

   'Hello, World! ' wrap_on 5 4
Hello
    ,
!    
dlroW

   '>v<^' wrap_on 2 2
>v
^<

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


বাহ, আমি মুগ্ধ হয়েছি যে এটি জে.-এর প্রস্থ এবং উচ্চতা 2 এর জন্য কাজ করে
মার্টিন এণ্ডার

4

পাইথ, 38 37

AGHQ<zGFNC,_>z_ttH>zGj*dttGN)<>_zttHG

আমার মূলত একটি ভিন্ন 38 টি সমাধান ছিল, তবে এটি মূলত মালটিসেনের উত্তরের গল্ফযুক্ত সমাধান ছিল। তাই আমি সিদ্ধান্ত নিয়েছি কিছুটা আলাদা।

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

              implicit: z=string from input, Q=pair of numbers from input
AGHQ          G=Q[0] (width), H=Q[1] (height)
<zG           print z[:G]
    _>z_ttH     last H-2 chars reversed
    >zG         all chars from the Gth position to end
  C,           zip these 2 strings to pairs
FN            for each pair N:
  j*dttGN       seperate the two chars by (G-2) spaces and print
)             end for
<>_zttHG     print last line z[::-1][H-2:][:G]

_>z_ttHসমতূল্য <_zttH
isaacg

@ আইসাক ধন্যবাদ, ইতিমধ্যে মালটিসেনের উত্তরে অনুরূপ কিছু দেখা গেছে।
জাকুবে

4

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

একটি স্ট্রিং ফিরিয়ে 3 পরামিতি সহ ফাংশন returning

F=(s,w,h,q=h+(w-=2),t=b='')=>
[for(c of s)q?t+=q<h?c+'\n'+s[w+h+w+q--]+' '.repeat(q&&w):(b+=s[w+q--],c):q]
&&t+b

ক্রোম সংস্করণ ১১৯ : ফাংশনের জন্য কোনও সংক্ষিপ্ত বিন্যাস নয়, কোনও ডিফল্ট প্যারামিটার নেই। for(of)এটি সমর্থিত হলেও ব্যবহার করার কোনও কারণ নেই

function F(s,w,h){
  for(q=h+(w-=2),t=b=i='';
      q;
      q<h?t+='\n'+s[w+h+w+q--]+' '.repeat(q&&w):b+=s[w+q--])
    t+=s[i++];
  return t+b
}

ইএস 5 সংস্করণ 126 : (এর জন্য) নেই, স্ট্রিং রেরেট নেই

function F(s,w,h){
  for(q=h+(w-=2),t=b=i='';
      q;
      q<h?t+='\n'+s[w+h+w+q--]+Array(q&&-~w).join(' '):b+=s[w+q--])
    t+=s[i++];
  return t+b
}

Ungolfed

F=(s,w,h)=>
{
  var q = h+(w-=2), // middle length 
      t = '', // top and body
      b = ''; // bottom row
  for(c of s)
    if (q > 0)
    {
      if (q < h)
      {
        t += c+'\n'; // right side, straight
        t += s[w+h+w+q]; // left side, backwards 
        if (q > 1) // body fill, except for the last line
          t += ' '.repeat(w)
      }
      else
      {
        t+=c, // top, straight
        b+=s[w+q] // bottom, backwards
      }
      --q
    }
  return t+b

টেস্ট সালে ফায়ারফক্স / ফায়ারবাগ কনসোলটি

;[["Hello, World! ", 5, 4],["+--+|||+--+|||",4,5],[">v<^",2,2]
,["rock beats scissors beats paper beats ",11,10]
,["!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",46,3]]
.forEach(test => console.log(F(...test)))

আউটপুট

Hello
    ,
!    
dlroW

+--+
|  |
|  |
|  |
+--+

>v
^<

rock beats 
          s
s         c
t         i
a         s
e         s
b         o
          r
r         s
epap staeb 

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN
~                                            O
}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQP

3

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

def f(s,w,h):print s[:w];i=0;exec'print s[~i]+" "*(w-2)+s[w+i];i+=1;'*(h-2);print s[1-h:w+h-3:-1]

সরাসরি পন্থা গ্রহণ করা।


3

হাস্কেল, 164 156 বাইট

import Data.List
r=replicate
p w h(s:t)=unlines$fst$n$n$n$n(r h$r w ' ',(w,h,s:t++[s]))
n(_:b,(w,h,s))=(transpose$map reverse$(take w s):b,(h,w,drop(w-1)s))

ফাংশন pআউটপুট মুদ্রণ করে না, তবে এটি একটি স্ট্রিং হিসাবে প্রদান করে, যেমন p 4 5 "+--+|||+--+|||"-> "+--+\n| |\n| |\n| |\n+--+\n"। উন্নত প্রদর্শন ব্যবহারের জন্য putStr:

putStr $ p 4 5 "+--+|||+--+|||"

+--+
|  |
|  |
|  |
+--+

এটি কীভাবে কাজ করে: আমি স্পেসগুলির একটি wএক্স hব্লক তৈরি করি এবং ইনপুট স্ট্রিংয়ের শুরুতে প্রথম লাইনটি প্রতিস্থাপন করি। তারপরে আমি ব্লকটিকে ঘড়ির কাঁটার বিপরীতে ঘোরান এবং প্রথম লাইনের পরিবর্তে আরও তিনবার পুনরাবৃত্তি করি।

# 4 ঘুরার পরে আবার প্রথম অক্ষরটি কাটা প্রতিরোধ করতে, শুরু করার আগে আমি ইনপুট স্ট্রিংয়ে এটি যুক্ত করি।

"Hello World" example, 5 x 4


         |  Start               Turn #1          Turn #2     Turn #3   Turn #4
---------+--------------------------------------------------------------------
String   |  "Hello, World! H"   "o, World! H"    "World! H"  "d! H"    ""
left     | 
         |
Block    |  <empty>             Hello            o, W        World     d! H
before   |                                       l                     l  e
rotating |                                       l           ,         r  l
         |                                       e           olleH     o  l
         |                                       H                     W ,o

সম্পাদনা করুন: কাট-অফ-প্রথম-চরিত্র-পরে-পর্যালোচনার পরে # 4 সমস্যা সমাধানের আরও ভাল উপায় খুঁজে পেয়েছে।


আহ্ সুন্দর ... এটি কাজ না করে সিজেমে চেষ্টা করার মতোই similar ;)
মার্টিন এণ্ডার

3

পোস্টস্ক্রিপ্ট, 62 বাইট

এটি অবশ্যই বাইনারি টোকেন ব্যবহার করে তবে এটি সমান:

/Courier findfont setfont

0 h moveto

s [
    w {1 0} repeat pop pop
    h {0 -1} repeat pop pop
    w {-1 0} repeat pop pop
    h {0 1} repeat
] xyshow

এখানে ফাইলের একটি হ্যাক্সডাম্প ( xxd round.ps) রয়েছে:

0000000: 91c7 9243 9295 3020 6892 6b73 5b77 7b31  ...C..0 h.ks[w{1
0000010: 2030 7d92 8392 7592 7568 7b30 202d 317d   0}...u.uh{0 -1}
0000020: 9283 9275 9275 777b 2d31 2030 7d92 8392  ...u.uw{-1 0}...
0000030: 7592 7568 7b30 2031 7d92 835d 92c3       u.uh{0 1}..]..

হিসাবে চালান:

gs -dw=11 -dh=10 -ss="rock beats scissors beats paper beats " round.ps

আউটপুটটি আসলেই ছোট (ফন্টটি মোটেও স্কেল না করার ফলে), সুতরাং এটি দেখতে আপনাকে মোটামুটি জুম করা দরকার।

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


3

> <>, 82 80 + 3 = 83 বাইট

:2-&\
v!?:<oi-1
/?(0:i
\~ao{2-{~}
\{:?!v1-}o&:&
>:?v!~{{o}ao4.
^  >" "o1-
o;!?l<

> <> (ফিশ) এর জন্য এসোলাং পৃষ্ঠা

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

-vপতাকাটি দিয়ে কমান্ড লাইনের মাধ্যমে STDIN এর মাধ্যমে স্ট্রিং এবং উচ্চতা এবং প্রস্থকে ইনপুট করুন :

py -3 fish.py round.fish -v <height> <width>

ব্যাখ্যা

:2-&           Put W-2 in the register
:?!v1-io       Directly print the first W characters of the input
i:0(?/         Read the rest of the input
~ao{2-{~}      Pop a few leftovers 0s from above, decrement H by 2 and print a newline
               Stack now consists of H = H-2 at the bottom and the rest of the input reversed

[loop]

{:?!v          If H is 0...
  ~                Pop the 0
  l?!;o            Print the rest of the (reversed) input

               Otherwise...
  1-}              Decrement H
  o                Output the top of stack
  &:&              Copy I = W-2 from the register
  :?               If I is nonzero...
    " "o1-             Print a space and decrement I, then repeat from the previous line
  {{o}ao           Print the bottom input character and output a newline
  4.               Jump to the start of the loop (note that I = 0 is leftover from above)

2

বাশ + কোর্টিলস, 124

আপনাকে শুরু করার জন্য একটি শেল স্ক্রিপ্ট:

echo "${3:0:$1}"
fold -1<<<"${3:$1*2+$2-2}"|tac|paste - <(fold -1<<<"${3:$1:$2-2}")|expand -t$[$1-1]
rev<<<"${3:$1+$2-2:$1}"

কমান্ড-লাইন আরোগুলি হিসাবে ইনপুটটি পাস করুন:

$ ./roundnround.sh 5 4 "Hello, World! "
Hello
    ,
!    
dlroW
$ 

2

জাভাস্ক্রিপ্ট, 161 160 158 বাইট

আমি যে পদ্ধতিটি নিয়ে এসেছি তা অনেক দীর্ঘ পথ থেকে বেরিয়ে এসেছিল তবে ওহ ভাল, এটি অনুশীলন হয়েছে। (এছাড়াও, আমি এটি বানান পেয়েছিলাম r+o[u]+'\n':d।)

function f(o,w,n){s=o.slice(0,w)+'\n';o=o.slice(w);n-=2;r='';for(u=w-2;u--;)r+=' ';for(u=d=0;d=o[2*n+w+~u],u<w+n;u++)s+=(u<n)?(d||' ')+r+o[u]+'\n':d;return s}

যে ইনপুটটির কোনও অর্থ হয় না তার জন্য আউটপুটটি অপরিজ্ঞাত (আক্ষরিক, এবং অনেক সময়), তবে এটি সমস্ত পরীক্ষার ক্ষেত্রে কাজ করে works


sliceএর চেয়ে খাটো substr, এটি ঠিক একই নয় তবে এই ক্ষেত্রে আপনি এটি ব্যবহার করতে পারেন
edc65

2

গ্রোভি, 140

f={a,x,y->println a.substring(0,x);(1..y-2).each{println a[a.length()-it]+' '*(x-2)+a[it+x-1]}println a.substring(x+y-2,2*x+y-2).reverse()}

কল:

f('rock beats scissors beats paper beats ',11,10)

আউটপুট:

rock beats 
          s
s         c
t         i
a         s
e         s
b         o
          r
r         s
epap staeb 

2

কে, 55 54 বাইট

র্যান্ডম্রার জে প্রয়োগের মতো একই পদ্ধতির ব্যবহার; ফাঁকা ফাঁকা জায়গা দিয়ে শুরু করুন এবং চার বার ঘোরার সময় স্ট্রিংয়ের লেজ থেকে প্রান্তে যুক্ত করুন:

f:{`0:*4{((,r#*|x),|:'+*x;(r:-#*x)_*|x)}/((y-2)#" ";x)}

এবং কিছু উদাহরণ:

  f["Hello,_World!_";4 5]
Hello
_   ,
!   _
dlroW

  f[">v<^";2 2]
>v
^<

পাঠযোগ্যতার জন্য এটিকে কিছুটা ভাঙা,

একটি এনএক্সএম ব্লক তৈরি করুন:

  t:2 3#!6
(0 1 2
 3 4 5)

ট্রান্সপোজ ( +) ব্যবহার করে 90 ডিগ্রি ঘোরান এবং প্রতিটি ( |:') বিপরীত করুন :

  |:'+t
(3 0
 4 1
 5 2)

সুতরাং যদি আমাদের ফাঁকা স্থান tএবং একটি স্ট্রিং থাকে তবে sআমরা এর লেজের টুকরো টুকরো টিকিয়ে sদিতে পারি t:

  s: 12 18 17 8 9
12 18 17 8 9
  (,(-#t)#s),|:'+t
(8 9
 3 0
 4 1
 5 2)

আমরা ফর্মটি 4 {[x] ... }/( ... )বারবার স্ট্রিং এবং ম্যাট্রিক্সের সমন্বয়ে গঠিত একটি টুপলে ফাংশন প্রয়োগ করতে ব্যবহার করি। প্রতিবার আমরা এই ঘোরানো এবং একযোগে পদক্ষেপটি করি আমরা স্ট্রিংটিও কেটে ফেলি।

সম্পাদনা:

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

f:{`0:((y-2)#" "){|:'(,y),+x}/(+\(0,y[0 1 0]-2 1 1))_|x}

যদি এই বিভাজন পয়েন্টগুলি গণনা করার আরও ভাল উপায় থাকে তবে আমি পরামর্শের জন্য উন্মুক্ত।

edit2:

সামান্য পুনরায় সাজানো আমাকে এক জোড়া বন্ধনী সরাতে দেয়। 54 বাইট!

f:{`0:((y-2)#" "){|:'(,y),+x}/(0,+\y[0 1 0]-2 1 1)_|x}

2

কে, 80 68 বাইট

f:{[s;y;n]`0:(,n#s),({s[(#s)-x+2],((n-2)#" "),s@n+x}'!y-2),,n#|-4!s}

@ জনকে ধন্যবাদ জানিয়ে 80 থেকে সংক্ষিপ্ত হয়ে।

মূল:

f:{s:x;n:z;`0:(,s@!n),({s[(#s)+-2-x],({" "}'!n-2),s@n+x}'!y-2),,(|s@!-4+#s)@!n}

এই জিনিসটি কীভাবে কাজ করে তা আমি সবেমাত্র জানি।

ব্যবহারের উদাহরণ:

f["Hello, world! ";5;4]

কিছু সম্ভাব্য অপ্টিমাইজেশন রয়েছে, তবে আমি কোনা সেগফল্ট বানাচ্ছি ...


আপনি 'নিতে' (dyadic #) এবং একটি সুনির্দিষ্ট যুক্তি তালিকা ব্যবহার করে এই একটি বিট উন্নত করতে পারবেন: f:{[s;y;n]`0:(,n#s),({s[(#s)-x+2],((n-2)#" "),s@n+x}'!y-2),,n#|-4!s}। আমার গণনা অনুসারে 68 টি অক্ষর।
জন 2

@ জন ধন্যবাদ! আমি সুস্পষ্ট যুক্তি তালিকার সম্পর্কে জানতাম, তবে এটি আমার মন কেড়ে নিয়েছিল; যদিও ডায়াডিক # সম্পর্কে আমার কোনও ধারণা নেই।
kirbyfan64sos

2

আর, 178

এটি s, w, hপরামিতি হিসাবে গ্রহণ একটি নামহীন ফাংশন । আমি আশা করি স্ট্রিংটি বিভক্ত করার কোনও দুর্দান্ত উপায় ছিল।

function(s,w,h){W=w+h-1;H=w+W-1;S=strsplit(s,'')[[1]];O=array(" ",c(h,w+1));O[,w+1]="\n";O[1:h,c(w,1)]=c(S[w:W],S[(W+W-1):H]);O=t(O);O[1:w,c(1,h)]=c(S[1:w],S[H:W]);cat(O,sep='')}

Ungolfed

W=w+h-1;                                 # additional index points
H=w+W-1;                                 # additional index points
S=strsplit(s,'')[[1]];                   # vectorize the string
O=array(" ",c(h,w+1));                   # create an array of spaces
O[,w+1]="\n";                            # set newlines
O[1:h,c(w,1)]=c(S[w:W],S[(W+W-1):H]);    # build middles lines
O=t(O);                                  # transpose array
O[1:w,c(1,h)]=c(S[1:w],S[H:W]);          # build top and bottom lines
cat(O,sep='')                            # cat out results

টেস্ট রান

> (function(s,w,h){W=w+h-1;H=w+W-1;S=strsplit(s,'')[[1]];O=array(" ",c(h,w+1));O[,w+1]="\n";O[1:h,c(w,1)]=c(S[w:W],S[(W+W-1):H]);O=t(O);O[1:w,c(1,h)]=c(S[1:w],S[H:W]);cat(O,sep='')})("Hello, World! ",5,4)
Hello
    ,
!    
dlroW
> (function(s,w,h){W=w+h-1;H=w+W-1;S=strsplit(s,'')[[1]];O=array(" ",c(h,w+1));O[,w+1]="\n";O[1:h,c(w,1)]=c(S[w:W],S[(W+W-1):H]);O=t(O);O[1:w,c(1,h)]=c(S[1:w],S[H:W]);cat(O,sep='')})("+--+|||+--+|||",4,5)
+--+
|  |
|  |
|  |
+--+
> (function(s,w,h){W=w+h-1;H=w+W-1;S=strsplit(s,'')[[1]];O=array(" ",c(h,w+1));O[,w+1]="\n";O[1:h,c(w,1)]=c(S[w:W],S[(W+W-1):H]);O=t(O);O[1:w,c(1,h)]=c(S[1:w],S[H:W]);cat(O,sep='')})(">v<^",2,2)
>v
^<
> (function(s,w,h){W=w+h-1;H=w+W-1;S=strsplit(s,'')[[1]];O=array(" ",c(h,w+1));O[,w+1]="\n";O[1:h,c(w,1)]=c(S[w:W],S[(W+W-1):H]);O=t(O);O[1:w,c(1,h)]=c(S[1:w],S[H:W]);cat(O,sep='')})("rock beats scissors beats paper beats ",11,10)
rock beats 
          s
s         c
t         i
a         s
e         s
b         o
          r
r         s
epap staeb
> # Escaped the \ as well 
> (function(s,w,h){W=w+h-1;H=w+W-1;S=strsplit(s,'')[[1]];O=array(" ",c(h,w+1));O[,w+1]="\n";O[1:h,c(w,1)]=c(S[w:W],S[(W+W-1):H]);O=t(O);O[1:w,c(1,h)]=c(S[1:w],S[H:W]);cat(O,sep='')})("!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",46,3)
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN
~                                            O
}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQP
> 

2

টি-এসকিউএল, 307

এখনও ভয়ঙ্করভাবে দীর্ঘ হলেও, এটি কোনও ক্যোয়ারিতে আমি যা ভাবি তার চেয়ে কিছুটা সহজ (এবং সংক্ষিপ্ত) পরিণত হয়েছিল। টি-এসকিউএল এর জন্য একটি ইনলাইন টেবিলের মূল্যবান ফাংশন হিসাবে প্রয়োগ করা হয়েছে।

CREATE FUNCTION f(@S VARCHAR(MAX),@ INT,@H INT)RETURNS TABLE RETURN WITH R AS(SELECT 2i,LEFT(@S,@)S,STUFF(@S,1,@,'')+'|'R UNION ALL SELECT i+1,CASE WHEN i<@H THEN LEFT(RIGHT(R,2),1)+REPLICATE(' ',@-2)+LEFT(R,1)ELSE REVERSE(LEFT(R,@))END,STUFF(STUFF(R,LEN(R)-1,1,''),1,1,'')FROM R WHERE i<=@H)SELECT S FROM R

এটি @ ঘন্টা বারের মাধ্যমে পুনরাবৃত্তি করে। স্ট্রিং থেকে প্রথম পুনরাবৃত্তি ক্লিপ @ ডাব্লু অক্ষর characters মধ্যবর্তী পুনরাবৃত্তিগুলি স্ট্রিং প্যাডিংয়ের মধ্যবর্তী স্ট্রিং থেকে সর্বশেষ এবং প্রথম নেয়। শেষ পুনরাবৃত্তি যা বাকী থাকে তার বিপরীত হয়। এসকিউএল সার্ভার যেভাবে ভ্রচারস এ স্থান নির্ধারণের স্থানটি ব্যবহার করে তার সাথে আচরণ করে এমন কয়েকটি হারিয়ে যাওয়া অক্ষর রয়েছে।

টেস্ট রান

WITH TestSet AS (
    SELECT *
    FROM (VALUES
        ('Hello, World! ',5,4),
        ('+--+|||+--+|||',4,5),
        ('>v<^',2,2),
        ('rock beats scissors beats paper beats ',11,10),
        ('!"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~andfoure',50,3)
        ) Test(S,W,H)
)
SELECT x.S 
FROM TestSet 
    CROSS APPLY (
        SELECT S FROM dbo.F(S,W,H)
        )x

S
----------------------------
Hello
    ,
!    
dlroW
+--+
|  |
|  |
|  |
+--+
>v
^<
rock beats 
          s
s         c
t         i
a         s
e         s
b         o
          r
r         s
epap staeb 
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR
e                                                S
ruofdna~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUT

(24 row(s) affected)


2

ম্যাটল্যাব, ১০১

function f(H,W,S)
w=1:W;h=(0:H-3).';n=W+H-2;S(3*n)=' ';S([w;[2*n-h,3*n*ones(H-2,W-2),h+W+1];n-w+W+1])

1

সি ++, 398 বাইট

সংকলক ব্যবহৃত - পতাকা সহ জিসিসি 4.9.2-std=c++14

#include<bits/stdc++.h>
using namespace std;string s;vector<vector<char>> M;int w,h,p,i,j;void F(int x,int y){if(p<s.size()&&(((!y||y==h-1)&&x>=0&&x<w)||((!x||x==w-1)&&y>=0&&y<h))&&!M[y][x])M[y][x]=s[p++],F(x+1,y),F(x,y+1),F(x-1,y),F(x,y-1);}int main(){getline(cin,s);cin>>w>>h;M.resize(h,vector<char>(w,0));F(0,0);while(i<h){j=0;while(j<w){if(!M[i][j])M[i][j]=32;cout<<M[i][j++];}i++;cout<<endl;}}

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

#include<bits/stdc++.h>
using namespace std;

string s; // input string
vector<vector<char>> M; // output matrix
int w, h, p, i, j;
// w = width
// h = height
// p = iterator over s
// i, j = iterators used later for printing answer

void F( int x, int y )
{
    // If the coordinates (x, y) are either on the first row/column or the last row/column and are not already populated with the input characters, populate them
    if ( p < s.size() && ( ( ( y == 0 || y == h - 1 ) && x >= 0 && x < w ) || ( ( x == 0 || x == w - 1 ) && y >= 0 && y < h ) ) && !M[y][x] )
    {
        M[y][x] = s[p++];
        F( x + 1, y );
        F( x, y + 1 );
        F( x - 1, y );
        F( x, y - 1 );
    }
}

int main()
{
    getline( cin, s );
    cin >> w >> h;
    // Input taken !!

    M.resize( h, vector<char>( w, 0 ) ); // Fill the matrix with null characters initially

    F( 0, 0 ); // This function does all the work

    // Now printing the matrix
    while ( i < h )
    {
        j = 0;
        while ( j < w )
        {
            if ( !M[i][j] )
            {
                M[i][j] = ' ';  // Replace '\0' with ' '
            }
            cout << M[i][j++];
        }
        i++;
        cout << endl;
    }

}

char[][]পরিবর্তে ব্যবহার করে আপনি অক্ষর সংরক্ষণ করতে পারেন না ?
কর্সিকা

না, এর vector<vector<char>> M;M.resize(h,vector<char>(w,0));চেয়ে কিছুটা খাটোchar** M;M=new char*[h];while(i<h)M[i++]=new char[w]();
আনমল সিং জাগি

1

পার্ল, 193 195 বাইট

($s,$w,$h,$i,$y)=(@ARGV,0,2);
$o.=substr$s,$i,$w;
$i+=$w;
$o.=sprintf"\n%s%*s",substr($s,2*($w+$h)-$y++-3,1)||' ',$w-1,substr($s,$i++,1)while$y<$h;
print$o."\n".reverse(substr($s,$i,$w))."\n";

আমি নিশ্চিত এটির ব্যাপক উন্নতি করা যায়। আমি নুব >, <


0

জাভা 11, 180 বাইট

(s,w,h)->{var r=s.substring(0,w)+"\n";int i=w;for(var S=s.split("");i<w+h-2;)r+=S[3*w+2*h-i-5]+" ".repeat(w-2)+S[i++]+"\n";return r+new StringBuffer(s.substring(i,i+w)).reverse();}

এটি অনলাইনে চেষ্টা করুন (দ্রষ্টব্য: String.repeat(int)হিসাবে অনুকরণ করা হয়েছেrepeat(String,int) একই বাইট-কাউন্ট হয়েছে, কারণ জাভা 11 টি টিও তে এখনও নেই))

ব্যাখ্যা:

(s,w,h)->{               // Method with String & 2 int parameters and String return-type
  var r=s.substring(0,w)+"\n";
                         //  Result-String, starting at the the first row of output,
                         //  which is a substring in the range [0, `w`)
  int i=w;               //  Index-integer, starting at `w`
  for(var S=s.split(""); //  Split the input-String into a String-array of characters
      i<w+h-2;)          //  Loop `i` in the range [`w`, `w+h-2`)
    r+=                  //   Append the result-String with:
       S[3*w+2*h-i-5]    //    The character at index `2*w+2*h-4 - i+w-1`
       +" ".repeat(w-2)  //    Then append `w-2` amount of spaces
       +S[i++]           //    Then append the character at index `i`
       +"\n";            //    And a trailing new-line
  return r               //  After the loop, return `r` as result
         +new StringBuffer(s.substring(i,i+w)).reverse();
                         //  Appended with the last row of output,
                         //  which is a substring in the range [`i`, `i+w`) reversed

0

কাঠকয়লা , 4 বাইট

BNNS

এটি অনলাইনে চেষ্টা করুন (ভার্বোজ) অথবা এটি অনলাইনে চেষ্টা করুন (খাঁটি)

ব্যাখ্যা:

মূলত এই চ্যালেঞ্জের জন্য অন্তর্নির্মিত। প্রস্থ এবং উচ্চতা হিসাবে প্রথম দুটি পূর্ণসংখ্যা ইনপুট নিন এবং তৃতীয় ইনপুট-স্ট্রিং সহ একটি বাক্স সীমানা হিসাবে মুদ্রণ করুন:

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