Daha Büyük, Daha İyi (Kırık) Fermuar


9

( Bu meydan okumadan oldukça ilham aldı )

Orijinal meydan okumada, yatay bir fermuar yapacaktınız, ancak, kapüşonuma bakarken, fermuarım çok daha dikey (ve biraz kırık): P

Giriş

Herhangi bir biçimde size tek bir dize ( s) ve bir çift tamsayı ( ave b) verilir. Nerede:

a < (length-of-s / 2)

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

Çıktı ve Puanlama

Programınız tam bir program veya doğru biçimlendirmeye sahip tek bir dize veya seçtiğiniz bir dizi (satır başına bir öğe) üreten bir işlev olabilir. Çıktı karakterleri aynı hizaya geldiği sürece, öndeki ve sondaki boşluklar ve satırsonları isteğe bağlıdır. Örneğin.

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

veya

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

vaka 1 için kabul edilebilir çıktılar

Standart Loopholes yasaktır ve bayt cinsinden en kısa kod kazanır. Açıklamasız herhangi bir cevap kazanamaz.

açıklama

Bir fermuar yapmak için önce dizeden boşluk veya yeni satır karakterlerini kaldırmanız gerekir. Ve sonra ikiye katlayın (daha fazla bilgi için test örneği 1'e bakın)

abcde fgh ij klmnopqr aşağıdaki iki dize olur, ikinci yarının tersine döndüğüne dikkat edin.

abcdefghi ve rqponmlkj

Daha sonra, her dizenin başlangıcından başlayarak, her bir alt dizeden aynı dizine alınmış karakteri bir satır üzerine aşağıdaki gibi belirlenen aralıklarla yerleştiririz:

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

Bu fermuarımızın temelini oluşturur. Şimdi tamsayılar ave b.

abizim zip konumudur. Fermuarın nerede olduğunu belirlemek için fermuarımızı kapatma noktası olarak çıkış hatlarımızın dizinini kullanıyoruz. Örneğin, [3]yukarıdaki örneğimde köşeli parantez fermuarın bulunduğu yerdir.

Fermuarımız kapanmadan önce, yukarıdaki fermuarın a-23 boşluğa ve a-11 boşluğa kapandığı yere ulaşana kadar beş boşlukta kalması gerekir . Sadece açık olmak gerekirse, yukarıdaki örnekte a = 3(0 dizinli)


bfermuarımdaki delik sayısı. Fermuarda bir delik oluşturmak için, dizeyi bir miktar boşlukla tekrar ayırırız.

Olarak, örneğin, deliğin indeksi ile başlayarak hbiz arasındaki mesafenin artırılması h-1, bir boşluğa h3 boşluklar ve h+1geri bir boşluk bırakarak, h-2ve h+2bunlar deliğin bir parçası olarak kabul edilir olarak hat başına sadece tek bir karakter.

Fermuardan sonra ve deliklerin her biri arasında bir karakter boşluğu olmalıdır, böylece fermuarımız delikler arasında tamamen bağlı görünür.

Deliklerin indekslerini seçersiniz, ancak hepsinin fermuarın 'kapalı' bölümünde bulunması gerekir.

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

Ben sormak değilse, her şeyin mantıklı olmasını umuyorum. Soruların beklentisiyle p, ikinci örneğimdeki karakterin ikinci alt dize içinde bulunduğunu fark edebilirsiniz , ancak satırının başında görünür, bu amaçlanmıştır, 1-2-1-2- dizisini takip etmelisiniz 1-2, çıktıdaki konumuna bakılmaksızın sırayla her yarıdan bir karakter alır.

Test Durumları

"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
  • Sütun 1: "Herhangi bir iyi kapüşonda olmaması gereken aptalca uzun kesintisiz fermuar", 24, 0
  • Sütun 2: "Lorem ipsum dolor sit amet, 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: Eklenen Test Durumları

"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
Sanırım bu meydan okumayı seviyorum ama üç kez okudum ve tam olarak ne yapmam gerektiği konusunda% 100 değilim. Kuralların ve teknik özelliklerin tam paragraflardan ziyade daha kısa ve net hale getirmeye değer olacağını düşünüyorum.
TheLethalCoder

Ben bir
şans

daha net? @TheLethalCoder
MysticVagabond

Merhaba, çıktı düzeninden ziyade kısıtlı kaynak zorlukları için kullanıldığından yazdırılabilir-ascii etiketini kaldırdım .
AdmBorkBork

@AdmBorkBork sayesinde, karakterlerin nereden geldiğini görmeyi umuyoruz.
MysticVagabond

Yanıtlar:


1

PHP 7.1, 42141221819519219191919 bayt

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

Birlikte çalışın-nr veya çevrimiçi deneyin .
Her satırda satır aralığı, ancak satır sonu satır sonu ve satır başı alan yazdırmaz.


TIO bana bu hatayı veriyor:<br /> <b>Parse error</b>: syntax error, unexpected ',', expecting ']' in <b>[...][...]</b> on line <b>7</b><br />
MysticVagabond

@Xynos PHP sürümünü 7.1 olarak ayarlayın
Titus

cevabınız deliği fermuarın çok yakınına yerleştiriyor, bir test durumu olarak girişiniz için doğru çıktıyı ekleyeceğim :)
MysticVagabond

@Xynos boşlukları eklendi
Titus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.