একটি স্ট্রিং বিস্ফোরণ


34

যে কোনও স্ট্রিং দেওয়া হয়েছে, এটিকে ত্রিভুজ আকারে মুদ্রণ করুন যেখানে প্রতিটি তির্যকটি বরাবর পাঠ্যটি উপরের দিকে চলে যায়। উদাহরণস্বরূপ, "Hello World"উচিত একটি আউটপুট:

                    d
                  l  
                r   d
              o   l  
            W   r   d
              o   l  
        o   W   r   d
      l       o   l  
    l   o   W   r   d
  e   l       o   l  
H   l   o   W   r   d
  e   l       o   l  
    l   o   W   r   d
      l       o   l  
        o   W   r   d
              o   l  
            W   r   d
              o   l  
                r   d
                  l  
                    d

যথাযথ বিন্যাস বজায় রাখার জন্য এক সারিতে প্রতিটি অক্ষরের মধ্যে স্থান কমপক্ষে 1 হওয়া উচিত be


1
আমরা কি ধরে নিতে পারি যে স্ট্রিংটি খালি নেই?
মিঃ এক্সকোডার

@ Mr.Xcoder হ্যাঁ, তুমি পার
Machiavelli

1
একটি সারিতে প্রতিটি অক্ষরের মধ্যে স্থান অবশ্যই কমপক্ষে 1 হওয়া উচিত : এর অর্থ কি H l o W r dএটি একটি বৈধ কেন্দ্রের সারি? জিজ্ঞাসা করুন কারণ আপনার উদাহরণে প্রতিটি সারিতে প্রতিটি অক্ষরের মধ্যে 3 টি স্পেস রয়েছে।
এমিগনা

1
@ এমিগনা আমি আপনাকে প্রশ্ন ভুল বুঝেছি, আমার ক্ষমা। হ্যাঁ, আপনার উদাহরণটি বৈধ হবে।
মাচিয়াভেলি

1
শীর্ষস্থানীয় বা পিছনে স্থান অনুমোদিত?
লুইস মেন্ডো

উত্তর:


19

কাঠকয়লা , 10 7 বাইট

↗ELθ✂θιUE¹

এটি অনলাইন চেষ্টা করুন! এটি অনলাইন চেষ্টা করুন! লিঙ্কগুলি কোডটির ভার্জোজ সংস্করণে রয়েছে। ব্যাখ্যা:

    ↗       Print up and to the right
     ELθ✂θι All suffixes of the input, as a list down and to the right
    UE¹     Insert blank columns

প্রথমবার UEকমান্ডটি ব্যবহার করতে পেলাম ।


আমি জানতাম চারকোল এখানে প্রথম উত্তরগুলির মধ্যে একটি হবে .. নিজেকে শুরু করার জন্য প্রায় লোভনীয় ছিল, তবে সময় মতো সমাধান শেষ করার জন্য আমি এটির সাথে অনভিজ্ঞ হওয়ার উপায়, এবং এটি যাইহোক গল্ফ হয়ে উঠবে ..;)
কেভিন ক্রুজজেন

6
@ এমিগনা ... তবে এটি আমার ব্যবহারের বড় সুযোগ ছিল UE...
নীল

6
@ এরিকথ আউটগল্ফার ... তবে এটি আমার ব্যবহারের বড় সুযোগ ছিল UE..
নীল

1
@ নিল ইট -৩ বাইট! -3 একটি দুর্দান্ত ত্যাগের জন্য! কে কিছু সুন্দর -3 চান না?
এরিক আউটগল্ফার

4
@ এরিকথ আউটগল্ফার আপনাকে যা বলার কথা ছিল তা হ'ল "আপনি 05AB1E আপনাকে মারতে পারবেন না, পারো?"
নীল

12

05 এ বি 1 ই , 10 8 7 বাইট

2 বাইট সঞ্চয় করার জন্য এমিগিনার ধন্যবাদ !

ðâƶ.cðζ

05AB1E এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!


