ปูพรม


40

แรงบันดาลใจจากคำถาม SOนี้

ท้าทาย:

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

  • สตริงs
  • ตัวละครc

เอาท์พุท:

สร้างรูปสี่เหลี่ยม ASCII รูปสี่เหลี่ยมขนมเปียกปูนของสตริงในทั้งสี่ทิศทางด้วยอักขระตัวแรกของสตริงที่อยู่ตรงกลางและออกไปด้านนอก ซึ่งอยู่ภายในพรมรูปสี่เหลี่ยม ASCII โดยมีตัวละครเป็นสารตัวเติม นี่อาจฟังดูไม่ชัดดังนั้นนี่เป็นตัวอย่าง:

อินพุต: = , = เอาท์พุท:sstringc.

..........g..........
........g.n.g........
......g.n.i.n.g......
....g.n.i.r.i.n.g....
..g.n.i.r.t.r.i.n.g..
g.n.i.r.t.s.t.r.i.n.g
..g.n.i.r.t.r.i.n.g..
....g.n.i.r.i.n.g....
......g.n.i.n.g......
........g.n.g........
..........g..........

กฏท้าทาย:

  • อินพุตสตริงอาจเป็นรายการของอักขระ
  • เอาท์พุทอาจเป็นรายการของสายอักขระหรือเมทริกซ์ของอักขระ
  • อินพุตสตริงและอักขระรับประกันว่าไม่ว่างเปล่า
  • สตริงรับประกันว่าจะไม่มีตัวอักษร
  • ทั้งสตริงและอักขระจะสามารถพิมพ์ได้เฉพาะ ASCII (ช่วง Unicode [32,126], เว้นวรรค '' ถึงและรวมเครื่องหมายตัวหนอน '~')

กฎทั่วไป:

  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
    อย่าปล่อยให้ภาษาโค้ดกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ '
  • กฎมาตรฐานใช้สำหรับคำตอบของคุณด้วยกฎ I / O เริ่มต้นดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีการที่มีพารามิเตอร์ที่เหมาะสมและประเภทผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
  • ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
  • หากเป็นไปได้โปรดเพิ่มลิงก์พร้อมทดสอบรหัสของคุณ (เช่นTIO )
  • นอกจากนี้ขอแนะนำให้เพิ่มคำอธิบายสำหรับคำตอบของคุณ

กรณีทดสอบ:

อินพุต: = , = เอาท์พุท:sc =11111c=0

00000000100000000
00000010101000000
00001010101010000
00101010101010100
10101010101010101
00101010101010100
00001010101010000
00000010101000000
00000000100000000

อินพุต: = , = เอาท์พุท:s12345ABCDEFc#

####################F####################
##################F#E#F##################
################F#E#D#E#F################
##############F#E#D#C#D#E#F##############
############F#E#D#C#B#C#D#E#F############
##########F#E#D#C#B#A#B#C#D#E#F##########
########F#E#D#C#B#A#5#A#B#C#D#E#F########
######F#E#D#C#B#A#5#4#5#A#B#C#D#E#F######
####F#E#D#C#B#A#5#4#3#4#5#A#B#C#D#E#F####
##F#E#D#C#B#A#5#4#3#2#3#4#5#A#B#C#D#E#F##
F#E#D#C#B#A#5#4#3#2#1#2#3#4#5#A#B#C#D#E#F
##F#E#D#C#B#A#5#4#3#2#3#4#5#A#B#C#D#E#F##
####F#E#D#C#B#A#5#4#3#4#5#A#B#C#D#E#F####
######F#E#D#C#B#A#5#4#5#A#B#C#D#E#F######
########F#E#D#C#B#A#5#A#B#C#D#E#F########
##########F#E#D#C#B#A#B#C#D#E#F##########
############F#E#D#C#B#C#D#E#F############
##############F#E#D#C#D#E#F##############
################F#E#D#E#F################
##################F#E#F##################
####################F####################

อินพุต: = , = เอาท์พุท:s@+-|-o-|-Oc:

::::::::::::::::::O::::::::::::::::::
::::::::::::::::O:-:O::::::::::::::::
::::::::::::::O:-:|:-:O::::::::::::::
::::::::::::O:-:|:-:|:-:O::::::::::::
::::::::::O:-:|:-:o:-:|:-:O::::::::::
::::::::O:-:|:-:o:-:o:-:|:-:O::::::::
::::::O:-:|:-:o:-:|:-:o:-:|:-:O::::::
::::O:-:|:-:o:-:|:-:|:-:o:-:|:-:O::::
::O:-:|:-:o:-:|:-:+:-:|:-:o:-:|:-:O::
O:-:|:-:o:-:|:-:+:@:+:-:|:-:o:-:|:-:O
::O:-:|:-:o:-:|:-:+:-:|:-:o:-:|:-:O::
::::O:-:|:-:o:-:|:-:|:-:o:-:|:-:O::::
::::::O:-:|:-:o:-:|:-:o:-:|:-:O::::::
::::::::O:-:|:-:o:-:o:-:|:-:O::::::::
::::::::::O:-:|:-:o:-:|:-:O::::::::::
::::::::::::O:-:|:-:|:-:O::::::::::::
::::::::::::::O:-:|:-:O::::::::::::::
::::::::::::::::O:-:O::::::::::::::::
::::::::::::::::::O::::::::::::::::::

อินพุต: = , = เอาท์พุท:sABcc

ccBcc
BcAcB
ccBcc

อินพุต: = , = เอาท์พุท:s~cX

~

อินพุต: = , = เอาท์พุท:s/\^/\cX

XXXXXXXX\XXXXXXXX
XXXXXX\X/X\XXXXXX
XXXX\X/X^X/X\XXXX
XX\X/X^X\X^X/X\XX
\X/X^X\X/X\X^X/X\
XX\X/X^X\X^X/X\XX
XXXX\X/X^X/X\XXXX
XXXXXX\X/X\XXXXXX
XXXXXXXX\XXXXXXXX

สตริงสามารถมีช่องว่างได้หรือไม่?
Emigna

1
@Emigna ใช่ ASCII ที่พิมพ์ได้ทั้งหมด (ช่วง Unicode [32,126]) เป็นอักขระอินพุตที่ถูกต้อง
Kevin Cruijssen

1
()()()นี้จะกลายเป็นยอดเยี่ยมในการแก้ปัญหาถ้าคุณใช้ตัวอักษรที่มีลักษณะเช่นเดียวกับสายตาตัวเดียวเช่น
Filip Haglund

จะเกิดอะไรขึ้นถ้า $ s $ ว่างเปล่า
โซโลมอน Ucko

@SolomonUcko จากส่วนกฎ: " อินพุตและสตริงอักขระถูกรับประกันว่าเป็นแบบไม่ว่างเปล่า " :)
Kevin Cruijssen

คำตอบ:



6

R , 118 95 92 ไบต์

function(a,d,n=length(a),I=c(n:1,1:n)[-n])for(i in I-1)write(c(a,d)[pmin(I+i,n+1)],1,n*2,,d)

ลองออนไลน์!

ขอบคุณที่:

  • จูเซปเป้สำหรับแก้ไขข้อผิดพลาดและสนามกอล์ฟ
  • Aaron Hayman มีค่าสนามกอล์ฟ 22 ไบต์

ฉันเดาว่าฉันต้องลดความเกลียดชังของฉันลงในforลูป R อย่างน้อยก็สำหรับการเล่นกอล์ฟ
แอรอนเฮย์แมน

@iuseppe ขอบคุณฉันไม่ควรขี้เกียจเกี่ยวกับการรวมกรณีทดสอบเพิ่มเติม!
คิริลล์แอล

1
สิ่งนี้สำหรับ 98 ดูวิธีแก้ปัญหาของคุณใกล้กว่าของฉันลองออนไลน์!
แอรอนเฮย์แมน

1
สามารถนำออกอีกสองรายการด้วยการจัดเรียงใหม่: ลองออนไลน์!
Aaron Hayman

