Pada tahun-tahun berkabut dahulu kala, ketika terminal fanfold berjalan di bumi, hiduplah makhluk aneh. Aneh dan lumpuh namun anehnya kuat, editor baris melintas di lanskap pemrograman dalam jumlah yang tak terhitung; menutupi bumi sejauh mata memandang.
Sekarang jatuh pada masa-masa sulit. Populasi besar itu diburu, diburu, dan didorong ke ambang kepunahan. Hanya sedikit spesimen yang tersisa, sebagian besar di kandang sempit dan tidak terlindung di kebun binatang yang kurang tercerahkan, meskipun beberapa contoh yang diisi dan dipasang dapat dilihat di museum-museum terpencil. Oh, dan disana ed
.
Seperti Frankenstein, kita akan membangkitkan kembali binatang buas!
Perintah
Editor kami cukup minim dan akan mendukung perintah berikut
Fokus perintah bergerak
<number>[,<number>]
- Pindahkan fokus ke baris yang dinyatakan dan jika argumen kedua diberikan ke kolom negara. Nomor baris yang berlebihan mendapatkan baris terakhir. Nomor kolom yang berlebihan mendapatkan akhir dari baris.,<number>
- pindah ke nomor kolom pada baris saat inie
- Pindahkan fokus ke akhir file tetapi jangan mulai baris baru.b
- Pindahkan fokus ke awal file.
Perintah informasi
L
- Gema konteks saat ini. Lima garis yang berpusat pada garis saat ini dicetak. Semua lima baris di-indentasi oleh satu karakter; baris saat ini ditandai dengan ">", yang lain dengan "". Di bawah garis-garis ini baris lain dicetak seluruhnya terdiri dari spasi kecuali untuk "^" di kolom saat ini (total enam baris dicetak).l
- Bergema garis saat inip [[<start>],[<end>]]
- Cetak file dari awal hingga akhir alamat. Nilai ini default ke 1 dan 0 (akhir file).
Mengubah perintah file
A [<text>]
- Pindah ke baris di luar akhir file (yaitu mulai baris baru) dan (mungkin) tambahkan teks.<return>
(sendiri) - Masukkan baris baru. Dengan demikiana <return> <return>
menyisipkan baris baru setelah yang sekarang.r <text>
- Mengganti segala sesuatu dari fokus ke akhir baris dengan teks.i [<text>]
- menyisipkan teks yang diikuti oleh baris baru pada fokus saat ini. Bagian mana pun dari garis ini di luar fokus berakhir pada baris berikutnya.I <text>
- menyisipkan teks pada fokus saat ini, menjaga sisa baris. Fokus tetap pada garis ini.d
- Hapus konten baris saat ini atau jika baris saat ini sudah kosong, hapus baris.j
- gabungkan baris ini ke yang berikutnya
Dari kelompok terakhir ini, empat ujung pertama dengan fokus bergerak ke baris berikutnya, sambil I
mempertahankan fokus di akhir teks yang ditambahkan. Ketika menghapus atau bergabung dengan fokus tetap pada baris yang sama dan kolom nomor .
Interpretasi nomor baris dalam perintah
Nomor yang diawali dengan '+' atau '-' ditafsirkan sebagai offset dari nomor baris saat ini. Angka tanpa tanda ditafsirkan sebagai angka baris absolut, kecuali bahwa '0' berarti baris terakhir file.
Prompt dan interaksi
Editor berfungsi sebagai shell, dan prompt memiliki bentuk di <line>','<column>'>'
mana baris adalah nomor baris kecuali bahwa "akhir" digunakan ketika fokusnya adalah pada karakter terakhir file.
Setiap perintah hanya diterima ketika pengguna menekan baris baru. Dan berdampak.
Dukungan readline diizinkan tetapi tidak diperlukan.
Tidak ada umpan balik yang diberikan kecuali nilai perubahan dari dan di prompt, kecuali secara eksplisit dinyatakan dalam deskripsi perintah.
Mencetak gol
Ini adalah kode-golf , jadi jawaban tersingkat di setiap bahasa menang.
Jawaban:
C (gcc),
12881212118811711146 byteDemo
Pertama kali mencoba melakukan sesuatu seperti ini, jadi mungkin ada beberapa peluang yang terlewatkan untuk membuatnya lebih kecil. (Terima kasih Jerry Jeremiah karena menunjukkan beberapa)
Berikut ini (versi) yang lebih mudah dibaca:
Tantangan ini menyisakan cukup banyak kasus sudut untuk dijelajahi - saya kira saya sudah memperbaiki semua bug sekarang, tetapi jika seseorang menemukan satu bug lagi, silakan komentar. Mengenai revisi, saya menghapus jumlah byte untuk versi sebelumnya yang berisi bug halus.
sumber
D
setelah loop, saya pikir Anda dapat menyimpan byte dengan mengganti referensio-1
dano
dengano
,--o
,o
,o
,++o
. Anda juga dapat melakukan hal serupax
di area yang sama.--o
untuk yang pertama dio-1
sini adalah UB karena tidak disusul dengan akses lain dario
:(AWK ,
747 807 829807 byteCobalah online!
Menghapus
else
s membuat garis sedikit lebih pendek / mudah dibaca tetapi tugas kursor sedikit lebih rumit.Hanya untuk cekikikan, saya membuat versi untuk menambahkan lebih banyak "fungsionalitas":
q
keluar dari programw <outfile[defaults to input file]>
menulis perubahan.Cobalah online!
sumber
L
perintah di sini ...end>
di posisi EOF, milik Anda munculend,[col]>
di baris terakhir. keduanya tidak persis apa yang ditentukan kurasa ...6502 Majelis (C64, pemuat BASIC),
57615352 byteDemo
Entri ini hanya untuk bersenang-senang dan mungkin tidak akan pernah mencapai jumlah byte yang layak. Itu hanya karena tantangannya adalah tentang beberapa alat "kuno", mengapa tidak menerapkannya untuk mesin kuno;)
Dalam proses menciptakan hal ini, saya diingatkan sekali lagi bahwa sistem C64 tidak memberikan cara yang masuk akal untuk mengkonversi antara string dan integer - hanya string dan float yang dibahas dan ini konyol, jadi bagian kode ini berisi sendiri rutinitas konversi. Bahkan, satu-satunya rutinitas OS yang dipanggil adalah
GETIN
(baca satu karakter dari keyboard) danCHROUT
(menulis satu karakter ke layar).Sekarang, assembly mungkin adalah bahasa "paling tidak golf". Untuk cara "golf" ini, ide saya seperti yang terlihat di sini adalah loader BASIC, menulis byte biner terakhir ke beberapa lokasi memori dan melompat ke sana. Ini adalah program BASIC yang bekerja dengan cara ini;) Jika ada yang memiliki ide yang lebih baik tentang cara bermain golf ini, silakan tinggalkan komentar!
Buffer teks cukup terbatas, menghabiskan ruang di antara
$6000
dan$BFFF
(BASIC ROM dimatikan karena tidak diperlukan) dan program itu sendiri berada di$C000
. Semua dalam semua, ada ruang untuk 255 baris dengan masing-masing 95 karakter, dan program tidak melakukan apa pun batas memeriksa, sehingga bermain dengan itu, pastikan garis Anda tidak tumbuh terlalu besar;)Akhirnya, lihat di sini untuk sumber yang dapat dibaca , termasuk "alat golf" saya.
Karena ini adalah hal yang sangat terbatas, dan C64 dapat melakukan lebih baik, inilah "edisi mewah" menggunakan tampilan 80 kolom. Untuk melakukan ini, Kernal harus dinonaktifkan, jadi hal-hal dasar seperti driver keyboard, font, logika manipulasi bitmap untuk output, penanganan interupsi dll harus dimasukkan, oleh karena itu cukup sulit untuk menyesuaikan semua ini di area 4K
$C000-$CFFF
(dan ini diperlukan untuk memuat program dari program BASIC untuk bekerja).Beberapa fakta acak tentang versi ini:
tapi sempit ... punya 6 "cadangan" byte sekarang36863841 byte;)137431338513963 byte (digunakan byte yang disimpan untuk fitur baru "pengeditan baris")$D000-$DFFF
$E000-$FF3F
, dapat diakses secara bebas karena kernal dimatikanq
keluar dari editorRIGHT
danLEFT
, Pos1 (HOME
), End (SHIFT + HOME
) dan backspace (DEL
)Demo
Program untuk mengetik di diri Anda, jika Anda ingin komputer mag 80-an merasa:
Kode sumber yang dapat dibaca .
sumber