Kod bloğu aracı oluşturma


18

Markup kullanırken, SE ağında olduğu gibi, bir metin satırından önce dört boşluğun girintisi, bildiğiniz gibi, bir kod bloğunun parçası olarak ifade eder. Yapmazsanız, bir örnek ( .bir alanı temsil eden):

.... Kod
.... Daha fazla kod

sonuç

Code
More code

Sorun, kodu bir cevaba kopyalayıp yapıştırdığınızda, her satırı elle girintilemenizdir. Bu, özellikle girintisiz kodla çalışırken, zaten girintili olduğu ve karışıklığa neden olabileceği için özellikle zordur. Sadece kodunuzu seçip vurabilir Ctrl + K, ortaya çıkıyor. Hayatımın saatleri, sebepsiz yere boşa harcandı ...

Yani, hedefiniz, bir girdi verildiğinde, her satırdan önce dört boşlukla döndürmektir. Kopya yapıştırmadan tasarruf etme ruhuyla, tüm girdiyi tek bir dize olarak işleyeceksiniz (diliniz ayrıştırabildiği sürece). Diliniz dizelerde bir karakteri (yeni satırlar gibi) işleyemiyorsa, dil tarafından desteklenen başka bir yöntemle belirtildiğini / kaçıldığını varsayabilirsiniz; ancak, çıktı her satırı kendi satırında çıktılamalıdır (yani böyle bir şey iletilmemelidir ....foo\n....bar).

Standart boşluklara izin verilmez. Bu , bayt cinsinden en kısa cevap kazanır. İyi şanslar!


3
"Her satırı el ile girintilemeniz gerekiyor" (veya metni seçip düğmeyi tıklayın :))
Jonathan Allan

11
@JonathanAllan "Düğme"? Elbette "klavye kısayolu" demek istediniz. (Ctrl + K)
Martin Ender

31
@JonathanAllan ... Ben ... çok üzgünüm. ÇOK FAZLA ZAMAN. WASTED.
Papayaman1000

6
Kritixi'nin V cevabının yenilmeyeceğinden oldukça emin olmakla birlikte, genellikle bir cevabı kabul etmeden önce biraz daha beklemenizi tavsiye ederim, çünkü bu kadar erken kabul etmek, daha kısa bir cevapla cevap verebilen ancak cevap vermeyen insanlara bir dezavantaj oluşturur o zamanki site (zaman dilimleri veya her zaman PPCG'de 7/24 olmamak)
HyperNeutrino

2
Hakkında bilgi vermek için +1Ctrl + K
Koishore Roy

Yanıtlar:


17

V , 4 bayt

Î4É 

Çevrimiçi deneyin!

(Sondaki boşluğa dikkat edin)

V, Latin1 ile kodlanmıştır, burada bu şekilde kodlanmıştır:

00000000: ce34 c920                                .4. 

açıklama

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

İşte UTF-8'de 4 baytlık bir çözüm!

VG4>

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

2
Umarım biri bu telefonu alır, çünkü vay canına birisi onu çağırdı.
Papayaman1000

Alternatif çözüm:4ñ>G
DJMcMayhem

@DJMcMayhem Ama boşluklar yerine girinti yapmak için sekmeler kullanıyor
Kritixi Lithos

Vim, evet. V, hayır, bu 4 boşluk
DJMcMayhem

@DJMcMayhem Teşekkürler, UTF-8'de sadece 4 bayt olan başka bir alternatif çözüme ilham verdi!
Kritixi Lithos

9

Pastel boya , 7 bayt

`¤q;3xq

Çevrimiçi deneyin!

açıklama

Crayon, ASCII-art yaratmak için tasarlanmış, yığın tabanlı bir dildir. Hala gelişimin erken aşamalarında, ancak bu zorluğu oldukça düşük bir bayt sayısıyla bitirmek için yeterli biliyor:

         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

Kesintisiz alanın çizilmesi gereklidir çünkü Crayon çıktıyı otomatik olarak bir dikdörtgene keser, bu nedenle NBSP olmadan sadece orijinal girişi basar.


Crayon tam tersini yapmanıza izin verir mi: dizeyi çıktılar, sonra dört boşluk sola hareket eder ve bir nbsp çıkarır mı? Crayon'un tuvali doğru yere doğru hareket edip etmeyeceğini bilmememe rağmen, yığın manipülasyonunda daha az maliyetli olacak.

@ ais523 Hmm, bu gerçekten iyi bir fikir ... maalesef, şu anda kolay bir iş olmayan x = -4'e geçmeyi gerektiriyor. Bir aydır üzerinde çalıştığım bu değişiklikleri gerçekten zorlamalıyım ...: P
ETHproductions

7

Retina , 8 bayt

%`^

