ジッパー付き段落


21

この挑戦に触発された)

2つの入力文字列(一方が他方より正確に1文字長い)が与えられた場合、文字列を、半分だけジッパーで留められたジッパーの2つの半分であるかのようにASCIIアートに配置します。長い単語はジッパーの下部を形成し、結合されたジッパー部分の最初と最後の文字です。その段落は理解しにくいので、いくつかの例を見てください。

zippered
paragraph

 z
   i
     p
       p
        gerraepdh
      a
    r
  a
p

注方法paragraph(長い単語)が底ファスナーを形成し、そしてg r a p h部分が封入e r e dの部分をzippered、そしてz i p pそしてp a r a部分が互いにずれています。

入力

  • 任意の便利な形式の 2つのASCII文字列。1つは同じ長さで、もう1つはちょうど1文字長いことが保証されています。
  • どちらの文字列にも空白は含まれませんが、その他の印刷可能なASCII値が含まれる場合があります。
  • どちらの順序で入力してもかまいません。提出物に入力順序を明記してください。

出力

上記のように、任意の便利な形式での、ジッパー付き単語のASCIIアート表現の結果。

ルール

  • 文字自体が正しく並んでいる限り、先頭または末尾の改行または空白はすべてオプションです。
  • 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。
  • 可能であれば、他の人があなたのコードを試すことができるように、オンラインテスト環境へのリンクを含めてください!
  • 標準的な抜け穴は禁止されています。
  • これはので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。

ppcg
tests

 p
   p
    sctgs
  e
t

string
strings

 s
   t
     r
      iinnggs
    r
  t
s

入力に空白が含まれていないと仮定できますか?
DJMcMayhem

@DJMcMayhemええ、それは公正な仮定です。
AdmBorkBork

1
@Titus one guaranteed to be even in length and the other exactly one character longer. 短い文字列は常に偶数です
Baldrickk

回答:


7

Japt31 28バイト

N®¬£ç iXYm½*Ul
uUo mw
y c ·y

オンラインでテストしてください!最初に短い文字列を取得します。

説明

