Разделите элементы данной строки

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

Я действительно не знаю особенности реализации песочницы в Python, но я бы предположил, что это то, что нужно сделать на уровне интерпретатора и далеко не просто!

-2
задан Kaloyan K. 1 March 2019 в 23:05
поделиться

3 ответа

 public static List<string> DivideIntoPartitions(string stringToDivide, int partitions)
        {
            var parts = new List<string>(partitions);
            var len = stringToDivide.Length;

            if (len < partitions)
            {
                throw new ArgumentException("partitions should be less than length");
            }

            if (len % partitions == 0)
            {
                var eachSubstrLength = len / partitions;

                for (int i = 0; i < stringToDivide.Length; i += eachSubstrLength)
                {
                    parts.Add(stringToDivide.Substring(i, eachSubstrLength));
                }
            }
            else
            {
                var nextDivisibleNumber = len + (partitions - (len % partitions));
                var lengthOfLastSubstr = nextDivisibleNumber / partitions;
                var lastItem = stringToDivide.Substring((len - lengthOfLastSubstr));
                stringToDivide = stringToDivide.Remove((len - lengthOfLastSubstr));

                var chunksize = stringToDivide.Length / (partitions - 1);

                for (int i = 0; i < stringToDivide.Length; i += chunksize)
                {
                    parts.Add(stringToDivide.Substring(i, chunksize));
                }
                parts.Add(lastItem);

            }
            return parts;

        }

 var result = DivideIntoPartitions("qrstuvwxyz", 3);
0
ответ дан Vishnu 1 March 2019 в 23:05
поделиться

Вы можете сделать что-то вроде этого:

private static List<string> Divide(List<string> input, int index, int partitions)
{
    var stringToDivide = input[index];
    input.RemoveAt(index);

    var stringToAdd = "";
    var partitionLength = stringToDivide.Length / partitions;

    for (int i = 0, partitionNum = 0; i < stringToDivide.Length; i++)
    {
        if (i % partitionLength == 0 && partitionNum != partitions)  // skip space in last part
        {
            if (i > 0) // do not add leading space
            {
                stringToAdd += " ";
            }

            partitionNum++;
        }

        stringToAdd += stringToDivide[i];
    }

    input.Insert(index, stringToAdd);

    return input;
}

Этот код добавляет пробелы каждый partitionLength, но пропускает пробел для последней строки. Обратите внимание, что для длинных строк лучше использовать StringBuilder.

0
ответ дан ingvar 1 March 2019 в 23:05
поделиться

stringToDivide.Length % partitions - это количество символов, оставшихся после деления на partitions количество разделов.

stringToDivide.Length / partitions - это количество символов, которое должно быть в каждом разделе, кроме последнего, к которому должны быть добавлены оставшиеся символы.

Так что просто возьмите первое partitions количество фрагментов stringToDivide.Length / partitions длины и добавьте оставшиеся к последнему фрагменту.

Когда строка делится поровну, stringToDivide.Length % partitions равен нулю, так что это не частный случай.

0
ответ дан Blorgbeard 1 March 2019 в 23:05
поделиться
Другие вопросы по тегам:

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