Dây kéo lớn hơn, tốt hơn (bị hỏng)


9

(Lấy cảm hứng khá nhiều từ thử thách này )

Trong thử thách ban đầu, bạn đã tạo ra một dây kéo ngang, tuy nhiên, nhìn xuống áo hoodie của tôi, dây kéo của tôi thẳng đứng hơn nhiều (và một chút bị hỏng): P

Đầu vào

Bạn sẽ được cung cấp một chuỗi ( s) và một cặp số nguyên ( ab) ở bất kỳ định dạng nào. Ở đâu:

a < (length-of-s / 2)

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

Đầu ra và chấm điểm

Chương trình của bạn có thể là một chương trình đầy đủ hoặc một hàm tạo ra một chuỗi với định dạng chính xác hoặc một mảng (một mục trên mỗi dòng) bạn chọn. Không gian hàng đầu và dấu và dòng mới là tùy chọn miễn là các ký tự của đầu ra tất cả xếp hàng. ví dụ.

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

hoặc là

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

là đầu ra chấp nhận được cho trường hợp thử nghiệm 1

Các lỗ hổng tiêu chuẩn bị cấm và mã ngắn nhất tính bằng byte sẽ thắng. Bất kỳ câu trả lời mà không có lời giải thích sẽ không thể giành chiến thắng.

Giải trình

Để tạo khóa kéo, trước tiên bạn phải xóa mọi ký tự khoảng trắng hoặc dòng mới khỏi chuỗi. Và sau đó gấp nó lại một nửa như vậy (xem trường hợp thử nghiệm 1 để biết thêm)

abcde fgh ij klmnopqr trở thành hai chuỗi bên dưới, chú ý nửa sau được đảo ngược.

abcdefghirqponmlkj

Sau đó, bắt đầu từ đầu mỗi chuỗi, chúng ta đặt cùng một ký tự được lập chỉ mục từ mỗi chuỗi con vào một dòng với khoảng cách được xác định như sau:

[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...

Điều đó làm cho cơ sở cho dây kéo của chúng tôi. Bây giờ các số nguyên ab.

alà vị trí của zip của chúng tôi. Để xác định vị trí của khóa kéo, chúng tôi sử dụng chỉ mục của các dòng đầu ra làm điểm để đóng zip. ví dụ: dấu ngoặc vuông [3]trong ví dụ trên của tôi là nơi chứa zip.

Trước khi khóa kéo của chúng tôi đến gần, khóa kéo ở trên phải duy trì ở một khoảng cách năm không gian cho đến khi nó đạt đến a-2nơi nó đóng đến 3 không gian và a-1nơi nó đóng lại thành 1 không gian. Để rõ ràng, trong ví dụ trên a = 3(0-index)


blà số lỗ trong dây kéo của tôi. Để tạo một lỗ trong zip, chúng tôi chia chuỗi ra một lần nữa với một số khoảng cách.

Bắt đầu với chỉ số của lỗ ví dụ khi hchúng ta tăng khoảng cách h-1đến một khoảng trắng , hđến 3 khoảng trắng và h+1quay lại một khoảng trắng , để lại h-2h+2chỉ có một ký tự trên mỗi dòng khi chúng được tính là một phần của lỗ.

Sau zip và giữa mỗi lỗ phải có một khoảng cách của một ký tự để zip của chúng ta trông hoàn toàn được kết nối giữa các lỗ.

Bạn có thể chọn các chỉ số của các lỗ, nhưng tất cả chúng phải có mặt trong phần 'đóng' của khóa kéo.

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

Tôi hy vọng rằng tất cả có ý nghĩa, nếu không hỏi đi. Dự đoán các câu hỏi, bạn có thể nhận thấy rằng ký tự ptrong ví dụ thứ hai của tôi có trong chuỗi con thứ hai, tuy nhiên, xuất hiện ở đầu dòng của nó, điều này được dự định, bạn phải tuân theo trình tự 1-2-1-2- 1-2, lấy một ký tự từ mỗi nửa lần lượt bất kể vị trí của nó trong đầu ra.

Các trường hợp thử nghiệm

"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
  • Cột 1: "dây kéo dài không bị ngắt một cách ngu ngốc không nên tồn tại trên bất kỳ chiếc áo hoodie đàng hoàng nào", 24, 0
  • Cột 2: "Lorem ipsum dolor sit amet, consectetur adipiscing 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

EDIT: Đã thêm trường hợp kiểm tra

"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
Tôi nghĩ rằng tôi thích thử thách này nhưng tôi đã đọc nó ba lần và tôi vẫn không hoàn thành 100% chính xác những gì tôi phải làm. Tôi nghĩ rằng nó sẽ có giá trị làm cho các quy tắc và thông số kỹ thuật ngắn hơn và rõ ràng hơn là các đoạn đầy đủ.
TheLethalCoder

Tôi có thể cho nó đi: P
MysticVagabond

còn rõ ràng hơn không? @TheLethalCoder
MysticVagabond

Xin chào, tôi đã xóa thẻ có thể in-ascii , vì nó được sử dụng cho các thách thức nguồn bị hạn chế thay vì bố trí đầu ra.
admBorkBork

Tôi thấy rằng cảm ơn @AdmBorkBork tôi đã chỉnh sửa một lần nữa để sắp xếp thứ tự giải thích để hy vọng làm cho nó rõ ràng hơn để xem các nhân vật đến từ đâu.
MysticVagabond

Câu trả lời:


1

PHP 7.1, 421 412 218 195 192 191 195 byte

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]:"
";

Chạy với -nrhoặc thử trực tuyến .
In một hàng đầu, nhưng không có dòng mới và một không gian hàng đầu trong mỗi dòng.


TIO cho tôi lỗi này:<br /> <b>Parse error</b>: syntax error, unexpected ',', expecting ']' in <b>[...][...]</b> on line <b>7</b><br />
MysticVagabond

@Xynos Đặt phiên bản PHP thành 7.1
Titus

câu trả lời của bạn đặt lỗ quá gần với zip, không thêm đầu ra chính xác cho đầu vào của bạn làm trường hợp thử nghiệm :)
MysticVagabond

@Xynos khoảng cách được thêm vào
Titus
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.