শুভ জন্মদিন ভি!


72

এই চ্যালেঞ্জটি থেকে আমাকে সহায়তা করার জন্য @ ক্রিটিক্সিলিথসকে ধন্যবাদ !


ভি হ'ল একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ যা আমি লিখেছিলাম যাতে আমি কোড-গল্ফ চ্যালেঞ্জগুলির জন্য ভিএম ব্যবহার করতে এবং প্রসারিত করতে পারি। প্রথম প্রতিশ্রুতি ছিল ২ রা মার্চ, ২০১ on এ, যার অর্থ আজ ভি ভি এক বছর বয়সী হয়ে গেছে! হুররে

ভি এর প্রথম বছরের অস্তিত্বের সময়ে, চারটি পৃথক অবদানকারীর কাছ থেকে 176 টি কমিট হয়েছে, 12 টি আলাদা ব্যবহারকারীর 140 টি উত্তর রয়েছে এবং অনেকগুলি ভাঙা সদৃশ অপারেটর গণনা করতে পারে । এটির একটি অনলাইন দোভাষী রয়েছে, যা ডেনিস দ্বারা উদারভাবে হোস্ট করা হয়, যা ডিসেম্বর থেকে প্রায় 8,000 বার চালানো হয়েছে ।

আসুন আমরা ভি এর জন্মদিন উদযাপন করার জন্য একটি চ্যালেঞ্জ আছে! যেহেতু ভি এর বেশিরভাগ বৈশিষ্ট্যগুলি স্ট্রিং ম্যানিপুলেশন এবং মনে রেখে ডিজাইন করা হয়েছে , তাই এটি ভি স্বাভাবিকভাবেই উদযাপিত যে কোনও চ্যালেঞ্জ আসকি শিল্প সম্পর্কে হওয়া উচিত natural সুতরাং আজকের জন্য আপনার চ্যালেঞ্জটি হ'ল কোনও শব্দকে ইনপুট হিসাবে নেওয়া এবং সেই শব্দটিকে একটি ভি'র আকারে পুনরায় আকার দেওয়া example উদাহরণস্বরূপ, "হ্যালো" ইনপুটটি নিম্নলিখিত ভিটি দেওয়া উচিত:

Hello         olleH
 Hello       olleH
  Hello     olleH
   Hello   olleH
    Hello olleH
     HellolleH
      HellleH
       HeleH
        HeH
         H

আপনার ভি দেখতে কেমন হওয়া উচিত সে সম্পর্কে এখানে কিছু বিশদ দেওয়া আছে। যদি ইনপুট স্ট্রিং n অক্ষর দীর্ঘ হয় তবে ভিটি n*2লাইন লম্বা হওয়া উচিত । খুব প্রথম লাইনে থাকা উচিত:

<input string><(n*2) - 1 spaces><input string reversed>

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

আপনি ধরে নিতে পারেন যে ইনপুটটি কোনও সাদা স্থান ছাড়াই সর্বদা প্রিন্টযোগ্য এএসসিআইআই হবে এবং আপনি কোনও যুক্তিসঙ্গত পদ্ধতিতে ইনপুট এবং আউটপুট নিতে পারেন। এখানে আরও কিছু নমুনা ইনপুট রয়েছে:

Happy:

Happy         yppaH
 Happy       yppaH
  Happy     yppaH
   Happy   yppaH
    Happy yppaH
     HappyppaH
      HapppaH
       HapaH
        HaH
         H

Birthday:

Birthday               yadhtriB
 Birthday             yadhtriB
  Birthday           yadhtriB
   Birthday         yadhtriB
    Birthday       yadhtriB
     Birthday     yadhtriB
      Birthday   yadhtriB
       Birthday yadhtriB
        BirthdayadhtriB
         BirthdadhtriB
          BirthdhtriB
           BirthtriB
            BirtriB
             BiriB
              BiB
               B

V!:

V!   !V
 V! !V
  V!V
   V

~:

~ ~
 ~

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


এটির মূল্যের জন্য, আমার কাছে ভিএম উত্তরগুলির জন্য একটি নরম স্পট রয়েছে, তাই ভিআইএম বা ভি ব্যবহারের জন্য কাল্পনিক বোনাস পয়েন্ট, যদিও কোনও ভাষা গ্রহণযোগ্য। :)


আমি কি প্রতিটি নিউলাইনের পরে একটি নাল অক্ষর (0x00) মুদ্রণ করতে পারি?
গম উইজার্ড

নিবন্ধন করুন এটি কিছুটা অদ্ভুত, তবে যতক্ষণ আউটপুট ভিজ্যুয়ালভাবে সমান হয় ততক্ষণ তা ঠিক আছে I
DJMcMayhem

21
৫ ম জন্মদিনে অন্যরকম কিছু হবে! (রোমান সংখ্যায়)
অ্যালবার্ট রেনশো

5
ভী দ্বারা ভি ভাষায় শুভকামনা :-)
ভী

উত্তর:


44

এমএটিএল , 21 14 বাইট

এমএটিএল শুভ জন্মদিনের শুভেচ্ছা!

tnEXyY+c3MZvZ)

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

ব্যাখ্যা

ইনপুট বিবেচনা করুন

'Hello'

দৈর্ঘ্যের n=5। কোডটি এই স্ট্রিংয়ের 2D সমাবর্তনকে আকারের পরিচয় ম্যাট্রিক্সের সাথে গণনা করে 2*n,

[1 0 0 0 0 0 0 0 0 0;
 0 1 0 0 0 0 0 0 0 0;
 0 0 1 0 0 0 0 0 0 0;
 0 0 0 1 0 0 0 0 0 0;
 0 0 0 0 1 0 0 0 0 0;
 0 0 0 0 0 1 0 0 0 0;
 0 0 0 0 0 0 1 0 0 0;
 0 0 0 0 0 0 0 1 0 0;
 0 0 0 0 0 0 0 0 1 0;
 0 0 0 0 0 0 0 0 0 1]

চার্জে রূপান্তরিত এবং স্থান হিসাবে প্রদর্শিত চর 0 দিয়ে রূপান্তরিত হওয়ার ফলাফল

['Hello         ';
 ' Hello        ';
 '  Hello       ';
 '   Hello      ';
 '    Hello     ';
 '     Hello    ';
 '      Hello   ';
 '       Hello  ';
 '        Hello ';
 '         Hello']

তারপরে [1, 2, ..., 2*n-1, 2*n, 2*n-1, ..., 2, 1]এই চর ম্যাট্রিক্স থেকে কলামগুলি নির্বাচিত হবে, কাঙ্ক্ষিত ফলাফল তৈরি করবে:

['Hello         olleH';
 ' Hello       olleH ';
 '  Hello     olleH  ';
 '   Hello   olleH   ';
 '    Hello olleH    ';
 '     HellolleH     ';
 '      HellleH      ';
 '       HeleH       ';
 '        HeH        ';
 '         H         ']

মন্তব্য করা কোড

t      % Implicitly input string. Duplicate
nE     % Length, say n. Multiply by 2
Xy     % Identity matrix of that size
Y+     % 2D convolution. This converts chars to ASCII codes
c      % Convert to char
3M     % Push 2*n, again
Zv     % Push symmetric range [1, 2, ..., 2*n, 2*n-1, ..., 1]
Z)     % Apply as column indices. This reflects the first 2*n columns
       % symmetrically, and removes the rest. Implicitly display

