Unsere neue Bank braucht ein Kassentransaktionssystem, aber es gibt ein Problem. Auf unserem Server sind nur noch wenige hundert Byte Speicherplatz vorhanden, sodass Sie sehr kompakten Code schreiben müssen.
Datenbank
Zum Glück ist unsere Datenbank sehr einfach (sie wurde vom Schülersohn unseres Bankpräsidenten erstellt), und wir haben bisher nur wenige Kunden.
Datei Bank.data
ist:
Account Firstname Lastname Balance Date
123 Maree Jones 346.22 2014-12-13
035 Thomas Breakbone 3422.02 2015-01-03
422 Henrietta Throsby-Borashenko 277847.74 2014-11-21
501 Timmy Bongo 7.95 2014-11-04
105 William Greene 893.00 2015-01-06
300 Mary Galoway 1228.73 2014-12-28
203 Samantha Richardson 2055.44 2014-11-01
151 Bruce Wayne 956119.66 2014-10-09
166 Chip Stonesmith 266.71 2014-12-15
888 Alexandria Cooper 1299.82 2014-12-30
Anwendungsspezifikation
Unsere Bankanwendung muss die folgenden Befehle implementieren:
open <firstname> <lastname>
Erstellt (öffnet) ein neues Konto und druckt eine eindeutige dreistellige Kontonummer.
withdraw <account> <amount>
Betrag von einem Konto abheben.
deposit <account> <amount>
Zahlen Sie einen Betrag auf ein Konto ein.
close <account>
Konto schließen, wenn leer.
report <fieldname>
Drucken Sie einen Bericht der Datenbank, sortiert nach Feldnamen. Verschieben Sie die Feldname-Spalte an die erste Position. Jede Spaltenbreite ist das Maximum der breitesten Daten- und Feldnamenbreite, getrennt durch ein Leerzeichen. Die erste Zeile enthält die Feldtitel. Nur die Salden müssen mit einem $
Leitzeichen richtig begründet sein .
print <account>
Drucken Sie die Feldnamen aus und zeichnen Sie sie für dieses Konto auf, das wie der Bericht formatiert ist.
Jedes Mal, wenn ein Datensatz geändert wird, muss das Date
Feld im Datensatz auf das aktuelle Datum aktualisiert werden.
Die Anwendung zeigt eine "#" - Eingabeaufforderung an, wenn auf einen Befehl gewartet wird. Wenn ein Befehl fehlschlägt (z. B. eine Operation auf einem unbekannten Konto oder unzureichendes Guthaben), muss die Anwendung die informative Fehlermeldung "fehlgeschlagen" drucken. Das Programm muss nach jeder Änderung Änderungen in die Datei zurückschreiben und bei jedem Befehl aus der Datei lesen, da weltweit viele Kassiererprogramme gleichzeitig an der Datei arbeiten (wir benötigen keine Dateisperrung - dies kann die Leistung beeinträchtigen).
BEARBEITEN: Zeichenfolgenfelder sind einfache ASCII-Felder (az, AZ, -) ohne Leerzeichen und der Betrag liegt immer zwischen 0,00 und 1000000000,00 (1 Milliarde) Dollar, wobei 2 Dezimalstellen Cent angeben. Das Datum wird in jeder Filiale in Ortszeit angegeben (eine einfache Lösung, die jedoch später zu Problemen führen kann ...).
Ausgabe
Die Antworten müssen nachweisen, dass sie der Spezifikation entsprechen. Bitte hängen Sie die Ausgabe Ihres Programms an, nachdem Sie die folgenden Befehle verarbeitet haben:
report Balance
open Clark Kent
print 001
deposit 001 4530
withdraw 105 893
close 105
report Date
Stellen Sie sicher, dass Sie eine Originalkopie der Bank.data
oben angegebenen Datei verwenden.
Wertung
Dies ist Code-Golf, also ist Ihre Punktzahl die Byteanzahl Ihres Codes. Standardlücken sind verboten.
<firstname>
und<lastname>
und den Bereich und die Genauigkeit von angenommen werden<amount>
? (Zum Beispiel kann es einige Optimierungen geben, die möglich sind, wenn<amount>
immer genau zwei Dezimalstellen vorhanden sind - oder Sie möchten, dass das Programm von der Niederlassung im Nahen Osten verwendet werden kann, wo die meisten Währungen drei Dezimalstellen verwenden).<firstname>
und<lastname>
beide nur Gebraucha-zA-Z
, sondern auch eine einfache Erklärung , dass sie niemals Tabulatoren enthalten ermöglicht TSV verwenden. Wenn es sich um eine beliebige Folge von ASCII-Zeichen handeln kann, ist eine andere Form der Escape- oder Begrenzung als mit einem Ein-Zeichen-Trennzeichen erforderlich.Antworten:
Ruby, 918
Diese Frage ist für das Golfen ziemlich lang, da sie aus vielen kleinen Teilen besteht. Für einen Moment wollte ich fast einige zusätzliche Klassen definieren, um die Dinge mit Polymorphismus usw. sauberer zu machen (aber am Ende tat ich es nicht).
Kann wahrscheinlich weiter Golf gespielt werden. Aber bis jetzt kann ich nicht einmal verfolgen, was ich in der letzten Zeile getan habe.
Ausgabe:
quelle
T-SQL 1919
Wird mit "exec q 'Your command here'" aufgerufen. Ich glaube nicht, dass T-SQL tatsächlich Benutzereingaben erhalten kann, daher denke ich, dass dies so nah wie möglich ist.
Verwendet das Dienstprogramm bcp für E / A, das ich zuvor noch nicht ausprobiert habe, da es mit SQL Server 2014 geliefert wird.
Ich bin mir nicht sicher, ob es besser oder schlechter wäre, nur die gespeicherte Hauptprozedur zu verwenden und den Rest des Codes dort abzulegen.
quelle
Cobra - 1505
Ausgabe:
quelle
Python 2 - 2205 Bytes
Hier ist ein ziemlich ausführlicher Lösungsversuch.
Hier ist ein Beispiel der verwendeten Anwendung:
quelle
Charge - 1827
Batch ist nicht für solche Dinge gebaut.
Die Funktionen Sortieren (innerhalb des Berichts) und Drucken müssen noch implementiert werden.
quelle
STATA 1506
Ich habe nicht versucht, zu viel Golf zu spielen. Ich dachte, eine statistische Sprache wäre besser darin, aber anscheinend.
quelle
C # -
19521883Ich werde einige Ergebnisse zeigen, wenn ich morgen einsteige. Im Moment ist hier die Einreichung:
quelle
C # -
18701881 BytesMißbrauchen
using
AliaseAction
,Func
Ausnahmen für die Ablaufsteuerung und vieles mehr. Ich habe überlegt, diesen "Bericht" auszunutzen, ohne anzugeben, wie die Dinge sortiert werden sollen. Bank.data muss Unix-Zeilenumbrüche verwenden, sonst wird dieser Code unterbrochen.Bearbeitet, um ein potenzielles Problem zu beheben. Sortieren nach anderen Feldern als Datum und Kontostand.
Ausgabe:
quelle