ট্রায়ানগুলেটিং টেক্সট


39

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা কেবলমাত্র স্থান ব্যতীত প্রিন্টযোগ্য এএসসিআইআই অক্ষর ধারণ করার জন্য এবং একটি ধনাত্মক ত্রিভুজাকার সংখ্যা (1, 3, 6, 10, 15, ...) দৈর্ঘ্যে হওয়ার গ্যারান্টিযুক্ত স্ট্রিংয়ের মধ্যে নেয় ।

একই স্ট্রিংটি মুদ্রণ করুন বা প্রত্যাবর্তন করুন, তবে ফাঁকা স্থানগুলি ব্যবহার করে ত্রিভুজ আকারে। কিছু উদাহরণগুলি আমার অর্থটি সর্বোত্তমভাবে প্রদর্শন করবে:

যদি ইনপুট হয় Rতবে আউটপুট হবে

R

যদি ইনপুট হয় catতবে আউটপুট হবে

 c
a t

যদি ইনপুট হয় monk3yতবে আউটপুট হবে

  m
 o n
k 3 y

যদি ইনপুট হয় meanIngfu1তবে আউটপুট হবে

   m
  e a
 n I n
g f u 1

যদি ইনপুট হয় ^/\/|\/[]\তবে আউটপুট হবে

   ^
  / \
 / | \
/ [ ] \

যদি ইনপুট হয়

Thisrunofcharactersismeanttohavealengththatcanbeexpressedasatriangularnumber.Diditwork?Youtellme,Ican'tcountverywell,ok?

তারপরে আউটপুট হবে

              T
             h i
            s r u
           n o f c
          h a r a c
         t e r s i s
        m e a n t t o
       h a v e a l e n
      g t h t h a t c a
     n b e e x p r e s s
    e d a s a t r i a n g
   u l a r n u m b e r . D
  i d i t w o r k ? Y o u t
 e l l m e , I c a n ' t c o
u n t v e r y w e l l , o k ?

মূলত, ত্রিভুজাকার দৈর্ঘ্যের সাবস্ট্রিংগুলির মধ্যে নিউলাইনগুলি সন্নিবেশ করা হয়, সমস্ত অক্ষরের মধ্যে ফাঁকা স্থান যুক্ত হয় এবং প্রতিটি লাইনের ত্রিভুজ আকারের সাথে খাপ খালি করার জন্য ফাঁকা স্থান যুক্ত থাকে।

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

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।


স্ট্রিংয়ের দৈর্ঘ্য কোনও পরম সর্বোচ্চ হতে পারে?
জিওকাভেল

@ জোকাভেল আপনার ভাষা সাধারণত পরিচালনা করতে পারে এমন দৈর্ঘ্যের জন্য এটি কাজ করা উচিত।
ক্যালভিনের শখ

11
যে কেউ এখনও তাদের আপ রাখেনি তাদের জন্য এখানে একটি ক্রিসমাস ট্রি রয়েছে। * / \ / | \ / | ণ \ / | ণ | \ / ণ | ণ | \ / || ণ | ণ \ / ণ ||| ণ | \ / ণ || ণ ||| \ / || ণ | || ও | \ / | ও || Skype ও || ও \
টিমি

উত্তর:


9

পাইথ, 22 বাইট

jua+L\ GjdHfTczsM._UzY

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

ব্যাখ্যা:

jua+L\ GjdHfTczsM._UzY   implicit: z = input string
                   Uz    create the list [0, 1, ..., len(z)-1]
                 ._      all prefixes of this list: [[0], [0,1], [0,1,2], ...]
               sM        sum up each sublist: [0, 1, 3, 6, 10, ...]
             cz          split z at these indices
           fT            remove all the unnecessary empty strings
                         this gives us the list of strings of the triangle
 u                   Y   reduce this list, with the initial value G = []
   +L\ G                    prepend a space to each string in G
        jdH                 join the current string with spaces
  a                         and append it to G
j                        print each string on a separate line

12

পাইথন, 81 বাইট

def f(s,p=''):
 i=-int(len(2*s)**.5)
 if s:f(s[:i],p+' ');print p+' '.join(s[i:])

একটি পুনরাবৃত্তি ফাংশন। শেষে থেকে যায় s, কাটা এবং অক্ষর মুদ্রণ। অক্ষরের সংখ্যাটি দৈর্ঘ্য থেকে গণনা করা হয় s। ফাংশনটি পুনরাবৃত্ত কলগুলির বিপরীত ক্রমে মুদ্রণের জন্য সেট আপ করা হয়, যা sখালি হলে শেষ হয় এবং তারপরে লাইনটি ব্যাক আপ সমাধান করে। প্রতিটি স্তর, উপসর্গ pএকটি অতিরিক্ত স্থান যুক্ত করা হয়।

