সব দিক থেকে উন্মুক্ত


14

ইনপুট:

একটি স্ট্রিং

আউটপুট:

1) প্রথমে আমরা ইনপুট-স্ট্রিংয়ের শেষে মুছে ফেলা অক্ষরটি অবধি গ্রহণ করি যতক্ষণ না আমাদের বর্গক্ষেত্রের দৈর্ঘ্য (যেমন 1, 4, 9, 16, 25, 36, ইত্যাদি) বাকি না থাকে
সুতরাং abcdefghijklmnopqrstuvwxyz(দৈর্ঘ্য 26) হয়ে যায় abcdefghijklmnopqrstuvwxy( দৈর্ঘ্য 25)।

2) তারপরে আমরা এটি বর্গাকারে রেখেছি, একবারে এক লাইন, বাম থেকে ডান:

abcde
fghij
klmno
pqrst
uvwxy

৩) আমরা এটিকে চারটি দিক দিয়ে ভাঁজ করি, যেমন (বাইরের ভাঁজ করা 'ব্লক'-এর আর কোনও অভ্যন্তরীণ অক্ষর না ফেরা পর্যন্ত আমরা উন্মোচন করতে থাকি):

      m
     qrs
     l n
     ghi
    abcde
 ihgf   jihg
mn lk   on lm
 srqp   tsrq
    uvwxy
     qrs
     l n
     ghi
      m

কিছু বিষয় লক্ষণীয়, যখন আমরা বাহ্যিক ভাঁজ করি তখন আমরা মূলত এরকমই আয়না করি (স্পষ্টকরণ হিসাবে সংখ্যাগুলি যুক্ত হয়, যা এই উদাহরণগুলিতে 'সূচকগুলি' উপস্থাপন করে):

যখন আমরা বাম দিকটি ভাঁজ করি:

 123    to:   321 123
fghij         ihgf   j

যখন আমরা ডান দিকটি ভাঁজ করি:

 123    to:    123 321
fghij         f   jihg

যখন আমরা উপরের দিকে ভাঁজ করি:

            3q
            2l
            1g
  b   to:    b
 1g         1
 2l         2
 3q         3
  v          v

যখন আমরা নীচের দিকে ভাঁজ করি:

 b          b
1g         1
2l         2
3q         3
 v   to:    v
           3q
           2l
           1g

চ্যালেঞ্জ নিয়ম:

  • আপনি ধরে নিতে পারেন ইনপুটটিতে সর্বদা কমপক্ষে 1 টি অক্ষর থাকবে (এটি আউটপুটও হবে)।
  • আউটপুট ফর্ম্যাটটি নমনীয়, যাতে আপনি STDOUT বা STDERR এ মুদ্রণ করতে পারেন; স্ট্রিং-অ্যারে / তালিকা বা অক্ষর 2 ডি-অ্যারে হিসাবে প্রত্যাবর্তন; নতুন-লাইনগুলির সাথে একক স্ট্রিং; প্রভৃতি
  • ইনপুটটিতে কেবলমাত্র বর্ণমালার অক্ষর থাকবে ( a-zA-Z0-9)
  • আপনি ASCII- আর্ট আউটপুট যেমন ডটের মতো শূন্যস্থান পূরণ করতে একটি অ-অক্ষর অক্ষরও ব্যবহার করতে পারেন .
  • ট্রেলিং স্পেস এবং একক পেছনের নতুন লাইন alচ্ছিক।
  • বাইরের ভাঁজযুক্ত 'ব্লক'-এর আরও কোনও কেন্দ্র উন্মুক্ত করার আগ পর্যন্ত আমরা উন্মুক্ত করতে থাকি।

