สร้างคำศัพท์


38

ความท้าทาย

งานของคุณคือการสร้างโปรแกรมที่รับอินพุตสตริงใด ๆ และส่งออกอินพุตในรูปแบบกำลังสอง สตริงว่างควรส่งคืนสตริงว่าง

ตัวอย่าง

รับอินพุต:

golf

โปรแกรมของคุณควรส่งออก:

golf
o  l
l  o
flog

การป้อนข้อมูล:

123

เอาท์พุท:

123
2 2
321

การป้อนข้อมูล:

a

เอาท์พุท:

a

การป้อนข้อมูล:

Hello, world!

เอาท์พุท (สังเกตช่องว่างระหว่าง, และ w - ช่องว่างไม่ใช่แค่ขึ้นบรรทัดใหม่):

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

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

เกณฑ์การให้คะแนน

นี่คือดังนั้นคำตอบที่สั้นที่สุดในแต่ละภาษาจะเป็นผู้ชนะ


@DJMcMayhem ใช่ฉันขอโทษที่ฉันลืมเพิ่ม
SpookyGengar

2
ไม่ต้องกังวลเพียงแค่ตรวจสอบอีกครั้ง ความท้าทายแรกที่ดี BTW! ยินดีต้อนรับสู่เว็บไซต์ :)
DJMcMayhem

@SpookyGengar คุณจะเพิ่มกรณีทดสอบสำหรับการป้อนหนึ่งตัวอักษรหรือไม่?
musicman523

@ musicman523 ฉันไม่มีแล้วใช่ไหม ตัวอย่างที่สามเกี่ยวข้องกับตัวอักษร 'a'
SpookyGengar

1
@ SpookyGengar สิ่งที่แย่ของฉันฉันตาบอด
musicman523

คำตอบ:


17

ถ่าน , 7 5 ไบต์

θ‖O↙↘

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด แก้ไข: บันทึก 2 ไบต์ด้วย @CarlosAlejo คำอธิบาย:

θ       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

(หลายทิศทางไปยังคำสั่ง Reflect ทำงานอย่างต่อเนื่องมากกว่าพร้อมกัน)


ว้าวพระเยซูฉันยังคิดว่า Charcoal เป็นไอโซแลงที่เจ๋งที่สุด
Magic Octopus Urn

1
คุณสามารถบันทึกสองไบต์ได้หากคุณพิมพ์สตริงอินพุตและสะท้อนลงด้านล่างและด้านθ‖B↙↘ล่าง: ลองออนไลน์!
Charlie

ตอนนี้ฉันคิดแล้วบางทีฉันควรจะใช้ReflectOverlapแทนที่จะReflectButterflyหลีกเลี่ยงการพลิกตัวละคร :-)
Charlie

1
นี่เป็นหนึ่งในกรณีที่ไม่ค่อยเกิดขึ้นซึ่งคำตอบที่เล่นกอล์ฟในภาษาลึกลับนั้นง่ายต่อการอ่านและทำความเข้าใจมากกว่าภาษาวัตถุประสงค์ทั่วไปที่เป็นที่นิยม
Caleb

คำตอบของคุณที่นี่ใช้งานได้ 4 ไบต์
โอลิเวอร์

10

MATL , 20 16 11 ไบต์

otYTO6Lt&(c

ลองที่MATL ออนไลน์!

แก้ไข: รหัสทำงานในรีลีส 20.2.1 ซึ่งมาก่อนความท้าทาย ลิงก์ใช้รีลีสนั้น (ใน 20.2.2 รหัสจะสั้นลง แต่จะเป็นการโพสต์ความท้าทาย)

คำอธิบาย

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

ที่น่าประทับใจมาก! :) เป็นไปได้ไหมที่จะลบบรรทัดว่างที่ด้านล่างของทุกเอาท์พุทหรือจำเป็นสำหรับการใช้งาน?
SpookyGengar

2
@SpyGyGar มันเป็นคำขอที่ธรรมดามากที่จะอนุญาตให้ขึ้นบรรทัดใหม่ต่อท้าย
Jonathan Allan

