Diberikan masukan berikut untuk program:
- Daftar karakter awal blok
- Daftar karakter ujung blok
- String untuk memformat
memformat string dengan blok dibatasi oleh dua set karakter yang indentasi.
Pemformatan dilakukan dengan dua spasi per level dan tanda kurung ditempatkan seperti yang ditunjukkan pada contoh di bawah ini. Anda dapat menganggap set karakter pembuka dan penutup menjadi terpisah.
Misalnya untuk {[(<
dan }])>
sebagai set karakter pembuka dan penutup dan string berikut:
abc{xyz{text[note{comment(t{ex}t)abc}]}}
output berikut diharapkan:
abc
{
xyz
{
text
[
note
{
comment
(
t
{
ex
}
t
)
abc
}
]
}
}
Anda tidak boleh membuat kode-keras daftar karakter "tanda kurung". Namun, bagaimana input diberikan tidak ditentukan; ini bisa berupa argumen baris perintah atau melalui input standar, seperti yang Anda inginkan.
code-golf
string
whitespace
balanced-string
Bhash Prashant
sumber
sumber
./program 'p' 'q' <<< '1p23p45q67q8'
Atau apakah hanya perlu dukungan{[(<
dan}])>
?Jawaban:
Ruby,
1061019695Input disediakan melalui baris perintah.
sumber
~-j+=1
alih-alih(j+=1;j-1)
. Selain itu, menggunakan di$.
mana - mana alih-alihj
memungkinkan Anda untuk menghapusj=0
, yang menyimpan karakter lain.Perl -
1319694 karakterSepertinya harus ada ruang untuk menghilangkan ekspresi umum, setidaknya, tapi itu adalah contoh cepat yang menangani contoh, serta hipotesis Joey Adams tentang tanda kurung yang sewenang-wenang.
Memang ada banyak ruang untuk perbaikan:
... dan masih sedikit lagi:
sumber
Mathematica (golf bukan kode)
Uji
Sebagai bonus, fungsi berikut dapat digunakan untuk memformat ekspresi mathematica
EDIT (golf bukan kode) Diperbarui dengan kontrol granular halus atas cara baris baru diberikan
Keluaran
sumber
indent
. Apakah tujuan Anda kode singkat maksimal, atau keterbacaan? Ada beberapa cara untuk membuat kode itu lebih pendek, jika itu memang tujuan Anda. Juga: "Anda tidak boleh membuat kode-keras daftar karakter" tanda kurung "." namun bukankah itu tepatnya yang Anda lakukan di sini? Bagaimanapun, maaf kedengarannya negatif; itu hanya menurut saya jawaban yang aneh untuk tantangan Anda sendiri.JavaScript,
255227205 karakterHei, panjangnya sangat cocok dalam satu byte! : DIni sebuah fungsi, berikan karakter awal, karakter akhir, lalu teks.
sumber
Python - 162 karakter
sumber
Python 2.7.X - 136 karakter
Pemakaian : $ ./foo.py '(' ')' '(ab (cd (ef) gh) ij)'
Output yang dihasilkan:
sumber
print
pernyataan?C -
213209Aku benci kesalahan bodoh ...>. <
Membaca paren kiri dari argumen baris perintah pertama, paren kanan dari argumen kedua, dan masukan untuk indentasi pada stdin.
Dicetak cantik & dikomentari:
sumber
C (
159225 karakter)Harganya 66 karakter tambahan hanya untuk memperbaiki bug dengan baris kosong :( Terus terang, saya butuh pendekatan baru, tapi saya akan menyebutnya sehari untuk saat ini.
Pendekatan yang agak cepat & kotor. Ini memiliki bug menghasilkan garis kosong antara kurung tutup berturut-turut, tetapi jika tidak ia melakukan pekerjaan (atau jadi saya pikir). Saya akan mengunjungi lagi untuk solusi yang lebih baik & bersih, sekitar minggu ini.
char * b adalah set kurung pembuka, char * e adalah set kurung tutup penutupan dan char * s adalah string input.
sumber
Perl - 69 byte
TMTOWTDI menyederhanakan kode
sumber
Scala (2.9), 211 karakter
sumber
Perl -
8985 byteVersi jawaban Hojung Youn yang menerima karakter blok melalui dua argumen.
Disebut seperti:
sumber
Python3,
184182 karakterContoh:
sumber
_,p,q,t=sys.argv
Groovy, 125
Anda dapat menyimpan skrip dalam file indent.groovy dan mencobanya dengan:
groovy indent.groovy "abc {xyz {text [note {comment (t {ex} t) abc}]}}" "{[(" ")) ]} "
sumber
Python - 407
Versi program yang ungolfed:
Argumen untuk program ini adalah (dalam urutan): tanda kurung buka, tanda kurung penutup, dan teks untuk indentasi.
Contoh ($ is prompt baris perintah):
sumber
D (300)
membutuhkan string diakhiri null untuk memeriksa batas (jika tidak
if(*s)
perlu diubah keif(s.length)
)sumber
Jawa
Bukan
codegolf version
! Dengan asumsi kita memiliki versi split () yang mencakup delims,sumber
StringUtils
bukan bagian dari JDK Standar.C 284 Karakter spasi Non White
Saya bukan penggemar kebingungan tapi yah ...
Penggunaan: ./program start_brackets end_brackets string_to_parse
sumber
php
(187)(153)Fungsi mengambil string, membuka pembatas, mengakhiri pembatas sebagai argumen.
sumber
C, 256
Parameter:
Saya memecahkan kode untuk menghindari scrollbar horizontal.
Program lengkap adalah 363 karakter.
sumber
VB.net (? C)
Bahasa tidak cocok untuk kode golf, jadi saya menggunakan pendekatan yang tidak umum. Menggunakan pendengar jejak untuk output ke konsol.
Menggunakan argumen commandline untuk input
sumber
Powershell, 146 Bytes
Penjelasan Tidak Dikunci
sumber
C, 181 karakter
Cukup banyak pendekatan yang paling mudah dibayangkan. Iterate melalui string (v [3]), jika itu adalah kurung kurawal (seperti didefinisikan dalam v [1]), tingkatkan tingkat indentasi, jika itu kurung kurawal (seperti yang didefinisikan dalam v [2]), kurangi level indentasi .
sumber
C,
114121Tidak terlalu bagus, tetapi sebuah solusi .. sebuah baris kosong mungkin muncul sebelum / sesudah tergantung pada apakah input dimulai / selesai dengan tanda kurung.
Dengan pembatasan baru, pendekatan ini hampir tidak berguna untuk bermain golf.
sumber