সাধারণ নিয়ম:

  • এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।
    কোড-গল্ফ ভাষাগুলি আপনাকে নন-কোডগলফিং ভাষার সাথে উত্তর পোস্ট করতে নিরুৎসাহিত করবেন না। 'যে কোনও' প্রোগ্রামিং ভাষার জন্য যতটা সম্ভব সংক্ষিপ্ত উত্তর নিয়ে আসার চেষ্টা করুন।
  • স্ট্যান্ডার্ড নিয়মগুলি আপনার উত্তরের জন্য প্রযোজ্য , সুতরাং আপনাকে সঠিক পরামিতি এবং রিটার্ন-টাইপ, সম্পূর্ণ প্রোগ্রাম সহ STDIN / STDOUT, ফাংশন / পদ্ধতি ব্যবহার করার অনুমতি দেওয়া হবে। আপনার কল
  • ডিফল্ট লুফোলগুলি নিষিদ্ধ।
  • যদি সম্ভব হয় তবে আপনার কোডের জন্য একটি পরীক্ষার সাথে একটি লিঙ্ক যুক্ত করুন।
  • এছাড়াও, প্রয়োজনে একটি ব্যাখ্যা যোগ করুন।

পরীক্ষার কেস:

Input: abcdefghijklmnopqrstuvwxy
Output:
      m
     qrs
     l n
     ghi
    abcde
 ihgf   jihg
mn lk   on lm
 srqp   tsrq
    uvwxy
     qrs
     l n
     ghi
      m

Input: A
Ouput:
A

Input: ThisIsATest
Output:
  I
 Thi
Is sI
 ATe
  I

Input: HowAboutAVeryLongExampleWhichIsAlsoAnEvenSquareInsteadOfOddOneAndExceeds64Chars
Output:

               An
               ch
              xamp
              i  I
              o  E
              quar
             steadO
             S    e
             s    v
             h    s
             E    l
             VeryLo
            HowAbout
      oLyreVA      noLyreV
  xampl    Eg      el    Examp
hci  Is    hW      As    hi  Ihc
nAo  Ev    sl      ev    so  EnA
  quare    Sn      Ie    Squar
      Odaetsn      fOdaets
            OddOneAn
             steadO
             S    e
             s    v
             h    s
             E    l
             VeryLo
              xamp
              i  I
              o  E
              quar
               An
               ch

Input: Lenght7
Output:
Le
ng

Input: abc
Output:
a

সেখানে "HowAboutAVeryLongExampleWhichIsAlsoAnEvenSquareInsteadOfOddOneAndExceeds64Chars" জন্য পরীক্ষা একটা ভুল: 'হ' -> 'আমি' আউটপুট নীচে কাছাকাছি
ngn

উত্তর:


5

এসওজিএল ভি0.12 , 75 বাইট

l√u²m√lH»{ā;l⁾:A∫Ba{bIwFIWhFbž;FIbI@ž}};}¹K⁴{ē2\⌡±e{@Κ};⁴┼┼};0E{ē2\⌡№:h++}╚

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

এটি স্ট্যাকের ইনপুটটি আশা করে, তাই সহজেই ব্যবহারের জন্য যুক্ত করেছিলাম , শুরুতে । যদি ইনপুটে কেবলমাত্র সংখ্যা থাকে তবে এটি সমস্যার কারণ হতে পারে তাই এখানে এএ টেস্ট-স্যুট।

70 বাইট √lH»{ā;l⁾:A∫Ba{bIwFIWhFbž;FIbI@ž}};}¹K⁴{ē2\⌡±e{@Κ};⁴┼┼};0E{ē2\⌡№:h++}╚ কাজ করে, তবে আমি এখন কেবল স্ট্রিংগুলিতে প্রয়োগ করেছি এবং ডকুমেন্টেশনে উল্লেখ করা হয়নি যে এটি যে দৈর্ঘ্যটি আমি এটি গণনা করব তা ছাড়বে।

ব্যাখ্যা:

creating a square from the input

l       get the length of the input
 √      get its square root
  u     floor that
   ²    square it
    m   mold the input to that length
     √  convert it to a square

creating the unfoldings of the square - the idea is to cut out the inner squares to a new array

lH»{                              } (length-1)//2 times do
    ā;                                push an empty array below ToS
      l⁾                              push ToS.length - 2 (ToS here is the square or the previous unfolding)
        :A                            save a copy of that in the variable A
          ∫B                    }     repeat that amount of times, saving iteration on B - cutting the inner square to the empty array
            a{                 }        variable A times do
              bIw                         get the b+1th row of the previous unfolding
                 FIW                      get the (current loops iteration + 1)th character of that
                    h                     swap the 2 items below ToS - so the stack now is [..., prevUnfolding, newArray, character]
                     Fbž                  at [current loops iteration; b] insert that character in the array
                        ;                 swap the top 2 items - the stack now is [..., newArray, prevUnfolding]
                         FIbI@ž           at [current loops iteration+1; b+1] insert a space
                                 ;    get the now not empty array ontop of the stack