@ SpookyGengar ขอบคุณ! MATL แสดงบรรทัดใหม่ต่อท้ายเสมอ ตามที่โจนาธานบอกว่าปกติจะอนุญาต
หลุยส์เมนโด

1
@LuisMendo คุณเรียนรู้สิ่งใหม่ทุกวัน :) ขอบคุณสำหรับการส่ง - ดีที่สุดแน่นอน!
SpookyGengar

6

เยลลี่ ,  29 22  17 ไบต์

ถ่าน จะตีกลับ + dคะแนนนี้ ...

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

ลิงก์ monadic ที่รับและส่งคืนรายการของอักขระ หรือโปรแกรมเต็มรูปแบบการพิมพ์ผล

ลองออนไลน์!

อย่างไร?

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

เจ๋งมาก! จนถึงทางออกที่สั้นที่สุด แต่ไม่สามารถใช้งานได้กับอินพุตอักขระเดี่ยวและสตริงที่ประกอบด้วยตัวเลขเช่น '123'
SpookyGengar

ฉันจะต้องจัดการกรณีตัวละครขอบเดียวใช่ มันใช้งานได้กับสตริงตัวอักขระดิจิตัลควรป้อนคำพูดของโปรแกรมเช่น'Hello'"Spooky's" "123"ฯลฯ (Python ใช้เพื่อตีความอินพุต)
Jonathan Allan

@ SpookyGengar - แก้ไขมันสำหรับตัวละคร 1 ตัว
Jonathan Allan

ลดความยาวได้ดี!
Luis Mendo เมื่อ

2
คุณพูดถูกเกี่ยวกับถ่าน
Neil

3

C, 109 ไบต์

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--);}

ลองออนไลน์!

เทคนิคสำคัญ:

  • แทนที่จะเสียไบต์strlenเราเพียงแค่คว้าความยาวของสตริงในขณะที่พิมพ์บรรทัดแรกพร้อมกัน:

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

    ใช้งานได้เพราะprintfส่งคืนจำนวนไบต์ที่เขียน

  • สำหรับบรรทัดกลางเราจำเป็นต้องวนซ้ำสตริง แต่ไม่รวมทั้งอักขระตัวแรกและตัวสุดท้าย นี่คือความสำเร็จกับเงื่อนไข

    1[++s]

    (ซึ่งสั้นกว่า(++s)[1]) ซึ่งข้ามอักขระแรกเนื่องจากการ++อยู่ในสภาพและข้ามอักขระสุดท้ายโดยหยุดเมื่ออักขระที่ผ่านอักขระปัจจุบันคือ'\0'(แทนที่จะหยุดที่ '\0' )

  • ในร่างกายของวงแรก

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

    เราพิมพ์ตัวอักษรในปัจจุบันแล้วที่เหมาะสม "มิร์เรอร์" ตัวอักษร (การติดตามกับjที่ไม่ไปลงในเชิงลบที่เกิดในสถานการณ์แปลก ๆ ของการจัดทำดัชนีเป็นสตริงที่มีจำนวนลบก) เบาะกับความยาวของiที่มีช่องว่าง (ที่iเป็น สิ่งอำนวยความสะดวกstrlen(s) - 1)

  • การพิมพ์ที่กลับด้านบนบรรทัดสุดท้ายนั้นค่อนข้างตรงไปตรงมา เคล็ดลับเพียงอย่างเดียวคือ*s*~i--ซึ่งเป็นวิธีที่สั้นที่สุดในการรับi+2การวนซ้ำของลูปบอดี้ (ซึ่งไม่ได้ขึ้นอยู่กับi; ทั้งหมดiใช้สำหรับการนับ) ส่วนที่ขี้ขลาด*s*ทำให้แน่ใจว่าลูปจะไม่ทำงานหาก*sเป็น'\0'เช่นนั้นซึ่งเกิดขึ้นกับอินพุตความยาว 1


3

อ็อกเทฟ 40 ไบต์

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

ลองออนไลน์!

มันเป็นคำตอบของฉัน แต่โพสต์หลังจาก @Luis MATL คำตอบ


