Nuestro nuevo banco necesita un sistema de transacciones de cajero, pero hay un problema. Solo quedan unos pocos cientos de bytes de espacio en nuestro servidor, por lo que tendrá que escribir un código muy compacto.
Base de datos
Afortunadamente, nuestra base de datos es muy simple (fue construida por el hijo del alumno de nuestro presidente del banco), y hasta ahora solo tenemos unos pocos clientes.
el archivo Bank.data
es:
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
Especificación de la aplicación
Nuestra aplicación bancaria debe implementar los siguientes comandos:
open <firstname> <lastname>
Crea (abre) una nueva cuenta que imprime un número de cuenta único de 3 dígitos.
withdraw <account> <amount>
Retirar el monto de una cuenta.
deposit <account> <amount>
Deposite la cantidad en una cuenta.
close <account>
Cerrar cuenta si está vacía.
report <fieldname>
Imprima un informe de la base de datos ordenado por nombre de campo. Mueva la columna de nombre de campo a la primera posición. El ancho de cada columna será el máximo de los datos más amplios y el ancho del nombre del campo, separados por un espacio. La primera línea serán los títulos de campo. Los saldos solo deben justificarse correctamente con un $
signo inicial.
print <account>
Imprima los nombres de campo y registre para esta cuenta formateada como el informe.
Cada vez que se cambia un registro, el Date
campo en el registro debe actualizarse a la fecha actual.
La aplicación mostrará un mensaje "#" al esperar un comando. Si falla un comando (como una operación en una cuenta desconocida o fondos insuficientes), la aplicación debe imprimir el mensaje de error informativo "fallido". El programa debe volver a escribir los cambios en el archivo después de cada cambio, y leer el archivo en cada comando, ya que hay muchos programas de cajeros en todo el mundo que operan en el archivo simultáneamente (no necesitamos bloqueo de archivo, eso puede reducir el rendimiento).
EDITAR: Los campos de cadena son ASCII simples (az, AZ, -) sin espacios en blanco y la cantidad siempre estará entre 0.00 y 1000000000.00 (1,000 millones) de dólares con 2 decimales que indican centavos. La fecha será en hora local en cada sucursal (una solución simple, pero puede dar lugar a algunos problemas más adelante ...).
Salida
Las respuestas deberán demostrar que cumplen con la especificación. Adjunte la salida de su programa después de procesar los siguientes comandos:
report Balance
open Clark Kent
print 001
deposit 001 4530
withdraw 105 893
close 105
report Date
Asegúrese de utilizar una copia original del Bank.data
archivo proporcionado anteriormente.
Puntuación
Este es el código de golf, por lo que su puntaje será el recuento de bytes de su código. Las lagunas estándar están prohibidas.
<firstname>
y<lastname>
y el rango y precisión de<amount>
? (Por ejemplo, puede haber algunas optimizaciones que son posibles si<amount>
siempre tiene exactamente dos decimales, o es posible que desee que el programa sea utilizable por la rama del Medio Oriente, donde la mayoría de las monedas usan tres decimales).<firstname>
y<lastname>
ambos solo se usana-zA-Z
, pero incluso una simple declaración de que nunca contienen caracteres de tabulación permite usar TSV. Si pudieran ser cualquier secuencia de caracteres ASCII, es necesaria alguna forma de escape o delimitación que no sea con un delimitador de un carácter.Respuestas:
Rubí, 918
Esta pregunta es bastante larga para el golf, ya que consta de muchas partes pequeñas. Por un momento, casi quise definir algunas clases adicionales para hacer las cosas más ordenadas con polimorfismo, etc. (pero al final no lo hice).
Probablemente se pueda jugar más al golf. Pero a partir de ahora, ni siquiera puedo seguir lo que hice en la última línea.
Salida:
fuente
T-SQL 1919
Llamado con "exec q 'Su comando aquí'" No creo que T-SQL pueda realmente obtener la entrada del usuario, por lo que creo que esto es lo más cercano posible.
Utiliza la utilidad bcp para E / S que no he probado antes porque viene con SQL Server 2014.
No estoy seguro de si sería mejor o peor usar solo el procedimiento almacenado principal y poner el resto del código allí.
fuente
Cobra - 1505
Salida:
fuente
Python 2 - 2205 bytes
Aquí hay un intento bastante detallado de encontrar una solución.
Aquí hay una muestra de la aplicación en uso:
fuente
Lote - 1827
Batch no está diseñado para este tipo de cosas.
Sin embargo, implementar las funciones Ordenar (dentro del informe) e Imprimir.
fuente
STATA 1506
No traté de jugar al golf demasiado. Pensé que un lenguaje estadístico sería mejor para esto, pero aparentemente.
fuente
C # -
19521883Mostraré algo de salida cuando llegue mañana. Por ahora, aquí está la presentación:
fuente
C # -
18701881 BytesEl abuso de
using
alias,Action
,Func
, excepciones para el control de flujo y más. Estaba considerando explotar ese "informe" que no especificaba cómo deberían clasificarse las cosas. Bank.data debe usar saltos de línea de Unix o este código se romperá.Editado para solucionar un posible problema de clasificación por campos que no sean Fecha y Saldo.
Salida:
fuente