পাইথন 3-তে, এটি ifসংক্ষিপ্ত সার্কিটের মাধ্যমে করা যেতে পারে, যদিও এটি অক্ষর সংরক্ষণ করে বলে মনে হচ্ছে না:

def f(s,p=''):i=-int(len(2*s)**.5);s and[f(s[:i],p+' '),print(p+' '.join(s[i:]))]

অসমতার শৃঙ্খলা সহ সমান-দীর্ঘ বিকল্প:

def f(s,p=''):i=-int(len(2*s)**.5);''<s!=f(s[:i],p+' ')!=print(p+' '.join(s[i:]))

উভয় printএবং fফিরে None, যা ব্যবহার করা শক্ত।


1
এটা বেশ চালাক। একসাথে স্ট্রিংটি এক সারি কেটে ফেললে, আপনি এখনও শীর্ষস্থানীয় স্পেসগুলির সংখ্যা গণনা করতে ত্রিভুজাকার দৈর্ঘ্যের স্ট্রিংটি শেষ করেন।
xsot

6

রেটিনা , 108 102 94 87 82 64 63 বাইট

আমাকে আমার আসল পদ্ধতির অনুসরণ করার জন্য Sp3000 ধন্যবাদ, যা বাইট গণনাটি 108 থেকে কমিয়ে 82 এ নিয়েছে।

কোবিকে প্রচুর ধন্যবাদ, যিনি আরও অনেক মার্জিত সমাধান পেয়েছিলেন, যা আমাকে তার উপরে আরও 19 বাইট সংরক্ষণ করতে দেয়।

S_`(?<=^(?<-1>.)*(?:(?<=\G(.)*).)+)
.
$0 
m+`^(?=( *)\S.*\n\1)
<space>

যেখানে <space>একটি একক স্থানের অক্ষর উপস্থাপন করে (যা অন্যথায় এসই দ্বারা ছড়িয়ে দেওয়া হবে)। গণনা উদ্দেশ্যে, প্রতিটি লাইন পৃথক ফাইলে যায় এবং একটি \nআসল লাইনফিড অক্ষর দিয়ে প্রতিস্থাপন করা উচিত। সুবিধার জন্য, আপনি -sপতাকা সহ একটি একক ফাইল থেকে কোড চালাতে পারেন ।

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

ব্যাখ্যা

ঠিক আছে ... যথারীতি আমি এখানে ভারসাম্যপূর্ণ গ্রুপগুলিতে সম্পূর্ণ পরিচয় দিতে পারি না। প্রাইমারের জন্য আমার স্ট্যাক ওভারফ্লো উত্তরটি দেখুন

S_`(?<=^(?<-1>.)*(?:(?<=\G(.)*).)+)

প্রথম স্তরটি একটি Sপ্লিট পর্যায়, যা ক্রমবর্ধমান দৈর্ঘ্যের লাইনে ইনপুট বিভক্ত করে। _ইঙ্গিত করে যে খালি খন্ডে বিভাজন (যা শুধুমাত্র শেষ প্রভাবিত করে, কারণ সেখানে গত অবস্থানে কোনো মিল হতে হবে) থেকে বাদ দেওয়া হবে। রেজেক্স নিজেই সম্পূর্ণ চেহারাতে অন্তর্ভুক্ত থাকে তাই এটি কোনও অক্ষরের সাথে মেলে না, তবে কেবল অবস্থানগুলি।

এই অংশটি আমি খুঁজে পেয়েছি এমন কিছু অতিরিক্ত গলফিউডের সাথে কোবির সমাধানের ভিত্তিতে তৈরি। নোট করুন যে লুকের পিছনের অংশগুলি .NET- র ডান থেকে বামে মিলছে, সুতরাং নীচের ব্যাখ্যাটি নীচে থেকে সেরাে পড়া উচিত। আমি \Gস্পষ্টতার জন্য ব্যাখ্যায় আরও একটি প্রবেশ করিয়েছি, যদিও প্যাটার্নটি কাজ করার জন্য এটি প্রয়োজনীয় নয়।

(?<=
  ^         # And we ensure that we can reach the beginning of the stack by doing so.
            # The first time this is possible will be exactly when tri(m-1) == tri(n-1),
            # i.e. when m == n. Exactly what we want!
  (?<-1>.)* # Now we keep matching individual characters while popping from group <1>.
  \G        # We've now matched m characters, while pushing i-1 captures for each i
            # between 1 and m, inclusive. That is, group <1> contains tri(m-1) captures.
  (?:       
    (?<=
      \G    # The \G anchor matches at the position of the last match.
      (.)*  # ...push one capture onto group <1> for each character between here
            # here and the last match.
    )       # Then we use a lookahead to...
    .       # In each iteration we match a single character.
  )+        # This group matches all the characters up to the last match (or the beginning
            # of the string). Call that number m.
)           # If the previous match was at position tri(n-1) then we want this match
            # to happen exactly n characters later.

আমি এখনও এখানে কোবির কাজের প্রশংসা করছি। এটি প্রাইম টেস্টিং রেগেক্সের চেয়ে আরও মার্জিত। :)

পরবর্তী পর্যায়ে চলে আসা যাক:

.
$0 

সরল: প্রতিটি অ-লাইনফিড অক্ষরের পরে একটি স্থান সন্নিবেশ করান।

m+`^(?=( *)\S.*\n\1)
<space>

