私は宇宙船の浮浪人を作りました!


39

前書き:

触発さのこのコメント@MagicOctopusUrn@Emignaの05AB1E答え私のためにそれはただのバグだったの挑戦』

8F9ÝÀNð×ý}».∊私は宇宙船の浮浪人を作りました!そして、私は皆、12バイトの編集を提案することに興奮していました。– 魔法のタコUr 17年7月17日20:10

これは05AB1E(レガシー)プログラムであり、次の結果になります。

1234567890
1 2 3 4 5 6 7 8 9 0
1  2  3  4  5  6  7  8  9  0
1   2   3   4   5   6   7   8   9   0
1    2    3    4    5    6    7    8    9    0
1     2     3     4     5     6     7     8     9     0
1      2      3      4      5      6      7      8      9      0
1       2       3       4       5       6       7       8       9       0
1      2      3      4      5      6      7      8      9      0
1     2     3     4     5     6     7     8     9     0
1    2    3    4    5    6    7    8    9    0
1   2   3   4   5   6   7   8   9   0
1  2  3  4  5  6  7  8  9  0
1 2 3 4 5 6 7 8 9 0
1234567890

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

チャレンジ:

入力:空ではない文字列

出力:外側から内側に向​​かって、上記の出力で行われたのと同様に、各文字の間にもう1つのスペースを追加しlength - 1ます。そのため、入力の場合1234567890、出力は実際には次のようになります。

1234567890
1 2 3 4 5 6 7 8 9 0
1  2  3  4  5  6  7  8  9  0
1   2   3   4   5   6   7   8   9   0
1    2    3    4    5    6    7    8    9    0
1     2     3     4     5     6     7     8     9     0
1      2      3      4      5      6      7      8      9      0
1       2       3       4       5       6       7       8       9       0
1        2        3        4        5        6        7        8        9        0
1         2         3         4         5         6         7         8         9         0
1        2        3        4        5        6        7        8        9        0 
1       2       3       4       5       6       7       8       9       0
1      2      3      4      5      6      7      8      9      0
1     2     3     4     5     6     7     8     9     0
1    2    3    4    5    6    7    8    9    0
1   2   3   4   5   6   7   8   9   0
1  2  3  4  5  6  7  8  9  0
1 2 3 4 5 6 7 8 9 0
1234567890

どうして?の長さは1234567890です10。したがって、10行を出力することから始めます。最初の行はスペースなしです。2番目にスペース区切り文字が1つ。2番目の3番目。など。そして(length - 1スペースが複製された中央の行を使用せずに)、最初の入力に戻ります。

チャレンジルール:

  • 入力は空でないことが保証されます(長さ>= 1)。(単一文字入力の場合、単にその文字を出力します。)
  • 出力自体(画面上のどこでも)が正しい限り、任意の量の末尾/先頭のスペース/改行を使用できます。(出力行の間の空行も許可されていません。)
  • 入力には、空白(コードポイント範囲[33, 126])を除く印刷可能なASCII文字のみが含まれます
  • I / Oは柔軟です。入力は、STDIN、引数、または関数パラメーターとして取得できます。文字列ではなく、文字のリスト/配列/ストリームの場合があります。出力は、文字列ではなく文字のリスト/配列/ストリームでもあります。STDOUTに出力される場合があります。改行区切り文字列として返されます。等

一般的なルール:

  • これはであるため、バイト単位の最短回答が優先されます。
    コードゴルフ言語では、非コードゴルフ言語で回答を投稿しないようにしてください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。
  • 回答には標準の規則が適用されるため、STDIN / STDOUT、適切なパラメーターと戻り値型、完全なプログラムを持つ関数/メソッドを使用できます。あなたの電話。
  • デフォルトの抜け穴は禁止されています。
  • 可能であれば、コードのテストへのリンクを追加してください。
  • また、回答の説明を追加することを強くお勧めします。

テストケース:

Input: @
Output:
@

Input: test
Output:
test
t e s t
t  e  s  t
t   e   s   t
t  e  s  t
t e s t
test

Input: ?!
Output:
?!
? !
?!

Input: Spaceship
Output:
Spaceship
S p a c e s h i p
S  p  a  c  e  s  h  i  p
S   p   a   c   e   s   h   i   p
S    p    a    c    e    s    h    i    p
S     p     a     c     e     s     h     i     p
S      p      a      c      e      s      h      i      p
S       p       a       c       e       s       h       i       p
S        p        a        c        e        s        h        i        p
S       p       a       c       e       s       h       i       p
S      p      a      c      e      s      h      i      p
S     p     a     c     e     s     h     i     p
S    p    a    c    e    s    h    i    p
S   p   a   c   e   s   h   i   p
S  p  a  c  e  s  h  i  p
S p a c e s h i p
Spaceship