1
@AaronHayman หรืออื่น ๆ นี้92 byterรวมpminตรรกะที่มีปรับปรุงใหม่ :-)
จูเซปเป้

5

J , 59 56 ไบต์

,{~[:((0-2*#)}.\[:,0,:"0({:>:t)*t=:]+/<:)[:(|.@}.,])#\@]

ลองออนไลน์!

วิธีแก้ปัญหายาวเกินไปสำหรับJ ... (ความผิดทั้งหมดของฉัน)


2
นี่คือ39
FrownyFrog

@ FronyFrog ขอบคุณฉันคิดว่าคุณควรโพสต์เป็นโซลูชันของคุณเอง
Galen Ivanov

5

Rเวอร์ชันที่น่าเกลียด 118 ไบต์

โดยให้อินพุตเป็นเวกเตอร์ของอักขระเดี่ยวและเอาท์พุทเมทริกซ์แทนที่จะพิมพ์ ASCII ที่ดี

function(s,C,l=length(s),L=4*l-3,k=2*l-1,y=abs(rep(1:k,L)-l)+abs(rep(1:L,e=k)-k)/2+1)matrix(ifelse(y%%1|y>l,C,s[y]),k)

ลองออนไลน์!

R , 161 157 ไบต์

บันทึก 4 ไบต์โดยใช้ ifelse แทนการแก้ไขตามเงื่อนไข y

function(S,C,l=nchar(S),L=4*l-3,k=2*l-1,y=abs(rep(1:L,k)-k)/2+abs(rep(1:k,e=L)-l)+1)cat(rbind(matrix(ifelse(y%%1|y>l,C,el(strsplit(S,''))[y]),L),'
'),sep='')

ลองออนไลน์!

ungolfed และแสดงความคิดเห็น

function(S,C){
    s=el(strsplit(S,''))
    l=nchar(S)
    L=4*l-3
    k=2*l-1
    y=abs(rep(1:L,k)-k)/2+abs(rep(1:k,e=L)-l)+1 # distance from centre
    y[!!y%%1]=l+1  # set non integers to one more than length of string
    y[y>l]=l+1     # set number beyond length of string to one more than length of string
    M = rbind(matrix(c(s,C)[y],L),'\n') # build matrix and add line returns
    cat(M,sep='') # print the matrix as a string
}

อืมดูเหมือนคำตอบที่ยาวที่สุดจนถึงตอนนี้!


โอ้ที่รักควรดูคำถามให้ดีขึ้น
Aaron Hayman

1
@KevinCruijssen ฉันได้แก้ไขแล้วตอนนี้
Aaron Hayman

1
สำหรับ +15 ไบต์คุณสามารถทำให้คำตอบที่น่าเกลียดของคุณ: ลองออนไลน์!
จูเซปเป้


4

05AB1E , 15 11 ไบต์

.sûsζøsýí€û

ลองออนไลน์! หรือเป็นชุดทดสอบ

คำอธิบาย

.s            # push suffixes of input
  û           # palendromize this list
   sζ         # transpose using the second input as filler
     ø        # transpose back
      sý      # merge each on the second input
        í     # reverse each row
         €û   # palendromize each row

1
@KevinCruijssen: ใช่ โชคดีที่มันไม่เสียค่าใช้จ่ายใด ๆ ในการแก้ไข ฉันยังรู้สึกว่าควรจะมีวิธีที่ดีกว่าในการทำเช่นนี้ดังนั้นฉันจะดูต่อไป
Emigna

" เอาท์พุทอาจเป็นรายการของสายอักขระหรือเมทริกซ์ของอักขระ " ดังนั้นคุณสามารถย้าย»ไปยังส่วนท้าย :)
Kevin Cruijssen

@KevinCruijssen Ah ใช่ ฉันเหลือบมองไปยังส่วนนั้น ขอบคุณ :)
Emigna

4

J , 35 34 33 ไบต์

,{~1j1(}:@#"1{:(<*-)1-|+/|)i:@-&#

ลองออนไลน์!


-&#cs
i:
1-|+/|
{: (<*-)-&#

 0  0 _1  0  0
 0 _1 _2 _1  0
_1 _2 _3 _2 _1
 0 _1 _2 _1  0
 0  0 _1  0  0

ดัชนีลบเริ่มต้นที่ -1 เช่นเดียวกับในงูหลาม สิ่งเดียวที่เหลือคือการใส่คอลัมน์ของศูนย์

1j1( #"1
  }:@
,{~cs

ขอขอบคุณ Galen Ivanov สำหรับอัลกอริทึม


คุณจะช่วยเพิ่มคำอธิบายได้ไหม? ฉันไม่คุ้นเคยกับ J.
Kevin Cruijssen

4

K (ngn / k) , 38 ไบต์

{1_',/'y,''2{+x,1_|x}/(#x)'1_,/+y,'|x}

ลองออนไลน์!

{ }ฟังก์ชั่นที่มีข้อโต้แย้งx(สตริงs ) และy(ตัวละคร )

|x ถอยหลัง x

y,'เสริมyต่อให้แต่ละ

+ transpose

,/ concat

1_ ปล่อยถ่านตัวแรก

ณ จุดนี้เรามีสตริงที่มีความยาว ( x) อินสแตนซ์ของyตามด้วยอักขระจากx

#x ความยาวของ x

(#x)' หน้าต่างบานเลื่อนของตัวอักษรที่ต่อเนื่องกันหลายตัว

2{ }/ ทำสองครั้ง

+x,1_|xเข้าร่วมxกับสิ่งที่ตรงกันข้ามxโดยไม่มีองค์ประกอบแรกและย้าย

y,''เสริมyต่อกัน

,/' ต่อกัน

1_' ปล่อยหนึ่งอันจากแต่ละอัน


3

Japt 15 ไบต์

ส่งคืนอาร์เรย์ของบรรทัด

Ôå+ ®¬qV êÃûV ê

ลองมัน

Ôå+ ®¬qV êÃûV ê     :Implicit input of strings U=s & V=c
Ô                   :Reverse U
 å+                 :Prefixes
    ®               :Map
     ¬              :  Split
      qV            :  Join with V
         ê          :  Palindromise
          Ã         :End map
           ûV       :Centre pad each string with V, to the length of the longest
              ê     :Palindromise

3

ถ่าน 15 ไบต์

UBηEθ✂θκ‖O↑←UE¹

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

UBη

cตั้งพื้นหลังเพื่อการป้อนข้อมูลที่สอง

Eθ✂θκ

แม็พเหนืออินพุตแรกsเพื่อสร้างคำต่อท้ายทั้งหมดและพิมพ์โดยปริยายบนบรรทัดแยก

‖O↑←

สะท้อนแนวนอนและแนวตั้ง

UE¹

เพิ่มพื้นที่พิเศษในแนวนอน




2

Japt , 16 ไบต์

หมายเหตุ: ฉันจะเล่นกอล์ฟ :)

Ôå+ ®¬qVÃùV mê ê

ลองออนไลน์!


มันค่อนข้างคล้ายกับคำตอบ Japt อื่น ๆ แต่ในลำดับที่ต่างออกไปใช่ไหม? ฉันไม่รู้จัก Japtive แต่ฉันเห็นตัวละครที่คล้ายกันทั้งสองคำตอบ ;)
Kevin Cruijssen

@KevinCruijssen ใช่ทั้งสองเกือบจะเหมือนกันสำหรับตอนนี้
Luis felipe De jesus Munoz

@KevinCruijssen, Luis พัฒนาสิ่งนี้อย่างอิสระจากโซลูชันของฉัน
Shaggy

2

PowerShellขนาด 120 ไบต์

param($s,$c)($s,(($l=$s.length-1)..0+1..$l|%{($x=$c*(2*$_))+($s[($_,($l..$_+($_+1)..$l))[$_-ne$l]]-join$c)+$x}))[$l-gt0]

ลองออนไลน์!

บางวันมีช่วงดัชนีแทนที่จะเป็นชิ้นเจ็บจริงๆ วันนี้เป็นหนึ่งในวันเหล่านั้น เนื่องจากช่วงความทรงจำสับสนเมื่อจัดการกับองค์ประกอบเดี่ยว (เช่นส่งคืน 0..0 + 1..0) จึงมีการใช้ปลอกพิเศษเพื่อหลีกเลี่ยงมันพร้อมกัน (ในราคาหลายไบต์)




2

PowerShell , 82 83 ไบต์

+2 ไบต์ขอบคุณ Veskah: แก้ไขตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

-1 ไบต์: กฎที่Input-string may also be a list of charactersใช้

$c,$s=$args
($s|%{(-join$s|% s*g $i)+$c*$i++})[($r=$i..0+1..$i)]|%{"$_"[$r]-join$c}

ลองออนไลน์!

หักกอล์ฟ:

$c,$s=$args
$southEast = $s|%{
    (-join$s|% substring $i) + $c*$i++
}
$range=$i..0+1..$i
$southEast[$range]|%{
    "$_"[$range]-join$c
}

1
ดูเหมือนว่าตัวแบ่งนี้สำหรับกรณีตัวละครเดียว มีเพียงบรรทัดว่างในลิงก์ TIO สำหรับ~
Veskah

จริง ขอบคุณ!
mazzy

2

Pip , 24 20 ไบต์

QPRV:_JbMa@>RV,#aZDb

ใช้-lแฟล็กเพื่อรับเอาต์พุตที่มนุษย์อ่านได้ ลองออนไลน์!

คำอธิบาย

QPRV:_JbMa@>RV,#aZDb
                      a,b are cmdline args (implicit)
                a     1st cmdline arg (the string)
               #      Length
              ,       Range
            RV        Reverse
         a@>          Take slices of a starting at those indices
                 ZDb  Zip the list of slices together, filling out missing values in
                      the matrix with b (the character)
        M             To each row, map this function:
     _Jb               Join on b
  RV:                 Reverse (making top row the bottom and vice versa)
QP                    Quad-palindromize: reflect downward and rightward, with overlap

ตัวอย่างเช่นด้วยอินพุตabcdและ.:

RV,#a
 [3 2 1 0]
a@>
 ["d" "cd" "bcd" "abcd"]
ZDb
 [['d 'c 'b 'a] ['. 'd 'c 'b] ['. '. 'd 'c] ['. '. '. 'd]]
_JbM
 ["d.c.b.a" "..d.c.b" "....d.c" "......d"]
RV:
 ["......d" "....d.c" "..d.c.b" "d.c.b.a"]
QP
 ["......d......" "....d.c.d...." "..d.c.b.c.d.." "d.c.b.a.b.c.d" "..d.c.b.c.d.." "....d.c.d...." "......d......"]

2

ทูต , 57 ไบต์

${q:=#x-1Bounce!Bounce@Join&y@PadLeft&y&#x=>x[q::(q::0)]}

ลองออนไลน์! เอาต์พุตเป็นรายการของบรรทัด

คำอธิบาย

?? parameters: x, y
${
    ?? q is length of x - 1
    q:=#x-1
    ?? Reflect, collapsing middle:
    Bounce!
        ?? Function:
            ?? Reflect,
            Bounce@
            ?? Joined by y,
            Join&y@
            ?? padded to the length of x with y
            PadLeft&y&#x
        ?? Mapped over
        =>
            ?? The elements of x at
            x[
                ?? decreasing range from q to
                q::(
                    ?? each element in the range from q to 0
                    q::0
                )
            ]
}

2

Perl 6 , 79 ไบต์

->\c{{map {join c,g $_ X||c},g .[^*X+(^$_,)]}o*.comb}
my&g={.[$_-1...0...$_-1]}

ลองออนไลน์!

codeblock ที่ไม่ระบุชื่อที่รับอินพุต curried (เหมือนf(char)(string)) และส่งคืนรายการบรรทัด ฉันคิดว่าวิธีการอื่นจะสั้นกว่านี้

คำอธิบาย:

my&g={.[$_-1...0...$_-1]}  # Helper function to palindromise a list
->\c{                                                }  # Code block that takes a char
     {                                       }o*.comb   # And returns a function
                                .[^*X+(^$_,)]  # Get all prefixes with end padding
                                               # e.g. "str" => [["r",Nil,Nil]
                                                                ["t","r",Nil]
                                                                ["s","t","r"]]
                              g   # Palindromise the lsit
       map {                },    # Map each element to
                     $_ X||c      # Replace all Nils with the character
                   g              # Palindromise it
            join c,               # And join by the character



1

C # (Visual C # Interactive Compiler) , 249 ไบต์

s=>c=>{var r=s.Select((x,_)=>{int k=s.Length;var m=s.Substring(_,k-_).Aggregate("",(a,b)=>a+c+b);return new string(m.Skip(2).Reverse().Concat(m.Skip(1)).ToArray()).PadLeft(2*k-3+m.Length,c).PadRight(4*k-3,c);});return r.Skip(1).Reverse().Concat(r);}

ลองออนไลน์!

สิ่งนี้จะต้องแก้ไขไม่ได้ ...



1

JavaScript (Node.js) , 143 ไบต์

(s,c)=>{q=Math.abs;m=(l=s.length*4-3)-1;for(i=j=0;j<l/2;(i=(++i)%l)?0:++j){p=s[q(i-m/2)/2+q(j-m/4)];process.stdout.write((i?"":"\n")+(p?
p:c))}}

ลองออนไลน์!

การคิดที่มากขึ้นจะนำไปสู่การคำนวณในแง่ของอาเรย์หนึ่งมิติและน้อยกว่าไบต์


1

Kotlin , 250 ไบต์

หมายเหตุ: Kotlin tio ล้มเหลวในการส่งคืนคลาสใหม่ดังนั้นโค้ดนี้จะได้รับข้อยกเว้นพอยน์เตอร์พอยน์เตอร์ สิ่งนี้เกิดขึ้นกับรหัสที่ฉันโพสต์ไว้ก่อนหน้าซึ่งทำงานในเวลานั้น ฉันคิดว่ามันจะได้รับการแก้ไขในที่สุด แต่ไม่พบผู้ติดต่อฝ่ายสนับสนุนเพื่อรายงานปัญหา นอกจากนี้ยังสามารถทำงานได้ที่นี่

{s:String,c:Char->val h=s.length*2-1
val w=h*2-1
val m=Array(h){Array(w){c}}
for(i in s.indices)for(r in 0..h-1){val o=(i-Math.abs(h/2-r))*2
if(o>=0){m[r][w/2+o]=s[i].toChar()
m[r][w/2-o]=s[i].toChar()}}
m.map{it.joinToString("")}.joinToString("\n")}

ลองออนไลน์!


คุณสามารถติดต่อ@DennisในNinteenth Byte แชท เขาเป็นผู้ดูแลของ TIO นอกจากนี้ฉันอนุญาตให้ส่งคืนรายการสตริงแทนที่จะพิมพ์จริงดังนั้นฉันคิดว่า (ไม่แน่ใจ) คุณสามารถลบออก.joinToString("\n")จากจำนวนไบต์ (และทำเช่นนั้นในส่วนท้ายนอกฟังก์ชั่น)
Kevin Cruijssen



1

ข้อความค้นหา TSQL ขนาด 191 ไบต์

ใน Studio การจัดการเซิร์ฟเวอร์ MS-SQL กด Ctrl-T ก่อนรันเคียวรีนี้สิ่งนี้จะเปลี่ยนผลลัพธ์เป็นข้อความ

สคริปต์นี้สร้างผลลัพธ์จากซ้ายไปขวาใน "สตริง" ที่ยาวหนึ่งอันโดยคำนวณค่าที่จะใส่ในแต่ละตำแหน่ง เอาต์พุต จำกัด เพียง 4096 ตัวอักษร

แข็งแรงเล่นกอล์ฟ:

SELECT
string_agg(iif(h>k/2,@y,substring(@,h+1,1))+iif(-~n%k=0,'
',@y),'')FROM(SELECT
abs(k/2-n%k)+abs(k/2-n/k)h,*FROM(SELECT
number n,len(@)*2-1k,*FROM spt_values)c)d
WHERE n<k*k and'P'=type

Ungolfed:

USE master
DECLARE 
@y char='.',
@ varchar(20) = 'abcd'

SELECT
  string_agg(iif(h>k/2,@y,substring(@,h+1,1))+iif(-~n%k=0,'
',@y),'')
FROM
(
  SELECT
    abs(k/2-n%k)+abs(k/2-n/k)h,*
  FROM
  (
    SELECT
      number n,
      len(@)*2-1k,*
    FROM spt_values
  )c
)d
WHERE n<k*k and'P'=type

ฉันต้องทำการเปลี่ยนแปลงบางอย่างเพื่อจัดรูปแบบผลลัพธ์ในเวอร์ชันออนไลน์

ลองออนไลน์


1

Java (JDK) , 213 199 198 ไบต์

a->b->{int i=0,l=a.length()-1;String s=a,r[]=new String[l-~l],p;for(;i<=l;s=s.substring(1))r[l+i]=r[l-i]=new StringBuffer(p=b.join(b,s.split(""))+b.repeat(2*i++)).reverse()+p.substring(1);return r;}

ลองออนไลน์!

-14 bytesขอบคุณ @KevinCruijssen
-1 byteขอบคุณ @ceilingcat

Ungolfed

a->
    b-> {
        int i = 0, l = a.length() - 1;
        String s = a, r[]=new String[a.length()*2-1],p;
        for (; i<=l; s=s.substring(1))
            r[l+i]
              = r[l-i++]
              =   new StringBuffer(
                                   p =   String.join(b,s.split(""))
                                       + b.repeat(2*i)
                                  ).reverse()
                + p.substring(1);
        return r;
    }

1
คำตอบที่ดีที่คุณสามารถกอล์ฟมัน14 ไบต์ต่ำกว่า 200 อย่างไรก็ตาม :)
Kevin Cruijssen

@KevinCruijssen เห็นดีขอบคุณ!
Sara J

@ceilingcat คิดดีขอบคุณ!
Sara J

1

ภาษา Wolfram (Mathematica) , 68 ไบต์

Table[#[[1+Abs@y+Abs@x/2]]/._@__:>#2,{y,l=1-Tr[1^#],-l},{x,2l,-2l}]&

ลองออนไลน์!

ใช้รายการของอักขระ (พร้อมกับฟิลเลอร์อักขระ) เป็นอินพุตและเอาต์พุตเมทริกซ์ของอักขระ

Table[                              ,{y,l=1-Tr[1^#],-l},{x,2l,-2l}]&    (* make a (2*len-1 x 4*len-3) table centered at (0,0) *)
      #[[               ]]                                              (*  where the value at each point is the string indexed at *)
         1+Abs@y+Abs@x/2                                                (*   (1 + |y-coordinate| + |x-coordinate|/2) *)
                          /._@__:>#2                                    (*  if that indexing fails, use the filler character instead *)

ในการรับดัชนีของรายการตัวละครเราใช้list[[index]]ซึ่งขยายไปPart[list, index]ภายใน หากดัชนีนั้นถูกต้องนิพจน์นั้นจะประเมินเป็นค่าที่ดัชนีนั้น ถ้าไม่ใช่ - หากดัชนีไม่ใช่จำนวนเต็มหรืออยู่นอกช่วงนิพจน์จะยังไม่ได้รับการประเมิน
รูปแบบที่สั้นที่สุด (สั้นที่สุด) ซึ่งตรงกับPart[...]แต่ไม่ใช่อักขระเดียวคือ_@__ซึ่งจับคู่กับนิพจน์ใด ๆ ที่มีอาร์กิวเมนต์หนึ่งตัว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.