পাঠ্য একটি ঘনক ݀


17

গতবার আপনি পাঠ্যের একটি বর্গ তৈরি করেছেন , কিন্তু এখন, আপনি কি পাঠ্যের কিউব তৈরি করতে পারেন ?

চ্যালেঞ্জ

একটি স্ট্রিং দেওয়া হয়েছে, কিউব আকারে স্ট্রিং আউটপুট করুন।

আপনি ধরে নিতে পারেন যে স্ট্রিংটিতে সর্বদা 2 টি অক্ষর বা তার বেশি থাকবে এবং কেবল মুদ্রণযোগ্য আসকি অক্ষর থাকবে।

কিভাবে একটি টেক্সট কিউব করবেন

ভয়ানক এমস্পেন্ট দক্ষতা.পিএনজি

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

Input:
Test

Output:
   Test
  e  ss
 s  e e
tseT  T
s  e e
e  ss
Test

Input:
Hello, world!

Output:
            Hello, world!
           e           dd
          l           l l
         l           r  r
        o           o   o
       ,           w    w

     w           ,      ,
    o           o       o
   r           l        l
  l           l         l
 d           e          e
!dlrow ,olleH           H
d           e          e
l           l         l
r           l        l
o           o       o
w           ,      ,

,           w    w
o           o   o
l           r  r
l           l l
e           dd
Hello, world!

Input:
Hi

Output:
 Hi
iHH
Hi

পাইথনে রেফারেন্স বাস্তবায়ন

text = raw_input("Enter a string: ")

print " " * (len(text) - 1) + text

spaces = len(text) - 2
_spaces = spaces

for i in range(1, len(text) - 2 + 1):
    print " " * spaces + text[i] + " " * _spaces + text[(i + 1) * -1] + " " * (_spaces - spaces) + text[(i + 1) * -1]
    spaces -= 1

print text[::-1] + " " * _spaces + text[0]

spaces = _spaces - 1

for i in range(1, len(text) - 2 + 1):
    print text[(i + 1) * -1] + " " * _spaces + text[i] + " " * spaces + text[i]
    spaces -= 1

print text

বিধি

  • এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর! টাইব্রেকার সর্বাধিক উত্সাহিত।
  • স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।
  • ট্রেলিং নিউলাইন এবং পেছনের স্থানগুলি অনুমোদিত allowed

পেছনের স্থানগুলি কি অনুমোদিত?
নিল

নিল হ্যাঁ (15 টি অক্ষর)
অ্যাক্রোলিথ

শুধু কৌতূহলী, চ্যালেঞ্জ শিরোনামে অতিরিক্ত অক্ষরগুলির সাথে কী আছে?
অ্যাডমবর্কবর্ক

@ টিমমিডি "পাঠ্যের একটি ঘনক" 14 টি অক্ষর দীর্ঘ, শিরোনামটি কমপক্ষে 15 টি অক্ষর দীর্ঘ হওয়া দরকার, তাই আমি একটি ছোট বিন্দু যুক্ত করেছি। আমি মনে করি এটি এক।
অ্যাক্রোলিথ

আহ, ঠিক আছে. এটি আমার কম্পিউটারে IE তে অনেক বড় চেনাশোনা হিসাবে দেখায় , তাই আমার প্রশ্ন।
অ্যাডমবর্কবার্ক

উত্তর:



4

পাইথন 2, 228 223 221 203 199 195 189

t=input()
x=" "
l=len(t)-1
q=l-1
f=range(q,0,-1)
print x*l+t
for i in f:print x*i+t[l-i]+x*q+t[i]+x*(q-i)+t[i]
print t[::-1]+x*q+t[0]
for i in f:print t[i]+x*q+t[l-i]+x*(i-1)+t[l-i]
print t

পাইথন 3, 192 188 182

t=input()
x=" "
l=len(t)-1
q=l-1
p=print
f=range(q,0,-1)
p(x*l+t)
for i in f:p(x*i+t[l-i]+x*q+t[i]+x*(q-i)+t[i])
p(t[::-1]+x*q+t[0])
for i in f:p(t[i]+x*q+t[l-i]+x*(i-1)+t[l-i])
p(t)