Input: 05AB1E
Output:
05AB1E
0 5 A B 1 E
0  5  A  B  1  E
0   5   A   B   1   E
0    5    A    B    1    E
0     5     A     B     1     E
0    5    A    B    1    E
0   5   A   B   1   E
0  5  A  B  1  E
0 5 A B 1 E
05AB1E

Input: )}/\
Output:
)}/\
) } / \
)  }  /  \
)   }   /   \
)  }  /  \
) } / \
)}/\

1
すべてが不安定になります !!!スペースシップ!!!
ウォーリーウェスト

1
私はその出力を認識していました。このアイデアがまだ続いていることが大好きです。
発がん性物質

2
TFWを使用ಠ_ಠすると、質問のパターンを漠然と認識し、1年前に誤ってパターンを作成したことが原因であることに気付きますಠ⌣ಠ
魔法のタコ

1
@MagicOctopusUrnインスピレーションをありがとう。; D
ケビンクルーイッセン

3
@KevinCruijssen間抜けな引用を維持してくれてありがとう!
魔法のタコ

回答:


11

Japt8 6バイト

入力を文字の配列として受け取り、文字列の配列を出力します。

£qYçÃê

それを試してみてください


説明

£          :Map each element at (0-based) index Y
 q         :  Join input with
  Yç       :   Space repeated Y times
    Ã      :End Map
     ê     :Palindromise

オリジナル、8バイト

I / Oは文字列です。-Rフラグを使用します。各行の末尾にスペースが含まれます。

¬£múYÄÃê

それを試してみてください

説明

             :Implicit input of string U
¬            :Split
 £           :Map each character at 0-based index Y
  m          :  Map original U
   ú         :    Right pad with spaces to length ...
    YÄ       :     Y+1
      Ã      :End map
       ê     :Palindromise
             :Implicitly join with newlines

S.ç()再びFTW :-)
ETHproductions

1
深刻な質問:このようなパズルを1〜6バイトの長さのすべてのソリューションで繰り返し検索することは可能でしょうか?
フィリップ

2
@filipいいえ:256 ** 6 = 281474976710656(少なくとも単純な)の組み合わせがあります。パスワードを推測するようなものです。
キリルBulygin

3
@KirillBulyginには、Japtで使用可能な文字を1〜6文字の文字列に結合する方法が37 (37,764,717,485,592)以上あります。文字列リテラルまたは圧縮文字列で使用できる他のすべての1バイト文字を含めると、その数は276兆(276,024,445,697,280)を超えます。だから、いや、ボットを書いてそれらすべてを生成し、有効なJaptプログラムを除外してから、手元のチャレンジで機能するもの(存在する場合)を見つけることはおそらく実行不可能でしょう。それに、ボットにゴルフをしてもらうことの楽しみはどこにありますか?!
シャギー

6
@Shaggy:「ボットにゴルフをさせる楽しみはどこにありますか?!」ボットを本当に短くした場合はどうなりますか?
奇数思考

11

R105 99 85 84 79バイト

-6 @Kevin Cruissenと@Giuseppeに感謝

-14正規表現ベースのメソッドへの変更から

-1 @Giuseppeに感謝

-5 @digEmALlに感謝

function(w,n=nchar(w)-1)write(trimws(Map(gsub,"",strrep(" ",n-abs(n:-n)),w)),1)

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


でスペースを削除すると、1バイトをゴルフできin(r<-ます。
ケビンクルーッセン

1
s一度だけ使用するので、write直接引数として使用できます。99バイトに
ジュゼッペ

1
それは1むしろ""inである必要がありwriteますか?私はあなたの使用を掘っているMap
ジュゼッペ


1
collapse議論でこれを打ち負かすことができると確信しましたpasteが、それは起こっていません
JDL


6

、10バイト

Eθ⪫θ× κ‖O↓

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

Eθ          Map over characters of input string
  ⪫θ        Join characters of input string using
    ×       a literal space repeated 
      κ     current index number of times
            Implicitly print each result on its own line
       ‖O↓  Reflect vertically with overlap

木炭は、のようなものは反映されません[への]-または別の独立したコマンドということでしょうか?
魔法のタコ

@MagicOctopusUrnリフレクションを変換する場合、個別のコマンドがあります。たとえば、codegolf.stackexchange.com / a / 127164を参照してください。
ニール

私はそれが前に反映するのを見たと思ったが、確かではなかった。きちんとした!
魔法のタコ

6

Canvas、8 バイト

┐² ×*]──