খুব আকর্ষণীয় পদ্ধতির! +1
শৈশুমারা

3
@ সেশৌমারা ধন্যবাদ! যেমন flawr বলেছেন, সমঝোতা সাফল্যের মূল চাবিকাঠি :-)
লুইস মেন্ডো

38

ভি , 24, 23 , 20 বাইট

3Ù2Ò Íî
Xæ$òâÙHãêxx>

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

এখন অনেক ছোট যে ভি'র 'বিপরীত' অপারেটর রয়েছে

অন্যান্য গল্ফ ভাষাগুলি যে উত্তরগুলি দিয়েছে তার তুলনায় তেমন চিত্তাকর্ষক নয়, তবে এটি করা হয়েছিল। Hexdump:

00000000: 33d9 32d2 20cd ee0a 58e6 24f2 e2d9 48e3  3.2. ...X.$...H.
00000010: ea78 783e                                .xx>

ব্যাখ্যা:

3Ù                  " Make three extra copies of this current line
  2Ò                " Replace each character on this line and the next line with spaces
     Íî             " Join all lines together
X                   " Delete one space
 æ$                 " Reverse the word under the cursor

এই মুহুর্তে, বাফারটি দেখতে এমন দেখাচ্ছে:

Happy         yppaH

না, আমরা পুনরাবৃত্তভাবে নীচে ত্রিভুজটি তৈরি করব।

ò                   " Recursively:
 â                  "   Break if there is only one non-whitespace character on this line
  Ù                 "   Make a copy of this line
   H                "   Move to the first line
    ã               "   Move to the center of this line
     ê              "   Move to this column on the last line
      xx            "   Delete two characters
        >           "   Indent this line

এখানে আমি ভি এর আমার পছন্দের বৈশিষ্ট্যগুলির একটি প্রদর্শন করতে পারি L প্রচুর কমান্ডের একটি যুক্তি প্রয়োজন। উদাহরণস্বরূপ, >কমান্ডটি আর্গুমেন্টের উপর নির্ভর করে একটি পরিবর্তনশীল সংখ্যক রেখাকে যুক্ত করবে:

>>    " Indent this line (this command is actually a synonym for '>_')
>j    " Indent this line and the line below
>k    " Indent this line and the line above
6>>   " Indent 6 lines
>}    " Indent to the end of this paragraph
>G    " Indent to the last line
...   " Many many many more

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

òâÙHãêxx>>ò

দ্বিতীয়টি òসুস্পষ্টভাবে ভরাট করা হয়েছে। শীতল জিনিসটি হ'ল সুস্পষ্টভাবে সমাপ্ত কমান্ডগুলি বেশ কয়েকটি স্তর গভীরভাবে প্রয়োগ করে, তাই আমরা কেবল লিখেছিলাম >, ভি স্পষ্টতই _তার যুক্তিটি দেবে, এবং এটি বর্তমান লাইনটি ইনডেন্ট করবে।


আমি এটিতে কাজ করছি, তবে আমি মনে করি এটি উত্তর দেওয়া আপনার পক্ষে আরও উপযুক্ত!
nmjcman101

29

ব্রেইনফাক , 152 বাইট

এটি এমন একটি মুহুর্তপূর্ণ উপলক্ষ, আমি 'বিএফ দোভাষীকে ক্র্যাক করে এটিকে স্পিন দেওয়ার সিদ্ধান্ত নিয়েছি।

++++++++++[->+>+++<<]>>++>>+>>>,[[<]<<+>>>[>],]<[<]<<-[->+>>[>]>++++[-<++++++++>]<[<]<<]>[->++<]>[-<+>]<[<[-<+<.>>]<[->+<]>+>->>[.>]<[-]<[.<]<<<<<.>>>>]

মন্তব্য সহ

++++++++++
[->+>+++<<] Insert 0 into the first buffer (Which we don't care about) 10 into the second and 30 into the thrd
>>++    Raise the third buffer to 32 making us our space
>   This buffer is reserved for the Insertable spaces counter
>
+>>>    Raise our incrementer This will be used to fill the other half of the string with spaces
,[  Read a byte
    [<]<<   Move to the back of the string buffer which is our incrementer
    +       increment it
    >>>[>]      And move to the next space of the string
    ,       And then read a new byte
]
<[<]<<-     Decrement the incrementer and begin to add spaces
[
    -       Decrement the incrementer
    >+      Raise the incrementer in the padding
    >>[>]   Move to a new part of the string buffer
    >++++[-<++++++++>]< Write a space
    [<]<<   Move all the way back to the string counter
]
BEGIN WRITING!!
>
[->++<]>[-<+>]<Double the incrementer
[
    <[  Move to the space counter
        -<+<.>> Decrement the space counter increment the temporary one to the left of it then print the space we stored to the left of that then return
    ]<[->+<]>+> Move the temporary space counter back
    -   Decrement the incrementer
    >>[.>]  Print every character from left to right
    <[-]    Snip the end off this
    <[.<]   Print every character from right to left
    <   Move back ot the incrementer
    <<<<.>>>> Print a newline aswell
]

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


23

> <> , 221 বাইট

আমি কাটিয়েছি উপায় এই খুব বেশি সময়। শুভ জন্মদিন, ভি!

l:2*01           p84*/v
 !@:$-1         /!?:$<
  1.v/ ^       v\~~>a
   vv\}o<     >ao  /
    1\/84/   :}o:$-
     \\!?<: l;!?\v
      p10-1:g10r\
       >  :>?\vv
        v:$-1/~
         </r+*
          </~
           l

আপনি এটি অনলাইনে চেষ্টা করতে পারেন তবে এই দোভাষীটি পেতে এবং --playপতাকা ব্যবহার করে চালানো আরও মজাদার

python3 fish.py v.fish -s "ppcg" --tick 0.05 --play

যার ফলাফল নীচে অ্যানিমেশন।

উদাহরণ

উদাহরণস্বরূপ মাছ রান

(এটি দুই মিনিটের কম সময় নেয়)

ব্যাখ্যা

কারণ এই উত্তরের আকর্ষণীয় অংশটি এটিকে Vআকারে মুড়িয়ে রাখছে, এখানে একটি ব্যাখ্যা এটি মেনে চলে। আমরা রেফারেন্সের জন্য নিম্নলিখিত লাইন-সংখ্যাযুক্ত সংস্করণটি ব্যবহার করি।

1. l:2*01           p84*/v
2.  !@:$-1         /!?:$<
3.   1.v/ ^       v\~~>a
4.    vv\}o<     >ao  /
5.     1\/84/   :}o:$-
6.      \\!?<: l;!?\v
7.       p10-1:g10r\
8.        >  :>?\vv
9.         v:$-1/~
10.         </r+*
11.          </~
12.           l

