Introdução
Você é o gerente do departamento de eletrônicos de uma grande loja de varejo e o maior dia de vendas do ano é nesta sexta - feira . Para ajudar a gerenciar as multidões, sua loja está implementando um sistema de tickets para as maiores ofertas, onde os clientes devem apresentar um ticket antes de comprar um item. Seu trabalho é escrever um programa para validar os tickets.
Como o único computador disponível na loja (devido a cortes no orçamento) é um dinossauro com um teclado quebrado (e tudo o que você tem são teclados USB, que não são compatíveis), será necessário inserir o programa com um mouse. Portanto, seu programa deve ser o mais curto possível.
Produtos
Sua loja está executando vendas nos cinco produtos diferentes listados abaixo. Cada produto tem um nome em minúsculas e regras diferentes sobre quantos podem ser comprados e a que horas do dia.
television
: Existem5
TVs de tela plana em estoque que podem ser compradas de00:00:00
(meia-noite) a00:59:59
.smartphone
: Existem10
smartphones em estoque, mas qualquer cliente na fila a partir de00:00:00
(meia-noite) para00:59:59
recebe um voucher para um quando acabar.tablet
: Existem10
tablets que podem ser adquiridos a qualquer momento.laptop
: Há um número ilimitado de laptops que podem ser comprados de00:00:00
(meia-noite) a07:59:59
.lightbulb
: Existe um número ilimitado de lâmpadas que podem ser adquiridas a qualquer momento.
Entrada
Uma sequência de várias linhas com cada linha no seguinte formato. As linhas são classificadas pelo carimbo de data / hora.
<time stamp> <product name> <ticket number>
- O número do bilhete tem 8 dígitos. O último dígito é um dígito de verificação igual à soma dos sete primeiros dígitos do módulo 10. Para ser válido, um número de ticket deve ter o dígito de verificação correto e deve ser estritamente maior que todos os números de ticket anteriores.
- O nome do produto é uma das seqüências listadas acima.
- O registro de data e hora é a hora do dia no formato em
HH:MM:SS
queHH
é a hora de dois dígitos de 00 a 23 eMM
eSS
são o minuto e o segundo de dois dígitos, respectivamente.
Resultado
A saída é uma das seguintes strings, com uma linha por ticket. As condições devem ser aplicadas em ordem .
Expired offer
(Aplica-se a televisores, smartphones e laptops.) O carimbo de data e hora do ingresso é após o término da compra do produto.Invalid ticket
O número do ticket é menor ou igual ao número do ticket anterior ou o dígito de verificação é inválido.Give voucher
(Aplica-se a smartphones.) O produto está fora de estoque, mas todos os clientes na fila antes que a oferta expire recebam uma verificação de chuva.Out of stock
(Aplica-se a televisões e tablets.) Todo o produto foi vendido. Desculpe, a quantidade foi limitada.Accepted
Todas as condições são atendidas, portanto, forneça o produto a elas. Observe que apenas os tickets aceitos reduzem o número de itens em estoque.
Exemplo
Input Output
---------------------------- --------------
00:00:00 television 00010001 Accepted
00:00:25 smartphone 00011697 Accepted
00:01:25 laptop 00030238 Accepted
00:02:11 smartphone 00037291 Accepted
00:02:37 lightbulb 00073469 Invalid ticket
00:03:54 smartphone 00096319 Accepted
00:05:26 tablet 00152514 Accepted
00:06:21 tablet 00169893 Accepted
00:07:10 television 00190268 Accepted
00:07:47 smartphone 00194486 Accepted
00:07:55 tablet 00220071 Accepted
00:08:20 lightbulb 00321332 Accepted
00:10:01 smartphone 00409867 Accepted
00:11:10 tablet 00394210 Invalid ticket
00:11:46 television 00581060 Accepted
00:12:44 lightbulb 00606327 Accepted
00:13:16 tablet 00709253 Accepted
00:13:53 television 00801874 Accepted
00:14:47 laptop 00832058 Accepted
00:15:34 smartphone 00963682 Accepted
00:16:24 smartphone 01050275 Accepted
00:17:45 tablet 01117167 Accepted
00:18:05 laptop 01107548 Invalid ticket
00:19:00 lightbulb 01107605 Invalid ticket
00:19:47 lightbulb 01492983 Accepted
00:19:50 smartphone 01561609 Accepted
00:21:09 television 01567098 Accepted
00:21:42 laptop 01597046 Accepted
00:22:17 smartphone 01666313 Accepted
00:24:12 tablet 01924859 Accepted
00:24:12 smartphone 02151571 Accepted
00:25:38 smartphone 02428286 Give voucher
00:31:58 television 02435284 Out of stock
00:35:25 television 02435295 Out of stock
00:52:43 laptop 02657911 Invalid ticket
00:53:55 smartphone 02695990 Give voucher
01:08:19 tablet 02767103 Accepted
01:34:03 television 02834850 Expired offer
01:56:46 laptop 02896263 Accepted
02:02:41 smartphone 03028788 Expired offer
02:30:59 television 03142550 Expired offer
02:51:23 tablet 03428805 Accepted
03:14:57 smartphone 03602315 Expired offer
03:27:12 television 03739585 Expired offer
03:56:52 smartphone 03997615 Expired offer
04:07:52 tablet 04149301 Accepted
04:12:05 lightbulb 04300460 Invalid ticket
04:24:21 laptop 04389172 Accepted
04:40:23 lightbulb 04814175 Accepted
04:40:55 tablet 04817853 Accepted
04:42:18 smartphone 04927332 Expired offer
05:06:43 tablet 05079393 Out of stock
05:16:48 tablet 05513150 Out of stock
05:33:02 television 05760312 Expired offer
05:43:32 tablet 06037905 Out of stock
06:12:48 smartphone 06440172 Expired offer
06:35:25 laptop 06507277 Accepted
06:42:29 lightbulb 06586255 Invalid ticket
06:55:31 lightbulb 06905583 Accepted
06:55:33 lightbulb 06905583 Invalid ticket
07:40:05 smartphone 07428006 Expired offer
07:49:12 television 07588086 Expired offer
08:14:56 laptop 08111865 Expired offer
Tentei fazer com que o exemplo cubra todos os cenários de saída possíveis, mas deixe um comentário se algo não estiver claro.
Isso é código-golfe , você pode escrever um programa ou função, e as brechas padrão não são permitidas.