ここで試してみてください!

7バイトのバージョンは、この挑戦のためにあまりにも良かったです..


あなたの7バイトバージョンが好きです。それがどのように機能するかを説明してもいいですか?どの演算子が2つ/のsをaにオーバーラップしXますか?
カヤ

3
@Kaya最後のキャラクター--垂直回文。Canvasの回文化はクールなことをします。重なり合う部分にも独自のキャラクターがあります。
-dzaima


6

05AB1E10 9バイト

Adnanのおかげで1バイト節約

εINð×ý}û»

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

説明

ε            # apply to each in input
 I           # push the input
  Nð×        # push <index> spaces
     ý       # merge the input on the spaces
      }      # end loop
       û     # palendromize
        »    # join on newlines

をドロップできますS。入力は柔軟であるため、リストとして入力できます。
ケビンクルーッセン

1
@KevinCruijssen:最初のバージョンは、従来の9バイトですが、»省略できます。
エミグナ

1
»ループvを削除してマップに変更すると、実際にはレガシーでも9バイトで動作しますε
ケビンクルーッセン

1
回答を投稿しました。そして現在、Japtは私が恐れている6バイトで私たちをbeっています。または、05AB1E(Elixir rewrite)および05AB1E(Python legacy)で最短を意味しましたか?:)
ケビンクルーイッセン

2
εINð×ý}û»も動作しますか?
アドナン


4

Japt9 8バイト

@Shaggyから-1バイト

ÊƬqXîÃê

ÊƬqXîÃê        Full program, implicity input U
ÊÆ              Rage from 0 to U length and map
  ¬             split U at ""
   qXîà     join U using " " times range current value
        ê       horizontal mirror

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


ダン; あなたは再び私を忍者のように見えます!Lemmeは、私の削除を希望するかどうかを知っています。
シャギー

1
彼らは種類の異なるxDさんのいるので、私は文字列を使用しながら、無@Shaggy、あなたが入力として配列を使用しているあなたの答えを保つ
ルイス・フェリペ・デ・イエスムニョス

1
SpX-> 1バイトの節約。
シャギー

4

PowerShell66 54バイト

Mazzyのおかげで-12バイト

0..($x=($a=$args).count-1)+$x..0|gu|%{$a-join(' '*$_)}

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

スプラッティングを介して入力を受け取ります。スプラッティングは、TIO上で各文字の個別のコマンドライン引数として現れます。

最初に$a=$args入力引数として設定します。次に、その配列のに$x等しく設定します。次に、文字をループして宇宙船を構築する必要があります。それは範囲を構築することにより行うのに続いて、背部の下に使用し、その後、ちょうど適切な範囲を引き出します。.count-10$x$x0Get-Unique

繰り返しごとに、入力引数と-joinそれらを対応する数のスペースとともに受け取ります。これらの各文字列はパイプラインに残されておりWrite-Output、プログラムが完了すると暗黙的に改行が無料で提供されます。


これを試してください:0..($x=($a=$args).count-1)+$x..0|gu|%{$a-join(' '*$_)}
mazzy

1
@mazzyどのGet-Uniqueような... 範囲でそのように機能するのですか?それはクレイジーです!ありがとう!
AdmBorkBork

4

05AB1E(レガシー)、9 バイト

εINúíJ}û»

文字のリストとして入力します。

オンラインそれを試してみたり、すべてのテストケースを確認してください

説明:

ε     }    # Map each character in the input to:
 I         #  Take the input
  Nú       #  Prepend each with the 0-indexed amount of spaces
           #   i.e. ["t","e","s","t"] & 3 → ["   t","   e","   s","   t"]
    í      #  Reverse each item
           #   i.e. ["   t","   e","   s","   t"] → ["t   ","e   ","s   ","t   "]
     J     #  Join them together to a single string
           #   i.e. ["t   ","e   ","s   ","t   "] → "t   e   s   t   "
       û»  # Palindromize the list, and join by newlines
           #  i.e. ["test","t e s t ","t  e  s  t  ","t   e   s   t   "]
           #   → "test\nt e s t \nt  e  s  t  \nt   e   s   t   \nt  e  s  t  \nt e s t \ntest"

1
OOOOOO、またこれは、ミラーリング時にミラーが\へ/の向きを変えるためと同じ、有効ではありません[]そして()。木炭を捕まえるためにそれらのケースを追加したいかもしれません。(エミグナの答えに他のコメントを移動しました。彼が私が最初にコメントした答えだったためです)
マジックタコ

@MagicOctopusUrn教えてくれてありがとう。のû»代わりにを使用して修正しました.∊
ケビンCruijssen

4

Haskell60 59バイト

(init<>reverse).(scanl(?)<*>tail)
a?_=do u<-a;u:[' '|' '<u]

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

説明

文字列(例:)については、"abc"最初に適用します

scanl (?) <*> tail

と同じです

\str -> scanl (?) str (tail str)

これ(?)は、文字数と同じ数の文字列ができるまで繰り返し適用されます(範囲[33 ..]の各文字にスペースを追加します)。strstr["abc","a b c ", "a b c "]

次に、結果(最後の要素を差し引いたもの)とその逆のカウンター部分を連結するだけです。

init<>reverse

4

MATL25 22 13バイト

zZv"Gtz@he!1e

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

5バイトのゴルフを提案してくれたLuis Mendoに感謝し、それがあと4バイトを削るきっかけになりました!

入力例付きの説明'abc'

         # Implicit input, 'abc'
z        # find number of nonzero elements (length of string)
         # stack: [3]
Zv       # symmetric range
         # stack: [[1 2 3 2 1]]
"        # begin for loop, iterating over [1 2 3 2 1] as the loop indices
G        # push input
         # stack: ['abc']
tz       # dup and push length
         # stack: ['abc', 3]
@        # push loop index, i (for example, 2)
         # stack: ['abc', 3, 2]
h        # horizontally concatenate
         # stack: ['abc', [3, 2]]
e!       # reshape to matrix of 3 rows and i columns, padding with spaces, and transpose
         # stack: [['abc';'   ';'   ']]
1e       # reshape to matrix of 1 row, leaving last value on stack
         # stack: ['a  b  c  ']
         # implicit end of for loop
         # implicit end of program, display stack contents

3

ゼリー、9バイト

jⱮLḶ⁶ẋƲŒḄ

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

行のリストを返します。TIOを介して出力されます。


9多少異なります:,€⁶$LСŒḄ。その他、より類似した9年代:J’⁶ẋŒḄɓjⱮおよびJ’⁶ẋŒḄjⱮ@(私はもっと短く探していましたが、まだ喜びはありませんでした)
ジョナサンアラン

@JonathanAllanこれは最適だと確信しています。もっと短い書き方LḶ⁶ẋやの書き方はないと思いますŒḄ。ただし、保存を見つけることができたら、pingを実行してください。:-)
エリック・ザ・アウトゴルファー

それについて少し考えてみると、,€⁶$LСŒḄそれはクレイジーなネストを持っているので有効ではないかもしれませんY
ジョナサンアラン

@JonathanAllanうん、もちろんそうではない。['I', 'f', [[' '], 't', 'h', [['i']], 's'], ' ', 'i', ['s', ' '], 'a', [[' ', 's', 't'], 'r', ['i', 'n', 'g'], ' '], 'w', ['e', ' ', 'a', 'r', 'e'], ' ', 'd', 'o', ['o'], 'm', [[[[['e']]]]], [[[['d']]]], '!']少なくとも05AB1Eをアウトゴルフしました...
エリックアウトゴルファー

05AB1Eをアウトゴルフしたと言ったよね?ああ、もう。:/
エリック・ザ・アウトゴルファー


3

スタックス、10 バイト

Ç·9ƒù▌╘Ä┘e

実行してデバッグする

各行の末尾に空白を付けて出力します。

説明:

%R|pmx{]n(m Full program, unpacked, implicit input
%           Length of input
 R          1-based range
  |p        Palindromize
    m       Map:
     x{   m   Map over characters of input:
       ]        Character -> string
        n(      Right-pad to length given by outer map value
              Implicit flatten and output

3

Java(JDK 10)、115バイト

s->{for(int l=s.length(),i=-l;++i<l;)System.out.printf(s.replaceAll(".","%-"+(i<0?l+i:l-i)+"s")+"%n",s.split(""));}

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


1
l-Math.abs(i)i<0?l+i:l-i-2バイトでゴルフできます。
ケビンクルーッセン

@KevinCruijssenありがとう!:)
オリビエグレゴワール

それができますl-i<0?-i:iか?
クインテック

@ thecoder16括弧が必要です:l-(i<0?-i:i)(12バイト)。
ジョナサンフレッチ

3

K(oK)25 24バイト

溶液:

,/'(1+a,1_|a:!#x)$\:+,x:

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

説明:

私のK4ソリューションのポート:

,/'(1+a,1_|a:!#x)$\:+,x: / the solution
                      x: / save input as x
                     ,   / enlist
                    +    / flip
                 $\:     / pad ($) right by each-left (\:)
   (            )        / do this together
              #x         / count length of input,           e.g. 3
             !           / range 0..length,                 e.g. 0 1 2
           a:            / save as a
          |              / reverse it,                      e.g. 2 1 0
        1_               / drop first,                      e.g. 1 0
      a,                 / join to a,                       e.g. 0 1 2 1 0
    1+                   / add 1,                           e.g. 1 2 3 2 1
,/'                      / flatten (,/) each (')

