前書き
あなたは大手小売店の電化製品部門のマネージャーであり、年間最大の販売日は今週の金曜日です。群集の管理を支援するために、ストアは最大の取引のためのチケットシステムを実装しています。このシステムでは、顧客はアイテムを購入する前にチケットを提示する必要があります。あなたの仕事は、チケットを検証するプログラムを書くことです。
(予算削減のため)店で利用できる唯一のコンピューターはキーボードが壊れている恐竜です(そして、あなたが持っているのは互換性のないUSBキーボードだけです)ので、マウスでプログラムを入力する必要があります。したがって、プログラムはできるだけ短くする必要があります。
製品
あなたは、以下の5つの異なる製品を販売しています。各製品にはすべて小文字の名前があり、購入できる数と購入時間に関するさまざまなルールがあります。
television
:(真夜中)5
からまで購入できる薄型テレビの在庫があります。00:00:00
00:59:59
smartphone
:10
スマートフォンは在庫がありますが、00:00:00
(真夜中)から並んでいる顧客は00:59:59
、使い果たしたときにバウチャーを受け取ります。tablet
:10
いつでも購入できるタブレットがあります。laptop
:(00:00:00
真夜中)からまで購入できるノートパソコンの数に制限はありません07:59:59
。lightbulb
:いつでも購入できる電球の数に制限はありません。
入力
各行が次の形式の複数行の文字列。行はタイムスタンプでソートされます。
<time stamp> <product name> <ticket number>
- チケット番号は8桁です。最後の桁は、10を法とする最初の7桁の合計に等しいチェックディジットです。チケット番号が有効であるためには、正しいチェックデジットがあり、以前のすべてのチケット番号よりも厳密に大きい必要があります。
- 製品名は、上記の文字列のいずれかです。
- タイムスタンプの形式は、一日の時間である00-23から2桁の時間であり、そして第二にそれぞれ2桁の分であり。
HH:MM:SS
HH
MM
SS
出力
出力は次の文字列のいずれかで、チケットごとに1行です。条件は順番に適用する必要があります。
Expired offer
(テレビ、スマートフォン、ラップトップに適用されます。)チケットのタイムスタンプは、製品を購入するための締め切り後です。Invalid ticket
チケット番号が前のチケットの番号以下であるか、チェックディジットが無効です。Give voucher
(スマートフォンに適用されます。)製品は在庫切れですが、オファーの有効期限が切れる前に並んでいるすべての顧客がレインチェックを受けます。Out of stock
(テレビとタブレットに適用されます。)製品はすべて販売されています。数量に限りがありました。Accepted
すべての条件が満たされているため、製品を提供します。受け入れられたチケットのみが在庫アイテムの数を減らすことに注意してください。
例
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
この例では、考えられるすべての出力シナリオをカバーするようにしましたが、不明な点があればコメントを残してください。
これはcode-golfであり、プログラムまたは関数を記述できます。標準のループホールは許可されていません。