예제 #1
0
    private static void prepareDistLength(commonParameters parameters, List<int> dist)
    {
        var diference = parameters.magicLength - parameters.distanceLength;

        for (int i = 0; i < diference; i++)
        {
            dist.Add(0);
        }
    }
예제 #2
0
    /*
     * Complete the 'optimalPoint' function below.
     *
     * The function is expected to return an INTEGER.
     * The function accepts following parameters:
     *  1. INTEGER_ARRAY magic
     *  2. INTEGER_ARRAY dist
     */

    public static int optimalPoint(List<int> magic, List<int> dist)
    {
        var parameters = new commonParameters(magic, dist);

        if (parameters.magicLength > parameters.distanceLength)
        {
            prepareDistLength(parameters, dist);
        }

        // case border
        if (parameters.totalDistance > parameters.totalMagic)
        {
            return -1;
        }

        for (int index = 0; index < parameters.magicLength; index++)
        {
            var auxMagic = 0;
            var success = true;

            for (int i = 0; i < parameters.magicLength; i++)
            {
                var controlIndex = (index + i) % parameters.magicLength;

                auxMagic += magic[controlIndex];

                if (auxMagic >= dist[controlIndex])
                {
                    auxMagic -= dist[controlIndex];
                }
                else
                {
                    success = false;
                    break;
                }
            }
            if (success)
            {
                return index;
            }
        }
        return -1;
    }