ノート:

  • ngnのおかげで-1バイト

1
,:'-> +,
ngn


2

PHP、88 89バイト

for(;++$i<2*$e=count($a=str_split($argn));)echo join(str_pad("",~-$e-abs($i-$e)),$a),"\n";

にはPHP 5以降が必要ですstr_split。でパイプとして実行する-nR、オンラインで試してください


あなたのtry-it-onlineリンクは私が恐れている間違った出力を与えます。出力では、すべての行には、文字間(またはオプションで末尾)だけでなく、先行スペースもあります。最初の文字はすべて、出力の同じ列にある必要があります。
ケビンクルーッセン

1
@KevinCruijssen出力を十分近くで見ませんでした。一定。(ただし、私の以前の出力はロケットのように見えました);
タイタス

ちょっと矢の頭のように見えました。:Dしかし、修正されたので+1。
ケビンクルーッセン

\ nの代わりに実際の改行を配置する場合、バイトを保存します:)
Martijn

@Martijn実際には1バイトしかカウントしませんでした...ここにコードを貼り付けたときに置き換えるのを忘れていました。
タイタス

2

K4、23バイト

溶液:

,/'(1+a,1_|a:!#x)$\:$x:

例:

q)k),/'(1+a,1_|a:!#x)$\:$x:"Spaceship"
"Spaceship"
"S p a c e s h i p "
"S  p  a  c  e  s  h  i  p  "
"S   p   a   c   e   s   h   i   p   "
"S    p    a    c    e    s    h    i    p    "
"S     p     a     c     e     s     h     i     p     "
"S      p      a      c      e      s      h      i      p      "
"S       p       a       c       e       s       h       i       p       "
"S        p        a        c        e        s        h        i        p        "
"S       p       a       c       e       s       h       i       p       "
"S      p      a      c      e      s      h      i      p      "
"S     p     a     c     e     s     h     i     p     "
"S    p    a    c    e    s    h    i    p    "
"S   p   a   c   e   s   h   i   p   "
"S  p  a  c  e  s  h  i  p  "
"S p a c e s h i p "
"Spaceship"

説明:

各行の末尾に空白があります。

,/'(1+a,1_|a:!#x)$\:$x: / the solution
                     x: / save input as x,                 e.g. "abc"
                    $   / string,                          e.g. (,"a";,"b";,"c")
                 $\:    / pad ($) right by each-left (\:)
   (            )       / do this together
              #x        / count length of input,           e.g. 3
             !          / range 0..length,                 e.g. 0 1 2
           a:           / save as a
          |             / reverse it,                      e.g. 2 1 0
        1_              / drop first,                      e.g. 1 0
      a,                / join to a,                       e.g. 0 1 2 1 0
    1+                  / add 1,                           e.g. 1 2 3 2 1
,/'                     / flatten each

2

C#、113 105 98バイト

s=>{for(int l=s.Length,i=-l;++i<l;)WriteLine(Join("",s.Select(c=>$"{c}".PadRight(i<0?l+i:l-i))));}

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


こんにちは。現在、あなたの答えは関数や完全なプログラムではなくスニペットです。これは、ラムダ関数にするs=>{前と}後を追加することで安価に修正できます。さらに、ゴルフの1つのことは、forループの周りのブラケットを削除することです。オンラインでお試しください。
ケビンクルーイッセン

@KevinCruijssenありがとう!投稿する前にそれを修正するのを忘れていた...
RobIII

2

Scala 82バイト

for(i<-(0 to a.size)union(-a.size to 0))println(a.map(_+" "*Math.abs(i)).mkString)

オンラインで試す

Scalaには、ここで私を助けているショートカットがたくさんあり、とても読みやすいです! Scalaを試す