এটি 203 বাইট। এছাড়াও, আপনি প্রতিস্থাপন 4 বাইট সংরক্ষণ করতে পারবেন raw_input()সঙ্গে input()
এক্রোলিথ

ঠিক তুমিই, ধন্যবাদ!
জোশুয়া দে হান

x*(q)? আপনার প্যারেন্সগুলি সরাতে সক্ষম হবেন, হ্যাঁ?
মূল্য কালি

আপনি ঠিক বলেছেন, আমাকে নির্বুদ্ধি করুন;) এখনই ঠিক করছেন হা হা
জোশুয়া দে হান

x*(i-1)->x*~-i
mbomb007

3

x86 (আইএ -32) মেশিন কোড, 126 বাইট

Hexdump:

60 8b f9 57 33 c0 f2 ae 5e 2b fe 4f 87 fa 8d 1c
12 8b c3 48 f6 e3 c6 04 07 00 48 c6 04 07 20 75
f9 8b ea 4d 53 8d 04 2a 50 53 8b c5 f6 e3 8d 44
68 01 50 53 2b c2 8b c8 50 4b 53 55 53 03 c5 50
f7 d3 53 50 53 95 f6 e2 6b c0 04 50 43 53 51 6a
01 4a 52 6a 01 50 6a ff 51 b0 0a 6a 0b 8b dc 59
8b 6c cb fc 88 04 2f 03 2c cb 89 6c cb fc 83 f9
0a 75 01 ac e2 ea 4a 79 e0 83 c4 58 61 c3

এটি কিছুটা দীর্ঘ, তাই এটি ব্যাখ্যা করতে আমি প্রথমে সি কোডটি দেব:

void doit(const char* s, char out[])
{
    int n = strlen(s);
    int w = 2 * n;
    int h = w - 1;
    int m = n - 1;

    memset(out, ' ', h * w);
    out[h * w] = 0;

    int offset1 = n + m;
    int offset2 = w * m + 2 * m + 1; // 2 * n * n - 1
    int offset3 = offset2 - n; // 2 * n * n - n - 1
    int offset4 = 4 * n * m; // 4 * n * n - 4 * n

    int offsets[] = {
        offset3, -1,
        offset4, 1,
        m, 1,
        offset3, 1 - w,
        offset4, -w,
        offset2 - 1, -w,
        offset2 - 1, w - 1,
        m, w - 1,
        offset3, w,
        offset2, w,
        offset1, w,
    };

    do
    {
        char c = *s++;
        for (int i = 0; i < 11; ++i)
        {
            if (i == 9)
                c = '\n';
            int offset = offsets[i * 2];
            assert(offset > 0 && offset < w * h);
            out[offset] = c;
            offsets[i * 2] += offsets[i * 2 + 1];
        }
    } while (--n);
}

এখানে nইনপুট স্ট্রিংয়ের দৈর্ঘ্য ।

আউটপুট ক্ষেত্রের মাত্রা (উচ্চতা) 2nদ্বারা 2n-1( প্রস্থ )। প্রথমত, এটি শূন্যস্থান দিয়ে সমস্ত কিছু পূরণ করে (এবং একটি টার্মিনেটিং নাল বাইট যুক্ত করে)। তারপরে, এটি আউটপুট অঞ্চলে 11 টি সরল রেখা বরাবর ভ্রমণ করে এবং এগুলি পাঠ্য দিয়ে পূর্ণ করে:

  • 2 টি লাইন শেষ-লাইন বাইট দ্বারা ভরাট হয় (= 10)
  • 9 লাইন ইনপুট স্ট্রিংয়ের একটানা বাইট দ্বারা পূর্ণ হয়

প্রতিটি লাইন দুটি সংখ্যার দ্বারা উপস্থাপিত হয়, একটি সূচনা অফসেট এবং একটি স্ট্রাইড। offsetsঅ্যাক্সেসকে "সহজ" করার জন্য আমি তাদের উভয়কে অ্যারেতে স্টাফ করেছি ।