এই রেখা অনুযায়ী প্রতিটি সারির প্রতিটি অক্ষরের মধ্যে স্থান কমপক্ষে 1 হওয়া উচিত যা আপনি মুছে ফেলতে পারেন ¶«। (এছাড়াও ওপি সহ বৈধতা যাচাই করা হয়েছে)
এমিগানা

@ এমিগনা ধন্যবাদ! :)
আদনান

টিও লিঙ্কটি আপডেট করতে পারে :)
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার নিনজা'
আদনান

1
âএর ðâপরিবর্তে চালাক ব্যবহার Sð«!
এরিক আউটগল্ফার

9

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

s=input()
k=l=len(s)
while k>1-l:k-=1;m=abs(k);print' '*m+' '.join(s[m::2])

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

রুদ 3 বাইট সংরক্ষণ করেছেন।


3
এটি ওপি: 78 বাইট দ্বারা অনুমোদিত হয়েছে । প্রতিটি সারিতে স্থান কমপক্ষে 1 হতে হবে
মিঃ এক্সকডার


8

সি, 86 78 73 70 অক্ষর

for(int i=1,j=1-n;i=putchar(j*j<i*i&i-j?s[i-1]?:13:32)^13?i+1:++j<n;);

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

ব্যাখ্যা

নিষ্পাপ বাস্তবায়ন: দুটি চক্র, উপর থেকে নীচে, বাম থেকে ডান (99 বাইট) পূরণ করুন:

for(int j=1;j<n*2;j++){for(int i=0;i<n;i++)printf("%c ",(i+j)%2&&i+1>=abs(j-n)?s[i]:' ');puts("");}

এখানে, () কেবল আউটপুট \ n প্রিন্ট করে। আসুন পরিবর্তনশীল ঘোষণাগুলি একত্রিত করি এবং জে ++ এর সাথে কোনও কিছুর (94 বাইট) একত্রিত করি:

for(int i,j=0;++j<n*2;){for(i=0;i<n;i++)printf("%c ",(i+j)%2&&i>=abs(j-n)?s[i]:' ');puts("");}

ভাল. চলক j এর ব্যাপ্তি 0 ... 2 এন; এটি -n ... এন এর মধ্যে থাকুক, এটি গণিতকে সহজ করে তোলে। লক্ষ্য করুন যে && এর ডানদিকে বুলিয়ান অভিব্যক্তিটির সর্বদা মান 0 বা 1 থাকে This এর অর্থ আমরা & এর সাথে && প্রতিস্থাপন করতে পারি। 91 বাইট:

for(int i,j=-n;++j<n;){for(i=0;i<n;i++)printf("%c ",~(i+j)%2&i>=abs(j)?s[i]:' ');puts("");}

এবং এখন আমরা বুঝতে পারি যে আমরা একটি অতিরিক্ত স্থান মুদ্রণ করছি। এবং হ্যাঁ, আমাদের কেবল একটি একক চিহ্ন মুদ্রণের জন্য প্রিন্টফ () দরকার নেই। 86 বাইট:

for(int i,j=-n;++j<n;){for(i=0;i<n;i++)putchar(~(i+j)%2&i>=abs(j)?s[i]:' ');puts("");}

আর ভালো. শর্তটি লক্ষ্য করুন i * i> = j * j i> = অ্যাবস (জে) এর সমান, তবে খাটো। লুপ ইনক্রিমেন্ট এক্সপ্রেশন এর জন্য puts () এ স্থানান্তর করি। এবং কি অনুমান? প্রকৃতপক্ষে, আমাদের আই + জ এর আশেপাশের ধনুর্বন্ধনীগুলির দরকার নেই। 78 বাইট:

for(int i,j=-n;++j<n;puts(""))for(i=0;i<n;i++)putchar(i*i>=j*j&~i+j?s[i]:' '); 