Çevrimiçi deneyin!

İkinci satırda dört boşluk vardır. Alternatif çözümler birini kullanabilirsiniz m`^veya %1`veya 1%`ilk satırında. Bunların hepsi, her satırın başındaki konumla eşleşir ve yerine dört boşluk yerleştirilir.


Retina cevabının ilk olacağından şüphelendim.
Neil

Bu hızlıydı.
Papayaman1000

@ Neil V (ya da çiğ Vim) tarafından dövülmezse şaşıracağım. :)
Martin Ender

1
@MartinEnder Buyrun (V'de 4 bayt): codegolf.stackexchange.com/a/115870/41805 :)
Kritixi Lithos

7

Çedar, 31 bayt

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

Gerçekten basit, ama yeni fonksiyonel operatörleri gösterdiğinden yayınladım.

(" ":+)ile aynıdır A -> " " + A. (yani +LHS'ye " "bağlı bir fonksiyon olarak op ).

Açıklamaya bile ihtiyacı olduğunu sanmıyorum


Ayrıştırıcının çalışma şeklini değiştirdiniz mi? Hatırladığım kadarıyla :sorunlara neden olur?:
Conor O'Brien

@ ConorO'Brien Nasıl düzelttiğimi unuttum ama inanıyorum çünkü :eşleşmesi olmayan bir? için, ayrıştırıcı işlevsel bir op olarak davranmayı seçecektir. Bu hala işlevsel op parens sarılmış gerektirir ama evet
Downgoat

Gülen yüz için +1 :+)
LarsW

Ne anlama @geliyor?
Leaky Nun

6

Python ,  44  39 bayt

Kesildi & nbsp; 44 & nbsp; artık 44 değil :)

Ovs sayesinde -5 bayt (başaşağıdan ayrılmamak)

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

Çevrimiçi deneyin!


lambda s:' '*4+s.replace('\n','\n ')39 bayt
ovs için

@ovs - Görmüyorum ... lambda s:' '*4+s.replace('\n','\n ')[1:]40 (işe yaramaz) ya da başka bir şey için mi demek istiyorsun ?
Jonathan Allan

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

@ovs Ah evet, tabii ki (yorum dört boşluk etiketleme render beni attı ve ben de benim cevap fark etmedi) tasarruf için teşekkürler!
Jonathan Allan

6

JavaScript, 26 bayt

8 bayt golf için teşekkürler @Conor O'Brien

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

/ G ile bir normal ifadeyle değiştir, tüm örnekleri değiştirir. m, normal ifadenin ^ dizesinin başlangıcı için her satıra ayrı ayrı işlem yapmasını sağlar.

Çevrimiçi deneyin!


Bu girişte boşluk olmayan asdftekrar tekrar tekrar karıştırmak gibi görünüyor .
Papayaman1000


x=>x.replace(/^|\n/g,"$&    ")İlk satırı ve aşağıdaki satırları tek seferde almak için birkaç bayt kaydedebilirsiniz
ETHproductions


1
Veya ^ çok çalışıyor sanırım ;-)
ETHproductions 20

4

Python 2, 87 45 bayt

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

Giriş şu şekilde alınır 'Line1\nLine2\nLine3...'(Alıntılar gereklidir)

@WheatWizard bana 42 bayt golf yardımcı bana bir fikir verdiğin için teşekkürler.


Python üzerinde büyüdüm. Bana bunun zor olacağını düşündüren de buydu . RegEx'i görmezden gelsem bile, çok yanılmışım, çıkıyor.
Papayaman1000

@ Papayaman1000 RegEx ile ve RegEx olmadan oldukça önemsiz bir meydan okuma olsa da, çok ilginç buluyorum.
HyperNeutrino

2
İtiraf edeceğim, bilmediğim Ctrl + Kiçin, bu zorluğun önerilmesinin asıl nedenleri ... saf şaşkınlıktan daha azdı.
Papayaman1000

@ Papayaman1000 Haha, evet, her satırın önüne 4 kez basmak oldukça can sıkıcıydı. Özellikle Python kullandığımdan beri her zaman birden fazla satırım var (Java kullandığımda o kadar da kötü değil). Sonunda tembelleştim ve metin düzenleyicimi ^`` ile değiştirmek için kullandım .
HyperNeutrino

1
@WheatWizard Öneri için teşekkürler, biraz aşağı golf. Şimdi biraz daha mı iyi?
HyperNeutrino

4

Jöle , 8 bayt

Ỵṭ€⁶ẋ4¤Y

Çevrimiçi deneyin!

Nasıl?

Ỵṭ€⁶ẋ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

Diğer 8 bayt varyantları şunlardır:
Ỵṭ€⁶Yµ4¡(yeni satırlarda 4 bölünme, tek bir alanı yapıştırma);
⁶ḤḤ;ЀỴY(iki katına çıkma 4'le çarpmak gibidir Ѐ, doğru argümanla eşleşir, böylece teyel yapmak yerine bitiştirebiliriz);
ve bunların diğer yeniden düzenlemeleri.


4

Emacs, 5 keychord, 5 bayt

C-x h M-4 C-x tab

Klavye girişi için yaygın olarak kullanılan en az bir kodlamada, bu anahtar kodların her biri tek bir bayttır: 18 68 b4 18 09 . Emacs girişleri, çok karakterli bir komutun müteakip karakteri hariç, her yazdırılabilir ASCII karakteri kendisini temsil ettiğinden (anahtar komutlarının gerçek komutları vermek için kullanılabileceği anlamına gelir) çok keychord-ağır olma eğilimindedir.

Bunun Vim ile nasıl karşılaştırılacağından emin değilim (V yerine). Ancak Vim, PPCG'de oldukça yaygın olarak kullanılıyor ve bu yüzden editör savaşlarının diğer tarafının da spot ışığında zamanını hak ettiğini düşündüm.

Bu, G / Ç'nin tampon (vim için normal G / Ç kurallarının eşdeğeri) yoluyla yapıldığını veya bir dosyadan alındığını ve ekrana (aynı şeye gelir) çıktığını varsayar. Bunun yerine bazı program türleri için doğal olan bölge üzerinden G / Ç yaparsanız, önde gelen iki karakteri 3 baytlık bir puan için kaldırabilirsiniz; ancak bunun PPCG kurallarına uygun olduğunu düşünmüyorum.

açıklama

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

Burada kullanılan son yapı, elbette, bu meydan okuma için inanılmaz derecede faydalıdır; gerisi sadece yapıdır.


3

PowerShell, 29 28 Bayt

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

-1 fergusq sayesinde `n yerine gerçek bir satırsonu kullanma

alır "$args"(döküm kullanılarak "ler), bir dizi olarak giriş ve -split(o döngüler, bir satır üzerinde s %{}dört boşluk (ekleme, içinden) " "*4) ve hat ( $_dolaylı olarak onun çıkışlarının).


`N yerine yeni satır karakteri kullanabilir misiniz?
fergusq

@fergusq gerçekten yapabilirim, güncellendi.
colsw

Muhtemelen yeni satır karakteri hala iki bayt olan pencerelerde \ r \ n - ya da yeni satır karakterinin kaç bayt olduğunu açıklayan kurallar var mı?
poizan42

@ poizan42 Üzerinde bir meta yayın olup olmadığından emin değilim, ancak varsayılan konsolda bunu sadece yeni satırla çalıştırabiliyorum, bu yüzden geçersiz olduğunu düşünmek için bir neden yok.
colsw


2

Röda , 21 bayt

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

Çevrimiçi deneyin!

Anonim bir işlevdir. Giriş akıştan çekilir.

Açıklama:

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

Does identity()sadece STDIN'den tüm değerler getirilmesini?
Kritixi Lithos

@KritixiLithos Evet. identitydeğerleri giriş akışından alır ve çıkış akışına iletir. Aynıdır push(x) for x.
fergusq

2

Perl 5 , 11 + 1 = 12 bayt

11 bayt kod + -pbayrak.

s/^/    /mg

Çevrimiçi deneyin!

Bir kez, açıklamalar kısa olacaktır: Normal ifade satırın her başlangıcını ( değiştirici ^ile birlikte /m) dört boşlukla değiştirir - son.


Bu, bir bütün olarak bir dize yerine bir kerede bir satır girişi okur.

@ ais523 İlk iki dahil cevapların kabaca yarısı girişi aynı şekilde okur.
Maxim Mikhaylov

@ ais523 Bir kerede bir satır girişi işlediğini söyleyebilirim, ancak bütün bir dize olarak okuyabilir (örneğin <<< "..." ile beslerseniz). Kabul etmiyor musun?
Dada

@ ais523 hakkında biraz daha düşündükten sonra, haklı olduğunu düşünüyorum. (Kodumu buna göre güncelledim)
Dada


2

sed , 16 10 9 bayt

s/^/    /

Çevrimiçi deneyin!

Düzenlemeler

Kritixi Lithos sayesinde 16 ila 10 bayt arasında azaltılmış çözelti boyutu .

Seshoumara sayesinde -1 bayt .


-rParantezlerden önce ters eğik çizgileri kaldırabilmeniz için bayrağı (1 bayt) kullanarak 15 bayta kadar ulaşabilirsiniz.
Kritixi Lithos

Sen kullanarak 13'e kadar alabilirsiniz s/.*/ &/(parantez içinde kaldırmak ve yerine \1birlikte &)
Kritixi Lithos

@KritixiLithos Teşekkürler! Onsuz bile çalışır *.
Maxim Mikhaylov

Veya sadece s:^: :9 bayt için.
seshoumara

@seshoumara Hiçbir zaman iki nokta üst üste betiğinde kolonların bu şekilde kullanıldığını görmedim ... Kılavuzun hangi bölümünün bu sözdizimini açıkladığını biliyor musunuz?
Maxim Mikhaylov

2

Java 7, 58 bayt

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

Açıklama:

Burada deneyin.

  • Dört önde gelen boşlukla ekleyin
  • Replace every new-line for a new-line + four spaces

I am forever sad that Java's regex mechanisms require other libraries for the most part.
Poke

I think you need replaceAll
Khaled.K

@Khaled.K Why? Both .replace and .replaceAll will replace all occurrences of the searched String with the replacement. .replace is used for literal Strings, and .replaceAll for regexes. Since \n isn't a regex, .replace can be used without a problem to replace all newlines with a newline + four spaces, which you can also check in the "Try it line" link I provided.
Kevin Cruijssen

2

Brain-Flak, 109 103 bytes

-6 thanks to Wheat Wizard

Includes +1 for -c

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

Try it online!

((()()()()()){})        # 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 Nice. I need to start looking for redundancies like that. It probably happens to me more than push pop does. Those are just automatic now. Thanks
Riley


1

Stacked, 13 bytes

'^'4' '*mrepl

Try it online!

Explanation

'^'4' '*mrepl      (* input: top of stack *)
        mrepl      perform multiline regex replacements,
'^'                  replacing /^/ with
   4' '*             four spaces


1

MATL, 12 bytes

10&Yb"4Z"@gh

Input is a string with newlines. To enter this, you need to concatenate character 10 between the normal characters to represent newline (square brackets are concatenattion):

['Code' 10 'More code']

Try it at MATL online!

Explanation

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

run with php -R <code>. -R runs the given code for every input line and $argn is fed the current input line. So this simply prints each line with additional four spaces in front of it.


1

V, 3 bytes (Non-competing)

4>G

This is answer uses a feature that I have been planning on adding for a while, but just got around to adding today. That makes this answer non-competing and invalid for winning. But it's still cool to show off such a useful/competitive feature!

Try it online!

Explanation:

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

Neat! At least take some pride in the fact that your language took the top spot even beforehand [even if it is a dirty golfing language... nah, jk]!
Papayaman1000

1

Vim, 6 keystrokes

<Ctrl-V>G4I <Esc>

Assumes that the cursor is on the beginning of the file, as if you opened the file from from the command line via 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

With a vim configured to use 4 spaces for indentation it would be 2 keystrokes: >G.


I'm pretty sure you can remove the ZZ at the end. Usually vim submissions are fine just outputting to the buffer rather than to a file.
DJMcMayhem

Alright thanks, I removed ZZ then.
daniero

1

Japt, 7 6 bytes

Saved 1 byte thanks to @ETHproductions

miS²²R

Try it online!

Explanation:

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

Nice job. S²² would work as well in place of Sp4, not that it saves you anything in this case. Speaking of which, I think you can just do miS²²R to remove the R flag (basically miS²², but split at newlines beforehand and join with newlines afterward)
ETHproductions

1

UberGenes, 62 bytes

I had to enter this challenge with UberGenes, as a very similar program (that only inserted one space) was one of the first programs I ever wrote in the language, and it seemed like it would be easy to modify for this purpose.

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

How it works:

=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 bytes

Thanks to @Challenger5 for a correction

qN/{S4*\N}%

Try it online!

Explanation

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
Doesn't work on abc\n\ndef. It returns ....abc\n....def because % discards empty elements. You want to use / to split instead, because it keeps the empty elements.
Esolanging Fruit

@Challenger5 Thanks, corrected!
Luis Mendo

1

J-uby, 17 16 Bytes

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

Explanation

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

This directly translates to (in Ruby):

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

1

Actually, 16 bytes

9uc;§s⌠' 4*+⌡M@j

Try it online!

Explanation:

9uc;§s⌠' 4*+⌡M@j
9uc;              push two newlines
    §s            raw input, split on newlines
      ⌠' 4*+⌡M    for each line:
       ' 4*+        prepend 4 spaces
              @j  join with newlines

1

C, 66 65 bytes

p(){printf("    ");}f(char*s){for(p();*s;)putchar(*s++)-10||p();}

Try it online!


Neat solution, but you could go with s;char*l;f(){while(getline(&l,&s,stdin)+1)printf("____%s",l);} which 62 bytes
Khaled.K

@Khaled.K Thanks, but that doesn't seem to work without including <stdio.h> (because of the stdin).
Steadybox
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.