Inscriptio Labyrinthica


22

ในสถานที่ฝังศพของกษัตริย์ไซโลแห่งอัสตูเรียสมีจารึกที่อ่านSILO PRINCEPS FECIT ( กษัตริย์ไซโลทำสิ่งนี้ )

SILO PRINCEPS FECIT

ตัวอักษรตัวแรกอยู่ตรงกลางและจากนั้นมีคนอ่านโดยไปในทิศทางที่ไม่ใช่เส้นทแยงมุมแผ่ออกไปด้านนอก พบจดหมายฉบับสุดท้ายทั้งสี่มุม ในความท้าทายนี้คุณจะพูดถึงกระบวนการทั่วไปในการสร้างมัน

อินพุต

สตริง ( หรือเทียบเท่า ) และจำนวนเต็ม คุณอาจทำการสันนิษฐานต่อไปนี้เกี่ยวกับอินพุต:

  • สตริงจะมีความยาวคี่
  • จำนวนเต็มจะเป็นเลขคี่ระหว่าง 1 ถึงหนึ่งน้อยกว่าสองเท่าของความยาวของสตริง

เอาท์พุต

labyrinthica inscriptioสตริงโดยใช้จำนวนเต็มสำหรับความสูงหรือความกว้าง (ดูรูปแบบตัวอย่างสูง) เอาต์พุตควรเป็นตัวอักษรแต่ละตัวโดยไม่มีช่องว่างแบ่งบรรทัดเป็นค่าเริ่มต้นสำหรับระบบ / ภาษาของคุณ

กรณีทดสอบ

โปรดทราบว่าอินพุต 1 หรือ (ความยาว * 2 - 1) จะส่งผลให้เป็นแนวนอนหรือแนวตั้ง

 Input: FOO, 3    Input: BAR, 1    Input: BAR, 3    Input: BAR, 5

Output: OOO      Output: RABAR    Output: RAR       Output: R
        OFO                               ABA               A
        OOO                               RAR               B
                                                            A
                                                            R

 Input: ABCDE, 5   Input: ABCDE, 3   Input: *<>v^, 5

Output: EDCDE     Output: EDCBCDE           ^v>v^
        DCBCD             DCBABCD           v><>v
        CBABC             EDCBCDE           ><*<>
        DCBCD                               v><>v
        EDCDE                               ^v>v^

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

นี่คือดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ ช่องโหว่มาตรฐานต้องห้าม



อินพุตสามารถมีช่องว่างได้หรือไม่? ถ้าเป็นเช่นนั้นพวกเขาควรได้รับการจัดการอย่างไร?
Nitrodon

1
ขอให้เราใส่รายชื่อตัวละครได้ไหม
Robin Ryder

1
@Charlie อย่างชัดเจนที่คุณได้รับหายไปตอบ Perl6 ของฉันทั้งหมด :-) ผมคาดหวังคำตอบจากคุณเกินไปเพราะมันแรงบันดาลใจจากพระมหากษัตริย์ที่ห้าของสเปน (ดีของ Asturies แต่Asturies เจ้าEspaña, y Tolo Demas เจ้า tierra conquistaoฮ่าฮ่า)
user0721090601

1
เราขอนำความกว้างแทนความสูงได้ไหม
attinat

คำตอบ:


6

J , 27 ไบต์

