Tạo từ bình phương


38

Các thách thức

Nhiệm vụ của bạn là tạo một chương trình lấy bất kỳ đầu vào chuỗi đã cho nào và xuất đầu vào theo định dạng bình phương. Chuỗi rỗng sẽ trả về một chuỗi rỗng.

Ví dụ

Đưa ra đầu vào:

golf

Chương trình của bạn sẽ xuất ra:

golf
o  l
l  o
flog

Đầu vào:

123

Đầu ra:

123
2 2
321

Đầu vào:

a

Đầu ra:

a

Đầu vào:

Hello, world!

Đầu ra (chú ý khoảng trắng giữa và w - khoảng cách không chỉ là một dòng mới):

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

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

Chấm điểm

Đây là , vì vậy câu trả lời ngắn nhất trong mỗi ngôn ngữ sẽ thắng.


@DJMcMayhem Vâng, lời xin lỗi của tôi tôi đã quên thêm điều đó.
SpookyGengar

2
Không phải lo lắng, chỉ cần kiểm tra lại. Thử thách đầu tiên tốt đẹp BTW! Chào mừng đến với trang web :)
DJMcMayhem

@SpookyGengar Bạn có muốn thêm trường hợp kiểm tra cho đầu vào một chữ cái không?
sĩ523

@ musicman523 Tôi chưa có? Ví dụ thứ ba chỉ liên quan đến chữ 'a'.
SpookyGengar

1
@SpookyGengar xấu của tôi, rõ ràng là tôi bị mù
sĩ523

Câu trả lời:


17

Than , 7 5 byte

θ‖O↙↘

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Chỉnh sửa: Đã lưu 2 byte nhờ @CarlosAlejo. Giải trình:

θ       Print the input string, making the top row
 ‖O     Reflect with overlap...
   ↙    ... down and left, to create the left side
    ↘   ... down and right, to create the bottom and right sides

(Nhiều hướng đến lệnh Reflect chạy liên tiếp thay vì đồng thời.)


Wow, jesus, tôi vẫn nghĩ Char than là ý tưởng esolang tuyệt vời nhất.
Bạch tuộc ma thuật Urn

1
Bạn có thể lưu hai byte nếu bạn chỉ in chuỗi đầu vào và phản ánh chuỗi xuống dưới và thẳng đứng : θ‖B↙↘. Hãy thử trực tuyến!
Charlie

Bây giờ tôi nghĩ về nó, có lẽ tôi nên sử dụng ReflectOverlapthay vì ReflectButterflyđể tránh lật nhân vật. :-)
Charlie

1
Đây là một trong những trường hợp hiếm hoi mà một câu trả lời được đánh gôn bằng ngôn ngữ bí truyền dễ đọc và dễ hiểu hơn so với các phiên bản không hoàn chỉnh của các ngôn ngữ có mục đích chung phổ biến.
Caleb

Câu trả lời của bạn ở đây cũng hoạt động cho 4 byte.
Oliver

10

MATL , 20 16 11 byte

otYTO6Lt&(c

Hãy thử nó tại MATL trực tuyến!

EDIT: Mã hoạt động trong phiên bản 20.2.1, trước thách thức. Liên kết sử dụng bản phát hành đó. (Trong 20.2.2, mã sẽ ngắn hơn, nhưng nó hoãn lại thử thách).

Giải trình

o     % Implicitly input a string. Convert chars to ASCII codes
t     % Duplicate
YT    % 2-input Toeplitz matrix
O     % Push 0
6L    % Push predefined literal [2, -1+1j]. When used as an index, this is
      % interpreted as 2:end-1 (indexing is 1-based)
t     % Duplicate
&(    % 4-input assignment indexing. This writes 0 at the square formed by
      % rows 2:end-1 and columns 2:end-1 
c     % Convert to char. Char 0 is shown as space. Implicitly display

Rất ấn tượng! :) Có thể loại bỏ dòng trống ở dưới cùng của mỗi đầu ra, hoặc là cần thiết cho chức năng?
SpookyGengar

2
@SpookyGengar Đó là một yêu cầu rất phổ biến để cho phép một dòng mới duy nhất.
Jonathan Allan

@SpookyGengar Cảm ơn! MATL luôn hiển thị một dòng mới. Như Jonathan nói, điều đó thường được cho phép
Luis Mendo

1
@LuisMendo Bạn học được điều gì đó mới mỗi ngày. :) Cảm ơn bạn đã gửi - chắc chắn là tốt nhất cho đến nay!
SpookyGengar