こんにちは、PPCGへようこそ!それはいい答えですが、私は2つのことが少し間違っているのではないかと心配しています。最もスペースの多い行は、2回ではなく中央で1回だけ出力する必要があります。そして、現在、あなたはから印刷0までlengthのスペースの量、代わりの0ためにlength-1スペースの量。私はScalaについてあまりよく知りませんが、次のように+4バイト(合計86バイト)で両方の問題を修正できるようですfor(i<-(0 to a.size-1)union(-a.size+2 to 0))println(a.map(_+" "*Math.abs(i)).mkString)。:)
ケビンクルーイッセン

2

Oracle SQL、115バイト

ゴルフ言語ではありませんが...

SELECT TRIM(REGEXP_REPLACE(v,'(.)',LPAD('\1',1+LENGTH(v)-ABS(LEVEL-LENGTH(v)))))FROM t CONNECT BY LEVEL<2*LENGTH(v)

値がvテーブルの列にあると仮定しますt

SQLフィドル

Oracle 11g R2スキーマのセットアップ

CREATE TABLE t ( v ) AS
  SELECT 'test' FROM DUAL;

クエリ1

SELECT TRIM(REGEXP_REPLACE(v,'(.)',LPAD('\1',1+LENGTH(v)-ABS(LEVEL-LENGTH(v)))))
FROM   t
CONNECT BY LEVEL<2*LENGTH(v)

結果

(SQLFiddleは、何らかの理由で列に右揃えで値を出力します...先行スペースはありません)

| TRIM(REGEXP_REPLACE(V,'(.)',LPAD('\1',1+LENGTH(V)-ABS(LEVEL-LENGTH(V))))) |
|---------------------------------------------------------------------------|
|                                                                      test |
|                                                                   t e s t |
|                                                                t  e  s  t |
|                                                             t   e   s   t |
|                                                                t  e  s  t |
|                                                                   t e s t |
|                                                                      test |

SQL Fiddleの結果には、文字間に単一のスペースしかありませんか?このスクリーンショットをご覧ください。これはSQL Fiddleによるもので、ローカルで動作するのでしょうか?ところで、SQLが標準の正規表現ルールを使用するかどうかは(.)わかりませんが、たとえばJavaのように.使用する\0代わりに使用\1できますか?編集:気にしないでください、それはのため$0ではなく、\0..(私が意味するもののJavaの例)。
ケビンクルーイッセン

1
@KevinCruijssen [SQLの実行]ボタンの横にある下矢印をクリックして、出力を[プレーンテキスト出力]または[マークダウン出力]に変更すると、スペースが表示されます。
MT0

ありがとう。その場合、それは確かに良さそうです!
ケビンクルーッセン

2

8086マシンコード、56 53バイト

00000000  bf 35 01 57 ba 01 00 52  be 82 00 b3 ff ac 59 51  |.5.W...R......YQ|
00000010  aa 3c 0d 74 07 b0 20 e2  f7 43 eb f1 b0 0a aa 59  |.<.t.. ..C.....Y|
00000020  00 d1 e3 08 38 cb d6 08  c2 51 eb dc c6 05 24 5a  |....8....Q....$Z|
00000030  b4 09 cd 21 c3                                    |...!.|
00000035

組み立て元:

org 0x100
use16
        mov di, buffer
        push di
        mov dx, 1
        push dx
nextl:  mov si, 0x82
        mov bl, -1
nextc:  lodsb
        pop cx
        push cx
stor:   stosb
        cmp al, 0x0d
        je cr
        mov al, ' '
        loop stor
        inc bx
        jmp nextc
cr:     mov al, 0x0a
        stosb
        pop cx
        add cl, dl
        jcxz done
        cmp bl, cl
        salc
        or dl, al
        push cx
        jmp nextl
done:   mov [di], byte '$'
        pop dx
        mov ah, 0x09
        int 0x21
        ret
buffer:

テストケース:

スクリーンショット


こんにちは。8086マシンコード用にコンパイルされたオンラインは存在しないと思いますが、テストケースの1つの出力のスクリーンショットを追加できますか?その後、すべてが正しいかどうかを確認できます。:)
ケビンクルーイッセン

できた また、もう1バイト削りました:)
user5434231

