Как мне вычислить число шантен в маджонге?

В первую очередь, как @AndrewFinnell и @KenLiu указывают в SVN, сами имена каталогов ничего не означают - "соединительная линия, ответвления и теги" являются просто общим соглашением, которое используется большинством репозиториев. Не все проекты используют все каталоги (довольно распространено не использовать "теги" вообще), и на самом деле, ничто не мешает Вам назвать их чем-либо, что Вы хотели бы, хотя повреждение соглашения часто сбивает с толку.

я опишу, вероятно, наиболее распространенный сценарий использования ответвлений и тегов, и дам сценарий в качестве примера того, как они используются.

  • Соединительная линия : основная область разработки. Это - то, где Ваша следующая главная версия жизней кода, и обычно имеет все новейшие функции.

  • Ответвления : Каждый раз, когда Вы выпускаете основную версию, это создало ответвление. Это позволяет Вам делать исправления ошибок и делать новый выпуск, не имея необходимость выпускать новейшее - возможно незаконченный или непротестированный - функции.

  • Теги : Каждый раз Вы выпускаете версию (финальная версия, предвыпускные версии (RC) и беты), Вы делаете тег для нее. Это дает Вам копию момента времени кода, как это было в том состоянии, позволяя Вам возвратиться и воспроизвести любые ошибки при необходимости в прошлой версии, или повторно выпустите прошлую версию точно, как это было. Ответвления и теги в SVN легки - на сервере, он не делает полную копию файлов, просто маркер, говоря, что "эти файлы были скопированы в этом пересмотре", который только поднимает несколько байтов. Принимая это во внимание, Вы никогда не должны быть обеспокоены созданием тега ни для какого выпущенного кода. Как я сказал ранее, теги часто опускаются и вместо этого, журнал изменений или другой документ разъясняют число пересмотра, когда выпуск сделан.

, Например, скажем, Вы запускаете новый проект. Вы начинаете работать в "соединительной линии", на том, что будет в конечном счете выпущено как соединительная линия версии 1.0.

  • / - версия разработки, скоро чтобы быть 1.0
  • , ответвления / - пустой

Однажды 1.0.0 закончены, Вы переходите соединительная линия в новое "1.0" ответвление и создаете "1.0.0" тег. Теперь работа над тем, что в конечном счете будет 1.1, продолжается в соединительной линии.

  • соединительная линия / - версия разработки, скоро, чтобы быть 1.1
  • ответвления/1.0 - 1.0.0 тега/1.0.0 версии выпуска
  • - 1.0.0 версии выпуска

Вы сталкиваетесь с некоторыми ошибками в коде, и фиксируете их в соединительной линии, и затем объединяете меры с этими 1,0 ответвлениями. Можно также сделать противоположное, и исправить ошибки в этих 1,0 ответвлениях и затем объединить их назад для транкинга, но обычно палка проектов со слиянием одностороннего только для уменьшения шанса пропавших без вести чего-то. Иногда ошибка может только быть исправлена в 1,0, потому что это является устаревшим в 1,1. Это действительно не имеет значения: Вы только хотите удостовериться, что Вы не делаете выпуска 1.1 с теми же ошибками, которые были исправлены в 1,0.

  • соединительная линия / - версия разработки, скоро чтобы быть 1.1
  • ответвления/1.0 - предстоящие 1.0.1 тега/1.0.0 выпуска
  • - 1.0.0 версии выпуска

, Как только Вы находите достаточно ошибок (или возможно одну критическую ошибку), Вы решаете сделать 1.0.1 выпуска. Таким образом, Вы делаете тег "1.0.1" из этих 1,0 ответвлений и выпускаете код. На данном этапе соединительная линия будет содержать то, что будет 1.1, и эти "1.0", ответвление содержит 1.0.1 кода. В следующий раз, когда Вы выпускаете обновление 1,0, это было бы 1.0.2.

  • соединительная линия / - версия разработки, скоро чтобы быть 1.1
  • ответвления/1.0 - предстоящие 1.0.2 тега/1.0.0 выпуска
  • - 1.0.0 тега/1.0.1 версии выпуска
  • - 1.0.1 версии выпуска