N®¬£ç iXYm½*Ul    First line: Set U to the result.
N®                Map each item (there's exactly 2 of them) in the input to
  ¬                 the item split into chars,
   £                with each item X and index Y mapped to
    ç                 the first input filled with spaces,
      iX              with X inserted at index
        Ym½*Ul          min(Y, 0.5 * U.length).
                  At the end each input is an array like
                  ["p    ", " p   ", "  c  ", "  g  "]
                  ["t    ", " e   ", "  s  ", "  t  ", "  s  "]

uUo mw    Second line: Set V to the result (though that's not important).
 Uo       Pop the last item (the array representing the second string) from U.
    m     Map each item by
     w      reversing.
u         Push the result to the beginning of U.
          At the end we have e.g.
          ["    t", "   e ", "  s  ", "  t  ", "  s  "]
          ["p    ", " p   ", "  c  ", "  g  "]

y c ·y    Last line: Output the result of this line.
y         Transpose: map [[A,B,C,...],[a,b,c,...]] to [[A,a],[B,b],[C,c],...].
  c       Flatten into one array. [A,a,B,b,C,c,...]
    ·     Join on newlines. Now we have the output transposed.
     y    Transpose rows with columns.

6

33 31バイト

→F²«FL諧θκ→¿‹κ÷Lθ²¿ι↑↓»J⁰LθAηθ

オンラインでお試しください!リンクは、コードの詳細バージョンです。最初に短い文字列を取得します。編集:中間点の検出を調整して2バイトを保存しました。説明:

→F²«

各文字列を順番にループします。

FLθ«

文字列の各文字を順番にループします。

§θκ→

文字を印刷し、余分な正方形を右に移動します。

¿‹κ÷Lθ²¿ι↑↓»

文字列の前半では、必要に応じてカーソルを上下に移動します。

J⁰LθAηθ

最初の文字列を印刷した後、2番目の文字列の開始点にジャンプし、最初の文字列を2番目の文字列に置き換えて、2番目のループで印刷されるようにします。(コードは両方のループで実行されますが、2回目は何もしません。)



4

ゼリー 27  26 バイト

Erik the Outgolferのおかげで-1バイト(if、、および渡されたelse句¡を置き換えるには、repeat、を使用してください)?¹

JCḂ¡€ṚH
żµL⁶ẋ;ЀFṙ"ÇZṙÇṀ$Y

質問で許可されているように、先頭の空白で結果を印刷する完全なプログラム(または文字のリストを返すダイアディックリンク)。

オンラインでお試しください!

どうやって?

JCḂ¡€ṚH - Link 1, get rotations: list p        e.g.: ["a1","b2","c3","d4","e5","f6","g"]
J       - range of length of p                       [ 1, 2, 3, 4, 5, 6, 7]
    €   - for €ach:
   ¡    -   repeat link:
  Ḃ     - ...# of times: modulo 2                      1  0  1  0  1  0  1
 C      - ...link: complement (1-x)                    0  2 -2  4 -4  6 -6
     Ṛ  - reverse                                    [-6, 6,-4, 4,-2, 2, 0]
      H - halve                                      [-3, 3,-2, 2,-1, 1, 0]

żµL⁶ẋ;ЀFṙ"ÇZṙÇṀ$Y - Main link: longer (odd length); shorter (even length)
                   -                           e.g.: "abcdefg", "123456"
ż                  - zip them together               ["a1","b2","c3","d4","e5","f6","g"]
 µ                 - monadic chain separation, call that p
  L                - length of p                     7
   ⁶               - literal space character         ' '
    ẋ              - repeat                          "       "
        F          - flatten p                       "a1b2c3d4e5f"
      Ѐ           - map with:
     ;             -   concatenation                 ["       a","       1","       b","       2","       c","       3","       d","       4","       e","       5","       f","       6","       g"]
           Ç       - call last link (1) as a monad with argument p
          "        - zip with (no action on left by trailing values of right):
         ṙ         -   rotate left by                ["  a     ","    1   "," b      ","     2  ","c       ","      3 ","       d","       4","       e","       5","       f","       6","       g"]
            Z      - transpose                       ["    c        ","  b          ","a            ","             "," 1           ","   2         ","     3       ","      d4e5f6g"]
                $  - last two links as a monad:
              Ç    -   call last link (1) as a monad with argument p
               Ṁ   -   maximum                       3
             ṙ     - rotate left by                  ["             "," 1           ","   2         ","     3       ","      d4e5f6g","    c        ","  b          ","a            "]
                 Y - join with newlines            '''             \n
                                                       1           \n
                                                         2         \n
                                                           3       \n
                                                            d4e5f6g\n
                                                          c        \n
                                                        b          \n
                                                      a            '''
                   - as full program: implicit print



3

V47 38 30 27 26 25バイト

最後に、現在のゼリーの答えを打ちます\ o /

長い単語を先頭に入力します

説明が来る、ゴルフにもっと多くがあるとは思わないでください。

òGxplòxãòd|>HÏpd|>GGÏphl

オンラインでお試しください!

説明

ò     ò      ' <M-r>ecursively
             |abc
             def
 Gx          ' (G)oto the last line and (x) the first character
             abc
             |ef
            ' <C-O> Go back to the previous location
             |abc
             ef
    p        ' (p)aste the character cut
             a|dbc
             ef
     l       ' move one character right
             ad|bc
             ef

x                  ' (x) the last extraneous character from the previous loop
 ã                 ' <M-c>enter the cursor
  ò                ' <M-r>ecursively
   d|              ' (d)elete to the first co(|)umn
     >H            ' (>) Indent every line from here to (H)ome (first line)
                   ' this leaves the cursor on the first line
       Ïp          ' <M-O>n a newline above this (the first) (p)aste the deleted section
                   ' this leaves the cursor on the last character
         d|        ' (d)elete to the first co(|)umn
           >G      ' (>) Indent every line from here to the end (G)
                   ' unfortunately the cursor stays on the first line
             G     ' (G)oto the last line
              Ïp   ' <M-O>n a newline above this (the last) (p)aste the deleted section
                hl ' move left and then right (break the loop at the end)

2

V、79バイト

ãl}dÍ./ &
XòYf D"0Pr -Y;D"0pr +òGï"1pÓ./&ò
}dGÓ/&ò
{jpògJòÓó
|DÇ./d
MÙ"-pBr 

オンラインでお試しください!

以下は、多くの皮肉と引用符で読む必要があります

ここに私の中の答えだゴルフ言語です良いショートへの回答文字列ベースとASCII技術の課題は

なぜ自分でこれをし続けるのですか?

Hexdump:

00000000: e36c 167d 64cd 2e2f 2026 0a58 f259 6620  .l.}d../ &.X.Yf 
00000010: 4422 3050 7220 2d59 3b44 2230 7072 202b  D"0Pr -Y;D"0pr +
00000020: f247 ef22 3170 d32e 2f26 f20a 0f16 7d64  .G."1p../&....}d
00000030: 47d3 2f26 f20a 7b6a 70f2 674a f2d3 f30a  G./&..{jp.gJ....
00000040: 7c44 c72e 2f64 0a4d d922 2d70 4272 20    |D../d.M."-pBr 

Vには「列を含む行を転置」コマンドがありますか?「そうでなければ、あなたはそれに投資したいかもしれません
...-ETHproductions

2

ゼリー、28のバイト

HĊ©«Rµ®Ḥ_,Ṗ
ZLÇṬ€a"¥"o⁶ZẎz⁶Y

オンラインでお試しください!

ウーゼリーは、実際には 挑戦に参加してい!\ o /


主に、他のすべての言語にも問題があるためです。そういえば、誰かがVと話をしたいかもしれない
...-ETHproductions

ニース、私は27を管理しました-しかし、おそらくあなたは先頭/末尾の空白の許容量も乱用できますか?
ジョナサンアラン

@JonathanAllan悲しいことに、それは不可能だと思う。を削除すると、末尾のスペースは追加されず、末尾のスペースが追加され1ます。また、スペースに関係するものを省略すると、文字の並びが削除されます。一般に、このアルゴリズムはインデックスを使用して、文字が列の特定のインデックスに到達し、残りがスペースで満たされるようにするため、これ以上ゴルフはできないと思います。少なくとも、JellyがCJamに負けていないことは嬉しいです。;)
エリック・ザ・アウトゴルファー