2
คำตอบที่ดีมาก Btw: รหัสของคุณชนกับสาขาพัฒนา GNU Octave 4.3.1 (b481a9baeb61) และตอนนี้เป็นส่วนหนึ่งของชุดทดสอบ :-) hg.savannah.gnu.org/hgweb/octave/rev/c94e9509461b
Andy

1
@ Andy ขอบคุณและยินดีต้อนรับสู่ codegolf! ฉันดีใจที่มันสามารถช่วยปรับปรุงโครงการอ็อกเทฟ!
rahnema1

3

Haskell , 84 78 ไบต์

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

ลองออนไลน์! การใช้งาน: f "test". ส่งคืนรายการบรรทัด

แก้ไข: -6 ไบต์ขอบคุณที่ dianne!


1
คุณสามารถบันทึกไม่กี่ไบต์โดยใช้ยามแบบแผนเป็นยามและกำหนดไวพจน์reverse; r=reverse;f s@(_:x)|_:y<-r x=s:[a:(y>>" ")++[b]|(a,b)<-zip x y]++[r s];f s=[s]คือ 78 ไบต์
dianne



2

05AB1E , 17 16 15 19 ไบต์

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

ลองออนไลน์!

คำอธิบาย

ตัวอย่างด้วย 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

การแก้ไขสำหรับการป้อนข้อมูล 1 ตัวอักษรค่อนข้างแพง
ฉันรู้สึกว่าวิธีการที่แตกต่างกันอาจดีขึ้นในขณะนี้


1

Python 2 , 99 88 ไบต์

-4 ไบต์ขอบคุณ musicman523

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

ลองออนไลน์!

ส่งคืนรายการสตริง


ปิด! ผลลัพธ์ไม่ตรงตามที่ฉันขอ
SpookyGengar

1
89 bytesโดยการย้ายsและs[::-1]เข้าสู่join
musicman523

สิ่งนี้ใช้ไม่ได้กับสายยาว 1 เส้น
musicman523

2
เพียงแค่ต้องทราบปัญหาทั้งหมดได้รับการแก้ไข
มนุษย์

1

Mathematica, 128 ไบต์

(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 ไบต์

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--]);}

รุ่นโบนัส (122 ไบต์):

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

Python 3, 88 ไบต์

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
ยินดีต้อนรับสู่ PPCG!
Martin Ender

ยินดีต้อนรับสู่เว็บไซต์เช่นกัน! ฉันเชื่อว่าl+1 andสามารถเขียนใหม่l+1andเพื่อบันทึกไบต์
ข้าวสาลีตัวช่วยสร้าง

@WheatWizard แก้ไขแล้ว - ขอบคุณ! ฉันประหลาดใจที่ได้ผล ...
เลวี

มันจะทำงานได้ยกเว้นกรณีของ0orที่ python ล้มเหลวในการแยกวิเคราะห์เพราะ0oเป็นคำนำหน้าแปด
ข้าวสาลีตัวช่วยสร้าง

เมื่อฉันรันสิ่งนี้ดูเหมือนจะไม่พิมพ์บรรทัดบนสุด ... tio.run/##FcoxCsQgEAXQPqeYLk7EwqRL8CRiEVh3Iww/…
Coty Johnathan Saxman

1

JavaScript (ES8), 108 112 ไบต์

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>

golphed น้อยลง

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

ขอบคุณ Justin Mariner ที่ช่วยประหยัดจำนวนไบต์ซึ่งทำให้หมดสิ้นไปแล้วเพิ่มการตรวจสอบศูนย์หรือตัวละครเดียวที่จำเป็นเพื่อให้สอดคล้องกับความท้าทาย คุณได้รับ :-(


คุณสามารถบันทึก 7 ไบต์โดยการทำให้บรรทัดที่สองและโดยการใช้`+s[i+1].padEnd(s.length-1)+v,s)+` r.join``
Justin Mariner

ขอบคุณ @JustinMariner สำหรับเคล็ดลับเกี่ยวกับString.prototype.padStartและติดแท็กตัวอักษรเทมเพลต ฉันต้องการสิ่งนั้นเพื่อช่วยเพิ่มการตรวจสอบความยาวให้น้อยที่สุด :-)
traktor53