add the horizontal unfoldings

¹                    wrap the stack in an array
 K                   push the 1st item of that, which will function as the canvas
  ⁴{              }  iterate over a copy of the remaining items
    ē2\⌡               repeat (e++ divides by 2) times (default for the variable E is the input, which defaults to 0)
        ±                reverse the array horizontally
         e{  }         repeat e times
           @Κ            add a space before ToS
              ;⁴┼┼     add that horizontally before and after the canvas

add the veertical unfoldings

;                get the copy of the foldings above the canvas
 0E              reset the variable E to 0
   {         }   iterate the copy of the foldings
    ē2\⌡           repeat (e++ divides by 2) times (default for the variable E is the input, which defaults to 0)
        №            reverse the array vertically
         :h++      add that vertically before and after the canvas
              ╚  center the canvas vertically

আপনার 70 বাইট সংস্করণটি বৈধ হিসাবে প্রতিযোগিতা করা এখন আর কোনও জিনিস নয়
শেগি

@ শেগি 75৫ বাইট সংস্করণটি কেবলমাত্র কারণেই এই চ্যালেঞ্জটি কেবল সংখ্যাগুলিতে কাজ করেছিল valid
75৫

4

কাঠকয়লা , 120 109 বাইট

AI§⪪IXLθ⁰·⁵.⁰ηFη⊞υ✂θ×ιηF⁴«AυεJ⁰¦⁰F÷⁺¹η²«F⁴«F⁻η⁺κκ§§εκ⁺μκ↷A⮌EεEε§ξνε¶»A⎇﹪ι²Eε⮌λ⮌εεA⎇‹ι²⁻⁺²⁺κκη⁻η⁺κκκ¿﹪ι²Mκ¹M¹κ

এটি অনলাইন চেষ্টা করুন! নোট যা সেই থেকে পরিবর্তিত হয়েছে এবং লিঙ্কটি এটি প্রতিফলিত করে। ব্যাখ্যা:

       θ          Input string
      L           Length
     X  ⁰·⁵       Raise to the power 0.5
    I             Cast to string
   ⪪       .      Split on the decimal point
  §         ⁰     Take the first element (integer part)
 I                Cast to integer
A            η    Assign to h

গণনা করে h = int(sqrt(len(q)))। ( Floorএখনও কার্যকর করা হয়নি ...)

Fη⊞υ✂θ×ιη

নিষ্কাশন করে hদৈর্ঘ্যের টুকরা hইনপুট থেকে। (প্রকৃতপক্ষে আমি স্লাইসগুলি দৈর্ঘ্যকে কাটাতে বিরক্ত করি না h)) আমি forবরং একটি লুপ ব্যবহার Mapকরি কারণ আমার কোথাও Assignফলাফল হওয়া দরকার Mapএবং এটির সাথে লেনদেন করার সময় এটি অনর্থক Slice

F⁴«

উদ্ঘাটনটি একবারে প্রতিটি দিকে একবার (ডাউন, ডান, উপরে, কোডেড হিসাবে বাম) হয়ে যায় times এই লুপের জন্য লুপ ভেরিয়েবল i

   Aυε

কাটা স্ট্রিংয়ের একটি অনুলিপি নিন।

   J⁰¦⁰

ক্যানভাসের hউত্সে ফিরে যান যাতে প্রতিটি ফোল্ডার hএকই জায়গায়-বর্গাকার দিয়ে শুরু হয় ।

   F÷⁺¹η²«

পুনরাবৃত্তি (h+1)/2বার; প্রতিটি প্রকাশের জন্য একবার, মূল বর্গ জন্য একবার। এই লুপের জন্য লুপ ভেরিয়েবল k

          F⁴«