:| ゼリーは木炭よりgolfierある
ASCIIのみ

2

05AB1E26 23バイト

øS2ä`JIθ«¸«vyNúr})2äR˜»

オンラインでお試しください!

説明

入力例= ppcg, tests

ø                           # zip the input strings
                            # STACK: ['tp', 'ep', 'sc', 'tg']
 S                          # split to a list of characters
                            # STACK: ['t', 'p', 'e', 'p', 's', 'c', 't', 'g'
  2ä                        # divide the list into 2 parts
    `                       # push them as separate to stack
                            # STACK: ['t', 'p', 'e', 'p'], ['s', 'c', 't', 'g']
     J                      # join the second part to a single string
      Iθ«                   # append the tail of the second input
         ¸«                 # concatenate the 2 lists
                            # STACK: ['t', 'p', 'e', 'p', 'sctgs']
           v                # for each y,N (element, index) in the list
            yNú             # prepend N spaces to y
               r            # reverse the stack
                })          # end loop and wrap the stack in a list
                            # STACK: ['    sctgs', '  e', 't', ' p', '   p']
                  2ä        # split the list into 2 parts
                    R       # reverse the list
                            # STACK: [[' p', '   p'], ['    sctgs', '  e', 't']]
                     ˜»     # flatten the list and join on newlines

1
私は一週間前のようにこの質問に本当に一生懸命挑戦しました。+1してもう少し試してみてください!
nmjcman101

@ nmjcman101:もう少しお役に立てれば幸いです。いくつかの友好的な競争は常に楽しいです:)
エミグナ

1

C#(.NET Core)、163バイト

(l,s)=>{var o="";int i=0,k=s.Length;for(;i<k;)o+=i<k/2?s[i++]+"\n"+"".PadLeft(i):l[i]+""+s[i++];o+=l[i]+"\n";for(i=k/2;i>0;)o+="".PadLeft(--i)+l[i]+"\n";return o;}

