より大きく、より良い(壊れた)ジッパー


9

この課題にかなりひらめきを与えた)

最初の課題では、水平ジッパーを作ることでしたが、私のパーカーを見下ろすと、私のジッパーははるかに垂直になります(そして少し壊れています):P

入力

単一の文字列(s)と、任意の形式の整数のペア(aおよびb)が与えられます。どこ:

a < (length-of-s / 2)

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

出力とスコアリング

プログラムは、完全なプログラムか、選択した正しい書式または配列(1行に1項目)の単一の文字列を生成する関数です。出力の文字がすべて揃っている限り、先頭と末尾のスペースと改行はオプションです。例えば。

["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 以下の2つの文字列になります。後半が逆になっていることに注意してください。

abcdefghi そして rqponmlkj

次に、各文字列の先頭から開始して、次のように決定された間隔で、各部分文字列からの同じインデックス付き文字を1行に配置します。

[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

azipの場所です。ジッパーの場所を特定するために、出力ラインのインデックスを使用して、ジッパーを閉じます。たとえば、[3]上記の例で角かっこはジップがある場所です。

ジッパーが閉じる前に、上記のジッパーはa-2、3つのスペースa-1に閉じて1 つのスペースに閉じるまで、5つのスペースのギャップに留まる必要があります。明確にするために、上の例ではa = 3(0インデックス)


b私のジッパーの穴の数です。ジッパーに穴を開けるために、文字列を少し間隔を空けて再度分割します。

例えば、穴のインデックスから始まるh、我々はの間隔を広げるh-1、1つの空間にh3つのスペースへとh+1戻って1つのスペースに残し、h-2そしてh+2、彼らは穴の一部としてカウントされているように、ラインごとに1つの文字で。

ジップの後、各穴の間に1文字のギャップがなければなりません。これにより、ジップが穴の間で完全に接続されているように見えます。

穴のインデックスを選択できますが、それらはすべてジッパーの「閉じた」セクション内に存在する必要があります。

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、私の2番目の例の文字が2番目の部分文字列に存在することに気付く場合がありますが、その行の先頭に表示されます。これは意図的であり、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、consectetur adipiscing ellit。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
私はこのチャレンジが好きだと思いますが、3回読んだのですが、自分がやるべきことを完全に理解しているわけではありません。ルールや仕様を段落全体ではなく、より短く、より明確にすることは価値があると思います。
TheLethalCoder 2017

私はそれを
試してみる

より明確ですか?@TheLethalCoder
MysticVagabond

こんにちは、私はprintable-asciiタグを削除しました。これは、出力レイアウトではなくソース制限の課題に使用されるためです。
AdmBorkBork 2017

@AdmBorkBorkのおかげで、説明をアルファベット順に編集して、キャラクターがどこから来ているのかわかりやすく説明できるようになりました。
MysticVagabond 2017

回答:


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、オンラインで試してください
先頭を印刷しますが、末尾の改行は印刷せず、各行に先頭のスペースを1つ印刷します。


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のギャップが追加されました
Titus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.