การเว้นวรรคของคุณสั้นเกินไปตอนนี้ คุณสามารถแก้ไขและบันทึกว่าคู่มากขึ้นโดยการทำและการใช้(n=s.length-1)?(r=<...>+r.join``:s padEnd(n)ถ้าความยาวคือ1, length-1คือ0(เท็จ)
Justin Mariner

@JustinMariner ระยะห่างได้รับการแก้ไข แต่ฉันยังคงทดสอบความยาว - ตามที่ฉันเข้าใจมันทั้งสตริงศูนย์ความยาวและสตริงของตัวละครตัวหนึ่งกลับมาตัวเองโดยไม่ต้องกลับรถหรือการซ้ำซ้อนของสตริง
traktor53

1
padEndคือ ES2017
Neil

1

PHP , 118 ไบต์

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");

ลองออนไลน์!

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 ไบต์

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

⎕IO←0กับ

ลองออนไลน์!

อย่างไร?

c←≢⍵ - ความยาวของสตริง

r←⍳ - พิสัย

o←∘.⌈⍨ - ผลิตภัณฑ์ด้านนอกที่มีขั้นต่ำ

123
223
333

o⌊⌽⊖- ทำให้เล็กที่สุดด้วยตัวเองหัน 180 o

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

× - คูณด้วย

x←∘....⍨r - ผลิตภัณฑ์ด้านนอกของช่วงที่มี

    ((c-1)=⍺⌈⍵)∨0=⍺⌊⍵ - เฟรมของเมทริกซ์

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

x+ - เพิ่มเฟรม

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

(' ',⍵)[...] - รับโดยดัชนีจากสตริงที่ต่อกันกับช่องว่าง


สามารถ⍉⊖⍉⊖เป็น⌽⊖?
Zacharý

@ Zacharýขอบคุณ
Uriel

0

JavaScript (ES2017), 87 ไบต์

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

รุ่น ES6: 93 ไบต์

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

น้อย golfed

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>


padEndคือ ES2017
Neil

@Neil ขอบคุณฉันจะเปลี่ยนหัวเรื่องของฉัน
edc65

คุณสามารถบันทึกไบต์ในเวอร์ชัน ES6 ของคุณได้โดยใช้วิธีl+~iนี้จะไม่ต้องลบ 1 สองครั้งแทนคุณสามารถลบ 2 ครั้งได้
Neil

@Nil มันควรจะเป็นl-~-i
edc65

ฉันคิดs=>[...s].reverse(l=s.length).map((c,i,z)=>i?l+~i?s[i]+' '.repeat(l-2)+c:z.join``:s).join`\n` แต่s=>[...s].reverse(l=s.length-2).map((c,i,z)=>i?i+~l?s[i]+' '.repeat(l)+c:z.join``:s).join`\n` ก็ใช้งานได้
Neil

0

Java, 191 ไบต์

(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)sอาจจะเป็นแค่ ห่วงที่มีเส้นเดียวด้านในสามารถถอดวงเล็บปีกกาออกได้ คุณสามารถกลับมาแทนการพิมพ์หากจะประหยัดไบต์ใด ๆ คุณใช้int iในลูปทั้งสองฉันไม่สามารถบอกได้ว่าพวกมันอยู่ในขอบเขตที่แตกต่างกัน แต่ควรค่าแก่การชี้ การเริ่มต้นเช่นตัวแปรเข้าด้วยกันมักจะบันทึกไบต์ ->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++));}คุณไม่จำเป็นต้องใช้เครื่องหมายทวิภาคกึ่งท้าย
TheLethalCoder

ขอบคุณสำหรับการชี้ให้เห็น;) (ไม่ค่อยคุ้นเคยกับการเล่นกอล์ฟ) จะเพิ่มประสิทธิภาพในภายหลัง!
Serverfrog

0

C # (. NET Core) , 179 161 ไบต์

-18 ไบต์ขอบคุณ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;};

ลองออนไลน์!