কখনও কখনও তীর (→ ↓ ←) যে দিকে স্নিপেটে পৌঁছেছে সেদিকে নির্দেশ করতে ব্যবহৃত হয়।

  1. Initialisation

       1.→l:2*01           p84*/v
       2.  !@:$-1   X     /!?:$<
       3.   1.            \~~>a
    

    প্রথম লাইন 2n টি [0,1] তে চাপবে, স্ট্যাকের উপর n রেখে একটি স্থান যুক্ত করবে। এরপরে, আমরা উপরে গিয়ে ডানদিকে দ্বিতীয় লাইনের চারপাশে জড়ান, যেখানে আমরা বাম দিকে যেতে শুরু করব। এন + 1 স্পেস যুক্ত করার জন্য একটি লুপ রয়েছে। এটি নিম্নলিখিত হিসাবে কাজ করে।

                    Initial:                 "ppcg4 "
    !@:$-1 /!?:$<
               $     Swap.                   "ppcg 4"
              :      Duplicate.              "ppcg 44"
             ?       If more spaces to add:
        -1            Subtract 1.            "ppcg 3"
       $              Swap.                  "ppcg3 "
      :               Duplicate.             "ppcg3  "
     @                Rotate top 3.          "ppcg 3 "
    !                 Jump over stored value
                             and wrap around.
                    Else:
            /         Go to next part.
    

    এটি শেষ হওয়ার পরে এটি লাইন 3 এ নেমে আসে There সেখানে শীর্ষ দুটি স্ট্যাক উপাদান (0 এবং একটি স্থান) সরানো হয়েছে ( ~~) এবং আমরা ডানদিকে অবিরত X[10,1] ( a1.) অবস্থানে চলে যাই। আমরা এটিকে ধাবিত করি /, লাইন 7 এর চারপাশে মোড়ানো এবং মূল প্রোগ্রাম লুপ শুরু করি।

  2. প্রধান লুপ ( 2 বার বার করুন)

     6.              ;!?\
     7.       p10-1:g10r\   ←
    

    এটি লুপের অবস্থা। প্রথমে, স্ট্যাকটি মুদ্রণের জন্য বিপরীত হয়। তারপরে আমরা [1,0] ( 01g) থেকে কাউন্টারটি পাই এবং একটি হ্রাসিত সংস্করণ ( :1-01p) সংরক্ষণ করি। চারপাশে মোড়ানো এবং উপরের দিকে ডান দিয়ে, আমরা প্রোগ্রামটি বন্ধ করার শর্তসাপেক্ষে মুখোমুখি। যদি আমরা শেষ না করি তবে আমরা প্রথম মুদ্রণ লুপটিতে ঝাঁপিয়ে পড়ি।

    • প্রথম মুদ্রণ লুপ (বাম অর্ধেক)

      5.    1\   /   :}o:$-
      6.     \\!?<: l         ←
      

      আমরা স্ট্যাকের শীর্ষে দৈর্ঘ্য দিয়ে শুরু করি এবং যতক্ষণ না শীর্ষ উপাদান 0 না হয় নিম্নলিখিত কোডটি কার্যকর করি code

      1-$:o}
      
      1-        Subtract 1.    "ppcg3"
        $       Swap.          "ppc3g"
         :      Duplicate.     "ppc3gg"
          o     Output.        "ppc3g"
           }    Rotate right.  "gppc3"
      

      এটি স্ট্যাকটিকে এড়িয়ে ছাড়াই মুদ্রণ করবে। যদি লুপটি সমাপ্ত হয়, তবে আমরা পরবর্তী মুদ্রণের লুপের জন্য প্রস্তুত করে 5 তম লাইনে ডানদিকে যাই।

    • ডান অর্ধ প্রস্তুতি

      5.  →    /84/   
      6.       \     
      7.            :    
      8.            >
      9.         v:$-1/~
      10.         </r+*
      11.          </~
      12.           l
      

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

                   Initial stack:   "    gcpp0"
      84*+r~
      84*          Push 32 == " ".  "    gcpp0 "
         +         Add 32 and 0.    "    gcpp "
          r        Reverse.         " gcpp    "
           ~       Remove top.      " gcpp   "
      

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

    • দ্বিতীয় মুদ্রণ লুপ (ডান অর্ধেক)

      3.     / ^ 
      4.     \}o<
      5.    
      6.           ↓   
      7.           
      8.       >  :>?\vv
      9.        v:$-1/~ 
      

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

                      ↓
      2.          X     / 
      3.  1.v/             >a
      4.              >ao  /
      

      প্রথমে aoএকটি নতুন লাইন প্রিন্ট করবে। তারপরে আমরা লাফিয়ে উঠলাম এবং সূচনা করার পরে থেকে ঠিক একই জায়গায় পৌঁছলাম, নামা লাফাতে X


আপনার সম্ভবত গল্ফ করা সংস্করণটির মূল সংস্করণটি করা উচিত
ধ্বংসাত্মক লেবু

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

এটি সোনার খালি
ক্রিশ্ফার

আমি প্রশংসা করি যে এই উত্তরটি এমন একটি ভাষায় যাঁর নামটি একচেটিয়াভাবে ঘোরানো 'ভি'র সমন্বিত।
সেলিম্ম

19

মস্তিষ্ক-ফ্লাক , 486 + 1 = 489 বাইট

মস্তিষ্ক-ফ্লাক থেকে জন্মদিনের শুভেচ্ছা!

এছাড়াও আপনাকে ধন্যবাদ 0 ' যারা এই উত্তরে ব্যবহৃত কিছু কোড সরবরাহ করেছিল

ফ্ল্যাটের কারণে +1 -cযা ASCII এর জন্য এবং বাইরে প্রয়োজন

((([]<{({}<>)<>}<>([]){({}[()]<(([][()])<{({}[()]<({}<>)<>>)}{}><>)<>({}<<>{({}[()]<({}<>)<>>)}{}><>)(({})<>)<>>)}{}([][][()]){({}[()]<((((()()()()){}){}){})>)}{}<>{({}<>)<>}<>>){}[()])<{((({})<((({}){}())){({}[()]<(({}<(({})<>)<>>)<(({}<({}<>)<>>[()])<<>({}<<>{({}[()]<({}<>)<>>)}{}>)<>>){({}[()]<({}<>)<>>)}{}<>>)>)}{}{}((()()()()()){})(<()>)<>>)<{({}[()]<({}<>)<>>)}{}{}{}{({}<>)<>}<>>[()])}{}>()())([][()]){{}(({}[()])<{({}[()]<((((()()()()){}){}){})>)}{}{({}<>)<>}{}>)([][()])}{}<>

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

এটি কোনও সন্দেহ ছাড়াই আমি মস্তিষ্ক-ফ্ল্যাঙ্কে সবচেয়ে কঠিন কাজটি করেছি।

মস্তিষ্ক-ফ্ল্যাকগুলি নকলকরণ এবং বিপরীত স্ট্রিংগুলিতে কুখ্যাতভাবে ভয়ানক এবং এই চ্যালেঞ্জটি নকল করা এবং স্ট্রিংগুলি বিপরীত করা ছাড়া আর কিছুই নয়।

আমি প্রায় এক ঘন্টা কঠোর পরিশ্রমের মধ্যে এই প্রায় কাজের স্নিপেটটি অর্জন করতে সক্ষম হয়েছি , তবে শেষ কয়েকটি জায়গাগুলি যুক্ত করা আমার মস্তিষ্ক-ফ্লাকের মধ্যে করা সবচেয়ে কঠিন কাজগুলির একটি বলে প্রমাণিত হয়েছিল।