এই শেষ পর্যায়ে ত্রিভুজ গঠনের জন্য সমস্ত লাইন সঠিকভাবে প্রবেশ করে। mকরতে আপনাকে মাত্র চলিত একাধিক লাইন মোড ^একটি লাইন শুরুতে মেলে। +এই পর্যায়ে পুনরাবৃত্তি অক্ষিপট বলে যতক্ষণ না স্ট্রিং পরিবর্তন স্টপ (যা, এই ক্ষেত্রে উপায়ে যে Regex আর ম্যাচ)।

^      # Match the beginning of a line.
(?=    # A lookahead which checks if the matched line needs another space.
  ( *) # Capture the indent on the current line.
  \S   # Match a non-space character to ensure we've got the entire indent.
  .*\n # Match the remainder of the line, as well as the linefeed.
  \1   # Check that the next line has at least the same indent as this one.
)

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


@ _ @ হ্যাক কী করে?
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ এখন আরও 100% আশ্চর্যতার সাথে কোবির সৌজন্যে।
মার্টিন এন্ডার

6

ক্যান্ডি , 67 59 57 বাইট

&iZ1-=yZ1+Z*2/>{0g}0=z@1i&{|.}bYR(" ";=)ZR(=a&{;}" ";)"\n";Y1-=ya1j

&1-8*1+r1-2/=y@1i&{|.}bYR(" ";=)ZR(=a&{;}" ";)"\n";Y1-=ya1j

&8*7-r1-2/=y@1i&{|.}bYR(" ";=)ZR(=a&{;}" ";)"\n";Y1-=ya1j

বা:

          &
         8 *
        7 - r
       1 - 2 /
      = y @ 1 i
     & { | . } b
    Y R ( "   " ;
   = ) Z R ( = a &
  { ; } "   " ; ) "
 \ n " ; Y 1 - = y a
1 j

দীর্ঘ ফর্ম:

stackSz
digit8    # Y = (sqrt((numCh - 1) * 8 + 1) - 1) / 2   using pythagorean
mult      # Y = (sqrt(numCh * 8 - 7) - 1) / 2  equivalent but shorter
digit7
sub
root
digit1
sub
digit2
div
popA
YGetsA
label digit1
incrZ
stackSz   # bail if we're out of letters
if
  else
  retSub
endif
stack2
pushY     # print the leading spaces (" " x Y)
range1
while
  " " printChr
  popA
endwhile
pushZ
range1      # output this row of characters (Z of them)
while
  popA
  stack1
  stackSz
  if
    printChr    # bail on unbalanced tree
  endif
  " " printChr
endwhile
"\n" printChr
pushY
digit1
sub
popA
YGetsA
stack1
digit1 jumpSub   # loop using recursion

হ্যাঁ, আমি ক্রিসমাস-ওয়াই অনুভব করেছি।
ডেল জনসন

5

সিজেম, 27 26 বাইট

1 বাইট সংরক্ষণের জন্য Sp3000 ধন্যবাদ।

