コードブロックツールを作成する


18

SEネットワークのようにマークアップを使用する場合、テキスト行の前にある4つのスペースのインデントは、コードブロックの一部であることを示します。そうでない場合、ここに例があります(.スペースを表す):

....コード
....その他のコード

結果として

Code
More code

問題は、コードを回答にコピーアンドペーストするとき、各行を手動でインデントする必要があることです。これは、まだインデントされている可能性があり、混乱を引き起こす可能性があるため、未作成のコードを操作する場合は特に困難です。コードを選択してを押すだけで、結果がわかりますCtrl + K。私の人生の時間は、理由を別にして無駄にしています...

したがって、目標は、入力が与えられると、各行の前に4つのスペースを入れて返すことです。コピーペーストの時間を節約するという精神で、入力全体を1つの文字列として処理することになります(言語で解析できる場合)。ご使用の言語が文字列内の文字(改行など)を処理できない場合、その言語でサポートされている他の方法で表示/エスケープされていると想定できます。ただし、出力は各行を独自の行に出力する必要があります(したがって、のようなものは渡されません....foo\n....bar)。

標準の抜け穴は許可されていません。これはであるため、バイト単位の最短回答が優先されます。幸運を!


3
「各行を手動でインデントする必要があります」(またはテキストを選択してボタンをクリックします):
ジョナサンアラン

11
@JonathanAllan「ボタン」?確かに「キーボードショートカット」を意味します。(Ctrl + K)
マーティンエンダー

31
@ジョナサンアラン...私は...私は非常に怒っています。長時間。無駄です。
パパイヤマン1000

6
KritixiのVの回答は破られることはないと確信していますが、回答を受け入れる前に少し長く待つことをお勧めします。当時のサイト(タイムゾーン、または常にPPCG 24/7にあるとは限りません)
-HyperNeutrino

2
+1について通知するためにCtrl + K
コイショアロイ

回答:


17

V、4バイト

Î4É 

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

(末尾のスペースに注意してください)

VはLatin1でエンコードされます。これは次のようにエンコードされます。

00000000: ce34 c920                                .4. 

説明

Î            " On every line
 4É<space>   " Prepend 4 spaces

UTF-8で4バイトのソリューションもあります!

VG4>

VG          " Select everything
   >        " Indent
  4         " 4 times (with spaces)

2
誰かがその電話を手に入れることを望みます。
パパイヤマン1000

代替ソリューション:4ñ>G
DJMcMayhem

@DJMcMayhemしかし、スペースの代わりにインデントするためにタブを使用します
Kritixi Lithos

vimでは、はい。Vでは、いや、それは4つのスペースだ
DJMcMayhem

@DJMcMayhemおかげで、UTF-8でたった4バイトの別のソリューションが生まれました!
Kritixiリソス

9

クレヨン、7バイト

`¤q;3xq

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

説明

Crayonは、ASCIIアートを作成するために設計されたスタックベースの言語です。まだ開発の初期段階にありますが、かなり少ないバイト数でこの課題を完了するのに十分なことを知っています。

         Implicit: input string is on the stack
`¤       Push a non-breaking space to the stack.
  q;     Draw this at the cursor (0,0 by default) and pop it.
    3x   Move three more spaces to the right.
      q  Draw the input string here (at 4,0).
         Implicit: output the canvas, trimmed to a rectangle

Crayonは出力を自動的に長方形にトリミングするため、非分割スペースを描画する必要があります。したがって、NBSPがなければ、元の入力が印刷されるだけです。


クレヨンはあなたに反対のことをさせますか?文字列を出力し、次に4つのスペースを左に移動してnbspを出力しますか?クレヨンがキャンバスを適切な場所に正しく移動するかどうかはわかりませんが、スタック操作のコストは下がる可能性があります。

@ ais523うーん、それは本当に良いアイデアです...残念ながら、それはx = -4に移動する必要がありますが、現時点では簡単な作業ではありません。1か月間取り組んできたこれらの変更を本当にプッシュする必要があります。:P
ETHproductions

7

網膜、8バイト

%`^

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

2行目には4つのスペースがあります。代替ソリューションは、いずれかを使用しm`^たり%1`、または1%`最初の行に。これらはすべて、各行の先頭の位置と一致し、4つのスペースに置き換えられます。