オンラインでお試しください!

おそらくここで多くのゴルフをする必要がありますが、最初は非LINQの試みです。最初に長い単語を取得し、出力の文字列を返すLambda関数。


1
バイト(l=>s=>)を保存するためにカリーを使用してくださいFunc<input1, Func<input2, output>>
TheLethalCoder

1

Java 8、216バイト

カリーラムダは:とりStringからラムダを返すStringまでString。外側のラムダのパラメーターは短い文字列です。

String配列構文を使用してs にインデックスを付けられないのは...残念です。

s->t->{int l=s.length(),i=l/2;String o="",p=o,n="\n";for(;i<l;p+="  ")o=o+t.charAt(i)+s.charAt(i++);o=p+o+t.charAt(i)+n;for(;i-->0;)o=p.substring(l-i--)+s.charAt(i/2)+n+o+p.substring(l-i)+t.charAt(i/2)+n;return o;}

ゴルフされていないラムダ

s ->
    t -> {
        int
            l = s.length(),
            i = l / 2
        ;
        String
            o = "",
            p = o,
            n = "\n"
        ;
        for (; i < l; p += "  ")
            o = o + t.charAt(i) + s.charAt(i++);
        o = p + o + t.charAt(i) + n;
        for (; i-- > 0; )
            o =
                p.substring(l-i--)
                + s.charAt(i / 2)
                + n
                + o
                + p.substring(l-i)
                + t.charAt(i / 2)
                + n
            ;
        return o;
    }

説明

lは短い入力の長さであり、短い入力のi後半の最初の文字を参照するように初期化された多目的インデックスです。o結果を蓄積し、p最終的にパディング用のスペースを保存しn、のエイリアスです"\n"

最初のループは、2つの文字列の2番目の半分をインターリーブし(長い入力の最後の文字を除く)p、中間行の適切な量のパディングを構築します。

次の行は、出力の中央の行を完成させます。

2回目のループについてJames Goslingに謝りたいと思います。真ん中の線の上と下の線を内側から外側に追加します。ループに入るil - 1、ですので、短い文字列の前半の最後の文字とともに、1文字のパディングが追加されます。i次のパディング(結果に追加される)が1文字短くなるように減少します。整数除算により、長い文字列の同じ位置文字が追加されます。これが繰り返され、完了した結果が返されます。

クール

かつての13行目

o+=t.charAt(i)+""+s.charAt(i++);

空の文字列がなければ、+文字値を一緒に追加し、数値文字列を追加したためです。化合物割り当てを拡張することにより、の連結oとがt.charAt(i)最初に評価され、2つのバイトを保存する、空の文字列を必要とせずに所望の結果を得ました。複合割り当てが拡張とは異なる動作をするのを見たのはこれが初めてです。


0

Javascript(ES6)、140 137 133バイト

A=(a,b,c=0)=>a[c/2]?` `[d=`repeat`](c+1)+a[0]+`
`+A(a.slice(1),b.slice(1),c+2)+`
`+` `[d](c)+b[0]:` `[d](c)+[...a].map((e,f)=>e+b[f])

これがさらにゴルフできることを確認してください


たとえば、`<newline>`+` `にマージできません`<newline> `か?(私はJSを知りません)。
カズ

@Kaz:いいえ、改行とスペースではなくスペースだけでrepeatメソッドを実行するためです。
ルーク

0

Mathematica、174バイト

(a=(c=Characters)@#;b=c@#2;T=Table;Column[Join[T[T["  ",i]<>a[[i]],{i,g=Length@a/2}],{T["  ",g+1]<>Riffle[b[[-g-1;;]],a[[-g;;]]]},Reverse@T[T["  ",i]<>b[[i+1]],{i,0,g-1}]]])&


入力

[「ジッパー付き」、「段落」]


0

TXR Lisp、126バイト

(defun f(a b :(n 0))(if(<(/ n 2)(length a))` @{""n}@[a 0]\n@(f(cdr a)(cdr b)(+ n 2))\n@{""n}@[b 0]``@{""n}@{(zip b`@a `)""}`))


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