Lq{' @f+_,)@/(S*N+a@\+\s}h

আশ্চর্যজনকভাবে পাইথের কাছাকাছি, দেখা যাক এটি গল্ফ করা যায় কিনা ...

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

ব্যাখ্যা

L        e# Push an empty array to build up the lines in.
q        e# Read input.
{        e# While the top of the stack is truthy (non-empty)...
  ' @f+  e#   Prepend a space to each line we already have.
  _,)    e#   Get the number of lines we already have and increment.
  @/     e#   Split the input into chunks of that size.
  (S*    e#   Pull off the first chunk (the next line) and join with spaces.
  N+     e#   Append a linefeed.
  a@\+   e#   Append it to our list of lines.
  \s     e#   Pull up the other chunks of the input and join them back into one string.
}h

কেন এটা কাজ করে না যদি আমি পরিবর্তন ' করতে S???
জিওকাভেল

@ জোকাভেল কারণ Sএকটি স্ট্রিং, কোনও চরিত্র নয়, সুতরাং fলাইনের তালিকার পরিবর্তে সেই স্ট্রিংয়ের উপরে মানচিত্র তৈরি করবে।
মার্টিন ইন্ডার

এটা আমার অনুমান ছিল। এস কে স্ট্রিং তৈরি করার যৌক্তিকতা সম্পর্কে আপনার কি ধারণা আছে?
জিওকাভেল

পছন্দ করুন
মার্টিন ইন্ডার

5

রুবি, 84 77 73 বাইট

->v{1.upto(n=v.size**0.5*1.4){|i|puts" "*(n-i)+v[i*(i-1)/2,i].chars*" "}}

77 বাইট

->v{0.upto(n=(v.size*2)**0.5-1){|i|puts" "*(n-i)+v[i*(i+1)/2,i+1].chars*" "}}

rস্টিভিভারিলের পরামর্শ অনুসারে ভেরিয়েবল অপসারণ করে আরও কয়েকটি বাইট হ্রাস করা হয়েছে।

84 বাইট

->v{n=(v.size*2)**0.5-1;0.upto(n){|i|puts" "*(n-i)+v[(r=i*(i+1)/2)..r+i].chars*" "}}

Ungolfed:

->v {
  1.upto(n=v.size**0.5*1.4) { |i|
    puts" "*(n-i)+v[i*(i-1)/2,i].chars*" "
  }
}

প্রথমে ইনপুট স্ট্রিং থেকে ত্রিভুজাকার সংখ্যা গণনা করা হচ্ছে

n=v.size**0.5*1.4

উদাহরণস্বরূপ, ইনপুট স্ট্রিংয়ের আকার 120 এবং আমাদের ত্রিভুজাকার সংখ্যা এন, 15 হবে 15

puts" "*(n-i)+v[i*(i-1)/2,i].chars*" "

উপরের লাইনে এটি স্ট্রিংয়ের পরে শূণ্যস্থানগুলি মুদ্রণ করে যা নিম্নলিখিত প্যাটার্নটি ব্যবহার করে ইনপুট স্ট্রিং থেকে আনা হয়

[[0,0],[1,2],[3,5],[6,9]]

ব্যবহার:

f=->v{1.upto(n=v.size**0.5*1.4){|i|puts" "*(n-i)+v[i*(i-1)/2,i].chars*" "}}
f["Thisrunofcharactersismeanttohavealengththatcanbeexpressesasatriangularnumber.Diditwork?Youtellme,Ican'tcountverywell,ok?"]
              T
             h i
            s r u
           n o f c
          h a r a c
         t e r s i s
        m e a n t t o
       h a v e a l e n
      g t h t h a t c a
     n b e e x p r e s s
    e s a s a t r i a n g
   u l a r n u m b e r . D
  i d i t w o r k ? Y o u t
 e l l m e , I c a n ' t c o
u n t v e r y w e l l , o k ?

বাহ, আমাদের পদ্ধতিগুলি খুব একই রকম, তবে আমাদের মনে হয় গল্ফিংয়ের পরিপূরক জ্ঞান রয়েছে। আমি জানতাম না যে uptoকোনও পূর্ণসংখ্যার যুক্তির প্রয়োজন হয় না, ( timesঅবশ্যই তা হয়)) আমি আমার উত্তরের একটি সংশোধন করে আপনার সিনট্যাক্সের কিছু সংযুক্ত করেছি। আপনার জন্য আমার সবচেয়ে বড় টিপটি হ'ল, আপনার সেই পরিবর্তনশীলের দরকার নেই r। কেবলমাত্র ,পরিবর্তে এর পরিবর্তে ..এবং কমার পরে সংখ্যাটি হ'ল পরিসীমা শেষ হওয়ার পরিবর্তে মোট উপাদানগুলির সংখ্যা of
স্তর নদী সেন্ট

সত্য। আমি এখনই আমার উত্তর আপডেট করছি এমন টিপটির জন্য ধন্যবাদ :)
ভাসু আদারি

4

পাইথ, 27 বাইট

Js.IsSGlzWz+*-J=hZdjd<~>zZZ

                               z = input()
                               Z = 0
                               d = ' '
    sSG                        G -> tri(G)
  .I   lz                      Find the (float) input whose output is len(z).
 s                             Convert to int.
J                              Save as J.
         Wz                    while z:
               =hZ             Z += 1
            *-J  Zd            Generate J-Z spaces.
                      ~>zZ     Remove the first Z characters from z.
                     <    Z    Generate those first Z characters.
                   jd          Join on spaces.
           +                   Add the two together and print.