আকর্ষণীয় অংশ অ্যারে পূরণ করা হয়। অ্যারেতে প্রবেশের ক্রমটির জন্য খুব কম গুরুত্ব রয়েছে; আমি তাদের পুনরায় সাজানোর চেষ্টা করেছি নিবন্ধের বিবাদগুলির সংখ্যা হ্রাস করতে। তদুপরি, চতুর্ভুজ সূত্র গণনার উপায় চয়ন করার ক্ষেত্রে কিছুটা স্বাধীনতা অর্জন করে; আমি বিয়োগের সংখ্যা হ্রাস করার চেষ্টা করেছি (কারণ সংযোজনগুলি নমনীয় দ্বারা প্রয়োগ করা যেতে পারেLEA নির্দেশের )।

সমাবেশ উত্স:

    pushad;

    ; // Calculate the length of the input string
    mov edi, ecx;
    push edi;
    xor eax, eax;
    repne scasb;
    pop esi; // esi = input string
    sub edi, esi;
    dec edi;

    ; // Calculate the size of the output area
    xchg edi, edx;  // edx = n
                    // edi = output string
    lea ebx, [edx + edx]; // ebx = w
    mov eax, ebx;
    dec eax; // eax = h
    mul bl; // eax = w * h

    ; // Fill the output string with spaces and zero terminate it
    mov byte ptr [edi + eax], 0;
myfill:
    dec eax;
    mov byte ptr [edi + eax], ' ';
    jnz myfill;

    mov ebp, edx;
    dec ebp; // ebp = m

    ; // Fill the array of offsets
    push ebx; // w
    lea eax, [edx + ebp];
    push eax; // offset1
    push ebx; // w
    mov eax, ebp;
    mul bl;
    lea eax, [eax + 2 * ebp + 1];
    push eax; // offset2
    push ebx; // w
    sub eax, edx;
    mov ecx, eax; // ecx = offset3
    push eax; // offset3
    dec ebx;
    push ebx; // w - 1
    push ebp; // m
    push ebx; // w - 1
    add eax, ebp;
    push eax; // offset2 - 1
    not ebx;
    push ebx; // -w
    push eax; // offset2 - 1
    push ebx; // -w
    xchg eax, ebp; // eax = m
    mul dl;
    imul eax, eax, 4;
    push eax; // offset4
    inc ebx;
    push ebx; // 1 - w
    push ecx; // offset3
    push 1;
    dec edx; // edx = n - 1
    push edx;
    push 1;
    push eax;
    push -1;
    push ecx;

    ; // Use the array of offsets to write stuff to output
myout:
    mov al, '\n';
    push 11;
    mov ebx, esp;
    pop ecx;
myloop:
    mov ebp, [ebx + ecx * 8 - 4];
    mov [edi + ebp], al;
    add ebp, [ebx + ecx * 8];
    mov [ebx + ecx * 8 - 4], ebp;
    cmp ecx, 10;
    jne skip_read;
    lodsb;
skip_read:
    loop myloop;
    dec edx;
    jns myout;

    add esp, 11 * 8;

    popad;
    ret;

আমি এখানে বাইট গুণগুলি ব্যবহার করেছি, ইনপুট স্ট্রিংয়ের দৈর্ঘ্য 127 এ সীমাবদ্ধ করে রেখেছি the এটি রেজিস্টারে ক্লোবারিং এড়ায় । পরিবর্তে edxপণ্যটি গণনা করা axহয়।

একটি ছোটখাট ত্রুটি: অ্যারে পূরণ করার পরে, স্ট্রিংয়ের দৈর্ঘ্য 1 হ্রাস পায় So সুতরাং আমি লুপের প্রস্থান শর্তটি সামঞ্জস্য করেছি:

    jns myout

এটি নিচে -1 এ গণনা করা হয়।


3

রুবি, 148 144 বাইট

nপতাকা থেকে +1 বাইট । পাঠযোগ্যতার (একই কার্যকারিতা) জন্য সেমিকোলনের পরিবর্তে নিউলাইনগুলি দেখায়।