ব্যাখ্যা

বেসিক আইডিয়াটি হ'ল আমরা প্রথমে ভি এর শীর্ষটি তৈরি করব এবং প্রতিটি পুনরাবৃত্তি মাঝখানে থেকে দুটি অক্ষর মুছে ফেলবে এবং শুরুতে একটি স্থান যুক্ত করব।

অনুশীলনে এটি বেশ কঠিন হয়ে যায়।

অনুলিপি এবং বিপরীত জন্য বিদ্যমান অ্যালগরিদম বিদ্যমান তাই আমি অফস্ট্যাকের কোডের বিপরীত অনুলিপি তৈরি করতে তাদের মধ্যে একটি ব্যবহার করেছি। একবার আমি এটি করে ফেলেছি যে আমি 2n-1মূল স্ট্যাকের উপরে ফাঁকা স্থান রেখেছি এবং একটি স্যান্ডউইচ তৈরির জন্য অফস্ট্যাকটি আবার অনস্ট্যাকের দিকে সরিয়ে নিয়েছি।

পরীক্ষা 1

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

এটা কঠিন.

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

তাহলে আমরা কীভাবে এটি ঠিক করব? সংক্ষেপে আমরা আসলে করি না; আমরা আপাতত স্পেসগুলি এড়িয়ে যাচ্ছি এবং পরে এগুলিকে প্যাচ করব আমরা স্পেসগুলি কোথায় যেতে চাইছে তা চিহ্নিত করার জন্য কোডটিতে শূন্য যুক্ত করব তবে আমরা সত্যই কিছুই করব না।

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

এখন আমাদের বেশিরভাগ ভি ভি নির্মিত হয়েছে। আমরা তবে সঠিক জায়গাগুলির অভাব বোধ করছি এবং আমাদের ভি বর্তমানে কিছুটা readর্ধ্বমুখী (পড়ুন: সম্পূর্ণ)।

পরীক্ষা 2

সুতরাং আমরা এটি ফ্লিপ। এটিকে অন্য স্ট্যাকের উপরে ফ্লিপ করতে আমাদের প্রতিটি উপাদানকে একের পর এক সরিয়ে নিতে হবে। যেহেতু আমরা উপাদানগুলি চলছি আমরা জিরোগুলির জন্য পরীক্ষা করি check যদি আমরা একটির মুখোমুখি হয়ে যাই তবে আমাদের স্পেসগুলি যেখানে রয়েছে সেগুলি সেখানে রেখে দিতে হবে। আমরা শূন্যটিকে ছুঁবছি এবং একগুচ্ছ জায়গাগুলি যুক্ত করব। আমরা কয়জন জানি? আমরা ট্র্যাক রাখি; ডুপ্লিকেট করার বিপরীতে স্ট্যাকটিকে উল্টানো বা বিপরীত করা একটি অত্যন্ত অ-নিবিড় কাজ, সুতরাং আমাদের কাছে কতগুলি স্পেস যুক্ত করতে হবে তা ট্র্যাক রাখতে অতিরিক্ত কাউন্টারে সঞ্চয় এবং অ্যাক্সেস করার স্মৃতি রয়েছে। প্রতিবার আমরা কিছু স্পেস যুক্ত করি আমরা একে একে কাউন্টারকে হ্রাস করি। শেষের নতুন লাইনে (ভি এর শীর্ষে) কাউন্টারটি শূন্যের উপরে উঠতে হবে এবং আমরা মুদ্রণের জন্য প্রস্তুত।

অবশেষে আমরা চারদিকে ঝুলন্ত কয়েকটি জিনিস পরিষ্কার করি এবং অন্তর্নিহিত আউটপুটটির জন্য প্রোগ্রামটি সমাপ্ত করি।

পরীক্ষা 3


আপনি খুব কার্যকরভাবে এটি পরিচালনা করতে পরিচালিত! আপনি কি মনে করেন যে আপনি বাইটগুলি এটিকে বিপরীত রেখে এবং -rপতাকাটি যুক্ত করে সঞ্চয় করতে পারবেন ?
DJMcMayhem

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

16

জেলি , 15 12 বাইট

⁶ṁ⁸;;\Uz⁶ŒBY

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

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

⁶ṁ⁸;;\Uz⁶ŒBY  Main link. Argument: s (string)

⁶ṁ            Mold ' ' like s, creating a string of len(s) spaces.
  ⁸;          Prepend s to the spaces.
    ;\        Cumulative concatenation, generating all prefixes.
      U       Upend; reverse each prefix.
       z⁶     Zip/transpose, filling empty spots with spaces.
         ŒB   Bounce; map each string t to t[:-1]+t[::-1].
           Y  Join, separating by linefeeds.

এটি 12 টি অক্ষর, তবে এমন কোনও এনকোডিং রয়েছে যেখানে এটি কেবল 12 বাইট হিসাবে প্রকাশিত হবে?
ক্যাস্পারড

1
হ্যাঁ, জেলি এটি নিজস্ব কাস্টম কোড পৃষ্ঠা ব্যবহার করে ।
ডেনিস


16

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

f=
s=>s.repeat((j=l=s.length*4)*2).replace(/./g,_=>--j?s[j+j<l?j-i:l-i-j]||` `:(j=l,++i,`
`),i=1)
<input oninput=o.textContent=f(this.value)><pre id=o>


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

@ JacobPersi- এ তারা রেড হার্পিং। সকল আমি প্রয়োজন আকারের একটি আউটপুট এলাকা n*2দ্বারা n*4(প্রতিটি লাইনের শেষে নতুন লাইন সহ)। আমি তারপরে প্রতিটি ঘরে প্রদর্শিত হওয়া চরিত্রটি গণনা করি।
নীল

নিস! আপনি f=এবং এর মধ্যে নতুন লাইনটি সরিয়ে একটি বাইটটি শেভ করতে পারেন s=>
ইয়ুম্মিপাস্ত

@ ইউমিপাস্টা স্নিপেটের f=একমাত্র অংশ, উত্তর নয়। যেমন, এটি বাইট গণনায় অন্তর্ভুক্ত নয়।
নীল

11

রেটিনা , 51 47 বাইট

একটি সহ স্ট্রিং-প্রসেসিং ভাষা থেকে জন্মদিনের শুভেচ্ছা!

বাইট গণনাটি আইএসও 8859-1 এনকোডিং ধরেছে।

$
$.`$* 
$
¶$`
O$^r`.\G

;{*`.¶

(\S.*).¶.
 $1¶

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

ব্যাখ্যা

$
$.`$* 

স্ট্রিংয়ের শেষের সাথে মেলে, স্ট্রিংয়ের দৈর্ঘ্যটি পুনরুদ্ধার করে এবং এর সাথে বহুবার nফাঁকা জায়গাগুলির পুনরাবৃত্তি করে এটি স্পেসগুলি যুক্ত করে ( nস্ট্রিংয়ের দৈর্ঘ্যটি কোথায় ) ।$.`$*

