آلفامتیک

آلفامتیک

دشوار

دستورالعمل‌ها

یک پازل «آلفامتیک» داده شده است؛ پاسخ درست را پیدا کنید.

آلفامتیک یک پازل است که در آن حروف درون واژه‌ها با عدد جایگزین می‌شوند.

برای مثال SEND + MORE = MONEY:

  S E N D
  M O R E +
-----------
M O N E Y

جایگزین کردن این‌ها با عددهای معتبر چنین نتیجه‌ای می‌دهد:

  9 5 6 7
  1 0 8 5 +
-----------
1 0 6 5 2

این صحیح است چون هر حرف با عددی متفاوت جایگزین می‌شود و واژه‌ها پس از تبدیل به عدد، یک جمع معتبر می‌سازند.

هر حرف باید نماینده‌ی یک رقم متفاوت باشد و رقم نخست یک عدد چندرقمی نباید صفر باشد.

پیاده‌سازی

یک تابع Go به اسم Solve تعریف کنید که یک رشته‌ی معما می‌پذیرد؛ این رشته ممکن است صفر یا چند عملگر + و یک عملگر == داشته باشد. Solve باید تلاش کند معمای آلفامتیک را حل کند و نقشه‌ای از همه‌ی جانشینی‌های حروف را، هم برای معما و هم برای جواب جمع، برگرداند.

از امضای زیر برای تابع Solve استفاده کنید:

func Solve(puzzle string) (map[string]int, error) {

اگر معمای داده‌شده جوابی نداشته باشد، Solve باید یک خطا برگرداند.

یک معمای نمونه و جواب برگردانده‌شده‌ی آن به این شکل است:

Solve("SEND + MORE == MONEY")

که این را برمی‌گرداند:

map[string]int{"M":1, "O":0, "N":6, "E":5, "Y":2, "S":9, "D":7, "R":8}, nil
  S E N D
  M O R E +
-----------
M O N E Y

اگر این حروف را با عددهای معتبر جایگزین کنیم، به این می‌رسیم:

  9 5 6 7
  1 0 8 5 +
-----------
1 0 6 5 2
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Go Exercism

آماده‌اید آلفامتیک را شروع کنید؟

در Exercism ثبت‌نام کنید تا Go را همراه با 34 مفهوم165 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.