Ritsleting Lebih Besar, Lebih Baik (Rusak)

9

(Terinspirasi cukup banyak oleh tantangan ini )

Dalam tantangan asli Anda membuat ritsleting horizontal, namun, melihat ke bawah hoodie saya, ritsleting saya jauh lebih vertikal (dan sedikit rusak): P

Memasukkan

Anda akan diberi string tunggal ( s), dan sepasang bilangan bulat ( adan b) dalam format apa pun. Dimana:

a < (length-of-s / 2)

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

Output dan Penilaian

Program Anda dapat berupa program lengkap atau fungsi yang menghasilkan string tunggal dengan pemformatan atau array yang benar (satu item per baris) yang Anda pilih. Leading dan trailing spasi dan baris baru adalah opsional selama karakter dari output semuanya berbaris. misalnya.

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

atau

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

adalah keluaran yang dapat diterima untuk test case 1

Celah Standar dilarang dan kode terpendek dalam byte menang. Jawaban apa pun tanpa penjelasan tidak akan dapat menang.

Penjelasan

Untuk membuat ritsleting, Anda harus terlebih dahulu menghapus spasi putih atau karakter baris baru dari string. Dan kemudian lipat menjadi dua seperti itu (lihat test case 1 untuk informasi lebih lanjut)

abcde fgh ij klmnopqr menjadi dua string di bawah ini, perhatikan paruh kedua dibalik.

abcdefghi dan rqponmlkj

Kemudian mulai dari awal setiap string kita menempatkan karakter yang diindeks sama dari setiap substring ke satu baris dengan spasi ditentukan sebagai berikut:

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

Itu membuat dasar untuk ritsleting kami. Sekarang bilangan bulat adan b.

aadalah lokasi pos kami. Untuk menentukan di mana ritsleting berada, kami menggunakan indeks dari garis keluaran kami sebagai titik untuk menutup ritsleting kami. misal kotak yang dikurung [3]dalam contoh saya di atas adalah tempat zip.

Sebelum ritsleting kami mencapai penutupan, ritsleting di atas harus tetap berada pada celah lima ruang hingga mencapai di a-2mana ia menutup hingga 3 ruang dan di a-1mana ia menutup ke 1 ruang. Supaya jelas, dalam contoh di atas a = 3(0-diindeks)


badalah jumlah lubang di ritsleting saya. Untuk membuat lubang di zip, kami membagi string lagi dengan spasi.

Dimulai dengan indeks lubang contoh saat hkami meningkatkan jarak h-1ke satu ruang, hke 3 ruang dan h+1kembali ke satu ruang, meninggalkan h-2dan h+2dengan hanya satu karakter per baris karena mereka dihitung sebagai bagian dari lubang.

Setelah zip dan di antara masing-masing lubang harus ada celah satu karakter sehingga zip kami terlihat sepenuhnya terhubung di antara lubang.

Anda bisa memilih indeks lubang, tetapi semuanya harus ada di bagian 'tertutup' ritsleting.

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

Saya berharap semuanya masuk akal, jika tidak ditanyakan. Untuk mengantisipasi pertanyaan, Anda mungkin memperhatikan bahwa karakter pdalam contoh kedua saya ada di substring kedua, namun, muncul di awal barisnya, ini dimaksudkan, Anda harus mengikuti urutan 1-2-1-2- 1-2, mengambil karakter dari setiap setengah pada gilirannya terlepas dari posisinya di output.

Uji Kasus

"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
  • Kolom 1: "ritsleting panjang tak terputus yang seharusnya tidak ada pada hoodie yang layak", 24, 0
  • Kolom 2: "Lorem ipsum dolor sit amet, consectetur adipiscing elite. 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: Menambahkan Kasus Uji

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

a     r
 b   q
  c p
   d
   o
   e
  n f
 m   g
  l h
   k
   i
   j
MysticVagabond
sumber
1
Saya pikir saya suka tantangan ini tetapi saya sudah membacanya tiga kali dan saya masih belum 100% pada apa yang seharusnya saya lakukan. Saya pikir akan lebih baik jika membuat aturan dan spesifikasi lebih pendek dan jelas daripada paragraf penuh.
TheLethalCoder
Saya bisa mencobanya: P
MysticVagabond
ada yang lebih jelas? @TheLethalCoder
MysticVagabond
Hai, saya menghapus tag printable-ascii , seperti yang digunakan untuk tantangan sumber terbatas daripada tata letak output.
AdmBorkBork
Saya melihat bahwa terima kasih @ AdBBorkBork saya diedit lagi untuk membuat alfabet penjelasan, semoga lebih jelas untuk melihat dari mana karakter berasal.
MysticVagabond

Jawaban:

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

Jalankan dengan -nratau coba online .
Mencetak baris baru yang memimpin, tetapi tidak ada yang tertinggal dan satu ruang terdepan di setiap baris.

Titus
sumber
TIO memberi saya kesalahan ini:<br /> <b>Parse error</b>: syntax error, unexpected ',', expecting ']' in <b>[...][...]</b> on line <b>7</b><br />
MysticVagabond
@Xynos Atur versi PHP ke 7.1
Titus
jawaban Anda menempatkan lubang terlalu dekat dengan zip, sakit tambahkan output yang benar untuk input Anda sebagai kasus uji :)
MysticVagabond
@Xynos gaps menambahkan
Titus