$
¶$`

আমরা আবার স্ট্রিংয়ের শেষের সাথে মেলে এবং স্ট্রিংটি নিজেই serোকিয়ে পুরো স্ট্রিংটি (একটি লাইনফিড দ্বারা আলাদা) নকল করি $`

O$^r`.\G

ডান-থেকে-বাম ( r) থেকে মিলিয়ে, এবং একবারে একটি অক্ষরের সাথে মিল রেখে (দ্বিতীয়টি) এটি দ্বিতীয় সংযুক্তিকে বিপরীত করে .কিন্তু নিশ্চিত করে যে তারা সবাই সংলগ্ন ( \G)। এইভাবে, ম্যাচগুলি লাইনফিড পেরিয়ে উঠতে পারে না। এটি পরে বাছাই-পর্যায়ে ব্যবহৃত হয়। বাছাই-মোড ( $) ব্যবহার করে তবে প্রতিটি ম্যাচকে খালি স্ট্রিংয়ের পরিবর্তে প্রকৃত বাছাই করা হয় না। তবে ^বিকল্পের কারণে , ম্যাচগুলি শেষের দিকে পুরো দ্বিতীয় লাইনে বিপরীত হয়।

;{*`.¶

এই পর্যায়টি আউটপুট জন্য এবং প্রোগ্রামের বাকী অংশগুলিকেও প্রভাবিত করে। {এই পর্যায়ে স্ট্রিং পরিবর্তন করতে ব্যর্থ হওয়া অবধি পুনরায় পুনরায় পুনরায় পুনরায় পুনরুদ্ধার করা আবশ্যক (যা ঘটবে কারণ শেষ পর্যায়ে আর মিলবে না)। ;প্রোগ্রাম শেষে অক্ষম আউটপুট। *পালাক্রমে একটি শুষ্ক রানের যার মানে পর্যায় প্রক্রিয়াকৃত হয় এবং ফলাফল ছাপা হয়, কিন্তু পরে পূর্ববর্তী স্ট্রিং পুনঃস্থাপিত হলে এই পর্যায়ে।

মঞ্চ নিজেই একটি লাইনফিড এবং পূর্ববর্তী অক্ষরটি সরিয়ে দেয়। যা আমাদের পছন্দসই আউটপুটটির একটি লাইন দেয় (প্রথম লাইন দিয়ে শুরু করে)।

(\S.*).¶.
 $1¶

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


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

@ সশৌমারা অবশ্যই, আপনি সেখানে যান
মার্টিন ইন্ডার

ধন্যবাদ। এখন আমি জানি যে দ্বিগুণ দৈর্ঘ্যের সেড স্ক্রিপ্টটি খারাপ নয় :)) অতিরিক্ত s///অক্ষরের সাথে যুক্ত হওয়া, দীর্ঘতর স্ট্রিং রিভার্সাল এবং অন্যান্য ক্রিয়াকলাপগুলিতে যা রেটিনার নান্দনিকতার অভাব রয়েছে। ভাল পড়া। +1
শৈশুমারা

9

05 এ বি 1 ই , 12 বাইট

Dgð×J.p€ûR.c

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

ব্যাখ্যা

D             # duplicate input
 g            # length of copy
  ð×J         # append that many spaces to input
     .p       # get a list of all prefixes
       €û     # turn each into a palindrome
         R    # reverse the list
          .c  # pad each line until centered

বা একই দিকের বাইটের জন্য অন্য দিক থেকে গণনা করুন।

Âsgú.sí€ûR.c

ব্যাখ্যা

             # push a reversed copy of input
 s            # swap the input to the top of the stack
  g           # get its length
   ú          # prepend that many spaces
    .s        # get a list of all suffixes
      í       # reverse each
       €û     # turn each into a palindrome
         R    # reverse the list
          .c  # pad each line until centered

2
আপনি যদি মন্তব্যগুলি ক্রমবর্ধমানভাবে
প্রবর্তন

9

জাপট, 22 20 16 14 + 2 বাইট

জাপ্ট আরও অনেক সফল বছরকে গল্ফ করার শুভেচ্ছায়!

²¬£²îU²ç iYU)ê

-Rপতাকা প্রয়োজন । এটি অনলাইন পরীক্ষা!

ব্যাখ্যা

এটি কয়েক দিন আগে আমি যুক্ত çএবং îফাংশনগুলির ব্যবহার করে :

²¬£²îU²ç iYU)ê    Implicit: U = input string
²                 Double the input string.
 ¬                Split into chars.
  £               Map each char X and index Y by this function:
     U²             Take the input doubled.
       ç            Fill this with spaces.
         iYU        Insert the input at index Y.
    î       )       Mask: repeat that string until it reaches the length of
   ²                the input doubled.
                    This grabs the first U.length * 2 chars of the string.
             ê      Bounce the result ("abc" -> "abcba").
                  Implicit: output result of last expression, joined by newlines (-R flag)

ডেনিসের কৌশলটি বাইট দীর্ঘ:

U+Uç)å+ mw y mê

5

জিএনইউ সেড , 110 100 + 1 (আর পতাকা) = 101 বাইট

সম্পাদনা: 9 বাইট খাটো ধন্যবাদ রিলে

অন্য স্ট্রিং ম্যানিপুলেশন ভাষা হিসেবে, কিন্তু ইচ্ছাকে V সেরা!

h;G
:;s:\n.: \n:;t
h;:r;s:(.)(\n.*):\2\1:;tr
H;x
s:\n\n ::
:V
h;s:\n::p;g
s:^: :;s:.\n.:\n:
/\n$/!tV

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

ব্যাখ্যা: ইনপুট ধরে নেওয়া শেষ পরীক্ষার কেস ('ভি!')। আমি স্পষ্টতার জন্য প্রতিটি ধাপে প্যাটার্ন স্পেসটি দেখাব, স্পেসগুলি 'এস এর সাথে প্রতিস্থাপন করব।

h;G                       # duplicate input to 2nd line: V!\nV!
:;s:\n.: \n:;t            # shift each char from 2nd line to 1st, as space: V!SS\n
h;:r;s:(.)(\n.*):\2\1:;tr # save pattern space, then loop to reverse it: \nSS!V
H;x                       # append reversed pattern to the one saved V!SS\n\n\nSS!V
s:\n\n ::                 # convert to format, use \n as side delimiter: V!SS\nS!V
:V                        # start loop 'V', that generates the remaining output
h;s:\n::p;g               # temporarily remove the side delimiter and print pattern
s:^: :;s:.\n.:\n:         # prepend space, delete char around both sides: SV!S\n!V
/\n$/!tV                  # repeat, till no char is left on the right side
                          # implicit printing of pattern left (last output line)

@ রিলে উত্তর আপডেট হয়েছে, ধন্যবাদ!
শৈশুমারা


4

জल्फ, 31 বাইট

জल्फ ভিক্ষুকের সাথে ভি'র শুভ জন্মদিনের শুভেচ্ছা!

RΜwzΒώlid+γ_pq_ l+*␅Hi0ΒΒ␅ L_γ1S

এখানে চেষ্টা করুন! 0x05 হওয়া উচিত।

ব্যাখ্যা

