Sebagai perayaan Notepad tua yang baik , kami akan memperlakukan carriage return dan line feeds seperti yang mereka maksudkan, dan bukan apa yang mereka (ab-) gunakan untuk hari ini.
Diberikan string yang terdiri dari ASCII yang dapat dicetak ditambah umpan garis (␊; LF; esc \n
; hex 0A; dec 10) dan carriage return (␍; CR; esc \r
; hex 0D; dec 13), menyebabkan Try It Online untuk menunjukkan bagaimana karakter yang dapat dicetak dicetak akan diposisikan jika dicetak pada printer yang mengambil dua karakter kontrol secara harfiah:
- pada umpan baris, lanjutkan mencetak satu baris lebih jauh ke bawah
- setelah carriage return melanjutkan pencetakan dari tepi kiri
- beberapa carriage return berulang berperilaku seperti pengembalian carriage tunggal
Dikarenakan perangkat modern mengalami masalah dengan overstriking , serangkaian pengembalian carriage satu atau lebih akan, kecuali pada awal input, tidak pernah terjadi tanpa setidaknya satu umpan baris sebelum dan / atau mengikuti. Namun, dua putaran carriage return dapat dipisahkan oleh satu baris feed.
Setiap jumlah ruang putih tambahan tambahan dapat diterima, baik di sisi kanan dari setiap baris dan di bawah seluruh teks, selama setidaknya jumlah ruang putih yang diberikan dalam input dipertahankan.
Contoh (menggunakan \n
dan \r
untuk umpan baris dan pengembalian carriage)
Lorem ipsum dolor sit amet,
Lorem ipsum dolor sit amet,
consectetur adipiscing\nelit, sed
consectetur adipiscing
elit, sed
do eiusmod\r\ntempor incididunt\n\n ut labore
do eiusmod
tempor incididunt
ut labore
et dolore\n\rmagna \r\r\naliqua. Ut
(perhatikan spasi tambahan)
et dolore
magna
aliqua. Ut
\nenim ad minim veniam,\n\r quis nostrud
enim ad minim veniam, quan nostrud
\rexercitation\r\n\rullamco laboris\n\r\nnisi ut aliquip ex\n\n\rea commodo consequat.\n\n
latihan ullamco laboris nisi ut aliquip ex Sebagai akibatnya.
stty -onlcr;cat
.Jawaban:
Arang , 10 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Nonaktifkan bantalan kanan.
Ulangi input.
Cetak karakter saat ini. Ini secara otomatis menangani
\n
(yang diperlakukan Arang seperti\v
dalam konteks ini) tetapi diterjemahkan\r
menjadi\r\n
, jadi ...... periksa untuk
\r
...... dan jika demikian maka naik kembali ke garis.
sumber
l
bendera dari tautan TIO Anda?Ruby ,
2417 byteCobalah online!
Ini tidak bekerja pada TIO, tetapi bekerja pada konsol Linux.
sumber
tr "
saya pikir.\n
menjadi\v
ketika dijalankan di konsol Linux.Java 10,
211207206 byteCobalah online.
Penjelasan:
Jawaban lama sebelum tantangan diubah
151148 byte :Penjelasan:
Tidak bekerja pada TIO, tidak bekerja pada Windows Command Prompt:
sumber
JavaScript (Node.js) , 85 byte
Cobalah online!
sumber
Python 2 ,
150128122104103 byteCobalah online!
Disimpan:
sumber
l,n,i=[l,l+c,l+' '*i*n+c,n,1,0,0,i,i+1]['\r\n'.find(c)%3::3]
hanya sedikit lebih pendek.C (gcc) ,
10094 byteAsumsikan pengkodean ASCII (
'\r'==13
,'\n'==10
); sesuaikan dengan sistem lainnya.Cobalah online! (membutuhkan Javascript)
Versi yang mudah dibaca
c
adalah posisi kolom saat ini;d
adalah jumlah spasi yang harus dimasukkan sebelum karakter yang dapat dicetak. Keduanya dianggap nol pada saat masuk ke fungsi.Program uji
sumber
char
Ini hanya kecilint
, mereka harus dipertukarkan (secara teori). Mungkingcc
akan melakukan pemeran tersiratc,d
. Fungsi Anda harus - tanpa kode pembersihan lainnya - dapat berjalan beberapa kali. Jadi Anda kemungkinan besar perlu menambahkanc=d=0
.Python 3 ,
10194 byteBerdasarkan jawaban TFeld .
Cobalah online!
Tidak disatukan
sumber
Bersih ,
9291 byte-1 terima kasih kepada Laikoni!
Catatan:
\
di\r
dihilangkan dari bytecount karena Linux CG menangani literal\r
dan\n
s.Catatan: Windows CG membutuhkan
\n
dan\r
melarikan diri, jadi +3 jika harus dijalankan pada Windows.Cobalah online!
Aplikasi parsial
? :: Int [Char] -> [Char]
dengan 0 sebagai argumen pertama awal. Ini turun melalui masing-masing karakter melacak berapa banyak dilalui, hitungan ulang ketika bertemu carriage return dan ketika bertemu garis baru itu menambahkan ruang sama dengan jumlah karakter yang dilalui pada titik itu.sumber
?_[]=[]
bisa?_ e=e
.Haskell ,
9387 byteCobalah online!
Solusi yang sangat mudah. # adalah fungsi infix yang secara rekursif menciptakan output satu karakter pada satu waktu sambil menjaga penghitung posisi karakter (n) dan menandai kapan harus menambahkan spasi setelah baris baru (x).
sumber
c
, menggunakanl$r
alih-alihc 0 0r
danc _ _ e=e
(atau lebih tepatnya(_#_)e=e
).