ใหญ่กว่า, ดีกว่า (แตก) ซิป


9

(ได้รับแรงบันดาลใจจากความท้าทายนี้ )

ในความท้าทายเริ่มแรกคุณต้องทำซิปแนวนอนอย่างไรก็ตามเมื่อมองลงไปที่ hoodie ของฉันซิปของฉันก็จะแนวตั้งมากขึ้น (และหักนิดหน่อย): P

อินพุต

คุณจะได้รับสตริงเดียว ( s) และคู่ของจำนวนเต็ม ( aและb) ในรูปแบบใด ๆ ที่ไหน:

a < (length-of-s / 2)

b <= ((length-of-s / 2) - (a + 1)) / 6

ผลผลิตและเกณฑ์การให้คะแนน

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

["f     r"],["u     e"],["l     p"],["l     p"],["y     i"],[" o   z "],["  p n  "],["   e   "]

หรือ

"f     r\nu     e\nl     p\nl     p\ny     i\n o   z \n  p n  \n   e   "

เป็นเอาต์พุตที่ยอมรับได้สำหรับกรณีทดสอบ 1

ช่องโหว่มาตรฐานเป็นสิ่งต้องห้ามและรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ คำตอบที่ไม่มีคำอธิบายใด ๆ จะไม่สามารถชนะได้

คำอธิบาย

ในการสร้างซิปคุณต้องลบช่องว่างหรืออักขระบรรทัดใหม่ออกจากสตริงก่อน จากนั้นพับครึ่งให้เป็นเช่นนี้ (ดูกรณีทดสอบ 1 อีก)

abcde fgh ij klmnopqr กลายเป็นสองสายด้านล่างสังเกตว่าในช่วงครึ่งหลังจะกลับรายการ

abcdefghi และ rqponmlkj

จากนั้นเริ่มต้นที่จุดเริ่มต้นของแต่ละสตริงเราวางอักขระที่ทำดัชนีไว้เหมือนกันจากแต่ละสตริงย่อยลงในหนึ่งบรรทัดโดยมีระยะห่างที่กำหนดดังนี้:

[0] a     r -- (a-3) five spaces
[1]  b   q  -- (a-2) three spaces
[2]   c p   -- (a-1) one space
[3]    d    -- (a)
[4]    o
[5]    e
[6]    n
etc...

นั่นทำให้ฐานสำหรับซิปของเรา ตอนนี้จำนวนเต็มและab

aเป็นที่ตั้งของรหัสไปรษณีย์ของเรา เพื่อกำหนดตำแหน่งของซิปเราใช้ดัชนีของบรรทัดเอาท์พุทของเราเป็นจุดเพื่อปิดซิปของเรา เช่นวงเล็บสี่เหลี่ยมจัตุรัส[3]ในตัวอย่างด้านบนของฉันคือตำแหน่งที่ zip

ก่อนที่ซิปของเราจะปิดลงซิปด้านบนจะต้องอยู่ที่ช่องว่างห้าช่องจนกว่าจะถึงจุดa-2ที่มันปิดไปถึง 3 ช่องว่างและa-1เมื่อถึง 1 ช่อง เพื่อให้ชัดเจนในตัวอย่างข้างต้นa = 3(0-indexed)


bคือจำนวนรูในซิปของฉัน ในการสร้างรูใน zip เราแบ่งสตริงออกอีกครั้งด้วยระยะห่างบางส่วน

เริ่มต้นด้วยดัชนีของหลุมตัวอย่างในขณะที่hเราเพิ่มระยะห่างของh-1หนึ่งช่องว่างhเป็น 3 ช่องว่างและh+1กลับไปที่ช่องว่างหนึ่งออกจากh-2และh+2มีเพียงหนึ่งอักขระต่อบรรทัดตามที่พวกเขาถูกนับเป็นส่วนหนึ่งของหลุม

หลังจากซิปและระหว่างแต่ละหลุมจะต้องมีช่องว่างของตัวละครหนึ่งตัวเพื่อให้ซิปของเราเชื่อมต่อกันอย่างสมบูรณ์ระหว่างรู

คุณต้องเลือกดัชนีของรู แต่พวกมันทั้งหมดต้องอยู่ในส่วน 'ปิด' ของซิป

Again using 'abcdefghi' and 'rqponmlkj'

[0] a     r -- (open)
[1]  b   q  -- (closing)
[2]   c p   -- (closing)
[3]    d    -- zip 
[4]    o    -- gap
[5]    e    -- start of hole  (h-2)
[6]   n f   -- one space      (h-1)
[7]  m   g  -- three spaces   (hole h)
[8]   l h   -- one space      (h+1)
[9]    k    -- end of hole    (h+2)
[10]   i    -- gap
[11]   j

ฉันหวังว่าทุกอย่างเข้าท่าถ้าไม่ถาม ในความคาดหมายของคำถามคุณอาจสังเกตเห็นว่าตัวละครpในตัวอย่างที่สองของฉันมีอยู่ในสตริงย่อยที่สองอย่างไรก็ตามปรากฏที่จุดเริ่มต้นของบรรทัดนี้มีจุดประสงค์คุณต้องทำตามลำดับ 1-2-1-2- 1-2 โดยรับตัวละครจากแต่ละครึ่งโดยไม่คำนึงถึงตำแหน่งในเอาต์พุต