RΜzΒώlid+γ_pq_ l+*␅Hi0ΒΒ␅ L_γ1S  i = input
     li                                  i.length
    ώ                                2 * 
   Β                             Β =
  z                              range(1, Β + 1)
 Μ     d                         map with: (S = index, from 0)
                +                 add:
                 *␅H               S spaces
                    i              and the input
               l                  slice (^) from
                     0Β            0 to Β
           pq_         Β␅         pad (^) with spaces to the right
         γ_                       γ = reverse (^)
        +                 L_γ1    γ + behead(γ)
R                             S  join with newlines

4

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

শুভ জন্মদিন ভি, আপনার সহকর্মী-হতাশার-দীর্ঘ-এই-চ্যালেঞ্জের ASCII- আর্ট ভাষা থেকে!

SσF…·¹Lσ«Fι§σκMι←↖»Fσ«Pσ↖»‖O→

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

ব্যাখ্যা

আমাদের কৌশল: নীচের দিক থেকে শুরু করে উপরের বাম দিকে চলে যাওয়া, ভি এর বাম অর্ধেক মুদ্রণ করুন; তারপর এটি প্রতিফলিত করুন।

Sσ                                    Input σ as string
                                       The bottom len(σ) half-rows:
   F…·¹Lσ«           »               For ι in inclusive range from 1 to length(σ):
            Fι                          For κ in range(ι):
               §σκ                         Print character of σ at index κ
                  Mι←                   Move cursor ι spaces leftward
                      ↖                  Move cursor one space up and left
                                       The top len(σ) half-rows:
                        Fσ«    »      For each character ι in σ:
                            Pσ          Print σ without moving the cursor
                               ↖         Move cursor one space up and left
                                 ‖O→  Reflect the whole thing rightward, with overlap

(যদি কেবল চারকোলের স্ট্রিং স্লাইসিং থাকে ... হায়, এটি এখনও কার্যকর করা হয়নি বলে মনে হয়))


যদিও চারকোলের স্ট্রিং স্লাইসিং ছিল না, তবে এটি রয়েছে CycleChop, যা স্ট্রিংয়ের মাথাটি বের করতে ব্যবহার করা যেতে পারে, এইভাবে 4 টি বাইট সংরক্ষণ করে। তবে, আরও ভাল পন্থা রয়েছে যা 9 বাইট সংরক্ষণ করে। আরও কিছু সঞ্চয় যা আমার মনে হয় সেই সময়েও কাজ করেছিল: Reflectডানদিকে ডিফল্টগুলি প্রতিফলিত করে, আরও বাইট সংরক্ষণ করে এবং একটি ভেরিয়েবল দুটি ইনপুট সংরক্ষণ করে প্রথম ইনপুটটিতে পূর্বনির্ধারিত হয়।
নিল

4

পিপ , 32 25 বাইট

a.:sX#aL#a{OaDQaPRVaaPUs}

কমান্ড-লাইন আর্গুমেন্ট হিসাবে ইনপুট স্ট্রিং নেয়। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

                           a is 1st cmdline arg, s is space (implicit)
     #a                    Len(a)
   sX                      Space, string-multiplied by the above
a.:                        Concatenate that to the end of a
       L#a{             }  Loop len(a) times (but NB, a is now twice as long as it was):
           Oa                Output a (no trailing newline)
             DQa             Dequeue one character from the end of a
                PRVa         Print reverse(a) (with trailing newline)
                    aPUs     Push one space to the front of a

4

স্ট্রিংিজ প্যাকেজ, 225 বাইট সহ আর

library(stringi)
f=function(){
s=scan(,'',1,sep="\n")
m=2*nchar(s)
l=stri_pad(sapply(1:m-1,function(x)substr(paste(paste(rep(" ",x),collapse=""),s),1,m)),m,"right")
r=substr(stri_reverse(l),2,m)
message(paste0(l,r,"\n"))}
f()

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

ব্যাখ্যা:

মূল ধারণাটি হ'ল বাম দিকে ফাঁকা স্থান যুক্ত করা, তারপরে এটি ডান দৈর্ঘ্যে কাটা। এর পরে, এটির বিপরীত সংস্করণটি ডান পাশ হিসাবে পেস্ট করুন। এখানে ফাংশনের একটি দীর্ঘ, মানব-পঠনযোগ্য সংস্করণ:

library(stringi)
make_V <- function(){                  # declaring the function
  string <- scan(, '', n=1, sep="\n")  # reading input
  max_length <- 2*nchar(string)        # number of chars in each half row

  # creating the left side of the V

  left <- stri_pad(                    
            sapply(1:max_length-1,     # for each row
                   function(x){     
                    substr(            
                      paste0(
                        paste0(rep(" ", x),
                               collapse=""), string), # add spaces to left side
                           1,
                           max_length) # cut the unneeded end
                    }),
            width=max_length,
            side="right")              # add spaces to the right side

  # creating the right side of the V

  right <- substr(stri_reverse(left), 2, max_length)

  # print it without any symbols before the strings 
  message(paste0(left, right, "\n"))
}

# run the function
make_V()

সাইটে স্বাগতম! :)
DJMcMayhem

4

রুবি, 92 89 85 বাইট

s=gets.chomp
s<<" "*n=s.size*2
n.times{s=s[0..(n-1)]
puts s+s.reverse[1..-1]
s=" "+s}

আমার প্রক্রিয়াটি ছিল প্রথম অর্ধেকটিকে বিপরীত করার পরে প্রতিটি লাইনের ডান অর্ধেক থেকে প্রথম চরিত্রটি সরিয়ে ফেলা। এটার মত:

Hello     |    olleH
 Hello    |   olleH 
  Hello   |  olleH  
   Hello  | olleH   
    Hello |olleH    
     Hello|lleH     
      Hell|leH      
       Hel|eH       
        He|H        
         H|         

আমি গল্ফ করার চেষ্টা করতে অভ্যস্ত নই তাই এটি আরও খাটো করার জন্য আমার কিছু করার আছে কিনা তা আমাকে জানান।


সাইটে স্বাগতম, এটি একটি দুর্দান্ত উত্তর! দুর্ভাগ্যক্রমে, আমি রুবি সম্পর্কে পুরোপুরি কিছুই জানি না, তাই আমি কোনও টিপস সরবরাহ করতে পারি না। আপনি এই পৃষ্ঠায় যদিও কিছু খুঁজে পেতে সক্ষম হতে পারে ।
DJMcMayhem

ধন্যবাদ! এই পৃষ্ঠায় অনেক আকর্ষণীয় জিনিস রয়েছে তবে আমি মনে করি ইতিমধ্যে সেগুলি অনেকগুলি করছিলাম। আমি বুঝতে পারি যে আমি পার্শ্ব-প্রতিক্রিয়া এবং ক্রিয়াকলাপের ক্রমের মাধ্যমে কিছু বাইট সংরক্ষণ করতে পারি।
ব্যবহারকারী 3334690

1
আমি ধরে নিলাম [রুবি] কি কেবল রুবি, আরও কম-বেশি পরিচিত নামক প্রোগ্রাম প্রোগ্রামিং ভাষা?
আর

এটিকে ল্যাম্বডা তৈরি করে আপনি 8 বাইট সংরক্ষণ করতে পারেন ।
জর্দান

4

ব্যাচ, 186 185 বাইট