私はRetinaの答えが最初だろうと思った。
ニール

まあそれは速かった。
パパイヤマン1000

@NeilこれがV(または生のVimでも)に負けない場合、私は驚くでしょう。:)
マーティンエンダー

1
@MartinEnderここに行く(Vで4バイト):codegolf.stackexchange.com/a/115870/41805 :)
Kritixi Lithos

7

チェダー、31バイト

@.lines.map(("    ":+)).asLines

本当に簡単ですが、新しい関数演算子を見せてくれるので投稿しました。

(" ":+) と同じです A -> " " + Aです。(すなわち、LHSにバインドさ+れた関数としてのop " ")。

説明さえ必要ないと思う


パーサーの動作を変更しましたか?私が覚えている:ことから問題を引き起こすだろう?:
コナーオブライエン

@ ConorO'Brienどうやってそれを修正したか忘れました:が、一致しないがあるため?、パーサーはそれを機能的なopとして扱うことを選択すると信じています。これには、機能的な操作を括弧で
囲む

スマイリーの+1:+)
LarsW

どういう@意味ですか?
リーキー修道女

6

Python  44  39バイト

取り消し線&nbsp; 44&nbsp; 44ではなくなりました:)

ovsのおかげで-5バイト(プリペンドによるデキューを回避)

lambda s:' '*4+s.replace('\n','\n    ')

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


lambda s:' '*4+s.replace('\n','\n ')39バイトの場合
-ovs

@ovs-表示されません... lambda s:' '*4+s.replace('\n','\n ')[1:]40(これは動作しません)または何か他のものを意味しますか?
ジョナサンアラン

1
ちょうどlambda s:' '*4+s.replace('\n','\n<4 spaces>') TIO
ovs

@ovsああ、もちろん(コメント4スペースのマークダウンレンダリングが私を投げたので、返信でも気づきませんでした)節約してくれてありがとう!
ジョナサンアラン

6

JavaScript、26バイト

@Conor O'Brien、8バイトのゴルフをありがとう

x=>x.replace(/^/gm,"    ")

/ gを含む正規表現で置換すると、すべてのインスタンスが置換されます。mは、文字列^の先頭について、正規表現に各行を個別に処理させます。

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


入力の空白以外の部分がasdf繰り返し繰り返されるように見えます。
パパイヤマン1000

TIOに入力として入力した内容に注意してください
fəˈnɛtɪk

x=>x.replace(/^|\n/g,"$&    ")最初の行次の行をすべて
まとめ


1
または^私も推測します
;

4

Python 2、87 45バイト

print' '*4+'\n    '.join(input().split('\n'))

入力は次のように解釈されます 'Line1\nLine2\nLine3...'(見積もりが必要です)

@WheatWizardに、42バイトのゴルフに役立つアイデアをくれてありがとう。


私はPythonで育ちました。それが、これがちょっと難しいと思うようになった理由です。RegExを無視しても、私はとても間違っていました。
パパイヤマン1000

@ Papayaman1000 RegExを使用する場合と使用しない場合の両方で、これは非常に簡単な課題ですが、非常に興味深いことです。
ハイパーニュートリノ

2
私は知らなかったのでCtrl + K、この挑戦​​が提案された本当の理由は...ただの不可解なものよりも少なかったと認めます。
パパイヤマン1000

@ Papayaman1000ハハ、はい、はい、各行の前で4回スペースを押す必要があり、とても面倒でした。特に私は通常Pythonを使用しているため、常に複数の行があります(Javaを使用していたときはそれほど悪くありません)。最終的に私は怠け者になり、テキストエディタを使用^して `` に置き換えました。
ハイパーニュートリノ

1
@WheatWizard提案をありがとう、私はそれを少しゴルフダウンしました。もう少し良くなった?
ハイパーニュートリノ

4

ゼリー、8 バイト

Ỵṭ€⁶ẋ4¤Y

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

どうやって?

Ỵṭ€⁶ẋ4¤Y - Main link: string
Ỵ        - split on newlines
      ¤  - nilad followed by ink(s) as a nilad:
   ⁶     -     a space character
    ẋ4   -     repeated four times
 ṭ€      - tack for €ach
       Y - join with newlines