([{~]+/&(|@i:)#@[-1+])-:@<:

ลองออนไลน์!

ตัวอย่างจะชี้แจงแนวทางระดับสูง

พิจารณา 'ABCDE' f 3

เราสังเกตเห็นว่าสิ่งที่เราค้นหานั้นเป็นเพียงตาราง "การเพิ่มข้าม" 1 0 1และ3 2 1 0 1 2 3ซึ่งมีลักษณะดังนี้:

4 3 2 1 2 3 4
3 2 1 0 1 2 3
4 3 2 1 2 3 4

จากนั้นเราจะดึงดัชนีเหล่านั้นออกจากสตริงเดิม: [{~.

ส่วนที่เหลือทั้งหมดของรหัสที่เป็นเพียงที่น่าเบื่อคณิตศาสตร์และการใช้i:ในการสร้างข้อโต้แย้งและ1 0 13 2 1 0 1 2 3


6

เยลลี่ 12 ไบต์

Uṡṛ‘HɗŒBŒḄZY

ลองออนไลน์!

ลิงก์ dyadic ที่ใช้สตริงเป็นซ้ายและส่วนสูงเป็นอาร์กิวเมนต์ที่ถูกต้อง ส่งคืนสตริงที่มีตัวแบ่งบรรทัด หากรายการของสตริงเป็นที่ยอมรับได้สำหรับการส่งออกฉันสามารถลบYไบต์สุดท้ายบันทึก น่าสนใจต้นฉบับ“ SILO PRINCEPS FECIT” ดูเหมือนว่าฉันเหมือนศิลปะ ASCII ของเพชร 3 มิติเมื่อฉันดูบน TIO

คำอธิบาย

U            | Reverse input
 ṡ   ɗ       | All overlapping substrings of the length given by:
  ṛ          | - The right argument
   ‘         | - Incremented by 1
    H        | - Halved
      ŒB     | Concatenate to the reverse, keeping a single copy of the last character (so creating a palindrome)
        ŒḄ   | Do the same, but this time using the lists of characters generated by the last atom
          Z  | Transpose
           Y | Join with newlines

2
ฉันคลิกที่ลองเพียงเพื่อดูและใช่แน่นอนมันเป็น 3D แปลก แต่เท่ห์
user0721090601

6

R , 93 91 87 ไบต์

-2 ไบต์ขอบคุณ Giuseppe -4 ไบต์โดยการป้อนความกว้างมากกว่าความสูงตามที่อนุญาตโดย OP

function(s,W,w=W%/%2,h=length(s)-w-1)write(s[1+outer(abs(-w:w),abs(-h:h),`+`)],1,W,,"")

ลองออนไลน์!

รับอินพุตเป็นเวกเตอร์ของอักขระ s[1+outer(abs(-w:w),abs(-h:h),'+')]ส่วนที่สำคัญคือ

wh(2w+1)×(2h+1)

(i,j)1+|ih|+|jw|abs(-w:w)abs(-h:h)abs(-h:h)[h,h1,h2,,2,1,0,1,2,,h1,h]outer(abs(-2:2), abs(-1:1), '+')

32123
21012
32123

(จากนั้นเราต้องเพิ่ม 1 เนื่องจาก R ได้รับการจัดทำดัชนี 1) 0 ในศูนย์คือตำแหน่งที่ตัวอักษรตัวแรกของอินพุตควรไป

ส่วนที่เหลือกำลังฟอร์แมต


5

Charcoalขนาด25 19 ไบต์

E⊘⊕η✂θι⁺ι⁻Lθ⊘⊖η‖O←↑

ลองออนไลน์! การเชื่อมโยงคือการสร้างรหัสเวอร์ชัน คำอธิบาย:

E⊘⊕η✂θι⁺ι⁻Lθ⊘⊖η

วาดหนึ่งในสี่ของจารึก

‖O←↑

สะท้อนการจารึกให้สมบูรณ์


1
ที่น่าประทับใจ! ฉันยังใหม่กับเว็บไซต์ฉันขอโทษล่วงหน้าหากสิ่งต่อไปนี้เป็นคำถามที่โง่ 1. มันเป็นตัวอักษร 19 ตัว แต่พวกมันก็มีขนาด 19 ไบต์เช่นกัน? และ2. ในการเข้ารหัสข้อความนั้นจะใช้เวลา 19 ไบต์?
damix911

ใช่เข้ารหัสใน UTF-8 ซึ่งจะมี19 ตัวอักษรแต่จริงๆแล้ว 51 ไบต์ ด้วย UTF-16 สิ่งนี้ยังคงใช้เวลา39 ไบต์ในการเข้ารหัส
ruohola

1
@ damix911 Charcoal มีการเข้ารหัสของตัวเองซึ่งสามารถพบได้ในวิกิ ฉันคิดว่าตัวละครที่อยู่นอกหน้ารหัสราคา 3 ไบต์ เครื่อง deverbosifier พยายามคำนวณความยาวที่ถูกต้อง แต่ไม่รบกวนการเข้ารหัสที่เกิดขึ้นจริงซึ่งน่ารำคาญ
Neil

1
@Neil Okey ดูเหมือน legit!
ruohola

3

Japt -R , 19 16 ไบต์

z
ò@VÔtXUaVÊ)êÃê

ลองมัน

z\nò@VÔtXUaVÊ)êÃê     :Implicit input of integer U & string V
z                     :Floor divide U by 2
 \n                   :Reassign result to U
   ò                  :Range [0,U]
    @                 :Map each X
     VÔ               :  Reverse V
       tX             :  Substring from index X to index ...
         Ua           :    Absolute difference between U and ...
           VÊ         :    Length of V
             )        :  End substring
              ê       :  Palindromise
               Ã      :End map
                ê     :Palindromise
                      :Implicit output, joined by newlines

2

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

(g=Reverse@Rest@#~Join~#&)@BlockMap[g,#,⌈#2/2⌉,1]&

ลองออนไลน์!

ใช้ความกว้างเป็นอินพุต


1
@lirtosiast ดังนั้นอันดับแรกgจะไม่ถูกประเมินในครั้งแรกที่เรียกใช้ฟังก์ชัน ลองออนไลน์!
attinat

ที่น่าสนใจความคิดใด ๆ ว่าทำไมมันทำงานเมื่อคุณใช้ @@ หรือ @@@?
lirtosiast

@lirtosiast มันคิดว่าPrint/@f[...]-> Print/@Transpose[g[...]]-> Transpose[Print@g[...]]ตามเวลาที่gกำหนดไว้
attinat

2

Japt -R , 10 ไบต์

Ôã°Vz)mê ê

ใช้ความกว้างแทนความสูง

ลองมัน

Pseudocode (U คือสตริง V คือจำนวนเต็ม):

U.Reverse().AllSubstringsOfLength(++V / 2).Map(Palindromize).Palindromize

ดี! ไม่เคยเกิดขึ้นกับฉันเพื่อพยายามสร้างมันไปด้านข้าง
Shaggy


2

Python 3, 104 ไบต์

ฉันไม่ได้เล่นกอล์ฟมานานแล้ว ... ฉันแน่ใจว่านี่อาจสั้นกว่านี้

รายละเอียด

รหัสนี้กำหนดฟังก์ชั่นที่ใช้สองข้อโต้แย้ง (สตริงและความสูง) และให้ผลกับการส่งออกมาตรฐาน

ดัชนีในสตริงคือระยะทางแมนฮัตตันจากศูนย์กลางของกริด สำหรับตารางของความกว้างwและความสูงhระยะทางสำหรับเซลล์ที่มี(x, y)abs(x - (w - 1) / 2) + abs(v - (h - 1) / 2)

ความกว้างของกริดต้องเป็นเช่นนั้นระยะทางแมนฮัตตันของมุม (พูด(0, 0)) เท่ากับน้อยกว่าความยาวของสตริง แทนเข้ามาในข้างต้นและลดความซับซ้อนของเราจะพบว่ามีความกว้างเป็นเพียง(0, 0)2 * len(s) - h

รหัส

def b(s,h):
 w=2*len(s)-h
 for y in range(h):print(''.join(s[abs(x-w//2)+abs(y-h//2)]for x in range(w)))

ลองออนไลน์!



1

Pyth , 19 ไบต์

L+_btbjyyM.:Q-lQ/E2

ลองออนไลน์!

L+_btbjyyM.:Q-lQ/E2   Implicit: Q=string, E=height
L                     Define a function, y(b):
  _b                    Reverse b
 +  tb                  Append all be first element of b
                      y is now a palindromisation function
              lQ      Length of Q
             -  /E2   Subtract floored division of E by 2
          .:Q         All substrings of Q with the above length
        yM            Palindromise each substring
       y              Palindromise the set
      j               Join on newlines, implicit print



1

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

s=>n=>{int w=s.Length*2-n,i=0,j;var r=new char[n,w];for(;i<n;i++)for(j=0;j<w;)r[i,j]=s[System.Math.Abs(n/2-i)+System.Math.Abs(w/2-j++)];return r;}

ลองออนไลน์!

คำตอบที่ยาวที่สุดนานมาก :-) มันใช้ระยะทางแมนฮัตตันถึงศูนย์กลางของจัตุรัส ต้องมีวิธีที่สั้นกว่านี้


1

Tcl , 188 170 162 ไบต์

{{w s} {join [lmap C [lrepeat $w string] {join [$C reverse [set y [$C range $s [set x [expr abs($w/2+1-[incr i])]] end-[expr $w/2-$x]]]][$C range $y 1 end]}] \n}} bytes

ลองออนไลน์!

ดูเหมือนจะมีวิธีเลวร้ายนับล้านวิธีในการแก้ไขปัญหานี้ใน TCL นี่ไม่ใช่สิ่งที่เลวร้ายที่สุดของพวกเขา

บันทึกอย่างน้อย 18 ไบต์โดยแปลงเป็นแลมบ์ดา (สามารถบันทึกได้มากถึง 13 รายการหากยอมรับค่าส่งคืนของรายการบรรทัด)

บันทึกเพิ่มอีก 8 รายการเนื่องจาก lmap iterator ทำหน้าที่เป็นค่าคงที่พิเศษ


1

Canvas ขนาด 18 ไบต์

±X↕┌L╵┌-Y{x;1y1@]┼

ลองที่นี่!

Canvas ไม่ได้ทำซับสเตรตดังนั้นฉันต้องปฏิบัติกับมันเหมือนวัตถุศิลปะและได้รับส่วนย่อยแบบนั้น ฉันรู้สึกว่ามันราคา 2 ไบต์ แต่เดี๋ยวก่อนคุณจะทำอะไร

ดูเหมือนว่านี่จะไม่ได้ผลเหมือนที่ฉันคิด: ฟังก์ชั่น palindromize ของ Canvas สะท้อนตัวละครบางตัว (เช่น V กลายเป็นแนวตั้งกลายเป็นแนวตั้ง ^) และฉันไม่สามารถปิดใช้งานได้อย่างนั้น ... แหมฉันเดา


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