WedX - журнал о программировании и компьютерных науках

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

Я относительно новичок в кодировании, и я хотел бы создать тестовую программу, которая может принимать входные данные и выводить их в виде анаграммы. Но анаграмма не может быть просто набором букв, она должна быть чем-то вроде понятного «слова» (например, если я добавлю «динозавр», я хочу получить что-то вроде «нисадору» взамен, а не что-то другое). как «дсрунсия»). Если сделать еще один шаг вперед не слишком сложно, я также заинтересован в том, чтобы программа добавила дополнительную букву к выводу (т. Е. Если я введу «динозавр», я могу получить «нисадорух»).

Я не ищу выбор дополнительных букв, которые будут добавлены к слову, я хочу, чтобы буква, которую я выбираю, добавлялась. Буква, если это имеет значение, х. Таким образом, все анаграммы будут содержать дополнительный x.

Я много искал, но не нашел никакой полезной помощи. У меня нет кода, который можно было бы использовать, но для тех из вас, кто говорит, что я не научусь, просто получив код, я предпочитаю просмотреть законченный фрагмент и разобрать его или выяснить, как все работает, а не пытаться понять. собрать вместе различные вещи в качестве теста.

19.03.2013

  • Итак, что вы пробовали? 19.03.2013
  • Как я уже сказал, пока ничего. Я почти ничего не знаю (я немного умею Java, а из этого я знаю только несколько основ) и понятия не имею, с чего начать. Я хотел бы видеть код и учиться на нем, читая и разбираясь в нем, и научиться включать различные его аспекты в будущий код и т. д. 19.03.2013
  • Что ж, тогда лучше всего начать с основ, манипуляций со строками в C#. msdn.microsoft.com/en-us /библиотека/vstudio/ 19.03.2013

Ответы:


1

Разделите ваш массив букв на два массива, один из которых содержит только гласные [a,e,i,o,u,y], а другой все остальные, для dinosaur вы получите [d,n,r,s] - [a,i,o,u] Затем, чтобы составить анаграмму, введите случайное число для объединенного количества букв, все еще находящихся в массивах, выберите соответствующую букву, добавьте ее в свою анаграмму в построении и уберите из массивов. Скажем, ваши случайные броски 6 (на основе 0), первый массив имеет длину 4, берется из второго массива в позиции 2 (= 6-4) -> 'o'. Next random(7) выдает 2, беря 'r' из первого массива, теперь наша анаграмма имеет or, а массивы имеют [d,n,s] - [a,i,u]. А насчет того, чтобы гласные чередовались с согласными, следите за тем, в каком массиве ваши буквы были разбужены последними, и если есть два последовательных взятия из одного массива, берите букву из другого (случайным образом), а не из полного набора. оставшиеся буквы.

И теперь вам придется самостоятельно закодировать это в своей программе.

19.03.2013
  • Y не гласная, я пытался удалить Y, но это не позволило мне, так как мне нужно 6+ изменений, чтобы выполнить редактирование. 19.03.2013
  • @ZafKhan ПОЧЕМУ ? #отступы# 19.03.2013
  • Я беру свои слова обратно Y тоже гласная. Ух ты! Я сегодня кое-что узнал! [Источник: simple.wikipedia.org/wiki/Vowel] 19.03.2013

  • 2

    Вот решение, которое должно удовлетворить все ваши потребности:

    static class Program
    {
        static readonly char[] Vowels = new []{'a', 'e', 'i', 'o', 'u', 'y'};
        static readonly Random r = new Random();
    
        static bool IsVowel(char c) { return Vowels.Contains(c); }
        static bool IsConsonant(char c) { return !IsVowel(c); }
    
        static string Scramble(string inpt)
        {
            string input = inpt + "x";
            List<char> vowelList = input.Where(IsVowel).ToList();
            List<char> consonantList = input.Where(IsConsonant).ToList();
            StringBuilder output = new StringBuilder();
            bool needVowel = false; // Start with a consonant, if possible.
    
            while (vowelList.Count > 0 || consonantList.Count > 0)
            {
                IList<char> charList = consonantList;
                if (consonantList.Count == 0 || (needVowel && vowelList.Count > 0))
                {
                    charList = vowelList;
                }
                int randomIndex = r.Next(0, charList.Count);
                output.Append(charList.ElementAt(randomIndex));
                charList.RemoveAt(randomIndex);
                needVowel = !needVowel;
            }
    
            return output.ToString();
        }
    
        static void Main(string[] args)
        {
            foreach (var s in Enumerable.Repeat("dinosaur", 20).Select(Scramble))
            {
                Debug.WriteLine(s);
            }
        }
    }
    
    19.03.2013
  • Какая-то конкретная причина, по которой Random каждый раз регенерируется? Таким образом, последовательный вызов Scramble() за короткое время даст идентичный результат. И я не уверен, почему new Random((int) ... ticks...) лучше, чем просто new Random(), которые все равно используют системное время 19.03.2013
  • @Martheen Random регенерируется для каждой схватки. БУДЕТ разница в тиках, независимо от того, насколько близко каждое выполнение, поскольку (Из документации): один тик представляет собой сто наносекунд или одну десятимиллионную долю секунды. В миллисекунде 10 000 тиков. Начальный метод взят из документации для Random. 19.03.2013
  • @Martheen Кроме того, использование тиков гарантирует, что у вас не будет проблемы с частой инициализацией. ПРИ ЭТОМ: Я согласен с тем, что Random следует задавать только один раз для всей программы. Но так как я не включаю тело main, я решил, что будет лучше включить здесь заполнение. 19.03.2013
  • Неа. Только что попробовал var data = Enumerable.Repeat(faleticia, 20).Select(Scramble).ToList(); data.ForEach(Console.WriteLine); И вуаля, одинаковые результаты 19.03.2013
  • Подобный быстрый вызов Ticks также дает идентичные значения. Кроме того, social.msdn .microsoft.com/Forums/en-US/windowsazuredata/thread/ также показывает, что это произошло. При тривиальном вызове функции, подобном этому, за один тик может быть выполнено несколько вызовов. 19.03.2013
  • Вы понимаете, что начальный метод в документации используется для демонстрации идентичного результата? 19.03.2013
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]