他のいくつかの8バイトのバリアントは次のとおりです
Ỵṭ€⁶Yµ4¡(改行で4回繰り返し分割し、1つのスペースを追加します)。
⁶ḤḤ;ЀỴY(2倍にすることは、4を掛けるようなものЀで、正しい引数にマップされるため、連結する代わりに連結できます)。
およびその他の再配置。


4

Emacs、5つのキーコード、5バイト

C-x h M-4 C-x tab

キーボード入力に少なくとも1つの一般的に使用されるエンコードでは、これらのキーコードはそれぞれ1バイトです。 18 68 b4 18 09。Emacsのエントリは、非常にキーコードが重い傾向があります。印刷可能な各ASCII文字は、複数文字コマンドの後続の文字を除き、それ自体を表します(つまり、実際のコマンドを提供できるのはキーコードのみです)。

これがVim(Vとは対照的に)と比較してどうなのかわかりません。しかし、VimはPPCGでかなり一般的に使用されているので、エディター戦争の反対側にもスポットライトを当てる価値があると思いました。

これは、I / Oがバッファ(vimの通常のI / O規約と同等)を介して行われるか、ファイルから取得されて画面に出力される(同じことになる)ことを前提としています。代わりにリージョンを介してI / Oを実行する場合(これは一部の形式のプログラムでは自然です)、先頭の2文字を削除してスコアを3バイトにすることができます。ただし、PPCGルールに準拠しているとは思わない。

説明

C-x h M-4 C-x tab
C-x h               Specify the entire buffer as the region
      M-4           Give the argument 4 to the next command that runs
          C-x tab   Increase the indentation level of each line by a constant

ここで使用されている最後のビルトインは、もちろん、この課題に非常に役立ちます。残りは単なる構造です。


3

PowerShell、29 28バイト

"$args"-split"
"|%{" "*4+$_}