6

Thạch ,  29 22  17 byte

Than sẽ đánh bại + d điểm này ...

J⁶ẋa0,1¦"ṚṚ;$ṖŒḌY

Một liên kết đơn âm lấy và trả về một danh sách các ký tự; hoặc một chương trình đầy đủ in kết quả.

Hãy thử trực tuyến!

Làm sao?

J⁶ẋa0,1¦"ṚṚ;$ṖŒḌY - Link: list of characters, w     e.g. "whole"
 ⁶                - literal space character              ' '
J                 - range(length(w))                     [1,2,3,4,5]
  ẋ               - repeat                               [" ","  ","   ","    ","     "]
         Ṛ        - reverse w                            "elohw"
        "         - zip with:
       ¦          -   sparse application of:
   a              -     and (vectorises)
    0,1           -     to indexes: [0,1] (last and 1st) ["e","ll","o o","h  h","w   w"]
            $     - last two links as a monad:
          Ṛ       -   reverse                            ["w   w","h  h","o o","ll","e"]
           ;      -   concatenate                        ["w   w","h  h","o o","ll","e","e","ll","o o","h  h","w   w"]
             Ṗ    - pop (remove last entry)              ["w   w","h  h","o o","ll","e","e","ll","o o","h  h"]
              ŒḌ  - reconstruct matrix from diagonals    ["whole","h   l","o   o","l   h","elohw"]
                Y - join with newlines                   "whole\nh   l\no   o\nl   h\nelohw"
                  - if running as a full program implicit print

Rất tuyệt! Cho đến nay, giải pháp ngắn nhất, nhưng không hoạt động với các đầu vào một ký tự và các chuỗi bao gồm các số tức là '123'.
SpookyGengar

Ah tôi sẽ phải xử lý trường hợp cạnh nhân vật duy nhất, vâng. Nó hoạt động với các chuỗi ký tự chữ số, đầu vào chương trình thực sự nên được trích dẫn, như 'Hello', "Spooky" "123", v.v. (Python được sử dụng để giải thích đầu vào).
Jonathan Allan

@SpookyGengar - đã sửa nó cho trường hợp 1 ký tự.
Jonathan Allan

Giảm chiều dài đẹp!
Luis Mendo

2
Bạn nói đúng về Than.
Neil

3

C, 109 byte

i,j;f(char*s){for(i=j=printf("%s\n",s)-2;1[++s];)printf("%c%*c\n",*s,i,s[j-=2]);for(;*s*~i--;)putchar(*s--);}

Hãy thử trực tuyến!

Thủ thuật đáng chú ý:

  • Thay vì lãng phí byte strlen, chúng tôi chỉ cần lấy độ dài của chuỗi trong khi in đồng thời dòng đầu tiên:

    i=j=printf("%s\n",s)-2

    Điều này hoạt động vì printftrả về số lượng byte được viết.

  • Đối với các dòng giữa, chúng ta cần lặp qua chuỗi nhưng loại trừ cả ký tự đầu tiên và ký tự cuối cùng. Điều này đạt được với điều kiện

    1[++s]

    (ngắn hơn (++s)[1]), bỏ qua ký tự đầu tiên do ++tình trạng đang ở trong điều kiện và bỏ qua ký tự cuối cùng bằng cách dừng khi ký tự đi qua ký tự hiện tại '\0'(thay vì dừng tại '\0' ).

  • Trong cơ thể của vòng lặp đầu tiên,

    printf("%c%*c\n",*s,i,s[j-=2])

    chúng tôi in ký tự hiện tại, sau đó ký tự "nhân đôi" thích hợp (theo dõi j, đi vào phủ định, dẫn đến tình huống lẻ khi lập chỉ mục thành một chuỗi có số âm) được đệm theo chiều dài ivới khoảng trắng (trong đó ilà thuận tiện strlen(s) - 1).

  • Việc in đảo ngược trên dòng cuối cùng là khá đơn giản; mẹo duy nhất là *s*~i--, đó là cách ngắn nhất để có các i+2lần lặp của thân vòng lặp (không phụ thuộc vào i; tất cả iđược sử dụng là để đếm). Phần sôi nổi *s*đảm bảo rằng vòng lặp không chạy nếu *s'\0', xảy ra ở đầu vào độ dài 1.


3

Octave, 40 byte

@(s,t=toeplitz(s),u=t(x=2:end-1,x)=32)t;

Hãy thử trực tuyến!

Đó là câu trả lời của tôi nhưng được đăng sau câu trả lời @Luis MATL


2
Câu trả lời rất hay. Btw: mã của bạn đã đánh sập nhánh phát triển GNU Octave 4.3.1 (b481a9baeb61) và hiện là một phần của bộ thử nghiệm :-) hg.savannah.gnu.org/hgweb/octave/rev/c94e9509461b
Andy

1
@Andy Cảm ơn và chào mừng bạn đến với codegolf! Tôi rất vui nếu nó có thể giúp cải thiện dự án Octave!
rahnema1

3

Haskell , 84 78 byte

f s@(_:x)|_:y<-r x=s:[a:(y>>" ")++[b]|(a,b)<-zip x y]++[r s];f s=[s]
r=reverse

Hãy thử trực tuyến! Cách sử dụng : f "test". Trả về một danh sách các dòng.

Chỉnh sửa: -6 byte nhờ dianne!


1
bạn có thể lưu một vài byte bằng cách sử dụng bảo vệ mẫu làm bảo vệ và xác định từ đồng nghĩa cho reverse; r=reverse;f s@(_:x)|_:y<-r x=s:[a:(y>>" ")++[b]|(a,b)<-zip x y]++[r s];f s=[s]là 78 ​​byte.
dianne



2

05AB1E , 17 16 15 19 byte

ÂDÂø¦¨Dgú€Ás)˜»Igi¨

Hãy thử trực tuyến!

Giải trình

Ví dụ với input = golf

ÂDÂ                  # bifurcate, duplicate, bifurcate
                     # STACK: 'golf', 'flog', 'flog', 'golf'
   ø                 # zip the top 2 items
                     # STACK: 'golf', 'flog', ['fg', 'lo', 'ol', 'gf']
    ¦¨               # remove the first and last element
                     # STACK: 'golf', 'flog', ['lo', 'ol']
      Dg             # get the length of the list
                     # STACK: 'golf', 'flog', ['lo', 'ol'], 2
        ú            # prepend that many spaces to each element
                     # STACK: 'golf', 'flog', ['  lo', '  ol']
         €Á          # rotate each right
                     # STACK: 'golf', 'flog', ['o  l', 'l  o']
           s         # swap the top 2 items
                     # STACK: 'golf', ['o  l', 'l  o'], 'flog'
            )˜       # wrap in a flattened list
                     # STACK: ['golf', 'o  l', 'l  o', 'flog']
              »      # join on newline
               Igi¨  # if input is length 1, remove last char

Bản sửa lỗi cho đầu vào 1 chữ cái khá tốn kém.
Tôi cảm thấy như một cách tiếp cận khác có thể tốt hơn bây giờ.


1

