Я пишу Маджонг в С# (традиционная китайская игра, а не пасьянс). При написании кода для AI-игрока бота, мне интересно, будет ли функциональный язык, такой как F #, более подходящим языком, чем то, что я сейчас использую, это С# с большим количеством Linq. Я не знаю много о F #, поэтому я спрашиваю здесь.
Чтобы проиллюстрировать, что я пытаюсь решить, здесь краткое изложение маджонга:
Маджонг немного похож на Джин Рамми. У вас есть 13 плиток в вашей руке, и каждый ход, вы рисуете плитку и отбрасываете другую, пытаясь улучшить вашу руку в сторону выигрышной руки маджонга, которая состоит из 4 наборов и пары. Наборы могут представлять собой 3 вида (4), 4 вида (kongs) или последовательность из 3 последовательных черепиц (chows). Вы также можете украсть другой игрок, если он может выполнить один из ваших наборов.
Код, который я должен был написать, чтобы определить, может ли бот объявить 3 последовательных набора плиток (чау), довольно утомительно. Я должен найти все уникальные плитки в руке, а затем начать проверять, есть ли последовательность из 3 плиток, которые содержат это в руке. Обнаружение, если бот может пойти Маджонг, еще более усложняется, поскольку это комбинация обнаружения, если там 4 набора и пара в руке. И это просто стандартная маджонгская рука. Там также множество "специальных" рук, которые нарушают эти правила, но все еще являются маджонг. Например, "13 уникальных чудес" состоит из 13 отдельных плиток, "Империя Джейд" состоит только из цветных зеленых плиток и т.д.
В идеальном мире я бы хотел просто указать "правила" маджонга и иметь язык, чтобы соответствовать набору из 13 плиток против этих правил, чтобы получить, какие правила он выполняет, например, проверяя, является ли это маджонг или если он содержит 4 вида. Может ли помочь решить эту функцию F #?