Buat alat kode kunci


18

Saat menggunakan Markup, seperti pada jaringan SE, lekukan empat spasi sebelum baris teks menyatakannya sebagai bagian dari blok kode, seperti yang saya harap Anda tahu. Jika tidak, berikut ini sebuah contoh (dengan .mewakili spasi):

.... Kode .... Kode
lainnya

hasil dalam

Code
More code

Masalahnya adalah, ketika Anda menyalin-menempelkan kode ke dalam sebuah jawaban, Anda harus membuat indentasi setiap baris secara manual. Ini sangat sulit ketika bekerja dengan kode yang tidak dikenali, karena kemungkinan sudah indentasi dan dapat menyebabkan kebingungan. Anda tinggal memilih kode Anda dan tekan Ctrl + K, ternyata. Jam hidupku sia-sia tanpa alasan selain ...

Jadi, tujuan Anda adalah, diberi input, kembalikan dengan empat spasi sebelum setiap baris. Dengan semangat menghemat waktu copy-paste, Anda harus memproses seluruh input sebagai string tunggal (selama bahasa Anda dapat menguraikannya). Jika bahasa Anda tidak dapat memproses karakter (seperti baris baru) dalam string, Anda dapat menganggap itu dilambangkan / lolos melalui beberapa metode lain yang didukung oleh bahasa; Namun, output harus menampilkan setiap baris pada barisnya sendiri (jadi jangan lewat sesuatu seperti ....foo\n....bar).

Tidak ada celah standar. Karena ini adalah , jawaban tersingkat dalam byte menang. Semoga berhasil!


3
"Anda harus membuat indentasi setiap baris secara manual" (atau pilih teks dan klik tombol :))
Jonathan Allan

11
@JonathanAllan "Tombol"? Tentunya maksud Anda "pintasan keyboard". (Ctrl + K)
Martin Ender

31
@Jonathan Allan ... Saya ... Saya sangat marah. BANYAK WAKTU. TERBUANG.
Papayaman1000

6
Sementara saya cukup yakin bahwa jawaban V Kritixi tidak akan dikalahkan, saya biasanya akan merekomendasikan menunggu sedikit lebih lama sebelum menerima jawaban, karena menerima begitu awal menimbulkan kerugian bagi orang yang bisa menjawab dengan jawaban yang lebih pendek tetapi tidak aktif situs pada saat itu (zona waktu atau tidak selalu di PPCG 24/7)
HyperNeutrino

2
+1 untuk memberi tahu orang-orang tentangCtrl + K
Koishore Roy

Jawaban:


17

V , 4 byte

Î4É 

Cobalah online!

(Perhatikan ruang trailing)

V dikodekan dalam bahasa Latin1, di mana ini dikodekan seperti:

00000000: ce34 c920                                .4. 

Penjelasan

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

Inilah solusi yang juga 4 byte di UTF-8!

VG4>

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

2
Semoga seseorang mengangkat telepon itu, karena wow seseorang memanggilnya.
Papayaman1000

Solusi alternatif:4ñ>G
DJMcMayhem

@DJMcMayhem Tetapi ia menggunakan tab untuk indentasi bukannya spasi
Kritixi Lithos

Dalam vim, ya. Dalam V, tidak, ini 4 spasi
DJMcMayhem

@DJMcMayhem Terima kasih, yang menginspirasi solusi alternatif lain yang hanya 4 byte di UTF-8!
Kritixi Lithos

9

Krayon , 7 byte

