در یک حراج خانگی، یک ماشین تحریر قدیمی و زیبا را به قیمتی ارزان پیدا میکنید! با هیجان به خانه میدوید، یک برگ کاغذ در آن میگذارید و شروع به تایپ میکنید. اما وقتی خروجی را بررسی میکنید، هیجانتان فروکش میکند: همهی کلمهها بههمریختهاند! برای مثال، به جای «post» کلمهی «stop» را چاپ میکند و به جای «stale» کلمهی «least» را. با دقت دوباره امتحان میکنید، اما این بار «spot» و «slate» را چاپ میکند. پس از کمی آزمایش، متوجه میشوید پیش از چاپ هر حرف، تأخیری تصادفی وجود دارد که ترتیب را بههم میریزد. حالا میفهمید چرا آن را به این ارزانی فروخته بودند!
متوجه میشوید که این ویژگی عجیب به شما امکان میدهد «آناگرام» بسازید؛ یعنی کلمههایی که با جابهجا کردن حرفهای یک کلمهی دیگر ساخته میشوند. از این کشف خود خوشحال میشوید و باقی روز را صرف ساختن صدها آناگرام میکنید.
با داشتن یک واژهی هدف و یک یا چند واژهی نامزد، وظیفهی شما این است که نامزدهایی را پیدا کنید که واروواژهی واژهی هدف هستند.
«واروواژه» بازآرایی حروف برای ساختن واژهای تازه است: برای نمونه، "owns" واروواژهی "snow" است.
یک واژه واروواژهی خودش نیست: برای نمونه، "stop" واروواژهی "stop" نیست.
واژهی هدف و واژههای نامزد از یک یا چند حرف الفبایی ASCII تشکیل شدهاند (A-Z و a-z).
حروف کوچک و بزرگ معادل یکدیگرند: برای نمونه، "PoTS" واروواژهی "sTOp" است، اما "StoP" واروواژهی "sTOp" نیست.
واژههایی که باید پیدا کنید از میان واژههای نامزد انتخاب میشوند، با همان حالت حروف.
با داشتن واژهی هدف "stone" و واژههای نامزد "stone"، "tones"، "banana"، "tons"، "notes" و "Seton"، واژههای واروواژهای که باید پیدا کنید "tones"، "notes" و "Seton" هستند.
پیشنهاد میکنیم که detectAnagrams یک BufSet برگرداند.
یک BufSet مجموعهای از رشتهها است، همانند StringHashMap(void)، با این تفاوت که لازم نیست پیش از درج، کلید را کپی کنید.
خودِ BufSet این کار را انجام میدهد.
برای اطلاعات بیشتر دربارهی نقشههای هش در Zig، این منابع را ببینید: