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

daymos

Client
Регистрация
11.11.2009
Сообщения
807
Благодарностей
241
Баллы
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 269
Баллы
113
 
  • Спасибо
Реакции: daymos

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 269
Баллы
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
Сообщения
22 481
Благодарностей
10 025
Баллы
113
  • Спасибо
Реакции: daymos и Radzhab

Radzhab

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

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 269
Баллы
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
Благодарностей
792
Баллы
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
Сообщения
807
Благодарностей
241
Баллы
43
Спасибо большое всем!
 

Sergodjan

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

daymos

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

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