`¤q;3xq

Cobalah online!

Penjelasan

Crayon adalah bahasa berbasis tumpukan yang dirancang untuk membuat ASCII-art. Ini masih dalam tahap awal pengembangan, tetapi cukup tahu untuk menyelesaikan tantangan ini dengan jumlah byte yang agak rendah:

         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

Diperlukan menggambar ruang yang tidak putus karena Crayon secara otomatis memotong output menjadi persegi panjang, jadi tanpa NBSP, ia hanya akan mencetak input asli.


Apakah Crayon membiarkan Anda melakukan yang sebaliknya: mengeluarkan string, lalu memindahkan empat spasi ke kiri dan menghasilkan nbsp? Itu mungkin lebih murah dalam manipulasi tumpukan, meskipun saya tidak tahu apakah Crayon akan memindahkan kanvas dengan benar ke tempat yang tepat.

@ ais523 Hmm, itu ide yang sangat bagus ... sayangnya, itu perlu pindah ke x = -4, yang bukan tugas yang mudah saat ini. Saya benar-benar harus mendorong perubahan ini yang telah saya kerjakan selama sebulan ...: P
ETHproduksi

7

Retina , 8 byte

%`^

Cobalah online!

Ada empat spasi di baris kedua. Solusi alternatif menggunakan salah m`^atau %1`atau 1%`pada baris pertama. Semua ini cocok dengan posisi di awal setiap baris dan ganti dengan empat spasi.


Saya menduga jawaban Retina akan menjadi yang pertama.
Neil

Ya itu cepat.
Papayaman1000

@Neil Saya akan terkejut jika ini tidak dikalahkan oleh V (atau bahkan Vim mentah). :)
Martin Ender

1
@ MartinEnder Di Sini kau pergi (4 byte dalam V): codegolf.stackexchange.com/a/115870/41805 :)
Kritixi Lithos

7

Cheddar, 31 byte

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

Sangat sederhana, tapi saya memposting karena memamerkan operator fungsional baru.

(" ":+)sama dengan A -> " " + A. (Yaitu +op sebagai fungsi dengan " "terikat ke LHS).

Saya pikir bahkan tidak perlu penjelasan


Oh, apakah Anda mengubah cara kerja pengurai? Dari apa yang saya ingat :akan menyebabkan masalah dengan?:
Conor O'Brien

@ ConorO'Brien Saya agak lupa bagaimana saya memperbaikinya tetapi saya percaya bahwa karena tidak :ada yang cocok ?, parser akan memilih untuk memperlakukannya sebagai operasi fungsional. Ini masih memerlukan operasi fungsional untuk dibungkus dalam parens tapi ya
Downgoat

+1 untuk smiley:+)
LarsW

Apa @artinya
Leaky Nun

6

Python ,  44  39 byte

Dicoret & nbsp; 44 & nbsp; tidak lagi 44 :)

-5 byte berkat ovs (hindari dequeue dengan prepend)

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

Cobalah online!


lambda s:' '*4+s.replace('\n','\n ')untuk 39 byte
ovs

@ovs - Saya tidak melihatnya ... maksud Anda lambda s:' '*4+s.replace('\n','\n ')[1:]untuk 40 (yang tidak bekerja) atau yang lainnya?
Jonathan Allan

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

@ovs Ah ya, tentu saja (komentar rendering ruang empat komentar melemparkan saya dan saya tidak melihat dalam balasan saya baik) terima kasih untuk menyimpan!
Jonathan Allan

6

JavaScript, 26 byte

Terima kasih @Conor O'Brien untuk bermain golf 8 byte

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

Ganti dengan regex dengan / g menggantikan semua instance. m membuat regex memperlakukan setiap baris secara terpisah untuk memulai string ^.

Cobalah online!


Tampaknya campur aduk non-spasi putih di input menjadi asdfberulang berulang.
Papayaman1000

Anda harus mencatat apa yang telah saya masukkan sebagai masukan di TIO
fəˈnɛtɪk

Anda dapat menyimpan beberapa byte dengan melakukan x=>x.replace(/^|\n/g,"$&    ")untuk mendapatkan baris pertama dan baris berikut semuanya dalam sekali jalan
ETHproduksi


1
Atau ^ bekerja juga kurasa ;-)
ETHproduk

4

Python 2, 87 45 byte

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

Input diambil sebagai 'Line1\nLine2\nLine3...'(Kutipan diperlukan)

Terima kasih kepada @WheatWizard karena memberi saya ide yang membantu saya bermain golf 42 byte.


Saya dibesarkan dengan python. Itulah yang membuat saya berpikir ini akan sulit. Bahkan mengabaikan regex, saya sangat salah, ternyata.
Papayaman1000

@ Papayaman1000 Ini tantangan yang cukup sepele, baik dengan dan tanpa RegEx, meskipun saya merasa ini sangat menarik.
HyperNeutrino

2
Saya akui, karena saya tidak tahu Ctrl + K, alasan sebenarnya dari tantangan yang diajukan ini adalah ... kurang dari sekadar membingungkan.
Papayaman1000

@ Papayaman1000 Haha, ya, cukup menyebalkan harus menekan spasi 4 kali di depan setiap baris. Terutama karena saya biasanya menggunakan Python dan jadi saya memiliki beberapa baris sepanjang waktu (tidak terlalu buruk ketika saya menggunakan Java). Akhirnya saya malas dan menggunakan editor teks saya untuk mengganti ^dengan ``.
HyperNeutrino

1
@WheatWizard Terima kasih atas sarannya, saya sedikit memutarnya. Apakah sekarang sedikit lebih baik?
HyperNeutrino

4

Jelly , 8 byte

Ỵṭ€⁶ẋ4¤Y

Cobalah online!

Bagaimana?

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

Beberapa varian 8 byte lainnya adalah:
Ỵṭ€⁶Yµ4¡(4 pengulangan split pada baris baru, tempel spasi tunggal);
⁶ḤḤ;ЀỴY(menggandakan dua kali seperti mengalikan dengan 4, Ѐmemetakan argumen yang benar, sehingga kita bisa menyatukan dan bukannya menempel);
dan pengaturan ulang lainnya.


4

Emacs, 5 gantungan kunci, 5 byte

C-x h M-4 C-x tab

Dalam setidaknya satu pengkodean yang biasa digunakan untuk entri keyboard, masing-masing kunci kunci ini adalah satu byte: 18 68 b4 18 09 . Entri Emacs cenderung sangat keychord-berat, karena setiap karakter ASCII yang dapat dicetak mewakili dirinya sendiri kecuali sebagai karakter selanjutnya dari perintah multi-karakter (artinya hanya keychord yang dapat digunakan untuk memberikan perintah yang sebenarnya).

Saya tidak yakin bagaimana ini dibandingkan dengan Vim (berbeda dengan V). Tapi Vim cukup umum digunakan di PPCG, dan saya pikir sisi lain dari perang editor juga patut diperhatikan.

Ini mengasumsikan bahwa I / O dilakukan melalui buffer (setara dengan konvensi I / O normal untuk vim), atau diambil dari file dan output ke layar (yang datang ke hal yang sama). Jika Anda melakukan I / O sebagai gantinya wilayah, yang alami untuk beberapa bentuk program, Anda dapat menghapus dua karakter utama, untuk skor 3 byte; namun, saya tidak berpikir itu sesuai dengan aturan PPCG.

Penjelasan

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

Buildin terakhir yang digunakan di sini, tentu saja, sangat berguna untuk tantangan ini; sisanya hanya struktur.


3

PowerShell, 29 28 Bytes

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

-1 Berkat fergusq, menggunakan baris baru yang sebenarnya dan bukan `n