ฉันไม่แน่ใจเกี่ยวกับกฎถ้าจำเป็นต้องนับไบต์หรือไม่:

using System.Linq;

มีคนโปรดแก้ไขฉันเกี่ยวกับสิ่งนี้

Ungolfed:

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;
};

สวัสดีและยินดีต้อนรับสู่ PPCG! คุณกำลังใช้ Linq ดังนั้นคุณควรรวมจำนวนusingลงในไบต์ของคุณ ในขณะที่คุณกำลังใช้ Linq ToCharArray()สามารถToArray()ทำได้คุณต้องการมันจริง ๆ ก่อนReverse()ไหม? ในขณะที่คุณกำลังใช้Stringคุณจำเป็นอย่างใดอย่างหนึ่งอย่างเต็มที่มีคุณสมบัติหรือรวมโดยใช้ stringแต่นี้สามารถแก้ไขได้อย่างง่ายดายโดยการเปลี่ยนมันมากเกินไป ifอาจจะสั้นลง ternary s+=l>1?if code:"";เหมือน คุณสามารถลบออกจากวงและหลังเพิ่มได้ที่i++ d[i++]
TheLethalCoder

initialise iด้วยเช่นl int l=s.Length-1,i=1;และฉันคิดว่ามันอาจจะเป็น!
TheLethalCoder

@TheLethalCoder ขอบคุณ! ฉันเพิ่มข้อเสนอแนะของคุณไปยังรหัส หมายเหตุเล็กน้อย: ฉันลืมสตริงที่จริง ๆ แล้วมี IEnumerable; String แทน string เป็น Java ตกค้างที่ฉันยังคงต่อสู้ด้วย, ternary เป็นความจริงที่ยาวอย่างน่าประหลาดใจ; และหลังจากการเปลี่ยนแปลงของคุณฉันเปลี่ยนไปสำหรับ (; expr;) ถึงในขณะที่ (expr) เนื่องจากดูดีขึ้นและนับเป็นไบต์เดียวกัน ขอขอบคุณอีกครั้ง.
Grzegorz Puławski

ไม่ต้องห่วง! Ternaries บางครั้ง แต่มักจะสั้นกว่าดังนั้นจึงควรลองใช้ดู
TheLethalCoder

0

เรติน่า 106 ไบต์

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

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

ลองออนไลน์! คำอธิบาย:

..+
$&¶$&

หากมีอักขระอย่างน้อยสองตัวให้ป้อนข้อมูลซ้ำ

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

กลับรายการที่ซ้ำกัน

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

เปลี่ยนสตริงเป็นรูปสามเหลี่ยม สามเหลี่ยมด้านบนเริ่มต้นด้วยอินพุตและลบอักขระแรกในแต่ละครั้งในขณะที่สามเหลี่ยมด้านล่างเริ่มต้นด้วยอักษรตัวแรกของอินพุตที่กลับด้านและเพิ่มอักขระแต่ละครั้ง

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

เข้าร่วมสามเหลี่ยมกันซ้อนทับกันเพื่อให้ตัวละครตัวสุดท้ายเป็น/แนวทแยง

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

เปลี่ยนอักขระทั้งหมดเป็นช่องว่างหากอักขระเหล่านั้นอยู่ห่างจากจุดสิ้นสุดอย่างน้อยทุกด้าน

G`.

ลบบรรทัดว่างซ้ายใด ๆ


0

Python 3, 85 ไบต์

การใช้อินพุตสำหรับแถวบนสุด :)

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

คุณแน่ใจหรือไม่ว่านี่เป็นคำตอบที่ถูกต้อง?
Koishore Roy

0

Lua , 104 ไบต์

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())

ลองออนไลน์!


แต่คุณใช้เพียงpครั้งเดียว ...
รั่วนูน

จริง ... จะเปลี่ยนสิ่งนั้น



0

Mathematica, 138 91 ไบต์

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

คุณสามารถลองออนไลน์ด้วยการวางต่อไปนี้ที่Wolfram Cloud Sandboxและคลิก "ประเมินเซลล์" หรือกด Shift + Enter หรือกด 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.