S=" "
X=S*s=$_.size-2
puts X+S+I=$_,(r=1..s).map{|i|c=I[~i];S*(s-i+1)+I[i]+X+c+S*~-i+c},I.reverse+X+I[0],r.map{|i|c=I[i];I[~i]+X+c+S*(s-i)+c},I

তেমন দৌড়াও। ইনপুটটি এসটিডিনের একটি লাইন, কোনও পেছনের নতুন লাইন নেই, সুতরাং সম্ভবত এটি ফাইল থেকে পাইপ করা দরকার।

ruby -ne 'S=" ";X=S*s=$_.size-2;puts X+S+I=$_,(r=1..s).map{|i|c=I[~i];S*(s-i+1)+I[i]+X+c+S*~-i+c},I.reverse+X+I[0],r.map{|i|c=I[i];I[~i]+X+c+S*(s-i)+c},I'

1

জাভাস্ক্রিপ্ট, 225 198 বাইট

27 বাইট সংরক্ষিত @ নীলকে ধন্যবাদ

f=(s,l=s.length-2,d=' ',r='repeat',t=d[r](l))=>[d+t+s,...a=[...Array(l)].map((_,i)=>d[r](l-i)+s[i+1]+t+(p=s[l-i])+d[r](i)+p),[...s].reverse().join``+t+s[0],...a.map(v=>v.trim()).reverse(),s].join`
`
  • [...] .ক্যাঙ্কটের পরিবর্তে
  • [...] পরিবর্তে মানচিত্র জন্য লুপ
  • ফাংশন প্যারামিটার হিসাবে ভেরিয়েবল সরিয়ে শুধুমাত্র একটি বিবৃতি
  • l এবং টি এর জন্য আরও ভাল আরম্ভ করা

আসল উত্তর:

f=s=>{l=s.length,d=' ',r='repeat',a=[],t=d[r](l-2)+s;for(i=1;i++<l-1;)a.push(d[r](l-i)+s[i-1]+d[r](l-2)+(p=s[l-i])+d[r](i-2)+p);console.log(d+[t].concat(a,[...t].reverse().join``+s[0],a.map(v=>v.trim()).reverse(),s).join`
`)}

1
দুর্দান্ত, যদিও গল্ফযোগ্য: (s,l=s.length-2,d=' ',r='repeat',t=d[r](l))=>[d+t+s,...a=[...Array(l)].map((_,i)=>d[r](l-i)+s[i+1]+t+(p=s[l-i])+d[r](i)+p),[...s].reverse().join``+t+s[0],...a.map(v=>v.trim()).reverse(),s].join`\n`( \nআপনি মন্তব্যগুলিতে নতুন লাইন রাখতে পারবেন না বলে ব্যবহার করছেন )।
নীল

0

জাভা 7, 283 বাইট

void a(String s){int h=s.length(),n=h*2-1,t=n-h,u=n-1;char[][]c=new char[n][n];for(int i=0;i<h;i++){c[0][t+i]=c[i][t-i]=c[t][t-i]=c[t+i][t]=c[t+i][u-i]=c[t-i][t+i]=c[t-i][u]=c[u][i]=c[u-i][0]=s.charAt(i);}for(int y=0;y<n;y++){System.out.println(new String(c[y]).replace('\0',' '));}}

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

Ungolfed:

void a(String s) {
    int length=s.length(),
        n=length*2-1,
        mid=n-length,
        doubleMid=n-1;
    char[][]c=new char[n][n];
    for(int i=0;i<length;i++) {
        c[0][mid+i]= 
        c[i][mid-i]=
        c[mid][mid-i]=
        c[mid+i][mid]=
        c[mid+i][doubleMid-i]=
        c[mid-i][mid+i]=
        c[mid-i][doubleMid]=
        c[doubleMid][i]=
        c[doubleMid-i][0]=s.charAt(i);
    }
    for(int y=0;y<n;y++){
        System.out.println(new String(c[y]).replace('\0',' '));
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.