আপনি কি জানেন যে পুতচর () এটি মুদ্রিত চরিত্রটি ফিরিয়ে দেয়? সমতা জন্য সংখ্যা পরীক্ষা করতে XOR ব্যবহার করা যাক। এর তার হওয়া ASCII কোড দিয়ে স্থান প্রতিস্থাপন করা যাক, 32 মনে রাখবেন যে শেষ অফ লাইন চরিত্র কোড 13. এবং পরিশেষে হল: আপনি কি জানেন যে জিসিসি / ঝনঝন সমর্থন না https://en.wikipedia.org/wiki/Elvis_operator ? 73 বাইট:

for(int i,j=-n;++j<n;)for(i=0;putchar(i*i>=j*j&~i+j?s[i]?:13:32)^13;i++);

অবশেষে, কি অনুমান? লুপের জন্য আমাদের দু'জনের দরকার নেই। আমরা কেবল ij দিয়ে কুরুচিপূর্ণ ~ i + j প্রতিস্থাপন করতে পারি। 70 বাইট:

for(int i=1,j=1-n;i=putchar(j*j<i*i&i-j?s[i-1]?:13:32)^13?i+1:++j<n;);

ভবিষ্যতের কাজ: লুপের দিক পরিবর্তন করুন? এটি কিছু বাইট সংরক্ষণ করতে পারে, যদি সঠিকভাবে করা হয়।


5

এসওজিএল ভি0.12 , 13 10 9 বাইট

ēI*@∑}¹╚H

এটি এমন একটি বৈশিষ্ট্য ব্যবহার করে যা আমি সবে যুক্ত করেছি , তবে কিছুক্ষণ আগে নথিভুক্ত হয়েছিল ।

এখানে চেষ্টা করুন!
সেই লিঙ্কটিতে যুক্ত ,করা হয়েছে কারণ এটি স্ট্যাকের ইনপুটটি প্রত্যাশা করে এবং {যুক্ত করা হয় কারণ অন্যথায় ,লুপে প্রতিবার সম্পাদিত হবে

implicitly start loop over POP
ē            increase the variable E, on first push which will be 0
 I           increase by 1
  *          multiply the current character that many times
   @∑        join with spaces
     }     end loop
      ¹    wrap everything on stack in an array
       ╚   center vertically
        H  rotate counter-clockwise


3

গাইয়া , 16 বাইট

$:ċ⟪×$§×⟫†€|$¦tụ

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

ব্যাখ্যা

$                 Split into list of chars
 :ċ               Push [1 .. len(input)]
   ⟪×$§×⟫†        Apply this block to corresponding elements of the two lists:
    ×              Repetition
     $             Split into chars
      §×           Join with spaces
          €|      Centre align the rows
            $¦    Split each line into chars
              t   Transpose
               ụ  Join each row with spaces, then join the rows together with newlines




3

জাভা, 292 বাইট (দুঃখিত)

public class D{
public static void main(String[]r){
String s=r[0];int L=s.length(),n=L*2-1,x=L-1,d=-1,i,j;boolean a=false,o=L%2==1;
for(i=0;i<n;i++){
for(j=0;j<L;j++)System.out.print(j<x||a&&j%2==(o?0:1)||!a&&j%2==(o?1:0)?' ':s.charAt(j));
System.out.println();
x+=d;if(x<0){x=0;d=1;}a=!a;}}}

1
আপনি নিউলাইনগুলি সরাতে পারেন, অন্যথায়, এটি বেশ গল্ফ লাগছে!
জাকারি

1
1. আপনি গলফ আরো যা করতে পারেন boolean a=1<0,o=L%2>0;। 2. আপনার যা দরকার না থাকে তাহলে i, এই লুপ ব্যবহার করুন: for(i=0;i++<n;)। 3. আপনি পরিত্রাণ পেতে পারেন o: j%2<L%2তাহলে j%2>L%2। ৪. dফ্লিপ হিসাবে ব্যবহার করতে অনেকগুলি অক্ষর লাগে: ঠিক করুন j<(x<0?-x:x)। ৫. আপনার প্রয়োজনের চেয়ে আরও বেশি পরিবর্তনশীল রয়েছে। You. আপনার একটি সম্পূর্ণ প্রোগ্রামের দরকার নেই: একটি ল্যাম্বডা বা পদ্ধতি যথেষ্ট। - আপনি যদি গল্ফড জাভা উদাহরণ চান তবে আমার উত্তরটি দেখুন
অলিভিয়ার