পরীক্ষা স্যুট

একটি আকর্ষণীয় পদ্ধতির - প্রয়োজনীয় এবং ব্যবহার .I। সম্ভবত গল্ফযোগ্য।


4

সি, 138 136 134 বাইট

একটি ইনপুট হিসাবে একটি স্ট্রিং লাগে:

j,r,k,a;f(char*s){j=strlen(s);r=k=sqrt(1+8*j)/2;for(;r--;printf("\n")){for(j=r;j--;)printf(" ");for(j=k-r;j--;)printf("%c ",s[a++]);}}

আপনি এখনও পর্যন্ত জাভা স্ক্রিপ্টটি সি দিয়ে বাইট করেছেন বলে মনে করছেন: ডি
মার্ক কে কোয়ান

@ মারককোয়ান হ্যাঁ, স্পষ্টতই। আমি আশা করি আমি এটি আরও ছোট করে দেব! :)
সাহিল অরোরা

@SahilArora - তুমি প্রতিস্থাপন করতে পারেন printf(" ")এবং printf("\n")সঙ্গে puts(" ")এবং puts("\n")। প্রতিটি প্রতিকল্পন আপনি 2 বাইট সংরক্ষণ করতে হবে :)।
enhzflep

@ এঞ্জহ্লেফ্লেপ আমি ইতিমধ্যে এটি চেষ্টা করেছি, এটি একটি দ্ব্যর্থক ফলাফল দিয়েছে!
সাহিল অরোরা 9