-1 fergusqに感謝します。`nの代わりに実際の改行を使用します

"$args"入力を文字列( "sを使用してキャスト)として受け取り、-split改行でsし、それをループ(%{})し、4つのスペース(" "*4)と行($_)を追加して、暗黙的に出力します。


「n」の代わりに改行文字を使用できますか?
fergusq

@fergusq確かに、更新できます。
-colsw

おそらく、改行文字はまだ2バイトのウィンドウでは\ r \ nです-または、改行文字のバイト数を明確にする規則がありますか?
poizan42

@ poizan42メタ投稿があるかどうかはわかりませんが、デフォルトのコンソールで改行だけでこれを実行できるため、無効と見なす理由はありません。
colsw

3

Pyth、10バイト

jm+*4\ d.z

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

行のリストとしての入力が許可される場合、7バイトで入力できます。

jm+*4\ 

やってみて

より長いソリューション:

12バイト:

+*4d:Eb+b*4d

12バイト:

+*4dj+b*4d.z

13バイト:

t:E"^|
"+b*4d

9になった:jbm*4\ .z
拍手


私は忘れてしまったd、おっとを。とにかくあなたの10バイトの答えは私が目指していたものです
拍手

2

ローダ、21バイト

{(_/"
")|[`    $_
`]}

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

これは匿名関数です。入力はストリームから取得されます。

説明:

{
    (_/"\n") |        /* Splits the input at newlines */
    ["    ".._.."\n"] /* For each line, prints four spaces before the line */
}

identity()ばかりSTDINからすべての値を引きますか?
クリティキシリソス

@KritixiLithosはい。identity入力ストリームから値を取得し、出力ストリームにプッシュします。これはと同じですpush(x) for x
fergusq

2

Perl 5、11 + 1 = 12バイト

11バイトのコード+ -pフラグ。

s/^/    /mg

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

一度だけ、説明は短くなります:正規表現は、各行の先頭(修飾子^と組み合わせて/m)を4つのスペース(末尾)に置き換えます。


これは、文字列全体ではなく、一度に1行ずつ入力を読み取ります。

@ ais523上位2つを含む回答の約半分は、まったく同じ方法で入力を読み取ります。
マキシムミハイロフ

@ ais523入力を一度に1行ずつ処理しますが、文字列全体として読み取ることができます(たとえば<<< "..."を指定した場合)。同意しませんか?
ダダ

@ ais523それについてもう少し考えた後、私はあなたが正しいと思う。(コードを適宜更新しました)
ダダ


2

sed 16 10 9バイト

s/^/    /

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

編集

Kritixi Lithosにより、ソリューションサイズが16バイトから10バイトに縮小

seshoumaraのおかげで-1バイト。


-rフラグ(1バイト)を使用して15バイトを取得できるため、括弧の前のバックスラッシュを削除できます。
KritixiのLithos

あなたは使用して13を取得することができますs/.*/ &/(括弧を取り外して交換\1して&
KritixiのLithos

@KritixiLithosありがとう!なしでも動作し*ます。
マキシムミハイロフ

またはs:^: :、9バイトの場合。
seshoumara

@seshoumara sedスクリプトでこのようにコロンが使用されるのを見たことはありません...この構文を説明しているマニュアルの部分を知っていますか?
マキシムミハイロフ

2

Java 7、58バイト

String c(String s){return"    "+s.replace("\n","\n    ");}

説明:

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

  • 4つの先行スペースを追加します
  • すべての改行を改行と4つのスペースに置き換えます

Javaの正規表現メカニズムの大部分が他のライブラリを必要とすることは、永遠に悲しいことです。
ポケ

あなたが必要だと思うreplaceAll
-Khaled.K

@ Khaled.Kなぜ?.replaceおよびの両方.replaceAllは、検索された文字列のすべての出現を置換に置き換えます。.replaceリテラル文字.replaceAll列と正規表現に使用されます。これ\nは正規表現ではないため.replace、問題なく使用して、すべての改行を改行+ 4つのスペースに置き換えることができます。
ケビンCruijssen

2

Brain-Flak109 103バイト

-6 ウィートウィザードのおかげ

+1を含む -c

((()()()()()){}){(({}<>)[()()((()()()()){})]<(((((({}){}){}))))>){(<{}{}{}{}{}>)}{}<>}<>{({}<>)<>}<>{}

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

((()()()()()){})        # Add a newline to the beginning
                        # This is needed to get spaces infront of the first line)
{                       # For every character (call it C)
  (({}<>)               #   Move C to the other stack
  [()()((()()()()){})]  #   Push 8 and subtract 10 (\n) from C
  <(((((({}){}){}))))>) #   Push 4 spaces using the 8 from earlier
  )                     #   Push C - 10
  {(<                   #   If C - 10 != 0...
    {}{}{}{}{}          #     Pop the 4 spaces that we added
  >)}{}                 #   End if
  <>                    #   Switch stacks to get the next character
}                       # End while
<>{({}<>)<>}<>          # Reverse the stack (back to the original order)
{}                      # Pop the newline that we added



@WheatWizardニース。そのような冗長性を探し始める必要があります。それはおそらくプッシュポップよりも私に起こります。それらは現在、自動化されています。ありがとう
ライリー




1

MATL、12バイト

10&Yb"4Z"@gh

入力は改行を含む文字列です。これを入力するには、改行を表すために通常の文字の間に文字10を連結する必要があります(角括弧は連結されます)。

['Code' 10 'More code']

MATLオンライン試しください

説明

10&Yb   % Implicit input. Split at char 10 (newline). Gives cell array of strings
"       % For each
  4Z"   %   Push string of 4 spaces
  @g    %   Push the contents of current cell array, i.e. a string with one of the
        %   original lines
  h     %   Concatenate the two strings horizontally
        % Implicit end. Implicit display

1

PHP、16

echo"    $argn";

で実行しphp -R <code>ます。-Rすべての入力行に対して指定されたコードを実行し$argn、現在の入力行に供給されます。そのため、各行の前に4つのスペースを追加して印刷します。


1

V、3バイト(非競合)

4>G

これは、私がしばらく追加することを計画していた機能を使用している答えですが、今日追加するだけです。そのため、この回答は競合せず、勝利には無効です。しかし、このような便利で競争力のある機能を披露するのはまだクールです!

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

説明:

4>   " Add an indent of 4 to...
  G  "   Every line from the current line (0 by default) to the end of the buffer

きちんとした!少なくとも、あなたの言語が事前にトップスポットを獲得しているという事実に誇りを持ってください(たとえそれが汚いゴルフ言語であっても... nah、jk)!
パパイヤマン1000

1

Vim、6回のキーストローク

<Ctrl-V>G4I <Esc>

コマンドラインからを使用してファイルを開いた場合と同様に、カーソルがファイルの先頭にあると想定します vim filename

<Ctrl-V>            " Enter visual block move (enables rectangular selection)
        G           " Move to bottom line (selecting the entire first column)
         4          " Repeat the following action 4 times
          I         " Insert at start of (each selected) line
                    " [input a space]
            <Esc>   " Exit insert mode

インデントに4つのスペースを使用するようにvimを構成すると、2回のキーストロークになります>G


ZZ最後に削除できると確信しています。通常、vimの送信はファイルではなくバッファに出力するだけで問題ありません。
DJMcMayhem

よろしくお願いしZZます。
ダニエル

1

Japt7 6バイト

@ETHproductionsのおかげで1バイト節約

miS²²R

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

説明:

miS²²R
m       // At each char in the input:
 iS²²   //   Prepend " " repeated 4 times
     R  // Rejoin with newlines  

良くやった。S²²の代わりに機能しSp4ますが、この場合は何も保存されません。そういえばmiS²²RRフラグを削除するだけでよいと思います(基本的にはmiS²²、事前に改行で分割し、後で改行と結合します)
ETHproductions

1

UberGenes、62バイト

UberGenesでこの課題に取り組む必要がありました。非常によく似たプログラム(スペースを1つだけ挿入した)は、この言語で書いた最初のプログラムの1つであり、この目的のために簡単に変更できるように思えました。

=aA=p9=z4=cI=AC+a1-z1:pz=Ao:CA:Ii  =b5+b5-bA+a1=d3*d7:db=i0   

使い方:

=aA                                                         Set a to 61
                                                            (Begin main loop)
   =p9                                                      Set p to 9
      =z4                                                   z counts spaces
         =cI                                                Set c to 61
                                                            (Jumping to p jumps here)
            =AC                                             Put the space at position 61
                                                              at position a.
               +a1-z1                                       Move a right and decrement z
                     :pz                                    Jump to p if z is nonzero
                                                            (Jumping to d jumps here)
                        =Ao                                 Read a character to position a.
                           :CA                              Jump to position 32+3 if input
                                                              was nonzero.
                              :Ii                           Otherwise, jump to position 61,
                                                              causing the entire string
                                                              that begins there to be
                                                              printed before halting.
                                                            (This is position 32+3=35)
                                   =b5+b5                   Set b to 10 (newline).
                                         -bA                Subtract the input character to
                                                              compare it with newline.
                                            +a1             Move a right.
                                               =d3*d7       Set d to 21
                                                     :db    Jump to d if not newline.
                                                        =i0 Jump back to begin main loop.
(The 3 spaces at the end position a space character at position 61 so that, after =cI,
C refers to the space character--it will also be the first space printed.)

1

CJam、11バイト

訂正してくれた@ Challenger5に感謝

qN/{S4*\N}%

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

説明

q              e#  Read whole input as a string with newlines
 N/            e#  Split at newlines, keeping empty pieces. Gives an array of strings
   {     }%    e#  Map this function over the array of strings
               e#  The current string is automatically pushed
    S4*        e#  Push a string of four spaces
       \       e#  Swap. Moves the original string after the four spaces
        N      e#  Push a newline
               e#  Implicity display stack contents

1
では機能しませんabc\n\ndef。空の要素を破棄する....abc\n....defため、戻ります%/空の要素を保持するため、代わりに分割に使用します。
エソランジングフルーツ

@ Challenger5ありがとう、訂正しました!
ルイスメンドー

1

J-uby17 16バイト

~:gsub&' '*4&/^/

説明

~:gsub           # :gsub with reversed arguments: 
                 # (f)[regex,sub,str] == str.gsub(regex, sub)
      &' '*4     # replace with four spaces
            &/^/ # match the start of each line

これは(Rubyで)に直接変換されます:

->s{s.gsub(/^/,' '*4)}


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