4 বার পুনরাবৃত্তি করুন, উন্মুক্ত স্কোয়ারের প্রতিটি পক্ষের জন্য একবার। (আমি লুপ ভেরিয়েবল ব্যবহার করি না l))

             F⁻η⁺κκ         Loop h-2k times, loop variable `m`
                    §εκ     Take the `k`th row
                   §   ⁺μκ  Take the `k+m`th column
                            Implicitly print the character

উন্মুক্ত স্কোয়ারের একপাশে মুদ্রণ করুন। যেহেতু এটি kমঞ্চটি উন্মোচিত হয়েছে তাই বর্গক্ষেত্রের দিকটি রয়েছে h-2kএবং kমূল বর্গাকার প্রান্ত থেকে অক্ষরগুলি নিয়ে যায় takes

পিভট স্কোয়ারের পাশের পাশের মুদ্রণের জন্য প্রস্তুত।

               Eε       Map over the array (element `m`, index `n`)
                 Eε     Map over the array (element `x`, index `p`)
                   §ξν  Take the `n`th element of `x`
              ⮌         Reverse
             A        ε Replace the array with the result

কাটা স্ট্রিংটি ঘোরান। (হ্যাঁ, এটি একটি ξ। আমি এটি প্রায়শই ব্যবহার করতে পাই না!) Eηএছাড়াও বাইরের জন্য কাজ করবে Map। আবর্তনের অ্যারের প্রস্থটি কেটে ফেলার সুবিধাজনক পার্শ্ব-প্রতিক্রিয়াও রয়েছে h

             ¶»

পাশটি মুদ্রণের পরে, কার্সারটি স্কোয়ারের প্রান্ত থেকে সরে যায়। একটি অক্ষর কম মুদ্রণ পার্শ্ব 1 এর স্কোয়ারের জন্য ব্যর্থ হয় এবং যাইহোক কম golfy হয়। এর আগে পাইভোট করা হয়েছে, একটি নতুন লাইন মুদ্রণ করা कर्सरটিকে কর্নারে ফিরিয়ে নিয়েছে।

            ﹪ι²         Take `i` modulo 2
           ⎇            Choose either
                   ⮌ε   Reverse the array
               Eε       Map over the array (element `l`, index `m`)
                 ⮌λ     Reverse each element
          A          ε  Replace the array with the result

বর্গক্ষেত্র উল্লম্ব বা অনুভূমিকভাবে যথাযথ হিসাবে ফ্লিপ করুন।

           ⎇‹ι²                 If `i` < 2
                  ⁺κκ           Double `k`
                ⁺²              Add 2
               ⁻     η          Subtract `h`
                        ⁺κκ     Else double `k`
                      ⁻η        Subtract from `h`
          ≔                κ    Assign back to `k`.

পরবর্তী উদ্ঘাটন থেকে স্থানচ্যুতি গণনা করুন।

           ﹪ι²          Take `i` modulo 2
          ¿             If not zero
              Mκ¹       `k` across and 1 down
                 M¹κ    Else 1 across and `k` down

যথাযথ হিসাবে যথাযথ হিসাবে পরবর্তী উন্মুক্তে অনুভূমিকভাবে বা উলম্বভাবে সরান।

এখানে সর্বশেষতম চারকোল বৈশিষ্ট্যগুলি ব্যবহার করে প্রাপ্ত 97-বাইট সংস্করণটির একটি লিঙ্ক এখানে রয়েছে Floor: এটি অনলাইনে চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ।


আপনি কি নিশ্চিত যে এটি কাজ করে? টিআইও কেবল একটি ত্রুটি বাড়িয়েছে বলে মনে হচ্ছে।
LyricLy

@ লিরিক্যালি বাহ, আমি ভেবেছিলাম আমি চালাক হয়ে যাচ্ছি, কিন্তু বাস্তবে এটি কার্যকর হয়েছে কিনা তা পরীক্ষা করতে ব্যর্থ হয়েছিল। আমি পরিবর্তনটি ফিরিয়ে দেব।
নীল

1
ক্রেপ ফালি টুকরোগুলিতে কাজ করতে ভুলে গেছে
ASCII- কেবল

@ এএসসিআইআই-কেবল আমাকেই সহায়তা করে না, যাইহোক, বহুগুণ হওয়ার আগে আমাকে পূর্ণসংখ্যায় কাটতে হবে।
নীল

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