Python 2 , 99 88 byte

-4 byte nhờ nhạcman523.

lambda s:s[1:]and[s]+[s[i]+' '*(len(s)-2)+s[~i]for i in range(1,len(s)-1)]+[s[::-1]]or s

Hãy thử trực tuyến!

Trả về một danh sách các chuỗi.


Gần! Đầu ra không chính xác những gì tôi đang yêu cầu.
SpookyGengar

1
89 byte bằng cách di chuyển ss[::-1]vàojoin
sĩ523

Điều này không hoàn toàn hiệu quả đối với các chuỗi có độ dài 1
Musicman523

2
Chỉ cần lưu ý, tất cả các vấn đề đã được sửa chữa.
hoàn toàn là

1

Toán học, 128 byte

(c=Column;g=Length[x=Characters@#]-1;If[g==0,#,c@{#,c@Table[""<>{x[[i]],""<>Table[" ",g-1],x[[-i]]},{i,2,g}],StringReverse@#}])&

1

C, 96 byte

i,l;f(char*s){for(i=l=puts(s)-2;--i;)printf("%c%*c\n",s[l-i],l,s[i]);for(;l+1;)putchar(s[l--]);}

Phiên bản thưởng (122 byte):

x,y,i,l;f(char*s){for(i=l=puts(s)-1;++i<l*-~l;putchar(x==l?10:x%~-l*(y%~-l)?32:s[(x*y?l+l-2-x-y:x+y)%l]))x=i%-~l,y=i/-~l;}

1

Swift 3 , 215 199 byte

let s=readLine()!,c=s.characters,r:[Character]=c.reversed(),b=c.count
print(s)
if b>1{for i in 0..<b-2{print("\(r.reversed()[i+1])\(String.init(repeating:" ",count:b-2))\(r[i+1])")};print(String(r))}

Dùng thử trực tuyến


1

Python 3, 88 byte

w=input();p=print;l=len(w)-2
[p(w[n+1]+' '*l+w[l-n])for n in range(l)]
l+1and p(w[::-1])

1
Chào mừng đến với PPCG!
Martin Ender

Chào mừng đến với trang web là tốt! Tôi tin rằng l+1 andcó thể được viết lại l+1andđể lưu một byte.
Phù thủy lúa mì

@WheatWizard đã chỉnh sửa - cảm ơn! Tôi đã rất ngạc nhiên khi làm việc ...
Levi

Nó sẽ hoạt động trừ trường hợp 0or, trong đó python không phân tích cú pháp vì 0olà tiền tố bát phân.
Thuật sĩ lúa mì

Khi tôi chạy cái này, nó dường như không in dòng trên cùng ... tio.run/##FcoxCsQgEAXQPqeYLk7EwqRL8CRiEVh3Iww/ Kẻ
Coty Johnathan Saxman

1

JavaScript (ES8), 108 112 byte

let f = 

s=>(n=s.length)<2?s:(r=[...s].reverse()).slice(1,-1).reduce((a,v,i)=>a+`
`+s[i+1].padEnd(n-1)+v,s)+`
`+r.join``

o.innerHTML = f("hello folks!")
<pre id="o"></pre>

Ít bịt miệng

s=>
   (n=s.length) < 2 ?    // record and check length
   s :                   // s has 0 or 1 char, else
   (r=[...s].reverse())  // reverse characters,
   .slice(1,-1)          // exclude 1st and last
   .reduce((a,v,i)=>     // append inner lines
      a +'\n' +s[i+1].padEnd(n-1) + v
    ,s)                  // to first line
    + '\n' +r.join("")   // append characters reversed

Cảm ơn Justin Mariner vì đã tiết kiệm rất nhiều byte, sau đó tất cả đã được sử dụng thêm phần kiểm tra ký tự 0 hoặc đơn cần thiết để tuân thủ thử thách. Bạn có được điều đó :-(


Bạn có thể lưu 7 byte bằng cách tạo dòng thứ hai `+s[i+1].padEnd(s.length-1)+v,s)+`và bằng cách sử dụng r.join``.
Justin Mariner

Cảm ơn @JustinMariner về các mẹo về String.prototype.padStartvà được gắn thẻ mẫu chữ. Tôi cần điều đó để giúp duy trì việc bổ sung kiểm tra độ dài ở mức tối thiểu :-)
traktor53

Khoảng cách của bạn là một ký tự quá ngắn bây giờ; bạn có thể khắc phục điều đó và tiết kiệm một vài chi tiết bằng cách thực hiện (n=s.length-1)?(r=<...>+r.join``:svà sử dụng padEnd(n). Nếu độ dài là 1, length-10(sai).
Justin Mariner

Khoảng cách @JustinMariner là cố định, nhưng tôi đã giữ bài kiểm tra độ dài - theo tôi hiểu, cả chuỗi có độ dài bằng không và chuỗi của một ký tự sẽ tự trả về mà không cần trả lại chuỗi hoặc lặp lại chuỗi.
traktor53

1
padEndlà ES2017.
Neil

1

PHP , 118 byte

echo $s=$argv[1];$l=strlen($r=strrev($s))-1;for($i=$l-1;$l&&$i;)echo "\n".str_pad($r[$i],$l).$s[$i].(--$i?"":"\n$r");

Hãy thử trực tuyến!

echo $s = $argv[1];
$l = strlen($r = strrev($s)) - 1;

for ($i = $l - 1; $l && $i;)
    echo "\n" . str_pad($r[$i], $l) . $s[$i] . (--$i ? "" : "\n$r");

1

APL , 58 byte

{(' ',⍵)[x+(x←∘.{((c-1)=⍺⌈⍵)∨0=⍺⌊⍵}⍨r)×o⌊⌽⊖o←∘.⌈⍨r←⍳c←≢⍵]}

Với ⎕IO←0.

Hãy thử trực tuyến!

Làm sao?

c←≢⍵ - độ dài của chuỗi

r←⍳ - phạm vi

o←∘.⌈⍨ - sản phẩm bên ngoài với tối thiểu

123
223
333

o⌊⌽⊖- tối thiểu hóa với chính nó quay 180 o

123  ⌊  333  =  123
223  ⌊  322  =  222
333  ⌊  321  =  321

× - nhân với

x←∘....⍨r - sản phẩm bên ngoài của phạm vi với

    ((c-1)=⍺⌈⍵)∨0=⍺⌊⍵ - khung của ma trận

111  ×  123  =  123
101  ×  222  =  202
111  ×  321  =  321

x+ - thêm khung

111  +  123  =  234
101  +  202  =  303
111  +  321  =  432

(' ',⍵)[...] - lấy theo chỉ mục từ chuỗi nối vào không gian


Có thể ⍉⊖⍉⊖được ⌽⊖không?
Zacharý

@ Zacharý cảm ơn
Uriel

0

JavaScript (ES2017), 87 byte

s=>[...s].reverse(l=s.length-1).map((c,i,z)=>i?l-i?s[i].padEnd(l)+c:z.join``:s).join`
`

Phiên bản ES6: 93 byte

s=>[...s].reverse(l=s.length-1).map((c,i,z)=>i?l-i?s[i]+' '.repeat(l-1)+c:z.join``:s).join`
`

Ít chơi gôn

s => (
  l = s.length-1,
  [...s].reverse().map( // scan string backwards
     (c, i, z) => 
     i != 0 // check if top row
     ? l-i != 0 // check if bottom row
       ? s[i].padEnd(l) + c // any middle row
       : z.join`` // bottom row: string reversed
     :s // top row: original string
  ).join`\n`
)

F=
s=>[...s].reverse(l=s.length-1).map((c,i,z)=>i?l-i?s[i].padEnd(l)+c:z.join``:s).join`
`

function update() {
  O.textContent = F(I.value)
}

update()
<input id=I value='Hello, world!' oninput='update()'>
<pre id=O></pre>


padEndlà ES2017.
Neil

@Neil cảm ơn bạn Tôi sẽ thay đổi tiêu đề của tôi
edc65

Bạn có thể lưu một byte trên phiên bản ES6 của mình bằng cách sử dụng l+~i, điều này tránh việc phải trừ 1 hai lần thay vào đó bạn có thể trừ 2 lần.
Neil

@ Không nênl-~-i
edc65

Tôi đã nghĩ đến s=>[...s].reverse(l=s.length).map((c,i,z)=>i?l+~i?s[i]+' '.repeat(l-2)+c:z.join``:s).join`\n` nhưng s=>[...s].reverse(l=s.length-2).map((c,i,z)=>i?i+~l?s[i]+' '.repeat(l)+c:z.join``:s).join`\n` cũng làm việc.
Neil

0

Java, 191 byte

(s)->{PrintStream o=System.out;int l=s.lenght();o.println(s);for(int i=0;i<l;i++){o.printf("%"+"s%"+(l-1)+"s%n",s.charAt(i),s.charAt(l-1-i));for(int i=0;i<l;i++){o.print(s.charAt(l-1-i));}}};

(s)có thể chỉ s. Các vòng lặp với các đường đơn bên trong có thể loại bỏ các dấu ngoặc nhọn của chúng. Bạn có thể quay lại thay vì in nếu điều đó sẽ giúp bạn tiết kiệm bất kỳ byte nào. Bạn sử dụng int itrong cả hai vòng, tôi không thể biết chúng có ở các phạm vi khác nhau hay không nhưng đáng để chỉ ra. Khởi tạo giống như các biến với nhau thường tiết kiệm byte. for(int i=0;i<l;i++){o.print(s.charAt(l-1-i));}-> for(int i=0;i<l;){o.print(s.charAt(l-1-i++));}. Bạn không cần dấu chấm phẩy.
TheLethalCoder

Cảm ơn bạn đã chỉ ra;) (không quen thuộc với Golfing). Sẽ tối ưu hóa nó sau!
Serverfrog

0

C # (.NET Core) , 179 161 byte

-18 byte nhờ TheLethalCoder

using System.Linq;
s=>{int l=s.Length-1,i=1;var d=s.Reverse().ToArray();while(i<l)s+="\n"+s[i]+new string(' ',l-1)+d[i++];if(l>1)s+="\n"+new string(d);return s;};

Hãy thử trực tuyến!

Tôi không chắc chắn về các quy tắc, nếu điều này có cần thiết để đếm byte hay không:

using System.Linq;

Ai đó hãy sửa cho tôi về điều này.

Ung dung:

s =>
{
    int l = s.Length - 1, i = 1;
    var d = s.Reverse().ToArray();
    while (i < l)
        s += "\n" + s[i] + new string(' ', l - 1) + d[i++];
    if (l > 1)
        s += "\n" + new string(d);
    return s;
};

Xin chào và chào mừng đến với PPCG! Bạn đang sử dụng Linq vì vậy bạn nên đưa usingvào số byte của mình. Khi bạn đang sử dụng Linq ToCharArray()có thể chỉ là ToArray(), bạn có thực sự cần nó trước khi Reverse()mặc dù? Vì bạn đang sử dụng, Stringbạn cần phải đủ điều kiện hoặc bao gồm cả việc sử dụng, tuy nhiên, điều này có thể dễ dàng khắc phục bằng cách thay đổi nó string. Có ifthể ngắn hơn như một ternary như s+=l>1?if code:"";. Bạn có thể loại bỏ i++khỏi vòng lặp và tăng nó tại d[i++].
TheLethalCoder

Khởi tạo ivới llike int l=s.Length-1,i=1;. Và tôi nghĩ rằng đó có thể là nó!
TheLethalCoder

@TheLethalCoder cảm ơn bạn! Tôi đã thêm đề xuất của bạn vào mã. Một vài lưu ý: Tôi hoàn toàn quên rằng chuỗi trên thực tế có IEnumerable; Chuỗi thay vì chuỗi là phần dư Java mà tôi vẫn chiến đấu, ternary thực tế chính xác là dài đến mức đáng kinh ngạc; và sau những thay đổi của bạn, tôi đã thay đổi (; expr;) thành while (expr) vì nó trông đẹp hơn và có cùng số byte. Cám ơn bạn một lần nữa.
Grzegorz Puławski

Đừng lo lắng! Ternaries đôi khi là nhưng thường đi ra ngắn hơn vì vậy luôn luôn đáng để thử chúng.
TheLethalCoder

0

Võng mạc , 106 byte

..+
$&¶$&
O$^`.(?=.*$)

\G.
$&$%'¶
r`.\G
¶$%`$&
+`(.+)¶¶((.*¶)*).(.*)
¶¶$1$4$2
T`p` `(?<=.¶.).*(?=.¶.)
G`.

Hãy thử trực tuyến! Giải trình:

..+
$&¶$&

Nếu có ít nhất hai ký tự, nhân đôi đầu vào.

O$^`.(?=.*$)

Đảo ngược bản sao.

\G.
$&$%'¶
r`.\G
¶$%`$&

Biến dây thành hình tam giác. Tam giác trên cùng bắt đầu với đầu vào và loại bỏ ký tự đầu tiên mỗi lần, trong khi tam giác dưới cùng bắt đầu bằng chữ cái đầu tiên của đầu vào đảo ngược và thêm một ký tự mỗi lần.

+`(.+)¶¶((.*¶)*).(.*)
¶¶$1$4$2

Nối các hình tam giác lại với nhau, chồng chéo sao cho nhân vật cuối cùng tạo thành /đường chéo.

T`p` `(?<=.¶.).*(?=.¶.)

Thay đổi tất cả các ký tự thành khoảng trắng, nếu chúng có ít nhất một ký tự ở cuối mỗi bên.

G`.

Xóa mọi dòng trống thừa.


0

Python 3, 85 byte

Sử dụng đầu vào cho hàng trên cùng :)

a=input()
b=len(a)
for i in range(b-2):print(a[1+i]+" "*(b-2)+a[-2-i])
print(a[::-1])

Bạn có chắc chắn điều này cho một câu trả lời chính xác?
Koishore Roy

0

Lua , 104 byte

print(s);for a=2,#s-1 do print(s:sub(a,a)..(" "):rep(#s-2)..s:sub(#s-a+1,#s-a+1)) end;print(s:reverse())

Hãy thử trực tuyến!


nhưng bạn chỉ được sử dụng pmột lần ...
Leaky Nun

Đúng ... sẽ thay đổi điều đó.

0

Python 3, 106 byte

Một phiên bản chức năng ...

w=input();p=print;l=len(w)-2
def f(k):p(w[k]+' '*l+w[-k-1]);l-k>0and f(k+1)
l<0 or f(1)or l<1or p(w[::-1])


0

Toán học, 138 91 byte

(b=Outer[" "&,#,#];Do[l={{1,k},{k,1}};b=ReplacePart[b,Join[l,-l]->#[[k]]],{k,Length@#}];b)&

Bạn có thể dùng thử trực tuyến bằng cách dán các mục sau vào Wolfram Cloud Sandbox và nhấp vào "đánh giá ô" hoặc nhấn Shift + Enter hoặc Numpad Enter:

(b=Outer[" "&,#,#];Do[l={{1,k},{k,1}};b=ReplacePart[b,Join[l,-l]->#[[k]]],{k,Length@#}];b)&@{"g","o","l","f","y"}//MatrixForm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.