উহু. :( জিসিসি ৪.7.১ সহ উইন on এ এখানে দুর্দান্ত কাজ করে - আমি অনুমান করি যে এটি জাভাস্ক্রিপ্টকে মারার জন্য
প্রিন্টফ

4

রুবি অ্যাপ্রোভ 2 রেভ 1, 76 বাইট

->s{s=s.chars*' '
0.upto(w=s.size**0.5-1){|i|puts' '*(w-i)+s[i*i+i,i*2+2]}}

ভাসু আদারীর উত্তর, এবং আমার নিজের কয়েকটি টুইস্ট থেকে সিনট্যাক্স ধারণা ব্যবহার করে অনুকূলিত Op

রুবি অ্যাপ্রোভ 2 রেভ 0, 93 বাইট

->s{s=s.chars.to_a.join(' ')
w=(s.size**0.5).to_i
w.times{|i|puts' '*(w-i-1)+s[i*i+i,i*2+2]}}

সম্পূর্ণ ভিন্ন পন্থা। প্রথমে আমরা ইনপুটটির অক্ষরগুলির মধ্যে ফাঁকা স্থান যুক্ত করি। তারপরে আমরা সারি লাইন একের পর এক মুদ্রণ করব।

রুবি অ্যাপ্রোচ 1, 94 বাইট

->s{n=-1;w=((s.size*2)**0.5).to_i
(w*w).times{|i|print i/w+i%w<w-1?'':s[n+=1],-i%w==1?$/:' '}}

এটি প্রত্যাশার চেয়ে অনেক বেশি সময় শেষ হয়েছিল।

w নীচের সারিতে মুদ্রণযোগ্য অক্ষরের সংখ্যা বা সমতুল্যভাবে রেখার সংখ্যা রয়েছে।

প্রতিটি লাইনে wহোয়াইটস্পেসের অক্ষর থাকে (যার শেষটি নিউলাইন)


3

মিনকোলাং 0.14 , 42 বাইট

(xid2;$I2*`,)1-[i1+[" "o]lrx" "$ii-1-D$O].

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

ব্যাখ্যা

(                Open while loop
 x               Dump top of stack
  i              Loop counter (i)
   d2;           Duplicate and square
      $I2*       Length of input times two
          `,     Push (i^2) <= (length of input)
            )    Close for loop; pop top of stack and exit when it's 0

1-[                              Open for loop that repeats sqrt(len(input))-1 times
   i1+[                          Open for loop that repeats (loop counter + 1) times
       " "o                      Push a space then read in character from input
           ]                     Close for loop
            l                    Push 10 (newline)
             r                   Reverse stack
              x                  Dump top of stack
               " "               Push a space
                  $i             Push the max iterations of for loop
                    i-           Subtract loop counter
                      1-         Subtract 1
                        D        Pop n and duplicate top of stack n times
                         $O      Output whole stack as characters
                           ].    Close for loop and stop.

2
এমন নিখুঁত বাইট গণনা! সাবাশ!
তানমাথ

1
@ ট্যানম্যাথ কিন্তু 42 টি ত্রিভুজাকার সংখ্যা নয়!
পাওলো ইবারম্যান

3

পাইথন 2, 88 85 বাইট

s=t=raw_input()
i=1
while s:print' '*int(len(t*2)**.5-i)+' '.join(s[:i]);s=s[i:];i+=1

3 বাইট সংরক্ষণের জন্য xnor ধন্যবাদ।


সংক্ষিপ্তকরণের sজায়গাগুলির গণনা হ্রাস করে না ?
xnor

হ্যাঁ সঠিক. জমা দেওয়ার আগে আমি একটি অস্থায়ী পরিবর্তনশীল সরিয়ে ফেললাম তবে বুঝতে পারিনি যে এটি কোডটি অকার্যকর করেছে।
xsot

আপনি যদি আগে পছন্দ করেন তবে ব্যাক-আপ সংরক্ষণ করেন S=s=raw_input()?
xnor

ভাল পরামর্শ। আমি মনে করি সম্ভবত একটি সংক্ষিপ্ত সামগ্রিক কৌশল আছে যদিও।
xsot

ক্রস আউট 88 টি মজাদার দেখাচ্ছে
গোলাপিফ্লোয়েডএক্স 33

3

সিজেম, 50 বাইট

q:QQ,1>{,{),:+}%:RQ,#:IR2ew<{~Q<>:LS*L,I+(Se[N}%}&

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

ব্যাখ্যা

q:QQ,1>{  e# Only proceed if string length > 1, otherwise just print.
,{),:}%:R e# Generates a list of sums from 0 to k, where k goes from 0 to the length of the string [0,1,3,6,10,15,21,...]
Q,#:I     e# Find the index of the length of the string in the list
R2ew<     e# Make a list that looks like [[0,1],[1,3],[3,6],...,[?,n] ]where n is the length of the string 
{~Q<>:L   e# Use that list to get substrings of the string using the pairs as start and end indices
S*        e# Put spaces between the substrings
L,I+(Se[N e# (Length of the substring + Index of string length in sum array -1) is the length the line should be padded with spaces to. Add a new line at the end.
%}& 

2

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

w=>{r='';for(s=j=0;j<w.length;j+=s++);for(i=j=0;w[j+i];j+=++i)r+=Array(s-i-1).join` `+w.slice(j,i+j+1).split``.join` `+'<br>';return r}

ডি-গল্ফ + ডেমো:

function t(w) {
    r = '';
    for (s = j = 0; j < w.length; j += s++);
    for (i = j = 0; w[j + i]; j += ++i) r += Array(s - i - 1).join` ` + w.slice(j, i + j + 1).split``.join` ` + '<br>';
    return r;
}

document.write('<pre>' + t(prompt()));


এর লক্ষ্য কী for (s = j = 0; j < w.length; j += s++);? এছাড়াও, এ এর ​​অভ্যন্তরে <pre>, আপনি এর \nপরিবর্তে ব্যবহার করতে পারেন <br>। এছাড়াও, আপনি এটি উল্লেখ করতে ভুলে গেছেন যে এটি ES6।
ইসমাইল মিগুয়েল

প্রথম লুপের লক্ষ্যটি হ'ল শেষ লাইনের দৈর্ঘ্য গণনা করা, যাতে প্রতিটি লাইন সঠিকভাবে ইনডেন্ট করা যায়।
নিকেল

2

জাভা, 258 194

Golfed:

String f(String a){String r="";int t=(((int)Math.sqrt(8*a.length()+1))-1)/2-1;int i=0,n=0;while(n++<=t){for(int s=-1;s<t-n;++s)r+=" ";for(int j=0;j<n;++j)r+=a.charAt(i++)+" ";r+="\n";}return r;}

Ungolfed:

public class TriangulatingText {

  public static void main(String[] a) {
    // @formatter:off
    String[] testData = new String[] {
      "R",
      "cat",
      "monk3y",
      "meanIngfu1",
      "^/\\/|\\/[]\\",
      "Thisrunofcharactersismeanttohavealengththatcanbeexpressedasatriangularnumber.Diditwork?Youtellme,Ican'tcountverywell,ok?",
    };
    // @formatter:on

    for (String data : testData) {
      System.out.println("f(\"" + data + "\")");
      System.out.println(new TriangulatingText().f(data));
    }
  }

  // Begin golf
  String f(String a) {
    String r = "";
    int t = (((int) Math.sqrt(8 * a.length() + 1)) - 1) / 2 - 1;
    int i = 0, n = 0;
    while (n++ <= t) {
      for (int s = -1; s < t - n; ++s)
        r += " ";
      for (int j = 0; j < n; ++j)
        r += a.charAt(i++) + " ";
      r += "\n";
    }
    return r;
  }
  // End golf
}

প্রোগ্রাম আউটপুট:

f("R")
R 

f("cat")
 c 
a t 

f("monk3y")
  m 
 o n 
k 3 y 

f("meanIngfu1")
   m 
  e a 
 n I n 
g f u 1 

f("^/\/|\/[]\")
   ^ 
  / \ 
 / | \ 
/ [ ] \ 

f("Thisrunofcharactersismeanttohavealengththatcanbeexpressedasatriangularnumber.Diditwork?Youtellme,Ican'tcountverywell,ok?")
              T 
             h i 
            s r u 
           n o f c 
          h a r a c 
         t e r s i s 
        m e a n t t o 
       h a v e a l e n 
      g t h t h a t c a 
     n b e e x p r e s s 
    e d a s a t r i a n g 
   u l a r n u m b e r . D 
  i d i t w o r k ? Y o u t 
 e l l m e , I c a n ' t c o 
u n t v e r y w e l l , o k ? 

কিছু বাইট সংরক্ষণ করতে আপনি সম্ভবত স্ট্যাটিকালি System.out আমদানি করতে পারেন।
রেন্ডারস00

import static System.out;25 বাইট, এবং System.7 বাইট হয়। এটি তিনবার এবং 21 <25 ব্যবহৃত হয় সুতরাং এটি আকারটি 4 বাইট দ্বারা বাড়িয়ে তুলবে । ভাল সীসা, যদিও, স্থিতিশীল আমদানি স্থান বাঁচাতে পারে এবং সবাই তাদের সম্পর্কে জানে না।

1
আমি পুরানো উত্তর দিয়ে যাচ্ছিলাম যখন আমি এটি পেয়েছি: "একটি প্রোগ্রাম বা ফাংশন লিখুন " যা আমি প্রথমে বুঝতে পারি নি। শ্রেণিবদ্ধ জিনিসপত্র সঞ্চয় করা স্থান সংরক্ষণ করা ri আমি এটি একটি সঠিক ফাংশন হিসাবে তৈরি করেছি এবং শেভ বন্ধ করতে আরও কয়েকটি বাইট পেয়েছি।

1

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

a=>(y=z=0,(f=p=>p?" ".repeat(--p)+a.split``.slice(y,y+=++z).join` `+`
`+f(p):"")(Math.sqrt(2*a.length)|0))

স্ট্রিংটি তৈরি করতে লুপের পরিবর্তে পুনরাবৃত্তি ব্যবহার করে।

দীর্ঘতম সারির দৈর্ঘ্য খুঁজতে, n তম ত্রিদলীয় সংখ্যা জন্য সূত্র ব্যবহার T_nকরা হয় T_n = (n^2 + n)/2। চতুর্ভুজ সূত্রটি ব্যবহারের nজন্য দেওয়া এবং সমাধান করা T_n, আমাদের কাছে রয়েছে:

1/2 * n^2 + 1/2 * n - T_n = 0

a = 1/2, b = 1/2, c = -T_n

-1/2 + sqrt(1/2^2 - 4*1/2*-T_n)   
------------------------------- = sqrt(1/4 + 2*T_n) - 1/2
             2*1/2

দেখা যাচ্ছে যে মেঝে দেওয়ার পরে, বর্গাকারের অভ্যন্তরে 1/4 যোগ করা ফল পরিবর্তন করে না, তাই দীর্ঘতম সারির সূত্রটি Math.sqrt(2*a.length)|0



1

পাওয়ারশেল, 69 বাইট

($args|% t*y|?{$r+="$_ ";++$p-gt$l}|%{$r;rv r,p;$l++})|%{' '*--$l+$_}

কম গল্ফ পরীক্ষা স্ক্রিপ্ট:

$f = {

(
    $args|% t*y|?{  # test predicate for each char in a argument string 
        $r+="$_ "   # add current char to the result string
        ++$p-gt$l   # return predicate value: current char posision is greater then line num
    }|%{            # if predicate is True
        $r          # push the result string to a pipe
        rv r,p      # Remove-Variable r,p. This variables will be undefined after it.
        $l++        # increment line number
    }

)|%{                # new loop after processing all characters and calculating $l
    ' '*--$l+$_     # add spaces to the start of lines
}                   # and push a result to a pipe

}

@(
    ,("R",
    "R ")

    ,("cat",
    " c ",
    "a t ")

    ,("monk3y",
    "  m ",
    " o n ",
    "k 3 y ")

    ,("meanIngfu1",
    "   m ",
    "  e a ",
    " n I n ",
    "g f u 1 ")

    ,("^/\/|\/[]\",
    "   ^ ",
    "  / \ ",
    " / | \ ",
    "/ [ ] \ ")

    ,("Thisrunofcharactersismeanttohavealengththatcanbeexpressedasatriangularnumber.Diditwork?Youtellme,Ican'tcountverywell,ok?",
    "              T ",
    "             h i ",
    "            s r u ",
    "           n o f c ",
    "          h a r a c ",
    "         t e r s i s ",
    "        m e a n t t o ",
    "       h a v e a l e n ",
    "      g t h t h a t c a ",
    "     n b e e x p r e s s ",
    "    e d a s a t r i a n g ",
    "   u l a r n u m b e r . D ",
    "  i d i t w o r k ? Y o u t ",
    " e l l m e , I c a n ' t c o ",
    "u n t v e r y w e l l , o k ? ")

    ,("*/\/|\/|o\/|o|\/o|o|\/||o|o\/o|||o|\/o||o|||\/||o|||o|\/|o|||o||o\",
    "          * ",
    "         / \ ",
    "        / | \ ",
    "       / | o \ ",
    "      / | o | \ ",
    "     / o | o | \ ",
    "    / | | o | o \ ",
    "   / o | | | o | \ ",
    "  / o | | o | | | \ ",
    " / | | o | | | o | \ ",
    "/ | o | | | o | | o \ ")

) | % {
    $s,$expected = $_
    $result = &$f $s
    "$result"-eq"$expected"
    $result
}

আউটপুট:

True
R
True
 c
a t
True
  m
 o n
k 3 y
True
   m
  e a
 n I n
g f u 1
True
   ^
  / \
 / | \
/ [ ] \
True
              T
             h i
            s r u
           n o f c
          h a r a c
         t e r s i s
        m e a n t t o
       h a v e a l e n
      g t h t h a t c a
     n b e e x p r e s s
    e d a s a t r i a n g
   u l a r n u m b e r . D
  i d i t w o r k ? Y o u t
 e l l m e , I c a n ' t c o
u n t v e r y w e l l , o k ?
True
          *
         / \
        / | \
       / | o \
      / | o | \
     / o | o | \
    / | | o | o \
   / o | | | o | \
  / o | | o | | | \
 / | | o | | | o | \
/ | o | | | o | | o \

0

সি #, 202

string r(string s,List<string> o,int i=1){o=o.Select(p=>" "+p).ToList();o.Add(String.Join(" ",s.Substring(0,i).ToCharArray()));return s.Length==i?String.Join("\n",o):r(s.Substring(i,s.Length-i),o,i+1);}

আমি জানি না এটি কোড-গল্ফে বৈধ কিনা তবে, ফাংশন গণনায় একটি তালিকা পাস করা কি? ফাংশনের বাইরে ঘোষিত তালিকা <স্ট্রিং> ব্যতীত আমি এটি পুনরুক্ত করার কোনও উপায় খুঁজে পাচ্ছি না তাই আমি এটি পরামিতি হিসাবে রেখেছি।

ব্যবহার:

 r("1",new List<string>());
 r("123", new List<string>());
 r("123456", new List<string>());
 r("Thisrunofcharactersismeanttohavealengththatcanbeexpressedasatriangularnumber.Diditwork?Youtellme,Icanstcountverywell,ok?",new List<string>());

0

সি, 102 বাইট

i,j;main(n,s){for(n=sqrt(strlen(gets(s))*2);j<n;printf("%*.1s",i>1?2:i*(n-j),i++>j?i=!++j,"\n":s++));}


0

আর, 142 বাইট

খুব নিশ্চিত যে আমি এটিকে আরও নামিয়ে আনতে পারি। এখনও যে কাজ করে। আমার মনে হচ্ছে আমি একটি সহজ পুনরাবৃত্তি মিস করছি - তবে আমি এটি সঠিকভাবে সংক্ষিপ্ত করতে সক্ষম হইনি।

f=function(a){n=nchar(a);l=which(cumsum(1:n)==n);w=strsplit(a,c())[[1]];for(i in 1:l){cat(rep(" ",l-i),sep="");cat(w[1:i],"\n");w=w[-(1:i)]}}

ungolfed

f=function(a){
    n = nchar(a)                 #number of characters
    l= which(cumsum(1:n)==n)     #which triangle number
    w= strsplit(a,c())[[1]]      #Splits string into vector of characters
    for (i in 1:l) {
        cat(rep(" ",l-i),sep="") #preceeding spaces
        cat(w[1:i],"\n")         #Letters
        w=w[-(1:i)]              #Shifts removes letters (simplifies indexing)
    }
}

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