スクリーンショットをありがとう!残念ながら、出力に小さな間違いが1つあります。中央の行にlengthはスペースがあり、合計9行ありますが、中央の行にlength-1はスペースがあり、代わりに合計7行が必要です(4文字の単語「test」 `の場合)。 (修正するバイトの点で高価ではないことを願っていますか?
ケビンCruijssen

1
そうですね。これは修正され、さらに1バイト削減されました。
user5434231

2

Haskell、64 60 59バイト

(""#)
a#s|l<-(:a)=<<s,w<-' ':a=l:[x|w<(' '<$s),x<-w#s++[l]]

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

a#s                         -- take a string of spaces 'a' and the input string 's'
 |l<-(:a)=<<s               -- let 'l' be the current line, i.e. the spaces in 'a'
                            -- appended to each char in 's'
  w<-' ':a                  -- let 'w' be 'a' with an additional space   
 =l                         -- return that 'l'
   :[   |w<(' '<$s)   ]     -- and, if 'w' is shorter than 's',
     x  ,x<-w#s++[l]        -- followed by a recursive call with 'w' 
                            -- and by another copy of 'l'

(""#)                       -- start with an empty 'a'

2

バッシュ11510910510097969291、90のバイト

-5&-3 Kevin Cruissenに感謝

read s;for((c=f=1;f;c-=2*(f>=${#s}),f+=c))
{ printf '%-'${f}'.c' `grep -o .<<<"$s"`
echo
}

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


\はシェルエスケープ文字であるため、テストケースに)}/\は次の\ような追加文字を入力する必要があることに注意してください)}/\\


こんにちは。テストケースにTIOリンクを追加することは可能ですか?また、私は非常によくバッシュを知らないが、それは後にスペースを削除することが可能であるinprintfPythonで好きですか?
ケビンクルイッセン

1
@KevinCruijssen、ありがとう、修正された答えをご覧ください。私はへの新たなんだTIO-リンクしかし、このことから、複数のテストケースを使用する方法を確認していないbashコードのみ入力した文字列、(つまり、 1行だけ)。ただし、テストケースはすべて機能しますが、このように単一引用符で囲む必要があります 。スペースは後にして必要とされています。)}/\ <<< ')}/\' read s; ...etc.inprintf
agc

ありがとう。また、TIOの単一のテストケースで十分です。主に、すべてが期待どおりに機能しているかどうかを確認することです。私から+1。:)
ケビンクルーイッセン

1
新しいバージョンでは、このようにさらに5バイトをゴルフできます。スペースの後にforしてdo削除することができます。f=1に変更できますc=f=1。とf=f+cすることができますf+=c
ケビンクルーッセン

1
ああ、ゴルフにはもう一つ小さなことがあります。Bashでそれが可能かどうかはわかりませんでしたが、明らかに(TIOリンクが便利なもう1つの理由;))、forループに変更f!=0することfです。JavaScriptやPythonのように、0falseであり、Bashのすべての他の正/負の整数は明らかに真実です。
ケビンクルーイッセン

2

Perl 6、43バイト

{(0....comb-1...0)>>.&{join ' 'x$^a,.comb}}

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

行のリストを返します。

説明:

 {                                         }  # Anonymous code block
  (0....comb-1...0) # A list from
   0                  # 0
    ...               # to
       .comb-1        # the length of the input string -1
              ...     # back to
                 0    # 0
                   >>.&{                  }  # Map each number to
                        join        ,.comb   # Join the list of characters
                             ' 'x$^a         # With the number of spaces

2

C(gcc)131 129 111バイト

i;x;f(k,j)char*k,*j;{x=strlen(k)-1;for(i=0;i<x-~x;i+=puts(""))for(j=k;*j;)printf("%c%*s",*j++,i<x?i:2*x-i,"");}

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

ceilingcatのおかげで-20バイト!

#import<string.h>
i;x;f(k,j)char*k,*j;{x=strlen(k)-1;for(i=0;i<x-~x;i+=puts(""))for(j=k;*j;)printf("%c%*s",*j++,i<x?i:2*x-i,"");}

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

または、長さがパラメーターとして受け入れられる場合:

C(gcc)、105 102バイト

ceilingcatのおかげで-1バイト!

i;x;f(k,x,j)char*k,*j;{for(i=!x--;i<x-~x;i+=puts(""))for(j=k;*j;)printf("%c%*s",*j++,i<x?i:2*x-i,"");}

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


@ceilingcatハァッ!
コナーオブライエン

1
102バイトの長さのゴルフでは、グローバルxはシャドウイングされ、したがって重複して宣言されていると思います。
ジョナサンフレッチ

2

PHP、148 146 143 141バイト

function s($s){for(;$i<strlen($s);++$i)f($i,$s);for(--$i;--$i>=0;)f($i,$s);}function f($i,$s){echo chunk_split($s,1,str_repeat(' ',$i))."
";}

次のようにテストできます。

<?php
error_reporting(0);

$s = 1234567890;
function s($s){for(;$i<strlen($s);++$i)f($i,$s);for(--$i;--$i>=0;)f($i,$s);}function f($i,$s){echo chunk_split($s,1,str_repeat(' ',$i))."
";}

出力

1234567890
1 2 3 4 5 6 7 8 9 0 
1  2  3  4  5  6  7  8  9  0  
1   2   3   4   5   6   7   8   9   0   
1    2    3    4    5    6    7    8    9    0    
1     2     3     4     5     6     7     8     9     0     
1      2      3      4      5      6      7      8      9      0      
1       2       3       4       5       6       7       8       9       0       
1        2        3        4        5        6        7        8        9        0        
1         2         3         4         5         6         7         8         9         0         
1        2        3        4        5        6        7        8        9        0        
1       2       3       4       5       6       7       8       9       0       
1      2      3      4      5      6      7      8      9      0      
1     2     3     4     5     6     7     8     9     0     
1    2    3    4    5    6    7    8    9    0    
1   2   3   4   5   6   7   8   9   0   
1  2  3  4  5  6  7  8  9  0  
1 2 3 4 5 6 7 8 9 0 
1234567890

サンドボックス

拡張版

 function s($s){
    //loop upwards 0-10
    for(;$i<strlen($s);++$i) f($i,$s);
     //decrement so it's odd, from 9 loop downwards to 0
    for(--$i;--$i>=0;)f($i,$s);
 }
 //2nd function to save space
 function f($i,$s){
     //chunk it, split 1 char, insert $i number of spaces
     echo chunk_split($s,1,str_repeat(' ',$i))."
";}

試行2、92バイト

@Titusの答えを見た後、私はこれをこれに減らしました:

for(;++$i<2*$e=strlen($s=$argn);)echo chunk_split($s,1,str_repeat(' ',~-$e-abs($i-$e)))."
";

私は2つではなく1つのループを使用する方法を考えていました...信じられないかもしれませんが、for「実際の」コードでループを使用することはほとんどありません。~私が行方不明になったのは、ビットごとではない...

92まだ少し長くなっているので、それほど気分が悪くなることはありません。しかし、とにかく2回目の試みとしてそれを入れます。

$argn コマンドラインからの入力です

-nRを使用してパイプとして実行するか、オンラインで試してください。

サンドボックス


あなたがという名前の関数を使用した場合、あなたの最初のバージョンは4バイト短くなるだろうと私には思えるfの代わりに、匿名の1への割り当て$f- function f(オーバー2つのバイトを保存し$f=function(、別のバイトの保存を呼び出すたびに、あなたf(...)の代わりにします$f(...)。あるいは、をキャプチャして$s、2バイトを節約できます- ($i)use($s)は4バイトより長くなりますが($i,$s)、の$f($i)代わりに$f($s,$i)、呼び出しごとに3バイトを節約できます。JSのような自動キャプチャを使用する言語では、useステートメントのペナルティを支払わないため、これは多くの場合実行可能な節約になります。
IMSoP

私は助けに感謝します、私はゴルフをコーディングするのはかなり新しくて、それほど多くはしませんが、通常のSOページで退屈します。私は使用することを考えuseましたが、その感覚$iが動的であるためには、参照により渡される必要があると感じます。だから、である必要がありますuse(&$i)$iを参照することにより、それを渡す前に定義する必要があります$f。これは、親関数で、または他の関数の前に設定することを意味します。機能のためにそれは可能性がありfunction s($s,$i)、ちょうどで呼び出されなければなら知っているs($s,0) が、それは醜いようで、それが周りにある11 bytes, use(&$i),$i
ArtisticPhoenix

$sただし\n、実際の改行に変更して使用できます。これ143 により、行末から2、使用から1になります
ArtisticPhoenix

はい、$ sは「自然な」キャプチャを感じたため、$ iを使用することすら考えていませんでしたが、ネットセービングを計算する価値は常にあります。しかし、あなたはまだだけという名前の関数を宣言することにより、2バイト節約することができるf代わりに、閉鎖の:function s($s){for(;$i<strlen($s);++$i)f($i,$s);for(--$i;--$i>=0;)f($i,$s);}function f($i,$s){echo chunk_split($s,1,str_repeat(' ',$i))." ";}このような余分な機能は、このメタポストに応じて許可されています。codegolf.meta.stackexchange.com/questions/7614/...
IMSoP

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