@set e=@set 
%e%/ps=
%e%t=%s%
%e%r=
:l
%e%s=%s% 
%e%r= %r%%t:~-1%
%e%t=%t:~,-1%
@if not "%t%"=="" goto l
:g
%e%r=%r:~1%
@echo %s%%r%
%e%s= %s:~,-1%
@if not "%r%"=="" goto g

1 এবং 6 লাইনের একটি পিছনের স্থান রয়েছে। সম্পাদনা করুন: @ কনোরও'ব্রায়েনকে 1 বাইট সংরক্ষণ করা হয়েছে


1
একটি বাইট সংরক্ষণ করার জন্য এখানে এক বিভক্ত উপায় । ( প্রয়োজনীয় হিসাবে সন্নিবেশ করানোর জন্য একটি উপাত্ত তৈরি করুন @set এবং অপসারণ করুন@echo off@
কনার ও'ব্রায়ান

@ কনরও ব্রায়েন ধন্যবাদ, আমি কখনই অনুমান করিনি যে 8 setটি আমাকে এটিকে সার্থক করে তুলতে পর্যাপ্ত বাইটগুলি বাঁচাতে পারে।
নীল

3

হাস্কেল , 76 বাইট

vএকটি Stringযুক্তি গ্রহণ এবং একটি Stringফলাফল প্রদান , প্রধান কাজ ।

v i=unlines.r$i++(' '<$i)
r""=[]
r s|t<-init s=(s++reverse t):map(' ':)(r t)

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

নোট:

  • i প্রাথমিক আর্গুমেন্ট / ইনপুট।
  • sপ্রাথমিকভাবে হয় iসঙ্গে length iযোগ স্পেস।
  • v iকলগুলি r s, তারপরে ফলাফলের লাইনে যোগ দেয়।
  • rStringলাইনের একটি তালিকা প্রদান করে।
  • tহয় sকাটা বন্ধ শেষ অক্ষর দিয়ে।
  • পুনরাবৃত্তি r tপ্রতিটি লাইনের প্রথম, বিয়োগ বিয়োগ ব্যতীত লাইনগুলি উত্পাদন করে।

2
মূল ফাংশনটির নামকরণের জন্য +1 v। : ডি
ডিজেএমসিহেম

1
@DJMcMayhem: প্রধান ফাংশন নামকরণ এক বাইট আর: unlines.r.((++)<*>(' '<$))
নিমি

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

3

জেলি , 13 বাইট

⁶ṁ;@µḣJUz⁶ŒBY

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

কিভাবে?

⁶ṁ;@µḣJUz⁶ŒBY - Main link: string s
⁶             - space character
 ṁ            - mould like s: len(s) spaces
  ;@          - concatenate s with that
    µ         - monadic chain separation (call that t)
      J       - range(length(t))
     ḣ        - head (vectorises): list of prefixes from length to all
       U      - upend: reverse each of them
        z     - transpose with filler:
         ⁶    -     space: now a list of the left parts plus centre
          ŒB  - bounce each: reflect each one with only one copy of the rightmost character
            Y - join with line feeds
              - implicit print

একসাথে মন ভাল মনে। : পি
ডেনিস

ওহ আমার আমি একটি সংক্ষিপ্ত বক্তব্য সম্পর্কে ভাবেনি! কাঠকয়লা একটি ভী দিক, হয়তো কিছু তদন্ত ঐ স্থানের কাছাকাছি ... আছে
জনাথন অ্যালান

3

রুবি, 85 83 বাইট

সম্পাদনা করুন: অতিরিক্ত সাদা স্থান সরিয়ে ফেলা হয়েছে

s=ARGV[0];s+=' '*s.length;s.length.times{|i|puts s+s[i..-2].reverse;s=' '+s[0..-2]}

আমি আসলে এটি রুবিতে গল্ফ করা বেশ কঠিন বলে মনে করেছি। সাদা স্থান যুক্ত করার পরে, এটি কোডের একটি খুব পঠনযোগ্য স্নিপেটে প্রসারিত করে:

s = ARGV[0]
s+=' ' * s.length

s.length.times do |i|
  puts s + s[i..-2].reverse
  s = ' ' + s[0..-2]
end

1
আমার মতো ভেরিয়েবলের ক্ষেত্রে s.leight সেট করে আপনি কিছুটা বাঁচাতে পারবেন? এছাড়াও, আমি মনে করি দৈর্ঘ্যের পরিবর্তে আকারটি করা উচিত?
ব্যবহারকারী 3334690

@ ইউজার 3334690 যা বলেছে তা করে এবং টাইমস স্টেটমেন্টটি moving৯ বাইটে স্থানান্তরিত করে:s=ARGV[0];(s+=' '*s.size).size.times{|i|puts s+s[i..-2].reverse;s=' '+s[0..-2]}
ও'ব্রায়ান

এই ল্যাম্বডা তৈরি করে আপনি পাঁচটি বাইট সংরক্ষণ করতে পারেন ।
জর্দান

3

ম্যাটল্যাব (আর ২০১201 বি), 223 183 বাইট

r=input('');l=nnz(r)*2;for i=1:l;m=l+1-2*i;c={' '};s=cell(1,i-1);s(:)=c;x=cell(1,m);x(:)=c;e=r;y=flip(r);if(m<1);e=r(1:2*end-i+1);y=r(l/2+end-i:-1:1);end;disp(cell2mat([s e x y]));end

প্রথম বার কোড গল্ফিং। টিপস স্বাগত!

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

ম্যাটল্যাব কোড গল্ফ

সম্পাদনা:

লুই লেন্ডো ধন্যবাদ 40 বাইট সংরক্ষণ করা।


2
পিপিসিজিতে স্বাগতম, এবং প্রথম প্রথম উত্তর! দুর্ভাগ্যক্রমে আমি ম্যাটল্যাব সম্পর্কে কিছুই জানি না তাই আমি আপনাকে এই
গল্ফটিতে

1
কোনও স্ট্রিং এর এনকোলেসিং কোটস সহ ইনপুট করা ডিফল্টরূপে অনুমোদিত। সুতরাং আপনি 's'থেকে সরাতে পারেন input। এছাড়াও, আপনি কেন ব্যবহার করছেন evalc(disp(...))তা আমি দেখতে পাচ্ছি না তবে আমি মনে করি আপনি কেবল cell2mat এইভাবে
লুইস মেন্ডো

1
এছাড়াও, এর flipচেয়ে খাটো end:-1:1, এখানে দেখুন
লুইস মেন্ডো

3

পিএইচপি, 95 92 85 80 78 77 বাইট

দ্রষ্টব্য: আইবিএম -850 এনকোডিং ব্যবহার করে

for($s.=strtr($s^$s=$argn,~ ,~▀);~$s[$i++];)echo$s,strrev($s=" $s"^$s^$s),~§;
          # Note that this ^ char is decimal 255 (negating it yields "\0")

এভাবে চালান:

echo "Hello" | php -nR 'for($s.=strtr($s^$s=$argn,"\0",~▀);~$s[$i++];)echo$s,strrev($s=" $s"^$s^$s),~§;'
> Hello         olleH 
>  Hello       olleH  
>   Hello     olleH   
>    Hello   olleH    
>     Hello olleH     
>      HellolleH      
>       HellleH       
>        HeleH        
>         HeH         
>          H          

ব্যাখ্যা

for(
  $s.=strtr(             # Set string to the input, padded with spaces.
    $s^$s=$argn,         # Input negated with itself, leads to string with
                         # only null bytes with the same length.
    ~ ,                  # Replace null bytes...
    ~▀                   # ... with spaces.
  );
  ~$s[$i++];             # Iterate over the string by chars, works because 
                         # there are just as many lines as the padded
                         # string has chars.
)
  echo                   # Output!
    $s,                  # The string.
    strrev(              # The reverse of the string.
      $s=" $s"^$s^$s     # After each iteration, prefix string with a
    ),                   # space, and trim the last character.
    ~§;                  # Newline.

বদলান

  • প্যাডের অক্ষর থেকে মুক্তি পেয়ে 3 বাইট সংরক্ষণ করা ( str_padস্থানের ডিফল্ট, যা আমাদের প্রয়োজন)
  • স্ট্রিংয়ের পরিবর্তে এর ছাঁটাইয়ের জন্য বাইনারি ক্রিয়াকলাপগুলি ব্যবহার করে 7 বাইট সংরক্ষণ করা substr
  • বিপরীত মুদ্রণ করার সময় স্ট্রিংটি ঘোরানোর মাধ্যমে 5 বাইট সংরক্ষণ করা হয়। একটি ব্যাকস্পেস মুদ্রণের প্রয়োজনীয়তা প্রতিরোধ করে, তবে প্রতিটি লাইনে একটি পিছনের স্থানের ফলাফল হয়।
  • আরও বিভক্ত, তবে সংক্ষিপ্ত পদ্ধতিটি ব্যবহার করে স্ট্রিং প্যাডিং করে 2 বাইট সংরক্ষণ করা হয়েছে।
  • এই ~"0"মামলার জন্য অ্যাকাউন্টিং করার দরকার নেই (এএসসিআইআই 207) এর কারণে একটি বাইট সংরক্ষণ করা হয়েছে , কারণ সমস্ত ইনপুট মুদ্রণযোগ্য আসকি (THx @Titus) হিসাবে ধরে নেওয়া যেতে পারে

echo$s,strrev($s=" $s"^$s^$s),~§;5 বাইট সঞ্চয়
তিতাস

@ টিটাস, থেক্স সাধারণত আমি হোয়াইটস্পেস trailing এড়াতে, কিন্তু ওপি বলেন, এটি গ্রহণযোগ্য এর
aross

~$s[$i++]যথেষ্ট (ইনপুট প্রিন্টযোগ্য ASCII, এবং ঠিক তেমন $s)
টাইটাস

@ টিটাস, থেক্স, ভাল ক্যাচ আমি নিরাপদ পাশ কোডটি ঝোঁক
aross

2

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

(-10 বাইট কনর ও ব্রায়েনকে ধন্যবাদ)

V=(j,i=0,p="")=>i<(f=j.length)*2?V(j,-~i,p+" ".repeat(i)+j.slice(0,f-i*(i>f))+" ".repeat(i<f?(f-i)*2-1:0)+[...j.slice(0,f+~i*(i>=f))].reverse().join``+`
`):p

একটি পুনরাবৃত্তি সমাধান। আমি জাভাস্ক্রিপ্টে নতুন, তাই দয়া করে নম্র হন! কোন গল্ফিং টিপস প্রশংসা করা হয়। :)

এবং, অবশ্যই, আপনাকে একটি খুব শুভ জন্মদিন V!

পরীক্ষার স্নিপেট


1
এটি বেশ ভাল! সাধারণত, s.split("")পরিবর্তিত হতে পারে [...s], এবং ব্যাকটিক্স একটি জোড়া অনুসরণ a.join("")করতে পারে a.join। আপনি প্রতিস্থাপন করে [r='repeat']এবং [r]প্লেন ওল'র পুনরাবৃত্তি দিয়ে একই সাথে আরও 3 টি বাইট সংরক্ষণ করতে পারেন slice
কনর ও'ব্রায়ান

@ কনরও'ব্রায়েন টিপসের জন্য ধন্যবাদ! তারা অনেক প্রশংসা করা হয়। :)
আর কপ

2

সিজেম , 26 বাইট

আপনার পুরানো পাল সিজেম থেকে জন্মদিনের শুভেচ্ছা!

q_,2*:L,\f{LS*+m>L<_W%(;N}

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

ব্যাখ্যা

q                           Push the input
 _,2*:L                     Push 2 times the length of the input, store it in L
       ,                    Take the range from 0 to L-1
        \                   Swap top stack elements
         f{                 Map over the range, using the input as an extra parameter
           LS*+               Append L spaces to the input
               m>             Rotate the resulting string right i positions (where i is the
                               current number being mapped)
                 L<           Take the first L characters of the string
                   _W%        Duplicate it and reverse it
                      (;      Remove the first character from the copy
                        N     Add a newline
                         }  (end of block)
                            (implicit output)

2

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

$l=($s="$args")|% Le*;$r=-join$s[-1..-$l];0..($l*2-1)|%{' '*$_+($s+' '*$l).substring(0,$l*2-$_)+(' '*$l+$r).substring($_+1)}

এটিকে একটি একক প্যারামিটার দিয়ে কল করুন .\V.ps1 Hello

সম্পাদনা করুন: অ্যাডমবর্কবার্ক থেকে টিপস সহ 2 বাইট সংরক্ষণ করা হয়েছে


1
একটি এটি অনলাইন চেষ্টা করুন! লিঙ্ক, আপনি আগ্রহী ক্ষেত্রে।
ডেনিস

ওহ, আমি এই ছোট্ট সরঞ্জাম সম্পর্কে জানতাম না, ধন্যবাদ!
টোর

হাই! সামনে বেশ কয়েকটি ছোট গল্ফ। স্ট্রিং হিসাবে ইনপুট নিন এবং ভেরিয়েবলটি পাস করার জন্য এনক্যাপসুলেশন ব্যবহার করুন। দুটি বাইট সংরক্ষণ করুন। $l=($s="$args")|% Le*;
অ্যাডমবর্কবার্ক

বাহ, 2 গল্ফ সম্পর্কে জানতাম না, ধন্যবাদ!
টোর


2

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

f=(s,y=0,x=0,l=s.length*2-1)=>(s[(x>l?l*2-x:x)-y]||' ')+(x<l*2?f(s,y,x+1):y<l?`
`+f(s,y+1):'')

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


2

জে, 44 বাইট

(([(,}.@|.)@{."1-@i.@[|."0 1(,#&' ')~)~+:@#)

1
হুম, কীভাবে এটি অনলাইনে চালানো যায় তা আমি বুঝতে পারি না। এটি অনলাইন চেষ্টা করুন! আমি কি একে একে ভুল বলছি? (আমি একটি জে newb নই)
DJMcMayhem

@ ডিজেএমসিএমহেম এটি একটি অনুষ্ঠান, কোনও প্রোগ্রাম নয়। tio.run/nexus/…
ডেনিস

গল্ফ: |."0 1থেকে |."{(2 বাইট
কনর ও'ব্রায়ান

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