Notre nouvelle banque a besoin d'un système de transaction de guichet, mais il y a un problème. Il ne reste que quelques centaines d'octets d'espace sur notre serveur, vous devrez donc écrire du code très compact.
Base de données
Heureusement, notre base de données est très simple (elle a été construite par le fils d'écolier de notre président de banque), et nous n'avons pour l'instant que quelques clients.
le fichier Bank.data
est:
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
Spécifications d'application
Notre application bancaire doit implémenter les commandes suivantes:
open <firstname> <lastname>
Crée (ouvre) un nouveau compte imprimant un numéro de compte unique à 3 chiffres.
withdraw <account> <amount>
Retirer le montant d'un compte.
deposit <account> <amount>
Déposer le montant dans un compte.
close <account>
Fermez le compte s'il est vide.
report <fieldname>
Imprimez un rapport de la base de données trié par nom de champ. Déplacez la colonne fieldname à la première position. Chaque largeur de colonne sera le maximum de la largeur de données et de nom de champ la plus large, séparée par un espace. La première ligne sera les titres des champs. Seuls les soldes doivent être justifiés à droite par un $
signe de tête .
print <account>
Imprimez les noms de champs et enregistrez pour ce compte au format comme le rapport.
Chaque fois qu'un enregistrement est modifié, le Date
champ de l'enregistrement doit être mis à jour à la date actuelle.
L'application affichera une invite "#" lors de l'attente d'une commande. Si une commande échoue (telle qu'une opération sur un compte inconnu ou des fonds insuffisants), l'application doit imprimer le message d'erreur informatif "a échoué". Le programme doit réécrire les modifications dans le fichier après chaque modification et lire à partir du fichier sur chaque commande car il existe de nombreux programmes de caissier dans le monde qui fonctionnent simultanément sur le fichier (nous n'avons pas besoin de verrouillage de fichier - cela peut réduire les performances).
EDIT: les champs de chaîne sont de simples ASCII (az, AZ, -) sans espace blanc et le montant sera toujours compris entre 0,00 et 1000000000,00 (1 milliard) de dollars avec 2 décimales indiquant les cents. La date sera en heure locale dans chaque agence (une solution simple mais qui peut entraîner des problèmes plus tard ...).
Production
Les réponses devront démontrer qu'elles répondent aux spécifications. Veuillez joindre la sortie de votre programme après avoir traité les commandes suivantes:
report Balance
open Clark Kent
print 001
deposit 001 4530
withdraw 105 893
close 105
report Date
Assurez-vous d'utiliser une copie originale du Bank.data
fichier ci-dessus.
Notation
Il s'agit de code-golf, donc votre score sera le nombre d'octets de votre code. Les failles standard sont interdites.
<firstname>
et<lastname>
et sur la plage et la précision de<amount>
? (Par exemple, il peut y avoir des optimisations qui sont possibles si elles ont<amount>
toujours exactement deux décimales - ou vous pouvez souhaiter que le programme soit utilisable par la branche du Moyen-Orient, où la plupart des devises utilisent trois décimales).<firstname>
et les<lastname>
deux n'utilisent quea-zA-Z
, mais même une simple déclaration qu'ils ne contiennent jamais de caractères de tabulation permet d'utiliser TSV. S'ils peuvent être n'importe quelle séquence de caractères ASCII, une forme d'échappement ou de délimitation autre qu'avec un délimiteur à un caractère est nécessaire.Réponses:
Rubis, 918
Cette question est assez longue pour le golf car elle se compose de nombreuses petites pièces. Pendant un moment, j'ai presque voulu définir des classes supplémentaires pour rendre les choses plus propres avec le polymorphisme etc ... (mais à la fin je ne l'ai pas fait).
Peut probablement être joué au golf plus loin. Mais pour l'instant, je ne peux même pas garder une trace de ce que j'ai fait dans la dernière ligne.
Production:
la source
T-SQL 1919
Appelé avec "exec q 'Your command here'" Je ne pense pas que T-SQL puisse réellement obtenir des entrées utilisateur, donc je pense que c'est aussi proche que possible.
Utilise l'utilitaire bcp pour les E / S que je n'ai pas essayé auparavant car il est livré avec SQL Server 2014.
Je ne sais pas s'il serait préférable ou pire d'utiliser uniquement la procédure stockée principale et d'y mettre le reste du code.
la source
Cobra - 1505
Production:
la source
Python 2 - 2205 octets
Voici une tentative assez prolixe de solution.
Voici un exemple de l'application utilisée:
la source
Lot - 1827
Le lot n'est pas conçu pour ce genre de chose.
Pourtant, pour mettre en œuvre les fonctions de tri (dans le rapport) et d'impression.
la source
STATA 1506
Je n'ai pas trop essayé de jouer au golf. J'ai pensé qu'un langage statistique serait mieux à ce sujet, mais apparemment.
la source
C # -
19521883Je montrerai une sortie quand j'entrerai demain. Pour l'instant, voici la soumission:
la source
C # -
18701881 octetsAbuser
using
alias,Action
,Func
, exceptions pour le contrôle des flux et plus encore. Envisageait d'exploiter ce "rapport" ne spécifiant pas comment les choses devraient être triées. Bank.data doit utiliser des sauts de ligne Unix ou ce code se cassera.Modifié pour résoudre un problème potentiel de tri par champs autres que la date et le solde.
Production:
la source