กรณีทดสอบ

"fully open zipper", 7, 0                     | "fully closed zipper", 0, 0
fullyope reppizn                              | fullyclos reppizde
                                              |
f     r   *Note: i particularly like this     | f
u     e     example as it shows the reversing | r
l     p     of the second half of the string  | u
l     p     causes the words to wrap from top | e
y     i     left to the  bottom and back up   | l
 o   z      the right side                    | p
  p n                                         | l
   e                                          | p
                                              | y
                                              | i
                                              | c
                                              | z
                                              | l
                                              | d
                                              | o
                                              | e
                                              | s
  • คอลัมน์ 1: "ซิปแบบยาวแตกที่ไม่ควรมีอยู่บนเสื้อฮู้ดตัวไหน", 24, 0
  • คอลัมน์ 2: "Lorem ipsum dolor sit amet, consipetur aditiscing elit. Mauris faucibus molestie mi. Aliquam nec fringilla ipsum", 15, 5

:

s     e          |          L     m
t     i          |          o     u
u     d          |          r     s
p     o          |          e     p
i     o          |          m     i
d     h          |          i     a
l     t          |          p     l
y     n          |          s     l
l     e          |          u     i
o     c          |          m     g
n     e          |          d     n
g     d          |          o     i
u     y          |          l     r
n     n          |           o   f
b     a          |            r c
r     n          |             s
o     o          |             e
k     t          |             i
e     s          |            n t
n     i          |           m   a
z     x          |            a m
i     e          |             u
 p   t           |             e
  p n            |             q
   e             |             t
   d             |             i
   r             |             ,
   l             |            l c
   t             |           A   o
   u             |            . n
   h             |             i
   o             |             s
   a             |             m
   h             |            e e
   t             |           c   i
   s             |            t t
                 |             e
                 |             s
                 |             t
                 |             s
                 |             u
                 |             l
                 |             r
                 |             o
                 |             a
                 |             m
                 |             d
                 |             s
                 |             i
                 |             u
                 |             p
                 |            b i
                 |           i   s
                 |            c c
                 |             u
                 |             i
                 |             a
                 |             n
                 |             f
                 |             g
                 |             s
                 |             e
                 |             i
                 |            l r
                 |           i   u
                 |            t a
                 |             .
                 |             M

แก้ไข: เพิ่มกรณีทดสอบ

"abcde fgh ij klmnopqr","3","1"

a     r
 b   q
  c p
   d
   o
   e
  n f
 m   g
  l h
   k
   i
   j

1
ฉันคิดว่าฉันชอบความท้าทายนี้ แต่ฉันได้อ่านมาแล้วสามครั้งและฉันก็ยังไม่ได้ 100% กับสิ่งที่ฉันควรจะทำ ฉันคิดว่ามันจะคุ้มค่าที่จะสร้างกฎเกณฑ์และรายละเอียดที่สั้นกว่าและชัดเจนกว่าย่อหน้าเต็ม
TheLethalCoder

ฉันสามารถไปได้: P
MysticVagabond

ชัดเจนขึ้นไหม @TheLethalCoder
MysticVagabond

สวัสดีฉันลบแท็กที่พิมพ์ได้-asciiเนื่องจากใช้สำหรับความท้าทายที่ จำกัด แหล่งที่มาแทนที่จะเป็นเค้าโครงเอาท์พุท
AdmBorkBork

ฉันเห็นว่าขอบคุณ @AdmBorkBork ฉันแก้ไขอีกครั้งเพื่อเรียงตามตัวอักษรคำอธิบายเพื่อหวังว่าจะทำให้ชัดเจนขึ้นเพื่อดูว่าตัวละครมาจากไหน
MysticVagabond

คำตอบ:


1

PHP 7.1, 421 412 218 195 192 191 195 ไบต์

for([,$s,$a,$b]=$argv;$i-$k<strlen($s=strtr($s,[" "=>""]));$p=0)for($t=++$y>$a-2?$y>=$a?$y>$a?$b-->0?_4_4_4_31_23_31:_4:_31:_23:_15;$c=$t[$p++];)echo$c<_?str_pad("",$c).$s[++$f&1?$i++:$k-=1]:"
";

ทำงานด้วย-nrหรือลองออนไลน์
พิมพ์การนำหน้า แต่ไม่มีการขึ้นบรรทัดใหม่และเว้นวรรคหนึ่งชั้นนำในแต่ละบรรทัด


TIO ให้ข้อผิดพลาดนี้แก่ฉัน:<br /> <b>Parse error</b>: syntax error, unexpected ',', expecting ']' in <b>[...][...]</b> on line <b>7</b><br />
MysticVagabond

@Xynos ตั้งค่าเวอร์ชัน PHP เป็น 7.1
Titus

คำตอบของคุณวางช่องที่อยู่ใกล้กับซิปมากเกินไปไม่ควรเพิ่มเอาต์พุตที่ถูกต้องสำหรับอินพุตของคุณเป็นกรณีทดสอบ :)
MysticVagabond

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