In den nebligen Jahren von damals, als Fanfold-Terminals über die Erde gingen, lebte eine seltsame Kreatur. Seltsamerweise verkrüppelt und doch seltsam mächtig, wimmelte der Zeileneditor in unzähligen Zahlen durch die Programmierlandschaft. die Erde bedecken, so weit das Auge reicht.
Jetzt ist es in schwere Zeiten gefallen. Diese riesige Bevölkerung jagte, jagte und wurde vom Aussterben bedroht. Es sind nur noch wenige Exemplare übrig, die meisten in beengten und unversehrten Käfigen in der weniger erleuchteten Art von Zoo, obwohl einige ausgestopfte und montierte Beispiele in Backwater-Museen zu sehen sind. Oh, und das gibt es ed
.
Frankenstein-artig werden wir das edle Tier wiederbeleben!
Befehle
Unser Editor ist ziemlich minimal und unterstützt die folgenden Befehle
Bewegungsbefehle fokussieren
<number>[,<number>]
- Bewegen Sie den Fokus auf die angegebene Zeile und wenn das zweite Argument für die Statusspalte angegeben ist. Übermäßige Zeilennummer erhält die letzte Zeile. Übermäßige Spaltennummer erhält das Zeilenende.,<number>
- Gehen Sie zur Spaltennummer in der aktuellen Zeilee
- Verschieben Sie den Fokus an das Ende der Datei, beginnen Sie jedoch keine neue Zeile.b
- Bewegen Sie den Fokus an den Anfang der Datei.
Informationsbefehle
L
- Geben Sie den aktuellen Kontext wieder. Die fünf auf der aktuellen Zeile zentrierten Zeilen werden gedruckt. Alle fünf Zeilen werden durch ein Zeichen eingerückt. Die aktuelle Zeile ist mit einem ">" gekennzeichnet, die anderen mit einem "". Unter diesen Zeilen wird eine weitere Zeile gedruckt, die bis auf ein "^" in der aktuellen Spalte vollständig aus Leerzeichen besteht (insgesamt werden sechs Zeilen gedruckt).l
- Echo der aktuellen Zeilep [[<start>],[<end>]]
- Drucken Sie die Datei von der Anfangs- bis zur Endadresse. Diese Werte sind standardmäßig 1 und 0 (das Ende der Datei).
Befehle zum Ändern von Dateien
A [<text>]
- Gehen Sie zu der Zeile hinter dem Ende der Datei (dh beginnen Sie eine neue Zeile) und fügen Sie (möglicherweise) Text hinzu.<return>
(alleine) - Fügen Sie eine neue Zeile ein.a <return> <return>
Fügt also eine neue Zeile nach der aktuellen ein.r <text>
- Ersetzt alles vom Fokus bis zum Ende der Zeile durch Text.i [<text>]
- Fügt Text gefolgt von einer neuen Zeile am aktuellen Fokus ein. Jeder Teil dieser Zeile, der über den Fokus hinausgeht, endet in der nächsten Zeile.I <text>
- Fügt Text am aktuellen Fokus ein, wobei der Rest der Zeile erhalten bleibt. Der Fokus bleibt auf dieser Linie.d
- Löschen Sie den Inhalt der aktuellen Zeile oder entfernen Sie die Zeile, wenn die aktuelle Zeile bereits leer ist.j
- Verbinden Sie diese Zeile mit der nächsten
Von dieser letzten Gruppe enden die ersten vier, wobei der Fokus in die nächste Zeile verschoben wird, während I
der Fokus am Ende des hinzugefügten Textes beibehalten wird. Beim Löschen oder Fokus Verbindung bleibt auf der gleichen Zeile und Spalte Nummer .
Die Interpretation von Zeilennummern in Befehlen
Zahlen, die mit '+' oder '-' beginnen, werden als Offsets von der aktuellen Zeilennummer interpretiert . Zahlen ohne Vorzeichen werden als absolute Zeilennummern interpretiert, mit der Ausnahme, dass '0' die letzte Zeile der Datei bedeutet.
Prompt und Interaktion
Der Editor fungiert als Shell, und die Eingabeaufforderung hat die Form, <line>','<column>'>'
in der Zeile die Zeilennummer ist, mit der Ausnahme, dass "Ende" verwendet wird, wenn der Fokus auf dem letzten Zeichen der Datei liegt.
Jeder Befehl wird nur akzeptiert, wenn der Benutzer die Newline drückt. Und wirkt.
Readline-Unterstützung ist zulässig, aber nicht erforderlich.
Außer den sich ändernden Werten von und in der Eingabeaufforderung wird keine Rückmeldung gegeben, sofern dies nicht ausdrücklich in der Befehlsbeschreibung angegeben ist.
Wertung
Dies ist Code-Golf , daher gewinnt die kürzeste Antwort in jeder Sprache.
Antworten:
C (gcc),
12881212118811711146 BytesDemo
Beim ersten Versuch, so etwas zu tun, gibt es wahrscheinlich einige verpasste Möglichkeiten, es kleiner zu machen. (Danke Jerry Jeremiah für den Hinweis)
Hier ist eine (etwas) besser lesbare Version:
Diese Herausforderung lässt eine Menge Eckfälle zu erforschen - ich glaube, ich habe inzwischen alle Fehler behoben, aber wenn jemand noch einen findet, kommentieren Sie dies bitte. In Bezug auf die Revisionen habe ich die Anzahl der Bytes für frühere Versionen entfernt, die subtile Fehler enthielten.
quelle
D
nach der Schleife, ich glaube , Sie durch Ersetzen des Verweises speichern Byteso-1
undo
mito
,--o
,o
,o
,++o
. Sie können ähnliche Dinge auchx
im selben Bereich ausführen.--o
für den ersteno-1
hier wäre UB, weil es mit einem anderen Zugriff vono
:(AWK ,
747 807 829807 BytesProbieren Sie es online aus!
Durch Entfernen des
else
s werden die Zeilen etwas kürzer / lesbarer, aber die Cursorzuordnung ist etwas komplizierter.Nur zum Kichern habe ich eine Version erstellt, um ein bisschen mehr "Funktionalität" hinzuzufügen:
q
Beendet das Programmw <outfile[defaults to input file]>
schreibt die Änderungen.Probieren Sie es online aus!
quelle
L
Befehl ...end>
an der EOF-Position angezeigt , Ihre wirdend,[col]>
in der letzten Zeile angezeigt . beide sind nicht genau das , was angegeben ist, denke ich ...6502 Assembly (C64, BASIC Loader),
57615352 ByteDemo
Dieser Eintrag dient nur zum Spaß und wird wahrscheinlich nie eine anständige Byteanzahl erreichen. Es ist nur so, weil die Herausforderung ein "altes" Werkzeug ist, warum es nicht für eine alte Maschine implementieren;)
Während der Erstellung dieses Dings wurde ich erneut daran erinnert, dass das C64-System keine sinnvolle Möglichkeit zum Konvertieren zwischen Zeichenfolgen und Ganzzahlen bietet - nur Zeichenfolgen und Gleitkommazahlen werden behandelt, und dies ist lächerlich, sodass dieser Code einen eigenen Code enthält Konvertierungsroutinen. Tatsächlich werden nur
GETIN
(ein einzelnes Zeichen von der Tastatur gelesen) undCHROUT
(ein einzelnes Zeichen auf den Bildschirm schreiben ) aufgerufen .Jetzt ist Assembler wahrscheinlich die "am wenigsten golfige" Sprache überhaupt. Um dies zu "golfen", ist meine hier gezeigte Idee ein BASIC-Loader, der die Bytes der endgültigen Binärdatei an einen Speicherort schreibt und dorthin springt. Es ist ein funktionierendes BASIC-Programm auf diese Weise;) Wenn jemand eine bessere Idee hat, wie man Golf spielt, hinterlasse bitte einen Kommentar!
Der Textpuffer ist ziemlich begrenzt und belegt den Platz zwischen
$6000
und$BFFF
(BASIC ROM ist ausgeschaltet, da es nicht benötigt wird) und das Programm selbst befindet sich unter$C000
. Alles in allem ist Platz für 255 Zeilen mit jeweils 95 Zeichen, und das Programm überprüft keine Grenzen. Spielen Sie also damit und stellen Sie sicher, dass Ihre Zeilen nicht zu groß werden;)Schließlich sehen hier für die lesbare Quelle , auch mein „Golf - Tool“.
Da diese hübsche Sachen begrenzt ist, und der C64 kann es besser, hier kommt die „Deluxe Edition“ mit 80 Spalten angezeigt. Dazu muss der Kernal deaktiviert sein, daher müssen grundlegende Dinge wie ein Tastaturtreiber, eine Schriftart, eine Bitmap-Manipulationslogik für die Ausgabe, die Interrupt-Behandlung usw. enthalten sein. Daher ist es eine ziemliche Herausforderung, all dies in den 4K-Bereich zu integrieren
$C000-$CFFF
(und dies auch) wird benötigt, um das Programm aus einem BASIC-Programm zu laden, damit es funktioniert).Einige zufällige Fakten zu dieser Version:
aber knapp ... habe jetzt 6 "Ersatz" Bytes36863841 Bytes;)Basisladerist137431338513963 Bytes (verwendet die gespeicherten Bytes für die neue Funktion "Zeilenbearbeitung").$D000-$DFFF
$E000-$FF3F
, der frei zugänglich ist, da der Kern ausgeschaltet istq
Beendet den EditorRIGHT
undLEFT
, Pos1 (HOME
), Ende (SHIFT + HOME
) und Rücktaste (DEL
)Demo
Programm zum Eingeben, wenn Sie das Gefühl eines 80er-Jahre-Computermagazins wünschen:
Lesbarer Quellcode .
quelle