3

জাভা (ওপেনজেডিকে 8) , 116 বাইট

s->{for(int l=s.length(),i=-l;++i<l;)System.out.printf("%"+l+"s%n",s.substring(i<0?-i:i).replaceAll("(.).","$1 "));}

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

ব্যাখ্যা

s->{                                // Consumer<String> lambda
 for(int l=s.length(),i=-l;++i<l;)  // For each length between l and 1 and back to l, 
  System.out.printf("%"+l+"s%n",    // Print with align to right
    s.substring(i<0?-i:i)           // skip the first |i| characters
     .replaceAll("(.).","$1 ")      // replace every even-positioned character with a space.
   );
}


3

হাস্কেল , 140 137 বাইট

(m#n)s=(\(i,x)->' ':(last$"  ":[x:" "|rem i 2==m&&i>n]))=<<zip[0..]s
g s=((++)=<<reverse.tail)$id=<<[[(0#n)s,(1#n)s]|n<-[-1,1..length s]]

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

চ্যালেঞ্জার 5 এ 3 বাইট থেল সংরক্ষণ করা হয়েছে

আমি মনে করি না যে এটি সর্বোত্তম ...

f একটি লাইন উত্পাদন করে (m = 0 বা 1 লাইন সংখ্যার মডুলো, লাইনটির সংখ্যা n)

g "বিজোড়" এবং "এমনকি" লাইনগুলিকে আন্তঃকলেট করে এবং ফলাফলটিতে নিজের একটি আয়না যুক্ত করে।


আপনি একটি উপসর্গ ফাংশন না করে fইনফিক্স ফাংশন (যেমন হিসাবে (m#n)s=...) হিসাবে সংজ্ঞায়িত করে বাইটগুলি সংরক্ষণ করতে পারেন ।
ফল



2

গণিত 105 বাট

(c=Characters@#;l=Length@c;StringRiffle@Table[If[Abs[j-l]<i&&EvenQ[j+i],c[[i]]," "],{j,1,2l+1},{i,1,l}])&

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


2

জে, 54 বাইট

[:|:|.@i.@#(>@],~' '#~[)"_1[:(,' '&,)/&.>>:@i.@#<@#"0]

এটি অনলাইন চেষ্টা করুন!(দ্রষ্টব্য যে টিআইওতে আউটপুটটির একটি নতুন লাইন এবং তিনটি স্পেস রয়েছে, তবে এটি ফাংশন কল থেকে নয় - এটি সম্ভবত জে ইন্টারপ্রেটার স্বয়ংক্রিয়ভাবে করে)

আমি মনে করি এটি সমাধানের জন্য সাধারণ ধারণাটি সঠিক, তবে এখানে ছোট ছোট জিনিস রয়েছে যা আমি সম্ভবত উপ-অনুকূলভাবে করছি যা বাইটোকন্টে যুক্ত হচ্ছে।

পূর্ববর্তী রূপগুলি

55 বাইট

<:@+:@#{.[:|:|.@i.@#(],~' '#~[)"_1>:@i.@#(,' '&,)/@#"0]

56 বাইট

<:@+:@#{.[:|:|.@i.@#(],~' '#~[)"_1#{.[:(,' '&,)//.[:]\.]

ব্যাখ্যা

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

dup   =. >:@i.@# <@#"0 ]
space =. (,' '&,)/&.>
pad   =. |.@i.@# (>@],~' '#~[)"_1 ]
trans =. |:
  • dup প্রতিটি অক্ষরটিকে তার সূচীতে স্ট্রিংয়ের (বহুসংখ্যক) বহুবার নকল করে
  • space প্রতিটি চরিত্রের মধ্যে ফাঁকা স্থান সন্নিবেশ করানো হয়
  • pad স্থানগুলিতে সঠিক পরিমাণে অক্ষরগুলি প্যাড করে
  • trans ফলাফল ম্যাট্রিক্স স্থানান্তর

নমুনা কল:

   trans pad space dup 'abc'
  c
 b 
a c
 b 
  c

DUP

>:@i.@# <@#"0 ]
>:@i.@#         Indices of each character plus one
      #          Length of the string
   i.            Range [0,length)
>:               Add one
        <@#"0 ] Duplicate each character as many times as it index (plus one)
           "0   For each
          #   ]  Copy the character
>:@i.@#           as many times as it index
        <        Box the result

ফলাফলগুলি বাক্সে ফাঁকা স্থানগুলি (যেহেতু তারা অসম দৈর্ঘ্যের) এর প্রান্তগুলি প্যাডিং থেকে আটকাতে বাধা দেয়।

নমুনা কল:

   dup 'abc'
┌─┬──┬───┐
│a│bb│ccc│
└─┴──┴───┘

স্থান

(,' '&,)/&.>
         &.>  For each boxed element
(,' '&,)/      Insert spaces between each

নমুনা কল:

   space dup 'abc'
┌─┬───┬─────┐
│a│b b│c c c│
└─┴───┴─────┘

প্যাড

|.@i.@# (>@],~' '#~[)"_1 ]
        (>@],~' '#~[)      Pad the right arg with spaces given by the left arg
|.@i.@#                    Indices in reverse order
   i. #                     Range [0,length)
|.                          Reverse

মূলত, দৈর্ঘ্যের সাথে প্রথম উপাদানটি প্যাড করুন - 1 স্পেস, দ্বিতীয় দৈর্ঘ্য - 2 ইত্যাদি It এটি বক্সিংও সরিয়ে দেয়।

নমুনা কল:

   pad space dup 'abc'
  a  
 b b 
c c c

পক্ষান্তরিত করা

এটি কেবল অন্তর্নির্মিত ফাংশন |:যা কোনও ম্যাট্রিক্সের স্থানান্তর গ্রহণ করে takes


1
আমি অনুরূপ পন্থা ব্যবহার করেছি, কিন্তু বক্সিং এড়ানো। 45 বাইট: |:@(-@i.@-@#|."0 1((,@,.~' '#~#)@$"0~1+i.@#))। এটি অবশ্যই আরও গল্ফ করা যেতে পারে। এই অংশটি -@i.@-@#কিছুটা কম ঝুলন্ত ফল, সম্ভবত
জোনা

@ জোনাহ আপনার উত্তর কীভাবে কার্যকর হয় আমি তাড়াতাড়ি সিদ্ধান্ত নিতে পারি না, তাই আমি যদি আপনার উত্তরটি বর্ণনা করতে চাই তবে আপনি এটি চান তা পোস্ট করার জন্য আপনার কাছে রেখে দেব leave আমার মনে হয় জে এখন আমার জন্য লিখিত-কেবল একটি ভাষা।
কোলে

দ্রুত সিদ্ধান্ত গ্রহণের জন্য সহায়ক:, f=. <some tacit expression>তারপরে 5!:2 <'f'একটি বক্সযুক্ত ভিজ্যুয়ালাইজেশন 5!:4 <'f'দেয় এবং একটি বৃক্ষের দৃশ্যায়ন দেয়। আমার ক্ষেত্রে $"0~1+i.@#প্রথমে কিছু স্ট্রিং নিয়ে চলার চেষ্টা করুন , তারপরে সবকিছুকে ডানদিকে চালান |."0 1, তারপরে এটি |."0 1এবং বামে সবকিছু চূড়ান্ত ট্রান্সপোজ সংরক্ষণ করুন, কেবল প্রয়োজনীয় আবর্তন করছেন।
জোনাহ

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

2
#এখানে |:@((-#)|."_1(1j1##)"0)~#\
মাইল


1

পার্ল 5 , 86 + 2 (-F) = 88 বাইট

বাইটের সংখ্যা কমিয়ে আনতে @ ডোমের পরামর্শ এবং আমার নিজের কয়েকটি টুইট ব্যবহার করেছেন।

for$k(0..$#F){$i=1;$a[$#F+$k]=$a[$#F-$k]=[map$i++<$k|($i+$k)%2?$":$_,@F]}say"@$_"for@a

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


এর জন্য দুঃখিত, খুশী যদিও আপনি আপনার উত্তরটি সেখানে পেয়েছেন! আমি যখন আমার সংশোধন করার চেষ্টা করছিলাম তখন একটি নাটক কিছুটা হলেও সমাধান করতে পারত না, আপনার চেয়ে ভাল পন্থা ছিল! -aFসমস্ত অক্ষর @Fএবং কয়েকটি সামান্য টুইটগুলি ব্যবহার করে কয়েকটি বাইট ফেলে দেওয়া সম্ভব ( -F3 হিসাবে গণনা করা কারণ এটির পরে একটি স্থান প্রয়োজন): অনলাইনে চেষ্টা করুন!
ডোম হেস্টিংস

1
কেন -F 3 হিসাবে গণনা করে? এটি সর্বাধিক 2 হওয়া উচিত নয়? এটা কি perl -e'code...'এবং মধ্যে পার্থক্য না perl -eF 'code...'। এছাড়াও -aব্যবহার করার সময় অপ্রয়োজনীয় -F, যাতে বাইট কাটা যায়।
এক্সকালি

ঠিক এটি। সুতরাং -Fএকটি আর্গুমেন্ট গ্রহণ, কিন্তু আমরা এক পাস চাই না ( -Fআমাদের কি নিয়ন্ত্রণ করতে সক্ষম হবেন -aতাই এটি মধ্যে পার্থক্য হচ্ছে সে বিষয়ে কোনও যুক্তি splits, তার নিজস্ব প্রতিটি গৃহস্থালির কাজ বিভক্ত) perl -ae '...'এবং perl -aF -e '...'। ডিফল্টভাবে -aবিভক্ত /\s+/। আশা করি যে স্পষ্ট করতে সাহায্য করবে!
ডোম হেস্টিংস

এছাড়াও, দুর্দান্ত ব্যবহার $#F! সবসময় যে সম্পর্কে ভুলবেন না!
ডোম হেস্টিংস

0

কিউ / কেডিবি +, 55 বাইট

সমাধান:

-1(+){{1_a,((2*y)#" ",z),a:x#" "}'[(|)c;1+c:(!)(#)x]x};

উদাহরণ:

q)-1(+){{1_a,((2*y)#" ",z),a:x#" "}'[(|)c;1+c:(!)(#)x]x}"Hello World";
          d
         l
        r d
       o l
      W r d
       o l
    o W r d
   l   o l
  l o W r d
 e l   o l
H l o W r d
 e l   o l
  l o W r d
   l   o l
    o W r d
       o l
      W r d
       o l
        r d
         l
          d

ব্যাখ্যা:

করতে. অবারিত সংস্করণটি 66 বাইট:

-1 flip{{1_a,((2*y)#" ",z),a:x#" "}'[reverse c;1+c:til count x]x};

বোনাস:

উদাহরণ হিসাবে একই আউটপুট পেতে (74 বাইট):

q)-1(+){1_'raze{(a,((2*y)#" ",z),a:x#" ";(2*y+x)#" ")}'[(|)c;1+c:(!)(#)x]x}"Hello World";
                    d
                  l
                r   d
              o   l
            W   r   d
              o   l
        o   W   r   d
      l       o   l
    l   o   W   r   d
  e   l       o   l
H   l   o   W   r   d
  e   l       o   l
    l   o   W   r   d
      l       o   l
        o   W   r   d
              o   l
            W   r   d
              o   l
                r   d
                  l
                    d
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.