لینکهای مفید برای شرکت در مسابقه:
راهحلها و راهنماییهای نهایی اضافه شدند.
این راهنماییها را میتوانید در انتهای سوالات مشاهده کنید.
.
میتوانید سوالات خود را از قسمت "سوال بپرسید" مطرح کنید.
حسنی برای این که در تابستان وقتش را تلف نکند به کسب و کار روی آورده و به تازگی بانکی به نام کناب تاسیس کرده است.
از آنجایی که دوست دارد شما نیز عضو کناب باشید به شما یک پروژه داده و خواسته تا همراهبانکی بنویسید که درخواستهای زیر را اجرا کند.
این درخواست یعنی کاربری با نام کاربری username و آیپی ip به همراهبانک وصل شد و در صورتی که username معتبر نباشد باید عبارت invalid username
را چاپ کنید.
به یک نام کاربری معتبر میگوییم اگر فقط از حروف کوچک و بزرگ انگلیسی و اعداد تشکیل شده باشد.
برای مثال 1aAB2
معتبر است ولی ab*2
معتبر نیست.
این درخواست یعنی کاربری با آیپی ip به حسابی با نام کاربری username به اندازه money پول ریخته است. در واقع باید از حساب ip به اندازه money کم کنید و به حساب username اضافه کنید.
با داده شدن این درخواست مقدار پول داخل حساب فرد با آیپی ip را نمایش دهید.
(دقت کنید که پول هر فرد میتواند منفی هم بشود و هرکس در ابتدا ۰ واحد پول دارد)
در اولین خط ورودی عدد که بیانگر تعداد درخواستها است به شما داده میشود و در خط بعد، در هر خط یک درخواست داده میشود.
در هر درخواست ابتدا type داده میشود که برابر یکی از اعداد ۱ یا ۲ یا ۳ است و اگر برابر با ۱ باشد در ادامه دو رشته ip و username به شما داده میشود که توسط کاراکتر :
از هم جدا شدهاند. اگر
مساوی ۲ باشد سه رشته ip و username و
money
داده میشود که با :
از هم جدا شدهاند و اگر هم مساوی ۳ باشد رشته ip داده میشود.
طول username و ip حداکثر ۱۵ است.
تضمین میشود که:
_
یا *
یا #
یا $
در آن به کار رفته باشد. برای هر درخواست نوع ۱ در صورتی که username معتبر نیست باید عبارت invalid username
را چاپ کنید و برای هر درخواست نوع ۳ باید مقدار پول حساب فرد خواسته شده را چاپ کنید. (پاسخ هر درخواست را در یک خط جدید چاپ کنید.)
توضیحات:
نام کاربری #hacker$user
معتبر نیست برای همین باید invalid username
خروجی بدهید.
از حساب SmsS
هزار واحد پول کم میشود و به حساب faeila
اضافه میشود و حالا SmsS
منفی هزار و faeila
هزار واحد پول دارد.
از حساب faeila
پانصد واحد کم میشود و حالا پانصد واحد پول دارد و SmsS
منفی پانصد.
برای پیادهسازی تمیز این سوال میتوانید از Regex یا عبارت باقاعده و Associative array یا آرایه انجمنی استفاده کنید.
میتوانید این لینک را نیز برای پیدا کردن Associative array در زبان مورد نظرتان استفاده کنید.
سعید کنید Associative arrayای بسازید که هر کاربر که اضافه شد، بتوان با استفاده از نامکاربری هر فرد، آیپی آن فرد را پیدا کرد.
حالا Associative array دیگری بسازید که با استفاده از آیپی هر فرد بتوان موجودی حساب آن فرد را پیدا کرد و یا تغییر داد.
حالا میتوانید با استفاده از آیپی یا نامکاربری به موجودی حساب هر فرد دسترسی داشته باشید و درخواستها را انجام بدهید.
فرض کنید sender_ip
برابر آیپی فردی است که پول واریز میکند و receiver_user
برابر نام کاربری فردی است که پول دریافت میکند. میخواهیم دو مقدار receiver_money
را که برابر پول حساب دریافت کننده است و همچنین sender_user
و sender_money
که نام کاربری و پول حساب واریز کننده است را پیدا کنیم.
و دو Associative array به نامهای get_user
و get_money
داریم که با اولی میتوان با دادن آیپی فرد نام کاربری آن را به دست آورد و با استفاده از دومی، با دادن نام کاربری فرد، مقدار پول حسابش را به دست آورد.
شبه کد الگوریتم برای اعمال کوئریهای نوع اول:
شبه کد الگوریتم برای اعمال کوئریهای نوع دوم: