@dovid כתב בתרגיל: עיגול מספר לפי מערך מפתחות:
סליחה, בכל מקום שMath.Clamp יעבוד (CORE 2 ומעלה) זה בהכרח C# 7.3 לפחות.
הערת אגב: הפיצ'ר שכתבתי (arr[^1]
) לא קיים ב C# 7.3, זה רק מ 9.0 או 8.0.
@dovid כתב בתרגיל: עיגול מספר לפי מערך מפתחות:
סליחה, בכל מקום שMath.Clamp יעבוד (CORE 2 ומעלה) זה בהכרח C# 7.3 לפחות.
הערת אגב: הפיצ'ר שכתבתי (arr[^1]
) לא קיים ב C# 7.3, זה רק מ 9.0 או 8.0.
@dovid אמר בתרגיל מתמטי של הסתרת מזהה רץ:
שגוי לחלוטין. אין לך קצה חוט בעניין, מלבד הדוגמאות פה...
לכן כתבתי שאני מהמר, זה הבסיס להתחיל, אם זה לא יעבוד אני אמשיך אלאה. אני חושב שזה שגוי להתחיל את הניסיון לפענח בהנחה שהמספרים הם גדולים.
@dovid אמר בתרגיל מתמטי של הסתרת מזהה רץ:
למה אתה חושב שרסיס המידע הזה אינו קריטי לדיון פה בדיוק בנושא שדן אם זה מספיק מערפל? למה אתה צריך להתחבא מאחורי זה שהצלחת לפרוץ במקום לחשוף את החולשות שאותם הכרת והשתמשת בהם?
אם היינו דנים בזה אולי היה מישהו מצליח לקחת את מה שאמרת קדימה ולהוכיח שהמפתח חייב להיות לפחות פי שניים מאיבר הכי גדול וככה עוד יותר לקצר, ואולי גם להוכיח שהוא קטן ממספר מקסימלי אחר כדי להקטין את הסריקה למינימום. זה בדיוק המעלה של דיון בריא.
בכל אופן, השיפור הזה כשלעצמו עדיין מעייף את המחשב שלי דקות ארוכות ללא מענה, וכאומר כל המעבדים עובדים במלא הקיטור.
כל הנושא הזה זה נשמע לי כמו מתקפה, אז הגבתי בהתאם.
@dovid אמר בתרגיל מתמטי של הסתרת מזהה רץ:
אולי תגיד בדיוק מה עשית במקום שאני אעשה לך שש מבחנים?
כשאני מסתכל על רצף הספרות שעברו ערפול, לדוגמא:
699115, 1015520, 310513, 626918, 943323, 238316, 554721, 871126, 166119, 482524, 798929, 93922, 410327, 726732, 21725
אז אני יודע בוודאות שהמודולו הוא חייב להיות מספר יותר גבוה מהמספרים האלו, אז זה חייב להיות מעל 1015520 שזה המספר הכי גבוה ברשימה.
יש עוד כמה הנחות שאפשר להבין. לדוג' אם אני מהמר שהמספרים העוקבים (המקוריים) הם נמוכים יחסית, שזה מאוד הגיוני שזה ככה, אז מספר המפתח צריך להיות גדול מספיק כדי שהתוצאה של ההכפלה תעבור את מספר המודולו, כי אם זה לא יעבור אותו אז המספרים יראו עוקבים ולא מבולגנים.
@yossiz ממש אהבתי
אבל אם במערך יש מספרים שליליים זה נותן תוצאות לא צפויות.
אגב, אפשר לכתוב keys[^1]
במקום keys[keys.Length - 1]
עריכה: מדובר בפיצ'ר די חדשני של #C.
@Y-Excel-Access יפה מאוד. אני לא בקיא ב-vb אז קצת קשה לי להבין את כל הקוד שכתבת. אבל מבדיקה מהירה שלי ראיתי שאם אני מכניס מספר יותר גבוה מהמספר המקסימאלי אז נזרקת שגיאה.
אגב, הקוד נראה לי קצת ארוך... אז בשביל התרגיל תנסה לקצר אותו כמה שאפשר, אני רואה ש@dovid כבר קיצר לך קצת.
@dovid אמר בתרגיל: עיגול מספר לפי מערך מפתחות:
א. אני גם תהיתי אם יום אחד תכתוב לנו את הקוד בו סרקת תוך שניות את הקוד ההוא של המודלו...
אין לי משהו מיוחד בקוד, זה brute force פשוט. העניין הוא מאיזה מספר להתחיל את הסריקה. לא התחלתי מאפס, כמובן.
שים לב שההצעה שלי לא יותר קצרה, ושים לב שלבקש קוד הכי קצר והכי יעיל זה כמו לבקש מכונית הכי מהירה ועם הכי הרבה מקום בו זמנית בלי להסביר לפי מה יחולק הציון בין שני הפרמטרים.
אם יש לך אחד משני הפרמטרים שהוא יותר טוב זה מספיק לי.
כולנו לעיתים כותבים קוד יותר קריא מאשר מהיר מבחינת ביצועים. (מי מאתנו לא משתמש ב-LINQ? זה ודאי יותר איטי מלולאה) אז צריך לבחור בצורה הגיונית מה עדיף, ואני לא צריך לתת ציונים מפורשים איזה פרמטר אני מעדיף. לך לפי השכל הישר. (אם יש לי קוד קצר כנגד קוד מאוד מסורבל אבל קצת יותר מהיר, אז אני אעדיף את הקוד הקצר, לעומת זאת אם יש לי קוד קצר איטי כנגד קוד יותר ארוך אבל יותר מהיר משמעותית אז אני יבחר את הקוד הארוך, ובפרט אם זה קוד שמתבצע הרבה פעמים, ולא רק פה ושם).
אתה יודע מה, שורה תחתונה - אני מעוניין בקוד הכי קצר שאפשר.
@dovid אמר בתרגיל: עיגול מספר לפי מערך מפתחות:
אם הנקודה היא יעילות, יש פתרון יותר יעיל גם בלא ממויין.
זה השארתי לך לתרגל.
מעניין אותי אם תכתוב לנו את הפתרון מתי שהוא?
למה לא תחכים אותנו?!
@dovid אמר בתרגיל: עיגול מספר לפי מערך מפתחות:
כל פעם אתה מוסיף ליעילות מילים שמטשטשות את התרגיל... קצר זה בקוד או בדרך שהמחשב יבצע?
יעיל: לחסוך במשאבים, לדוג' לא לבצע תרגילים כפולים (יש לי כמה פתרונות שנכתבים בשורה אחת אבל עם תרגילים שמתבצעים פעמיים)
קצר: קוד הכי קצר שאפשר.
@dovid אמר בתרגיל: עיגול מספר לפי מערך מפתחות:
אם הנקודה היא יעילות, יש פתרון יותר יעיל גם בלא ממויין.
מה הפתרון? אני ישמח לראות.
אם הנקודה היא יצירתיות שמופיעה בדבריך לסירוגין, אני לא יודע על מדד מוסכם לעניין אז קשה לדון מה הכי יצירתי.
הנקודה היא היעילות (הכי יעיל והכי קצר) והדרך להגיע לזה זה עם יצירתיות.
שלום לכולם.
אני עובד על מחשב שלא מחובר לאינטרנט, כך שלא כל שאלה אני ישר מחפש ב-stack.
כשעלה לי הצורך בתרגיל הזה ניסיתי לחשוב איך לעשות את, בהתחלה חשבתי על לולאה או פונקציה שתעשה את זה, אבל תוך כדי החשיבה צצו לי בראש כמה רעיונות לבצע את זה בשורה אחת, חלקם היו קצת לא יעילים, אז לכן פתחתי פה נושא במחשבה שאולי יש פה משהו שימצא פתרון יצירתי לתרגיל.
כל זה היה לפני שפתחתי את גוגל.
אחרי שפתחתי את גוגל ראיתי הרבה פתרונות לתרגיל וזה עכשיו הופך את הנושא ללא רלוונטי, כי כבר כל הפתרונות היצירתיים נמצאים שם (לא יודע, אולי משהו פה ימצא רעיון יותר יצירתי).
בכל אופן לפני שראיתי ב-stack זה הפתרון הכי יעיל שמצאתי:
int[] keys = Enumerable.Range(1, 9).Select(v => v * 100).ToArray(); // 100 200 300 ...
int input = 673;
int rounded = keys.MinBy(key => Math.Max(key - input, input - key));
הסבר: אני עובר על כל המספרים ולוקח את המקסימום מבין שני החישובים הבאים: קלט - מפתח, מפתח - קלט, תמיד אחד מהם יהיה מספר חיובי והשני שלילי, אז אני לוקח את המקסימום שזה המספר החיובי, ומחפש כזה מספר שהוא הכי נמוך, שזה אומר שהוא הכי קרוב למספר מפתח כלשהו.
אחר כך ראיתי ב-stack אפשרות יותר יצירתית:
int rounded = keys.MinBy(key => Math.Abs(key - input));
זה אותו רעיון אבל זה משתמש בפונקציה שהופכת את המספר השלילי לחיובי.
הפתרון הזה עובד על גם על מספרים לא ממוינים.
יכול להיות שבמספרים ממוינים תהיה דרך יותר יצירתית (בטוח שיש), אז אתם מוזמנים לנסות (בלי לפתוח גוגל!).
יש לציין שהפתרון שלי הוא רק בשפות של NET., אבל בטוח יש דרכים יצירתיות גם בשפות אחרות. אז אתם גם מוזמנים לנסות (כמובן בלי גוגל).
יש לי מערך של מפתחות, לדוג 100 200 300 ... ואני רוצה שהמשתמש יזין מספר כלשהו הוא יעוגל למספר המפתח הקרוב ביותר.
יש לי כמה דרכים לעשות את זה, אבל אני מחפש את הדרך הכי קצרה ויעילה.
אולי יש למשהו דרך יצירתית לעשות את זה?
@פלורידה שכוייח זה לא בדיוק מה שהתכוונתי אבל גם זה יכול להיות רעיון טוב.
@צדיק-תמים אמר בהוספת תיקיה מוכרת מותאמת אישית ב-Windows:
@קומפיונט פשוט תלחץ מקש ימני על התקיה ותבחר ב"הצמדה לגישה מהירה" (ואם אתה רוצה גם בהתחל, אז גם בהצמדה להתחל..)
אני לא מעוניין באמצעות הצמדה לגישה מהירה, זה חלש מידי. אני רוצה שזה יהיה כמו התיקיות המוכרות של המחשב שנמצאות בסייר תחת 'מחשב זה', כגון מוסיקה, הורדות וכו'.
@מעמד תנסה לעשות שחזור מערכת
@NH-LOCAL אמר בהוספת תיקיה מוכרת מותאמת אישית ב-Windows:
בשביל אתה צריך בסך הכל להמיר תמונה לקובץ ico.
ומה אחרי זה?
אגב, אולי לא הסברתי את עצמי בשאלה טוב אז אני מתכוון לשאול איך מוסיפים תיקיה כמו שיש בסייר הקבצים בצד ימין, לדוג' מוסיקה, מסמכים, הורדות וכו', אז אני רוצה להוסיף עוד תיקיה שאני אחליט איזה שם לקרוא לה ואיזה סמל יהיה בה.
אני רוצה להוסיף תיקיה מותאמת אישית (מה שנקרא בלע"ז Known Folder) שתופיע בסייר הקבצים ובהתחל.
ראיתי כאן שאפשר עם ה-API. וראיתי גם שאפשר עם התוכנה Winaero Tweaker.
אבל אני רוצה דרך פשוטה בלי התקנות. משהו מכיר כלי שעושה את זה?
על הדרך אני ישאל אם משהו יודע לעשות גם תמונה מותאמת אישית?
@yossiz אנחנו מצפים בכיליון עיניים להסבר שלך.
@dovid במקור האחרון שהבאת מציינים במפורש שזה לא מוסיף אבטחה.
תראה את הפסקה האחרונה:
Hopefully it’s obvious that this adds no actual security to a system; it’s obscurity, at best.
@dovid אמר בתרגיל מתמטי של הסתרת מזהה רץ:
זה לא רק עניין של max גבוה.
כעת ניסיתי מספר אחר נמוך בהרבה (פי עשר פחות) רק פחות עגול. וגם אולי במפתח הרנדומלי היה פשוט גבוה בהרבה.
עבור הפלט הזה
699115, 1015520, 310513, 626918, 943323, 238316, 554721, 871126, 166119, 482524, 798929, 93922, 410327, 726732, 21725
הרצתי קוד C# מקבילי (AsParallel().ForAll) על 6 ליבות של I5 11500, ניצולת של 100% מעבדים טוטלית, זה לוקח מלא מלא זמן והוא לא בכיוון.
אני הרצתי את הרצף ספרות האלו בתרד אחד והתשובה הגיעה אחרי חצי דקה.
זה הרצף:
551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565
וזה המודולו:
1021412
@dovid המחשב שלי ישן טוב בלילה, (גם אני, לכן לא ראיתי שדיברו על המחשב שלי ) אבל זה לא העניין. כי גם אם זה ייקח הרבה זמן יש לפורצים קצת יותר רעיונות משלך, יש להם מחשבים עם חומרה יקרה, ואם לא תשתמש במספרים גדולים מאוד אז במקרה הטוב ייקח להם ימים ובמקרה הגרוע חודשים (ואם זה ממש חשוב להם הם אפילו יכולים להפיץ וירוס שיריץ בדיקות עם רצפים שונים על אלפי מחשבים), אבל זה השקעה חד פעמית ובסוף הם יעלו על המפתח.
המסקנה שלי שאין עצה ואין תבונה נגד הפצחנים. הרעיון שלך הוא מצוין ל 95% מהמשתמשים, אבל בשביל ה 5% הנותרים שביניהם פצחנים מקצוענים לא יעזור שום דבר. רק שימוש עם הצפנות קונבנציונליות או התרגיל שנכתב עם מספרים גבוהים (לדעתי זה גם לא יעיל, כי לפי רצף הספרות המעורפלים אפשר להסיק כמה וכמה דברים שמאוד יעזרו לפיענוח).
@dovid אמר בתרגיל מתמטי של הסתרת מזהה רץ:
לא שיערת שום דבר, הMAX היה תמיד זהה.
איך יכולתי לדעת?! (משום מה לא הצלחתי לראות את הקוד שלך)