Бюджет: 1000 UAH Термін: 1 день
Готов с сотрудничеству
Нужны исходники C# функции определения схожести двух слов. На выходе – процент схожести или какая либо другая актуальная мера (обсуждаемо). Например:
joomla и jomla более схожи, чем joomla и jinjo.
Собственно это и должна определять функция. Важно:
1. Используем по возможности только нативные библиотеки .net
2. Поддержка русского и английского языка.
Бюджет: 1000 UAH Термін: 1 день
Готов с сотрудничеству
Бюджет: 300 UAH Термін: 1 день
Реализую на C#. При желании можно обсудить и продумать более сложные и тонкие варианты оценки.
public static int Compute(string s, string t) { int n = s.Length; int m = t.Length; int[,] d = new int[n + 1, m + 1]; // Step 1 if (n == 0) { return m; } if (m == 0) { return n; } for (int i = 0; i <= n; d[i, 0] = i++) { } for (int j = 0; j <= m; d[0, j] = j++) { } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { int cost = (t[j - 1] == s[i - 1]) ? 0 : 1; d[i, j] = Math.Min( Math.Min(d[i - 1, j] + 1, d[i, j - 1] + 1), d[i - 1, j - 1] + cost); } } return d[n, m]; } double GetSimilarityRatio(String FullString1, String FullString2, out double WordsRatio, out double RealWordsRatio) { double theResult = 0; String[] Splitted1 = FullString1.Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries); String[] Splitted2 = FullString2.Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries); if (Splitted1.Length < Splitted2.Length) { String[] Temp = Splitted2; Splitted2 = Splitted1; Splitted1 = Temp; } int[,] theScores = new int[Splitted1.Length, Splitted2.Length];//Keep the best scores for each word.0 is the best, 1000 is the starting. int[] BestWord = new int[Splitted1.Length];//Index to the best word of Splitted2 for the Splitted1. for (int loop = 0; loop < Splitted1.Length; loop++) { for (int loop1 = 0; loop1 < Splitted2.Length; loop1++) theScores[loop, loop1] = 1000; BestWord[loop] = -1; } int WordsMatched = 0; for (int loop = 0; loop < Splitted1.Length; loop++) { String String1 = Splitted1[loop]; for (int loop1 = 0; loop1 < Splitted2.Length; loop1++) { String String2 = Splitted2[loop1]; int LevenshteinDistance = Compute(String1, String2); theScores[loop, loop1] = LevenshteinDistance; if (BestWord[loop] == -1 || theScores[loop, BestWord[loop]] > LevenshteinDistance) BestWord[loop] = loop1; } } for (int loop = 0; loop < Splitted1.Length; loop++) { if (theScores[loop, BestWord[loop]] == 1000) continue; for (int loop1 = loop + 1; loop1 < Splitted1.Length; loop1++) { if (theScores[loop1, BestWord[loop1]] == 1000) continue;//the worst score available, so there are no more words left if (BestWord[loop] == BestWord[loop1])//2 words have the same best word { //The first in order has the advantage of keeping the word in equality if (theScores[loop, BestWord[loop]] <= theScores[loop1, BestWord[loop1]]) { theScores[loop1, BestWord[loop1]] = 1000; int CurrentBest = -1; int CurrentScore = 1000; for (int loop2 = 0; loop2 < Splitted2.Length; loop2++) { //Find next bestword if (CurrentBest == -1 || CurrentScore > theScores[loop1, loop2]) { CurrentBest = loop2; CurrentScore = theScores[loop1, loop2]; } } BestWord[loop1] = CurrentBest; } else//the latter has a better score { theScores[loop, BestWord[loop]] = 1000; int CurrentBest = -1; int CurrentScore = 1000; for (int loop2 = 0; loop2 < Splitted2.Length; loop2++) { //Find next bestword if (CurrentBest == -1 || CurrentScore > theScores[loop, loop2]) { CurrentBest = loop2; CurrentScore = theScores[loop, loop2]; } } BestWord[loop] = CurrentBest; } loop = -1; break;//recalculate all } } } for (int loop = 0; loop < Splitted1.Length; loop++) { if (theScores[loop, BestWord[loop]] == 1000) theResult += Splitted1[loop].Length;//All words without a score for best word are max failures else { theResult += theScores[loop, BestWord[loop]]; if (theScores[loop, BestWord[loop]] == 0) WordsMatched++; } } int theLength = (FullString1.Replace(" ", "").Length > FullString2.Replace(" ", "").Length) ? FullString1.Replace(" ", "").Length : FullString2.Replace(" ", "").Length; if(theResult > theLength) theResult = theLength; theResult = (1 - (theResult / theLength)) * 100; WordsRatio = ((double)WordsMatched / (double)Splitted2.Length) * 100; RealWordsRatio = ((double)WordsMatched / (double)Splitted1.Length) * 100; return theResult; }
Шукаємо досвідченого Unity-розробника, який допоможе завершити розробку гри. Про гру: Жанр: симулятор ферми. Гра вже розробляється на Unity. Спочатку вона створювалася для мобільних пристроїв, але згодом було прийнято рішення випустити її для Steam (ПК). Що потрібно зробити: Доробити гру відповідно до готового технічного завдання. Адаптувати існуючий функціонал під ПК та Steam. Реалізувати вже заплановані механіки та інтерфейс. Що ми надаємо: Детальне технічне завдання. Усі необхідні матеріали (моделі, графіка, об'єкти тощо). Фото, відео, скріншоти та записи проходження оригінальної гри. Готовий план реалізації. Ми відтворюємо гру, яка успішно працювала понад 10 років тому, тому нічого вигадувати або проєктувати з нуля не потрібно. Усі механіки, інтерфейс та логіка вже визначені — необхідно якісно реалізувати їх у Unity. Для ознайомлення з проєктом додаємо посилання на один із відеооглядів гри: Вставте посилання тут. Вимоги: Досвід роботи з Unity. Досвід розробки або адаптації ігор під ПК/Steam буде перевагою. Вміння працювати за готовим технічним завданням. У відповіді, будь ласка, вкажіть: приклади ваших робіт; досвід роботи з Unity; орієнтовну погодинну ставку або вартість виконання. Один з відеооглядів:https://www.youtube.com/watch?v=5_wKoX7zRc0