Перемешать элементы строк

daymos

Client
Регистрация
11.11.2009
Сообщения
806
Благодарностей
240
Баллы
43
Приветствую! Подскажите пожалуйста как перемешать элементы строк?

На входе от 20 до 100 строк
Код:
Первое_слово слово1 слово2 слово3 слово4 слово5 слово6 последнее_слово.
Первое_слово слово1 слово2 слово3 слово4 последнее_слово.
Первое_слово слово1 слово2 слово3 последнее_слово.
Первое_слово слово1 слово2 последнее_слово.
Первое_слово слово1 слово2 слово3 последнее_слово.
На выходе случайные 1-5%% слов перемешаны внутри предложений случайными словами из других предложений, не изменяя первого и последнего слова:
Код:
Первое_слово слово3 слово2 слово3 слово4 слово5 слово1 последнее_слово.
Первое_слово слово2 слово2 слово3 слово4 последнее_слово.
Первое_слово слово1 слово2 слово1 последнее_слово.
Первое_слово слово6 слово2 последнее_слово.
Первое_слово слово1 слово1 слово3 последнее_слово.
Каким-нибудь очень легким способом, никаких цепей, триграмм и прочего.
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
 
  • Спасибо
Реакции: daymos

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
Пардон. Не дочитал

C#:
Random random = new Random();
            List<string> firstList = new List<string>() { "Первое_слово", "слово1", "слово2", "слово3", "слово4" };
            string first = firstList.First();
            string last = firstList.Last();


            var buff = firstList.Where((c,i)=>!c.Contains(first)&&!c.Contains(last)).OrderBy(item => random.Next()).ToList();
            buff.Insert(0,first);
            buff.Add(last);
            var rezult = String.Join(" ", buff);
 
  • Спасибо
Реакции: daymos

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 470
Благодарностей
8 691
Баллы
113
  • Спасибо
Реакции: daymos и Radzhab

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
исправил
 
  • Спасибо
Реакции: daymos

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
Конечный приблизительный вариант
C#:
var zennoList = project.Lists["Список"];
var rezultList = new List<string>();
foreach (var item in zennoList)
{
    Random random = new Random();
    List<string> firstList = item.Split(' ').ToList();
    string first = firstList.First();
    string last = firstList.Last();

    var buff = firstList.Where((c,i)=>!c.Contains(first)&&!c.Contains(last)).OrderBy(x => random.Next()).ToList();
    buff.Insert(0,first);
    buff.Add(last);
    var rezult = String.Join(" ", buff);
    rezultList.add(rezult);
}
 
Последнее редактирование:
  • Спасибо
Реакции: daymos

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
786
Баллы
113
учитывает лишние пробелы и случай когда слов в предложении меньше 4.
C#:
var list1 = project.Lists["list1"];
var list2 = project.Lists["list2"];
list2.Clear();
foreach(var item in list1){
    var tmplst = item.Split(new string [] {" "}, StringSplitOptions.RemoveEmptyEntries).ToList();
    if (tmplst.Count > 3)
        list2.Add(tmplst.First() + " " + string.Join(" ", tmplst.GetRange(1, tmplst.Count-2).ToArray().Shuffle()) + " " + tmplst.Last());
    else list2.Add(item);
}
 
Последнее редактирование:
  • Спасибо
Реакции: daymos и ssXXXss

daymos

Client
Регистрация
11.11.2009
Сообщения
806
Благодарностей
240
Баллы
43
Спасибо большое всем!
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 470
Благодарностей
8 691
Баллы
113
прямо соревнование между мастерами C# :-):dm:
 

daymos

Client
Регистрация
11.11.2009
Сообщения
806
Благодарностей
240
Баллы
43
мне аж не удобно)
еще и не правильно описал задачу...
на самом деле думал так, что бы перемешивались слова из разных предложений, взаимозаменялись местами.
Код:
Сел Андрей и поднял ногу,
Языком лизнул башмак...
Ну, теперь пора в дорогу,
Можно сделать первый шаг!
на
Код:
Сел башмак и поднял ногу,
Языком лизнул Андрей...
Ну, теперь первый в дорогу,
Можно сделать пора шаг!
Но спасибо и на том!
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)