mengambil "$args"input sebagai string (dilemparkan menggunakan "s) dan -splits pada baris baru, kemudian lilitkan ( %{}) melaluinya, tambahkan empat spasi ( " "*4) dan baris ( $_) kemudian output secara implisit.


Bisakah Anda menggunakan karakter baris baru alih-alih `n?
fergusq

@fergusq memang bisa, diperbarui.
colsw

Agaknya karakter baris baru adalah \ r \ n pada windows yang masih dua byte - atau adakah aturan yang menjelaskan berapa banyak byte yang dibutuhkan oleh karakter baris baru?
poizan42

@ poizan42 Saya tidak yakin apakah ada meta post di atasnya, tapi saya bisa menjalankan ini di konsol default hanya dengan baris baru sehingga tidak ada alasan untuk menganggapnya tidak valid.
colsw


2

Röda , 21 byte

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

Cobalah online!

Ini adalah fungsi anonim. Input ditarik dari aliran.

Penjelasan:

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

Apakah identity()hanya menarik semua nilai dari STDIN?
Kritixi Lithos

@ KritixiLithos Ya. identitymenarik nilai dari aliran input dan mendorongnya ke aliran output. Ini identik dengan push(x) for x.
fergusq

2

Perl 5 , 11 + 1 = 12 byte

11 byte kode + -pbendera.

s/^/    /mg

Cobalah online!

Untuk sekali, penjelasan akan singkat: Regex menggantikan setiap awal baris ( ^dikombinasikan dengan /mpengubah) dengan empat spasi - akhir.


Ini membaca input baris pada satu waktu, bukan string secara keseluruhan.

@ ais523 Hampir setengah dari jawaban, termasuk dua teratas, membaca input dengan cara yang persis sama.
Maxim Mikhaylov

@ ais523 Saya akan mengatakan itu memproses input satu baris pada satu waktu, tetapi dapat membacanya sebagai keseluruhan string (jika Anda menyediakannya dengan <<< "..." misalnya). Apakah kamu tidak setuju?
Dada

@ ais523 setelah memikirkan sedikit lebih banyak tentang itu, saya pikir Anda benar. (Saya telah memperbarui kode saya sesuai)
Dada

2

Perl 6 , 11 byte

*.indent(4)

Cobalah

Diperluas:

*\       # declare a WhateverCode lambda/closure (this is the parameter)
.indent( # call the `indent` method on the argument
  4      # with the number 4
)

2

sed , 16 10 9 byte

s/^/    /

Cobalah online!

Suntingan

Ukuran solusi yang berkurang dari 16 menjadi 10 byte berkat Kritixi Lithos .

-1 byte terima kasih kepada seshoumara .


Anda dapat mencapai 15 byte dengan menggunakan -rflag (1 byte) sehingga Anda dapat menghapus garis miring terbalik sebelum tanda kurung.
Kritixi Lithos

Anda dapat mencapai 13 dengan menggunakan s/.*/ &/(menghapus tanda kurung dan menggantinya \1dengan &)
Kritixi Lithos

@KritixiLithos Terima kasih! Itu bekerja bahkan tanpa *.
Maxim Mikhaylov

Atau sederhananya s:^: :, selama 9 byte.
seshoumara

@seshoumara Saya belum pernah melihat titik dua menggunakan cara ini dalam skrip sed ... Apakah Anda tahu bagian mana dari manual yang menjelaskan sintaks ini?
Maxim Mikhaylov

2

Java 7, 58 byte

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

Penjelasan:

Coba di sini.

  • Tambahkan dengan empat spasi utama
  • Ganti setiap baris baru untuk baris baru + empat spasi

Saya selamanya sedih bahwa mekanisme regex Java membutuhkan perpustakaan lain untuk sebagian besar.
Poke

Saya pikir Anda perlureplaceAll
Khaled.K

@ Khaled.K Kenapa? Keduanya .replacedan .replaceAllakan mengganti semua kemunculan String yang dicari dengan penggantinya. .replacedigunakan untuk String literal, dan .replaceAlluntuk regex. Karena \nbukan regex, .replacedapat digunakan tanpa masalah untuk mengganti semua baris baru dengan baris baru + empat spasi, yang juga dapat Anda periksa di tautan "Coba garis" yang saya berikan.
Kevin Cruijssen

2

Brain-Flak , 109 103 byte

-6 Terima kasih kepada Wheat Wizard

Termasuk +1 untuk -c

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

Cobalah 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 Bagus. Saya harus mulai mencari redudansi seperti itu. Ini mungkin terjadi pada saya lebih dari push pop. Itu hanya otomatis sekarang. Terima kasih
Riley




1

MATL , 12 byte

10&Yb"4Z"@gh

Input adalah string dengan baris baru. Untuk memasukkan ini, Anda perlu menggabungkan karakter 10 antara karakter normal untuk mewakili baris baru (tanda kurung siku digabungkan):

['Code' 10 'More code']

Cobalah di MATL online!

Penjelasan

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

jalankan bersama php -R <code>. -Rmenjalankan kode yang diberikan untuk setiap baris input dan $argndiumpankan ke baris input saat ini. Jadi ini hanya mencetak setiap baris dengan tambahan empat ruang di depannya.


1

V , 3 byte (Tidak bersaing)

4>G

Ini adalah jawaban yang menggunakan fitur yang saya rencanakan untuk ditambahkan sebentar, tetapi baru saja menambahkannya hari ini. Itu membuat jawaban ini tidak bersaing dan tidak valid untuk menang. Tapi itu tetap keren untuk memamerkan fitur yang bermanfaat / kompetitif!

Cobalah online!

Penjelasan:

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

Rapi! Setidaknya bangga pada kenyataan bahwa bahasa Anda mengambil tempat teratas bahkan sebelumnya [bahkan jika itu adalah bahasa golf kotor ... nah, jk]!
Papayaman1000

1

Vim, 6 penekanan tombol

<Ctrl-V>G4I <Esc>

Mengasumsikan kursor berada di awal file, seolah-olah Anda membuka file dari dari baris perintah 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

Dengan vim dikonfigurasi untuk menggunakan 4 ruang untuk lekukan itu akan menjadi 2 keystrokes: >G.


Saya cukup yakin Anda dapat menghapus ZZdi akhir. Biasanya pengiriman vim baik-baik saja hanya keluaran ke buffer daripada ke file.
DJMcMayhem

Baiklah terima kasih, saya dihapus ZZkemudian.
daniero

1

Japt , 7 6 byte

Disimpan 1 byte berkat @ETHproductions

miS²²R

Cobalah online!

Penjelasan:

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

Pekerjaan yang baik. S²²akan bekerja dengan baik di tempat Sp4, bukan berarti tidak ada yang menyelamatkan Anda dalam hal ini. Omong-omong, saya pikir Anda bisa melakukan hanya miS²²Runtuk menghapus Rbendera (pada dasarnya miS²², tetapi berpisah di baris baru sebelumnya dan bergabung dengan baris baru sesudahnya)
ETHproduksi

1

UberGenes , 62 byte

Saya harus memasukkan tantangan ini dengan UberGenes, karena program yang sangat mirip (yang hanya menyisipkan satu spasi) adalah salah satu program pertama yang pernah saya tulis dalam bahasa tersebut, dan sepertinya mudah untuk dimodifikasi untuk tujuan ini.

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

Bagaimana itu bekerja:

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

Terima kasih kepada @ Challenger5 untuk koreksi

qN/{S4*\N}%

Cobalah online!

Penjelasan

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
Tidak berfungsi abc\n\ndef. Itu kembali ....abc\n....defkarena %membuang elemen kosong. Anda ingin menggunakan /untuk membagi sebagai gantinya, karena itu menyimpan elemen kosong.
Buah Esolanging

@ Challenger5 Terima kasih, diperbaiki!
Luis Mendo

1

J-uby , 17 16 Bytes

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

Penjelasan

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

Ini secara langsung diterjemahkan menjadi (dalam Ruby):

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

1

Sebenarnya , 16 byte

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

Cobalah online!

Penjelasan:

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 byte

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

Cobalah online!


Solusi rapi, tetapi Anda bisa memilih s;char*l;f(){while(getline(&l,&s,stdin)+1)printf("____%s",l);}62 byte
Khaled.K

@ Khaled.K Terima kasih, tetapi sepertinya tidak berhasil tanpa menyertakan <stdio.h>(karena stdin).
Steadybox
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.