В конечном счете Вы почти готовы к выпуску 1.1, но Вы хотите сделать бету сначала. В этом случае Вы, вероятно, делаете "1.1" ответвление, и "1.1beta1" тег. Теперь, работа над тем, что будет 1.2 (или 2.0, возможно) продолжается в соединительной линии, но работа над 1,1 продолжается в эти "1.1" ответвление.

  • соединительная линия / - версия разработки, скоро, чтобы быть 1.2
  • ответвления/1.0 - предстоящие 1.0.2 ответвления/1.1 выпуска
  • - предстоящие 1.1.0 тега/1.0.0 выпуска
  • - 1.0.0 тега/1.0.1 версии выпуска
  • - 1.0.1 бета 1 версии выпуска

версии выпуска tags/1.1beta1 - 1.1 Однажды Вы финал выпуска 1.1, Вы делаете "1.1" тег от эти "1.1" ответвление.

можно также продолжить поддерживать 1.0, если Вы хотели бы, портируя исправления ошибок между всеми тремя ответвлениями (1.0, 1.1, и соединительная линия). Важная еда на дом - то, что для каждой основной версии программного обеспечения Вы поддерживаете, у Вас есть ответвление, которое содержит последнюю версию кода для той версии.

Другое использование ответвлений для функций. Это - то, где Вы переходите соединительная линия (или одно из Ваших ответвлений выпуска) и работа над новой возможностью в изоляции. Как только функция завершается, Вы объединяетесь, она въезжает задним ходом и удаляет ответвление.

  • соединительная линия / - версия разработки, скоро чтобы быть 1.2
  • ответвления/1.1 - предстоящие 1.1.0 выпуска
  • branches/ui-rewrite - экспериментальное ответвление функции

идея этого состоит в том, когда Вы работаете над чем-то подрывным (который поддержал бы или вмешался бы в других людей от выполнения их работы), что-то экспериментальное (который даже не может сделать его в), или возможно просто что-то, что занимает много времени (и Вы боитесь, если это держащий 1,2 выпуска, когда Вы готовы перейти 1.2 от соединительной линии), можно сделать это в изоляции в ответвлении. Обычно Вы совершенствуете его соединительной линии путем слияния изменений во все это время, которое облегчает повторно интегрировать (слияние назад для транкинга), когда Вы закончены.

Также примечание, схема управления версиями, которую я использовал здесь, является только одним из многих. Некоторые команды сделали бы исправление ошибки / корректировочные версии как 1,1, 1.2, и т.д., и существенные изменения как 1.x, 2.x, и т.д. Использование здесь является тем же, но можно назвать ответвление "1" или "1.x" вместо "1,0" или "1.0.x". (В стороне семантическое управление версиями является хорошим руководством по тому, как сделать номера версий).

9
задан Community 23 May 2017 в 11:45
поделиться

1 ответ

Смотрите здесь: ShantenNumberCalculator. Вычислите shanten действительно быстро. И некоторый связанный материал (на японском языке, но с примерами кода) http://cmj3.web.fc2.com

сущность алгоритма: отключите всех пар, наборы и незаконченные формы ВСЕМИ возможными способами, и таким образом найдите минимальное значение количества shanten. Максимальное значение shanten для обычной руки: 8.

таким образом, как это было, у нас есть начало для 4 наборов и одной пары, но только одной мозаики от каждого (общие 13 - 5 = 8). Соответственно, пара сократит количество shantens один, два (изолированный от остальных), соседние мозаики (предварительная установка) сократят число shantens одним, полный набор (3 идентичных или 3 последовательных мозаики) сократит количество shantens 2, так как две подходящих мозаики прибыли в изолированную мозаику.

Shanten = 8 - Наборы * 2 - Пары - Предварительные установки

1
ответ дан 4 December 2019 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: