דילוג לתוכן
  • חוקי הפורום
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
לוגו מותג
  1. דף הבית
  2. קטגוריות בהרצה
  3. תכנות
  4. C++
  5. עזרה הדדית - C++
  6. בקשת מידע | פיתוח הצופן התנכ"י

בקשת מידע | פיתוח הצופן התנכ"י

מתוזמן נעוץ נעול הועבר עזרה הדדית - C++
20 פוסטים 6 כותבים 362 צפיות 7 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • T מנותק
    T מנותק
    trhtkgsh
    כתב נערך לאחרונה על ידי trhtkgsh
    #1

    שלום.

    אני המפתח של תוכנת תורמז.
    זו תוכנה העוסקת בחישובים וחיפושים בתורת הרמז.
    התוכנה כתובה בשפת C#
    יש לי בתוכנה בין היתר את הצופן התנכ"י כבר עם UI ולוגיקה.
    הבעיה היא שבשפת C# אי אפשר להגיע לרמת היעילות שמגיעה C++.
    ניסיתי בעזרת בינה מלאכותית ליצור פונקציה בC++ שמחפשת דילוגים ולקרוא לה בC#.
    הבעיה שלי שאני לא מצליח להגיע לרמת ביצועים גבוהה וחיפוש בצופן התנכ"י לוקח דקות ארוכות.
    שאר החיפושים בתוכנה לוקחים שניה.
    אשמח לעזרה לכתיבת קוד בC++.
    המסך של הצופן התנכ"י אינו מוצג.

    תודה רבה

    מ תגובה 1 תגובה אחרונה
    2
    • T trhtkgsh

      שלום.

      אני המפתח של תוכנת תורמז.
      זו תוכנה העוסקת בחישובים וחיפושים בתורת הרמז.
      התוכנה כתובה בשפת C#
      יש לי בתוכנה בין היתר את הצופן התנכ"י כבר עם UI ולוגיקה.
      הבעיה היא שבשפת C# אי אפשר להגיע לרמת היעילות שמגיעה C++.
      ניסיתי בעזרת בינה מלאכותית ליצור פונקציה בC++ שמחפשת דילוגים ולקרוא לה בC#.
      הבעיה שלי שאני לא מצליח להגיע לרמת ביצועים גבוהה וחיפוש בצופן התנכ"י לוקח דקות ארוכות.
      שאר החיפושים בתוכנה לוקחים שניה.
      אשמח לעזרה לכתיבת קוד בC++.
      המסך של הצופן התנכ"י אינו מוצג.

      תודה רבה

      מ מנותק
      מ מנותק
      משחזר מידע
      כתב נערך לאחרונה על ידי
      #2

      משו לא מובן

      @trhtkgsh כתב בבקשת מידע | פיתוח הצופן התנכ"י:

      ניסיתי בעזרת בינה מלאכותית ליצור פונקציה בC++ שמחפשת דילוגים ולקרוא לה בC#.

      @trhtkgsh כתב בבקשת מידע | פיתוח הצופן התנכ"י:

      הבעיה שלי שאני לא מצליח להגיע לרמת ביצועים גבוהה וחיפוש בצופן התנכ"י לוקח דקות ארוכות.

      @trhtkgsh כתב בבקשת מידע | פיתוח הצופן התנכ"י:

      אשמח לעזרה לכתיבת קוד בC++.

      אם ניסית ולא עבד
      מה יעזור עזרה?


      הפעלת ניהול דיסקים דרך הקובץ המצורף

      Hex editor חינמי

      T תגובה 1 תגובה אחרונה
      1
      • מ משחזר מידע

        משו לא מובן

        @trhtkgsh כתב בבקשת מידע | פיתוח הצופן התנכ"י:

        ניסיתי בעזרת בינה מלאכותית ליצור פונקציה בC++ שמחפשת דילוגים ולקרוא לה בC#.

        @trhtkgsh כתב בבקשת מידע | פיתוח הצופן התנכ"י:

        הבעיה שלי שאני לא מצליח להגיע לרמת ביצועים גבוהה וחיפוש בצופן התנכ"י לוקח דקות ארוכות.

        @trhtkgsh כתב בבקשת מידע | פיתוח הצופן התנכ"י:

        אשמח לעזרה לכתיבת קוד בC++.

        אם ניסית ולא עבד
        מה יעזור עזרה?

        T מנותק
        T מנותק
        trhtkgsh
        כתב נערך לאחרונה על ידי
        #3

        @משחזר-מידע
        1- כידוע בינה מלאכותית עדיין לא מוציאה תוצרים מסובכים יעילים.
        2- אני יודע בוודאות שזה אפשרי כי התוכנות הקודמות של הצופן התנכ"י נכתבו בC++ וחיפוש אצלם מהיר (ברמה של שניה)

        אני פשוט לא יודע להתעסק עם ניהול זיכרון ומצביעים בצורה טובה

        מ צדיק תמיםצ 2 תגובות תגובה אחרונה
        0
        • T trhtkgsh

          @משחזר-מידע
          1- כידוע בינה מלאכותית עדיין לא מוציאה תוצרים מסובכים יעילים.
          2- אני יודע בוודאות שזה אפשרי כי התוכנות הקודמות של הצופן התנכ"י נכתבו בC++ וחיפוש אצלם מהיר (ברמה של שניה)

          אני פשוט לא יודע להתעסק עם ניהול זיכרון ומצביעים בצורה טובה

          מ מנותק
          מ מנותק
          משחזר מידע
          כתב נערך לאחרונה על ידי
          #4

          @trhtkgsh כתב בבקשת מידע | פיתוח הצופן התנכ"י:

          אני פשוט לא יודע להתעסק עם ניהול זיכרון ומצביעים בצורה טובה

          סה"כ "*" ו"&"
          לא מי יודע מה מסובך


          הפעלת ניהול דיסקים דרך הקובץ המצורף

          Hex editor חינמי

          T תגובה 1 תגובה אחרונה
          0
          • מ משחזר מידע

            @trhtkgsh כתב בבקשת מידע | פיתוח הצופן התנכ"י:

            אני פשוט לא יודע להתעסק עם ניהול זיכרון ומצביעים בצורה טובה

            סה"כ "*" ו"&"
            לא מי יודע מה מסובך

            T מנותק
            T מנותק
            trhtkgsh
            כתב נערך לאחרונה על ידי
            #5

            @משחזר-מידע כתב בבקשת מידע | פיתוח הצופן התנכ"י:

            @trhtkgsh כתב בבקשת מידע | פיתוח הצופן התנכ"י:

            אני פשוט לא יודע להתעסק עם ניהול זיכרון ומצביעים בצורה טובה

            סה"כ "*" ו"&"
            לא מי יודע מה מסובך

            אז אם זה לא כל כך מסובך בטח לא יהיה לך בעיה לכתוב לי את הקוד

            תגובה 1 תגובה אחרונה
            0
            • T trhtkgsh

              @משחזר-מידע
              1- כידוע בינה מלאכותית עדיין לא מוציאה תוצרים מסובכים יעילים.
              2- אני יודע בוודאות שזה אפשרי כי התוכנות הקודמות של הצופן התנכ"י נכתבו בC++ וחיפוש אצלם מהיר (ברמה של שניה)

              אני פשוט לא יודע להתעסק עם ניהול זיכרון ומצביעים בצורה טובה

              צדיק תמיםצ מנותק
              צדיק תמיםצ מנותק
              צדיק תמים
              מדריכים
              כתב נערך לאחרונה על ידי צדיק תמים
              #6

              @trhtkgsh כוונתו שאתה לא צריך "עזרה בכתיבה" כמו שכתבת בפוסט הפותח אלא שפשוט יכתבו את הקוד במקומך

              @trhtkgsh כתב בבקשת מידע | פיתוח הצופן התנכ"י:

              2- אני יודע בוודאות שזה אפשרי כי התוכנות הקודמות של הצופן התנכ"י נכתבו בC++ וחיפוש אצלם מהיר (ברמה של שניה)

              זה לא בהכרח אומר שהפער המשמעותי היא השפה. יכול להיות שהאלגוריתם והמימוש שלהם יותר יעיל משלך (משום מה לא הבאת שום קוד קיים).

              רוצה לזכור קריאת שמע בזמן? לחץ כאן! || אתר שכולו מדריכים

              T תגובה 1 תגובה אחרונה
              0
              • Y מנותק
                Y מנותק
                yeo4
                כתב נערך לאחרונה על ידי
                #7

                עניינת. כמה רעיונות שעולים לי לראש:

                1. איך אתה מבצע את החיפוש? בקוד בC#? או בSQL? (דהיינו קורא ממסד נתונים..)
                2. חשבת אולי להפוך לחפש דרך "מנוע חיפוש" קיים שיש? מחיפוש מהיר ראיתי נגיד ספריית לוסין - שיש לה גם קוד של בC#.
                3. עדיף לא להמציא את הגלגל מחדש.

                כל טוב.

                תגובה 1 תגובה אחרונה
                1
                • צדיק תמיםצ צדיק תמים

                  @trhtkgsh כוונתו שאתה לא צריך "עזרה בכתיבה" כמו שכתבת בפוסט הפותח אלא שפשוט יכתבו את הקוד במקומך

                  @trhtkgsh כתב בבקשת מידע | פיתוח הצופן התנכ"י:

                  2- אני יודע בוודאות שזה אפשרי כי התוכנות הקודמות של הצופן התנכ"י נכתבו בC++ וחיפוש אצלם מהיר (ברמה של שניה)

                  זה לא בהכרח אומר שהפער המשמעותי היא השפה. יכול להיות שהאלגוריתם והמימוש שלהם יותר יעיל משלך (משום מה לא הבאת שום קוד קיים).

                  T מנותק
                  T מנותק
                  trhtkgsh
                  כתב נערך לאחרונה על ידי
                  #8

                  @צדיק-תמים
                  חשבתי שהייתי ברור.
                  אני צריך מתכנת C++ שיכתוב לי dll עם פונקציה שאפשר לקרוא לה בC#.
                  הפונקציה תקבל json של פרטי חיפוש ותחזיר תוצאות חיפוש בjson

                  לכתוב קוד שעובד הצלחתי.
                  לכתוב קוד שעובד יעיל לא הצלחתי.
                  אם רוצים אני יכול לתת את השלד של הקוד (קוד שעובד, אבל לא יעיל ברמה הרצויה)

                  sivan22S תגובה 1 תגובה אחרונה
                  0
                  • T trhtkgsh

                    @צדיק-תמים
                    חשבתי שהייתי ברור.
                    אני צריך מתכנת C++ שיכתוב לי dll עם פונקציה שאפשר לקרוא לה בC#.
                    הפונקציה תקבל json של פרטי חיפוש ותחזיר תוצאות חיפוש בjson

                    לכתוב קוד שעובד הצלחתי.
                    לכתוב קוד שעובד יעיל לא הצלחתי.
                    אם רוצים אני יכול לתת את השלד של הקוד (קוד שעובד, אבל לא יעיל ברמה הרצויה)

                    sivan22S מנותק
                    sivan22S מנותק
                    sivan22
                    כתב נערך לאחרונה על ידי
                    #9

                    @trhtkgsh אתה צריך לחשוב קודם על אלגוריתם יעיל, לכתוב אותו אפילו בפסאודו קוד, ואז להחליט באיזו שפה כדאי לממש. אני ממש לא בטוח שניהול הזכרון הוא המפתח לחיפוש יעיל. קודם כדאי לבדוק בכיוון של אינדקסים וכדומה.

                    דרך אגב, אם אתה מחפש שפה יעילה במיוחד, היום משתמשים בRUST, היא מנהלת את הזכרון בצורה מיטבית ובלי הסיכונים הכרוכים בC++. החסרון היחיד שלה הוא עקומת למידה די תלולה.

                    ט T 2 תגובות תגובה אחרונה
                    2
                    • sivan22S sivan22

                      @trhtkgsh אתה צריך לחשוב קודם על אלגוריתם יעיל, לכתוב אותו אפילו בפסאודו קוד, ואז להחליט באיזו שפה כדאי לממש. אני ממש לא בטוח שניהול הזכרון הוא המפתח לחיפוש יעיל. קודם כדאי לבדוק בכיוון של אינדקסים וכדומה.

                      דרך אגב, אם אתה מחפש שפה יעילה במיוחד, היום משתמשים בRUST, היא מנהלת את הזכרון בצורה מיטבית ובלי הסיכונים הכרוכים בC++. החסרון היחיד שלה הוא עקומת למידה די תלולה.

                      ט מנותק
                      ט מנותק
                      טופטופיסט
                      כתב נערך לאחרונה על ידי
                      #10

                      @sivan22 כתב בבקשת מידע | פיתוח הצופן התנכ"י:

                      הסיכונים הכרוכים בC++

                      כמו מה למשל?

                      תגובה 1 תגובה אחרונה
                      0
                      • sivan22S sivan22

                        @trhtkgsh אתה צריך לחשוב קודם על אלגוריתם יעיל, לכתוב אותו אפילו בפסאודו קוד, ואז להחליט באיזו שפה כדאי לממש. אני ממש לא בטוח שניהול הזכרון הוא המפתח לחיפוש יעיל. קודם כדאי לבדוק בכיוון של אינדקסים וכדומה.

                        דרך אגב, אם אתה מחפש שפה יעילה במיוחד, היום משתמשים בRUST, היא מנהלת את הזכרון בצורה מיטבית ובלי הסיכונים הכרוכים בC++. החסרון היחיד שלה הוא עקומת למידה די תלולה.

                        T מנותק
                        T מנותק
                        trhtkgsh
                        כתב נערך לאחרונה על ידי
                        #11

                        @sivan22 כתב בבקשת מידע | פיתוח הצופן התנכ"י:

                        @trhtkgsh אתה צריך לחשוב קודם על אלגוריתם יעיל, לכתוב אותו אפילו בפסאודו קוד, ואז להחליט באיזו שפה כדאי לממש. אני ממש לא בטוח שניהול הזכרון הוא המפתח לחיפוש יעיל. קודם כדאי לבדוק בכיוון של אינדקסים וכדומה.

                        אין אפשרות לחפש לפי אינדקסים, כי הטווח דינאמי (זה ליצור את האינדקסים כל פעם מחדש).
                        כיום אני מסנן את כל האותיות לפי הגדרה מסוימת.
                        הבעיה עם הצופן התנכ"י זה שצריך כל פעם לבדוק דילוגים מ-1 ועד 300,000 בפוטנציאל אם מחפשים בכל התורה

                        דרך אגב, אם אתה מחפש שפה יעילה במיוחד, היום משתמשים בRUST, היא מנהלת את הזכרון בצורה מיטבית ובלי הסיכונים הכרוכים בC++. החסרון היחיד שלה הוא עקומת למידה די תלולה.

                        ניסיתי לכתוב קוד ב-C# והמרתי אותו ל-C++ ורמת הביצועים השתפרה פלאים (במקום 10 לפחות לחיפוש זה ירד לדקה) והלוגיקה הייתה זהה.
                        האם לדעתך אפשר לקחת את הקוד הכי יעיל ב-C# ולהמיר אותו בבינה מלאכותית ל-Rust?
                        בחרתי ב-C++ כי הוא קרוב ל-C# ואפשר להבין אותו בקלות יחסית.

                        תודה, ומה אתה ממליץ?

                        יש לי קוד בסיסי שעובד:

                        #include "pch.h"
                        #include "Codes.h"
                        #include "CodeResult.h"
                        #include "CodesSearchSettings.h"
                        
                        #include <future>
                        #include <nlohmann/json.hpp>
                        #include <Windows.h>
                        
                        using json = nlohmann::json;
                        
                        CodeResult* Codes::search(const char* settingsJson, int* resultCount)
                        {
                        	settings = Codes::initSettings(settingsJson);
                        
                        	vector<future<vector<CodeResult>>> results;
                        
                        	for (int i = settings->start; i <= settings->end; i++)
                        	{
                        		results.emplace_back(async(launch::async, [=]()->vector<CodeResult>
                        		{
                        			return logic(settings, i);
                        		}));
                        	}
                        
                        	vector<CodeResult> finalResults;
                        
                        	for (auto& task : results)
                        	{
                        		auto skippingResults = task.get();
                        
                        		if (!skippingResults.empty())
                        			finalResults.insert(finalResults.end(), skippingResults.begin(), skippingResults.end());
                        	}
                        
                        	*resultCount = finalResults.size();
                        
                        	// Allocate memory using new
                        	CodeResult* resultArray = new CodeResult[*resultCount];
                        
                        	// Copy the results to the allocated array
                        	std::copy(finalResults.begin(), finalResults.end(), resultArray);
                        
                        	return resultArray;
                        }
                        
                        CodesSearchSettings* Codes::initSettings(const char* settingsJson)
                        {
                        	std::string jsonDataString(settingsJson);
                        	json jsonData = json::parse(jsonDataString);
                        
                        	CodesSearchSettings* newSettings = new CodesSearchSettings();
                        
                        	newSettings->start = jsonData["Start"];
                        	newSettings->end = jsonData["End"];
                        	newSettings->lastIndex = jsonData["LastIndex"];
                        	newSettings->lettersCount = jsonData["LettersCount"];
                        	newSettings->searchTextLength = jsonData["SearchTextLength"];
                        
                        	newSettings->searchText = new char[newSettings->searchTextLength + 1];
                        	strncpy_s(newSettings->searchText, newSettings->searchTextLength + 1, jsonData["SearchText"].get<string>().c_str(), _TRUNCATE);
                        
                        	newSettings->lettersText = new char[newSettings->lettersCount + 1];
                        	strncpy_s(newSettings->lettersText, newSettings->lettersCount + 1, jsonData["LettersText"].get<string>().c_str(), _TRUNCATE);
                        
                        	return newSettings;
                        }
                        
                        vector<CodeResult> Codes::logic(CodesSearchSettings* settings, int skipping)
                        {
                        	vector<CodeResult> skippingResults;
                        	int totalLenth = settings->searchTextLength * skipping;
                        
                        	for (int i = 0; i < settings->lastIndex; i++)
                        	{
                        		int index = 0;
                        		int lettersCounter = 0;
                        
                        		for (int j = 0; j < totalLenth && i + j < settings->lettersCount; j += skipping)
                        		{
                        			char letterToCheck = settings->lettersText[i + j];
                        			char searchTextLetter = settings->searchText[index];
                        
                        			if (searchTextLetter != letterToCheck)
                        				break;
                        
                        			index++;
                        			lettersCounter++;
                        		}
                        
                        		if (lettersCounter == settings->searchTextLength)
                        		{
                        			CodeResult result = { i, skipping };
                        			skippingResults.push_back(result);
                        		}
                        	}
                        
                        	return skippingResults;
                        }
                        
                        #define EXPORTED_METHOD extern "C" __declspec(dllexport)
                        
                        EXPORTED_METHOD CodeResult* searchCodes(const char* settingsJson, int* resultCount)
                        {
                        	Codes codes;
                        	return codes.search(settingsJson, resultCount);
                        }
                        
                        EXPORTED_METHOD void releaseMemory(CodeResult* resultArray) { delete[] resultArray; }
                        
                        sivan22S מ 2 תגובות תגובה אחרונה
                        0
                        • T trhtkgsh

                          @sivan22 כתב בבקשת מידע | פיתוח הצופן התנכ"י:

                          @trhtkgsh אתה צריך לחשוב קודם על אלגוריתם יעיל, לכתוב אותו אפילו בפסאודו קוד, ואז להחליט באיזו שפה כדאי לממש. אני ממש לא בטוח שניהול הזכרון הוא המפתח לחיפוש יעיל. קודם כדאי לבדוק בכיוון של אינדקסים וכדומה.

                          אין אפשרות לחפש לפי אינדקסים, כי הטווח דינאמי (זה ליצור את האינדקסים כל פעם מחדש).
                          כיום אני מסנן את כל האותיות לפי הגדרה מסוימת.
                          הבעיה עם הצופן התנכ"י זה שצריך כל פעם לבדוק דילוגים מ-1 ועד 300,000 בפוטנציאל אם מחפשים בכל התורה

                          דרך אגב, אם אתה מחפש שפה יעילה במיוחד, היום משתמשים בRUST, היא מנהלת את הזכרון בצורה מיטבית ובלי הסיכונים הכרוכים בC++. החסרון היחיד שלה הוא עקומת למידה די תלולה.

                          ניסיתי לכתוב קוד ב-C# והמרתי אותו ל-C++ ורמת הביצועים השתפרה פלאים (במקום 10 לפחות לחיפוש זה ירד לדקה) והלוגיקה הייתה זהה.
                          האם לדעתך אפשר לקחת את הקוד הכי יעיל ב-C# ולהמיר אותו בבינה מלאכותית ל-Rust?
                          בחרתי ב-C++ כי הוא קרוב ל-C# ואפשר להבין אותו בקלות יחסית.

                          תודה, ומה אתה ממליץ?

                          יש לי קוד בסיסי שעובד:

                          #include "pch.h"
                          #include "Codes.h"
                          #include "CodeResult.h"
                          #include "CodesSearchSettings.h"
                          
                          #include <future>
                          #include <nlohmann/json.hpp>
                          #include <Windows.h>
                          
                          using json = nlohmann::json;
                          
                          CodeResult* Codes::search(const char* settingsJson, int* resultCount)
                          {
                          	settings = Codes::initSettings(settingsJson);
                          
                          	vector<future<vector<CodeResult>>> results;
                          
                          	for (int i = settings->start; i <= settings->end; i++)
                          	{
                          		results.emplace_back(async(launch::async, [=]()->vector<CodeResult>
                          		{
                          			return logic(settings, i);
                          		}));
                          	}
                          
                          	vector<CodeResult> finalResults;
                          
                          	for (auto& task : results)
                          	{
                          		auto skippingResults = task.get();
                          
                          		if (!skippingResults.empty())
                          			finalResults.insert(finalResults.end(), skippingResults.begin(), skippingResults.end());
                          	}
                          
                          	*resultCount = finalResults.size();
                          
                          	// Allocate memory using new
                          	CodeResult* resultArray = new CodeResult[*resultCount];
                          
                          	// Copy the results to the allocated array
                          	std::copy(finalResults.begin(), finalResults.end(), resultArray);
                          
                          	return resultArray;
                          }
                          
                          CodesSearchSettings* Codes::initSettings(const char* settingsJson)
                          {
                          	std::string jsonDataString(settingsJson);
                          	json jsonData = json::parse(jsonDataString);
                          
                          	CodesSearchSettings* newSettings = new CodesSearchSettings();
                          
                          	newSettings->start = jsonData["Start"];
                          	newSettings->end = jsonData["End"];
                          	newSettings->lastIndex = jsonData["LastIndex"];
                          	newSettings->lettersCount = jsonData["LettersCount"];
                          	newSettings->searchTextLength = jsonData["SearchTextLength"];
                          
                          	newSettings->searchText = new char[newSettings->searchTextLength + 1];
                          	strncpy_s(newSettings->searchText, newSettings->searchTextLength + 1, jsonData["SearchText"].get<string>().c_str(), _TRUNCATE);
                          
                          	newSettings->lettersText = new char[newSettings->lettersCount + 1];
                          	strncpy_s(newSettings->lettersText, newSettings->lettersCount + 1, jsonData["LettersText"].get<string>().c_str(), _TRUNCATE);
                          
                          	return newSettings;
                          }
                          
                          vector<CodeResult> Codes::logic(CodesSearchSettings* settings, int skipping)
                          {
                          	vector<CodeResult> skippingResults;
                          	int totalLenth = settings->searchTextLength * skipping;
                          
                          	for (int i = 0; i < settings->lastIndex; i++)
                          	{
                          		int index = 0;
                          		int lettersCounter = 0;
                          
                          		for (int j = 0; j < totalLenth && i + j < settings->lettersCount; j += skipping)
                          		{
                          			char letterToCheck = settings->lettersText[i + j];
                          			char searchTextLetter = settings->searchText[index];
                          
                          			if (searchTextLetter != letterToCheck)
                          				break;
                          
                          			index++;
                          			lettersCounter++;
                          		}
                          
                          		if (lettersCounter == settings->searchTextLength)
                          		{
                          			CodeResult result = { i, skipping };
                          			skippingResults.push_back(result);
                          		}
                          	}
                          
                          	return skippingResults;
                          }
                          
                          #define EXPORTED_METHOD extern "C" __declspec(dllexport)
                          
                          EXPORTED_METHOD CodeResult* searchCodes(const char* settingsJson, int* resultCount)
                          {
                          	Codes codes;
                          	return codes.search(settingsJson, resultCount);
                          }
                          
                          EXPORTED_METHOD void releaseMemory(CodeResult* resultArray) { delete[] resultArray; }
                          
                          sivan22S מנותק
                          sivan22S מנותק
                          sivan22
                          כתב נערך לאחרונה על ידי
                          #12

                          @trhtkgsh לדעתי שווה לנסות להמיר לראסט, זה גם לא נראה קוד ארוך במיוחד. אבל תשתמש רק בקלוד סונט 3.5.

                          T תגובה 1 תגובה אחרונה
                          0
                          • sivan22S sivan22

                            @trhtkgsh לדעתי שווה לנסות להמיר לראסט, זה גם לא נראה קוד ארוך במיוחד. אבל תשתמש רק בקלוד סונט 3.5.

                            T מנותק
                            T מנותק
                            trhtkgsh
                            כתב נערך לאחרונה על ידי
                            #13

                            @sivan22
                            עדיך להשתמש ב- https://cursor.com/ שפונה לקלוד סונט 3.5.
                            תודה רבה, אנסה.
                            בכל מקרה אני מעדיף להשתמש ב-C++ כי יותר קל לתחזק אותו בפרויקט של כל התוכנה.
                            אז אם מישהו רוצה לעזור אשמח

                            תגובה 1 תגובה אחרונה
                            0
                            • T trhtkgsh

                              @sivan22 כתב בבקשת מידע | פיתוח הצופן התנכ"י:

                              @trhtkgsh אתה צריך לחשוב קודם על אלגוריתם יעיל, לכתוב אותו אפילו בפסאודו קוד, ואז להחליט באיזו שפה כדאי לממש. אני ממש לא בטוח שניהול הזכרון הוא המפתח לחיפוש יעיל. קודם כדאי לבדוק בכיוון של אינדקסים וכדומה.

                              אין אפשרות לחפש לפי אינדקסים, כי הטווח דינאמי (זה ליצור את האינדקסים כל פעם מחדש).
                              כיום אני מסנן את כל האותיות לפי הגדרה מסוימת.
                              הבעיה עם הצופן התנכ"י זה שצריך כל פעם לבדוק דילוגים מ-1 ועד 300,000 בפוטנציאל אם מחפשים בכל התורה

                              דרך אגב, אם אתה מחפש שפה יעילה במיוחד, היום משתמשים בRUST, היא מנהלת את הזכרון בצורה מיטבית ובלי הסיכונים הכרוכים בC++. החסרון היחיד שלה הוא עקומת למידה די תלולה.

                              ניסיתי לכתוב קוד ב-C# והמרתי אותו ל-C++ ורמת הביצועים השתפרה פלאים (במקום 10 לפחות לחיפוש זה ירד לדקה) והלוגיקה הייתה זהה.
                              האם לדעתך אפשר לקחת את הקוד הכי יעיל ב-C# ולהמיר אותו בבינה מלאכותית ל-Rust?
                              בחרתי ב-C++ כי הוא קרוב ל-C# ואפשר להבין אותו בקלות יחסית.

                              תודה, ומה אתה ממליץ?

                              יש לי קוד בסיסי שעובד:

                              #include "pch.h"
                              #include "Codes.h"
                              #include "CodeResult.h"
                              #include "CodesSearchSettings.h"
                              
                              #include <future>
                              #include <nlohmann/json.hpp>
                              #include <Windows.h>
                              
                              using json = nlohmann::json;
                              
                              CodeResult* Codes::search(const char* settingsJson, int* resultCount)
                              {
                              	settings = Codes::initSettings(settingsJson);
                              
                              	vector<future<vector<CodeResult>>> results;
                              
                              	for (int i = settings->start; i <= settings->end; i++)
                              	{
                              		results.emplace_back(async(launch::async, [=]()->vector<CodeResult>
                              		{
                              			return logic(settings, i);
                              		}));
                              	}
                              
                              	vector<CodeResult> finalResults;
                              
                              	for (auto& task : results)
                              	{
                              		auto skippingResults = task.get();
                              
                              		if (!skippingResults.empty())
                              			finalResults.insert(finalResults.end(), skippingResults.begin(), skippingResults.end());
                              	}
                              
                              	*resultCount = finalResults.size();
                              
                              	// Allocate memory using new
                              	CodeResult* resultArray = new CodeResult[*resultCount];
                              
                              	// Copy the results to the allocated array
                              	std::copy(finalResults.begin(), finalResults.end(), resultArray);
                              
                              	return resultArray;
                              }
                              
                              CodesSearchSettings* Codes::initSettings(const char* settingsJson)
                              {
                              	std::string jsonDataString(settingsJson);
                              	json jsonData = json::parse(jsonDataString);
                              
                              	CodesSearchSettings* newSettings = new CodesSearchSettings();
                              
                              	newSettings->start = jsonData["Start"];
                              	newSettings->end = jsonData["End"];
                              	newSettings->lastIndex = jsonData["LastIndex"];
                              	newSettings->lettersCount = jsonData["LettersCount"];
                              	newSettings->searchTextLength = jsonData["SearchTextLength"];
                              
                              	newSettings->searchText = new char[newSettings->searchTextLength + 1];
                              	strncpy_s(newSettings->searchText, newSettings->searchTextLength + 1, jsonData["SearchText"].get<string>().c_str(), _TRUNCATE);
                              
                              	newSettings->lettersText = new char[newSettings->lettersCount + 1];
                              	strncpy_s(newSettings->lettersText, newSettings->lettersCount + 1, jsonData["LettersText"].get<string>().c_str(), _TRUNCATE);
                              
                              	return newSettings;
                              }
                              
                              vector<CodeResult> Codes::logic(CodesSearchSettings* settings, int skipping)
                              {
                              	vector<CodeResult> skippingResults;
                              	int totalLenth = settings->searchTextLength * skipping;
                              
                              	for (int i = 0; i < settings->lastIndex; i++)
                              	{
                              		int index = 0;
                              		int lettersCounter = 0;
                              
                              		for (int j = 0; j < totalLenth && i + j < settings->lettersCount; j += skipping)
                              		{
                              			char letterToCheck = settings->lettersText[i + j];
                              			char searchTextLetter = settings->searchText[index];
                              
                              			if (searchTextLetter != letterToCheck)
                              				break;
                              
                              			index++;
                              			lettersCounter++;
                              		}
                              
                              		if (lettersCounter == settings->searchTextLength)
                              		{
                              			CodeResult result = { i, skipping };
                              			skippingResults.push_back(result);
                              		}
                              	}
                              
                              	return skippingResults;
                              }
                              
                              #define EXPORTED_METHOD extern "C" __declspec(dllexport)
                              
                              EXPORTED_METHOD CodeResult* searchCodes(const char* settingsJson, int* resultCount)
                              {
                              	Codes codes;
                              	return codes.search(settingsJson, resultCount);
                              }
                              
                              EXPORTED_METHOD void releaseMemory(CodeResult* resultArray) { delete[] resultArray; }
                              
                              מ מנותק
                              מ מנותק
                              משחזר מידע
                              כתב נערך לאחרונה על ידי
                              #14

                              @trhtkgsh כתב בבקשת מידע | פיתוח הצופן התנכ"י:

                              ניסיתי לכתוב קוד ב-C# והמרתי אותו ל-C++

                              המרת לdll?


                              הפעלת ניהול דיסקים דרך הקובץ המצורף

                              Hex editor חינמי

                              T תגובה 1 תגובה אחרונה
                              0
                              • מ משחזר מידע

                                @trhtkgsh כתב בבקשת מידע | פיתוח הצופן התנכ"י:

                                ניסיתי לכתוב קוד ב-C# והמרתי אותו ל-C++

                                המרת לdll?

                                T מנותק
                                T מנותק
                                trhtkgsh
                                כתב נערך לאחרונה על ידי
                                #15

                                @משחזר-מידע
                                כתבתי קוד ב-C#, המרתי אותו ל-C++. בניתי DLL של C++ וקראתי לו ב-C#.
                                רק זה שיפר את הביצועים באופן משמעותי.
                                ע"י AI הבנתי יותר שכדאי לשנות את סוג האובייקטים לשיפור ביצועים.
                                עדיין אין לי משהו טוב שעובד. כל הזמן תקלות שאני לא יודע איך לדבג C++.

                                מ תגובה 1 תגובה אחרונה
                                0
                                • T trhtkgsh

                                  @משחזר-מידע
                                  כתבתי קוד ב-C#, המרתי אותו ל-C++. בניתי DLL של C++ וקראתי לו ב-C#.
                                  רק זה שיפר את הביצועים באופן משמעותי.
                                  ע"י AI הבנתי יותר שכדאי לשנות את סוג האובייקטים לשיפור ביצועים.
                                  עדיין אין לי משהו טוב שעובד. כל הזמן תקלות שאני לא יודע איך לדבג C++.

                                  מ מנותק
                                  מ מנותק
                                  משחזר מידע
                                  כתב נערך לאחרונה על ידי
                                  #16

                                  @trhtkgsh
                                  אתה מעלה כל התנך לזכרון מיד בהרצת התוכנה?
                                  או כל חיפוש אתה מעלה מחדש?
                                  או לא מעלה בכלל ומחפש בקובץ?


                                  הפעלת ניהול דיסקים דרך הקובץ המצורף

                                  Hex editor חינמי

                                  T תגובה 1 תגובה אחרונה
                                  0
                                  • מ משחזר מידע

                                    @trhtkgsh
                                    אתה מעלה כל התנך לזכרון מיד בהרצת התוכנה?
                                    או כל חיפוש אתה מעלה מחדש?
                                    או לא מעלה בכלל ומחפש בקובץ?

                                    T מנותק
                                    T מנותק
                                    trhtkgsh
                                    כתב נערך לאחרונה על ידי
                                    #17

                                    @משחזר-מידע
                                    כל התנ"ך מועלה עם התוכנה וכל פסוק מכיל הרבה מידע עד לרמת האות.
                                    וכך כל התנ"ך והמשנה (וכל טקסט אחר שיכניסו לתוכנה)

                                    מ תגובה 1 תגובה אחרונה
                                    0
                                    • T trhtkgsh

                                      @משחזר-מידע
                                      כל התנ"ך מועלה עם התוכנה וכל פסוק מכיל הרבה מידע עד לרמת האות.
                                      וכך כל התנ"ך והמשנה (וכל טקסט אחר שיכניסו לתוכנה)

                                      מ מנותק
                                      מ מנותק
                                      משחזר מידע
                                      כתב נערך לאחרונה על ידי משחזר מידע
                                      #18

                                      @trhtkgsh

                                      דבר ראשון הייתי בודק איפה הזמן שלוקח
                                      אם זה החיפוש עצמו
                                      או אולי עוד לפני שהחיפוש מתחיל אם זה הקוד שלך או זמן הקריאה לdll וכו'


                                      הפעלת ניהול דיסקים דרך הקובץ המצורף

                                      Hex editor חינמי

                                      T תגובה 1 תגובה אחרונה
                                      0
                                      • מ משחזר מידע

                                        @trhtkgsh

                                        דבר ראשון הייתי בודק איפה הזמן שלוקח
                                        אם זה החיפוש עצמו
                                        או אולי עוד לפני שהחיפוש מתחיל אם זה הקוד שלך או זמן הקריאה לdll וכו'

                                        T מנותק
                                        T מנותק
                                        trhtkgsh
                                        כתב נערך לאחרונה על ידי
                                        #19

                                        @משחזר-מידע
                                        צוואר הבקבוק נמצא בחיפוש עצמו.
                                        ניסיתי להחליף טיפוסים ומצביעים,
                                        ניסיתי להריץ את כל החיפושים במקביל (את כל הטווח - 1,2,3,4....)
                                        צריך להכיר את השפה ואת האוביקטים היעילים יותר ואת ניהול הזיכרון הטוב יותר כדי לשפר ביצועים.
                                        לצערי אני לא מכיר את C++ ברמה הזו

                                        מ תגובה 1 תגובה אחרונה
                                        0
                                        • T trhtkgsh

                                          @משחזר-מידע
                                          צוואר הבקבוק נמצא בחיפוש עצמו.
                                          ניסיתי להחליף טיפוסים ומצביעים,
                                          ניסיתי להריץ את כל החיפושים במקביל (את כל הטווח - 1,2,3,4....)
                                          צריך להכיר את השפה ואת האוביקטים היעילים יותר ואת ניהול הזיכרון הטוב יותר כדי לשפר ביצועים.
                                          לצערי אני לא מכיר את C++ ברמה הזו

                                          מ מנותק
                                          מ מנותק
                                          משחזר מידע
                                          כתב נערך לאחרונה על ידי משחזר מידע
                                          #20

                                          @trhtkgsh
                                          אני חושב בקול (לא ניסיתי)
                                          אולי הבעיה (הזמן שלוקח) הוא בהמרה מאותיות עבריות
                                          אולי חיפוש בhex ואולי אפי Bin (שלא צריך המרה) יהי יותר מהיר


                                          הפעלת ניהול דיסקים דרך הקובץ המצורף

                                          Hex editor חינמי

                                          תגובה 1 תגובה אחרונה
                                          0

                                          • התחברות

                                          • אין לך חשבון עדיין? הרשמה

                                          • התחברו או הירשמו כדי לחפש.
                                          • פוסט ראשון
                                            פוסט אחרון
                                          0
                                          • חוקי הפורום
                                          • לא נפתר
                                          • משתמשים
                                          • חיפוש גוגל בפורום
                                          • צור קשר