בתשובה להחייל החלמוני, 13/01/10 0:56
חלוקות של מספר 533181
תודה. אבל זה לא יעזור לי.
אני צריך את הפרוט
של כל החלוקות של מספר
ולא רק את הכמות שלהם.
לדוגמא חמשת החלוקות של 4 :

4=1+1+1+1
4=1+1+2
4=1+3
4=2+2
4=4

אם יש למישהו גם רעיון לאלגוריתם זה יכול לעזור לתכנת
חלוקות של מספר 533185
וולפרם נותן לך גם את זה. תסתכל טוב. הוא לא נותן את זה עבור 100. נחש למה. נסה 10.
חלוקות של מספר 533186
בעצם הוא נותן רק את מספר החלוקות מכל סוג, לא את החלוקות בעצמן. אין ברירה אלא לחשוב. כמה עצוב.
חלוקות של מספר 533188
קוד בשפת רובי שעושה את העבודה:
def sub_partitions(n,k,min = 1)
return [] if k == 0 or n == 0 or (k == 1 and n<min)
return [[n]] if k == 1
result = []
(min..n).inject([]) {|result, t| result += sub_partitions(n-t,k-1,t).collect{|p| [t]+p}}
end

def partitions(n)
(1..n).inject([]){|result, k| result += sub_partitions(n,k)}.sort
end

def display_partitions(n)
partitions(n).each{|p| puts p.collect{|x| x.to_s}.join("+") + "=#{n}"}
end

display_partitions(ARGV‏0.to_i)

(כדי להפעיל תתקין אצלך Ruby, שמור את הקוד לקובץ, נניח p.rb, ואז תריץ p.rb n כש-n הוא המספר שאתה רוצה לחשב עבורו את החלוקות).
חלוקות של מספר 533237
הי גדי

תודה רבה !

אני מחשב כעת קבוע שיש בידי כבר את 3 הספרות הראשונות שלו.
לצורך חישוב הספרות הבאות אני צריך לבצע רקורסיה פנימית
על החלוקות של המספר.

התקנתי את Ruby מהאינטרנט
בחרתי בתפריט SCiTE שזה מעיין מעבד לוינדוס
העתקתי את כל השורות שרשמת כאן
אחר כך שמרתי את הקובץ עם סיום rb
בתפרטי Tools לחצתי על Go
( ראיתי שעבור תוכניות דוגמא זה מריץ את התוכנית)
נפתח לשניה חלון שחור ואז זה מסתיים ללא בקשה להכניס את n

מה לדעתך הבעיה ?

משה
חלוקות של מספר 533253
הוא לא קולט קלט מהמשתמש בזמן ריצת התוכנית, צריך לתת את n כפרמטר בשורת ההרצה. אולי יש ב-SciTE אפשרות להכניס פרמטרים - חפש כזו. אחרת, תריץ את הקובץ משורת הפקודה (ruby myfile.rb 5, למשל).
חלוקות של מספר 533677
לא הצלחתי ,אשלח לך מייל פרטי אולי תוכל לעזור לי
משה
חלוקות של מספר 533267
בכל הכבוד, את זה לא היה טוב יותר לשלוח במייל?
חלוקות של מספר 533268
גדי אולי חשב שזה יכול לעניין גם אחרים, מה התירוץ שלך?
חלוקות של מספר 533270
אין ספק שעשרות, אם לא מאות, מקוראי האייל מחפשים קוד כזה בנרות.

התירוץ שלי הוא שהפריע לי לראות קטע קוד באייל, ומפריע לי הגוון הגיקי עד-אימה שהאתר הזה עוטה. זה מרחיק ממנו ציבור גדול של מגיבים פוטנציאליים, חלקם היו עשויים להעשיר את עולמי התרבותי (הערות בקשר לעולמי התרבותי לא יתקבלו בברכה). ומה התירוץ שלך?
חלוקות של מספר 533272
שאלתי, מה התירוץ שלך לא לשלוח לו את התלונה בדוא''ל. אני מקווה שעכשיו גם ברור מה התרוץ שלי- לא נתת דוא''ל שאליו אפשר לשלוח.
חלוקות של מספר 533346
זאת לא היתה תלונה. זאת היתה הזמנה לפתוח דיון ציבורי בשאלה הזאת (אתה יכול לראות אותו מתקשר גם לדיון המקביל בשאלת ויקיפדיה). הדיון הקטן שהתפתח מראה שככל הנראה אני טועה ויש מקום להצגת קטעי קוד באייל, אם כי בינתיים המדגם קטן והתוצאות אינן מובהקות.
חלוקות של מספר 533377
מי שמתלונן על קטעי קוד, מוטב לו שלא ייכנס לדיונים הקשורים למתמטיקה. לא שכל חובבי המתימטיקה הם גם חובבי קוד, אך עדיף להיות זהיר.
חלוקות של מספר 533274
תוציא את המקל מישבנך, ותן לאחרים להנות. אתה לא חייב לקרוא את כל התגובות, ועולמי התרבותי התרחב כפליים מתגובתו של גדי מאשר מתגובתך.
חלוקות של מספר 533279
עוד תשעה כמוך ויש לנו מניין ראשון.

למתעניינים בנושאים קרובים:

public class GCD {

public static int gcd(int m, int n) {

if (m < n) {
int t = m;
m = n;
n = t;
}

int r = m % n;

if (r == 0) {
return n;
} else {
return gcd(n, r);
}

}

}

חלוקות של מספר 533289
אבל למה בשפה כל כך מכוערת, למה?

להשוואה:

def gcd(a,b)
a,b = a.abs, b.abs
a,b = b,a if a<b
return a if b == 0
return gcd(b, a % b)
end

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

int gcd(int a, int b) {
return (b == 0) ? a : gcd(b, a % b);
}

אם אפשר להניח ששניהם אי-שליליים, או

int gcd_abs(int a, int b) {
return gcd(Math.Abs(a), Math.Abs(b));
}
אם אי אפשר.
חלוקות של מספר 533297
רובי היא אולי שפה יעילה, אולי שפה נוחה, אולי שפה מהירה.. אבל היא אחת מהמכוערות ביותר שראיתי (אם שופטים את יופי השפה לפי יופי הקוד). אין ספק שאם אתה קורא ל-Java מכוערת, אתה צריך לחשוב פעמיים לפני שאתה משתמש ברובי.
חלוקות של מספר 533299
וואו, אני כל כך לא מסכים.
חלוקות של מספר 533303
Math.Abs(a)‎

לעומת:

a.abs

מה שכן, מתחרה פוטנציאלית אחת של רובי בכלל לא מועמדת כאן מסיבות טכניות - פייתון.
חלוקות של מספר 533307
שתיהן מכוערות (לדעתי), אבל הרובי מכוערת יותר.
abs(a)
היה הרבה יותר יפה וברור.

אין בעיה לכתוב בג'אווה מחלקה שתכיל מספר ומתודה שתתן את הערך המוחלט שלו ותראה דומה לרובי עד כדי סוגריים (שרק מייפים את העסק). אבל, בסופו של יום, אני רוצה את הערך המוחלט של a, ולא a ערך מוחלט של, לכן אני מעדיף לראות את הפונקציה לפני הערך (ושים לב שככה כותבים גם באנגלית וגם במתמטיקה). זה אינטואיטיבי יותר, קריא יותר ויפה יותר.
חלוקות של מספר 533309
מן הסתם
abs(a)
הוא משהו שאפשר לעשות גם ברובי, אבל כשמתחילים לעשות דברים טיפה יותר מורכבים זה מפסיק להיות קריא. אם אתה רוצה להתחיל לשרשר עכשיו פונקציות, הדרך הנכונה לעשות את זה היא ללכת משמאל לימין, במקום לפתוח עוד ועוד ועוד סוגריים (אפילו שבמתמטיקה זה מה שעושים) או לפצל לשמונה שורות שונות. אולי צריך קצת זמן כדי להסתגל לזה, אבל אני לא חושב שזה מכוער.

אגב, אחת הסיבות המרכזיות שאני מעדיף את רובי על פייתון היא שבפייתון אין אחידות בקטע הזה - למשל, בשביל אורך של רשימה צריך להשתמש בפונקציה החיצונית len במקום במתודה של הרשימה (כמובן, העובדה שזו סיבה מרכזית בהעדפה שלי רק מראה עד כמה השפות הללו דומות ב"יופי" שלהן).
חלוקות של מספר 533313
אז, מה הופך את הרובי ליפה יותר מג'אווה וסי++?
חלוקות של מספר 533312
הגישה של ג'אווה במקרה הזה היא שהמספר אינו אובייקט. בניגוד לרוב שאר הדברים.

מצד שני, במקרים רבים אומרים וכותבים "נצא מהפונקציה אם קיבלנו משהו קטן מדי" ולא "אם קיבלנו משהו קטן מדי, נצא מהפונקציה."
return if (a<b) ‎

ולא:
if (a<b) {
return
}

יש (לפחות) שפה אחת שבה יש את abs(a)‎ וגם התחביר האמור של if (וגם unless, למקרה הצורך) - פרל. שפה שנוצרה ע"ׁי בלשן שחושב שצריכים לכתוב קוד כמו שמדברים.

(טוב, אז אולי כותבי פרל מקללים מדי פעם)
חלוקות של מספר 533314
ממש לא מדוייק, ג'אווה היא שפה גמישה שמאפשרת לך לייצר מספרים בתור אובייקטים.

ברוב המקרים אומרים וחושבים (טוב, לפחות אני אומר וחושב) ככה: "מחר נעשה יום כיף, נלך לגן החיות, נאכיל את האריות, נטפס על הזברות, נאכול ארנבים, אם נהיה עייפים נחזור הביתה, אחרת נמשיך לפילים, לנמרים, לסוסים ובסוף היום נאכל גלידה אצל סבא וסבתא" ולא "מחר נעשה יום כיף, נלך לגן החיות, נאכיל את האריות, נטפס על הזברות, נאכול ארנבים, נחזור הביתה אם נהיה עייפים, נמשיך לפילים, לנמרים, לסוסים ובסוף היום נאכל גלידה אצל סבא וסבתא אחרת". שזה כמו בכל ספה נורמלית, כמו שאתה מסביר לילד מה יקרה מחר, ככה אתה מסביר למחשב מה לעשות, בסדר שבו הוא, המחשב, אמור לעשות אותו.
חלוקות של מספר 533316
תוכניתן חושב במשפטים כאלו ארוכים ומורכבים?

ועוד טוען שככה מסבירים דברים למחשבים?

אולי בשבילך המציאו את http://en.wikipedia.org/wiki/CouchDB
חלוקות של מספר 533320
אורך המשפט באמת לא משנה. תחשוב מתי, ביומיום, אתה מקדים את התנאי לתוצאה שלו, ומתי אתה מקדים את התוצאה לתנאי.
חלוקות של מספר 533315
(טוב, אז אולי כותבי פרל מקללים מדי פעם)

מי ש*באמת* מקלל זה מי שצריך *לקרוא* פרל. (הכרתי אפילו מישהו שבסוף פשוט הרכיב מגבים על המסך)
חלוקות של מספר 533342
כנראה שהיופי, כמו עדשות המגע, הוא בעיני המתבונן. בעיני פרל מאוד קריאה. אם מדובר בקטע קוד מכוער במיוחד, יש דרכים לסדר אותו מחדש.
perl -MO=Deparse ugly-script.pl
המהדרין יכולים גם להתקין
perltidy

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

אני מסכים שהיופי הוא אכן בעיני המתבונן.

הסטראוטיפ שעובד בשבילי אומר שאכן פייתון קריא בהרבה מפרל.

העקרון "יש יותר מדרך אחת לעשות זאת" נשמעת מושך ומזמין יצירתיות, ממש כמו העקרון של היידיש "יש יותר מדרך אחת לומר זאת".

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

אבל אולי לא כל מה שטוב לבדיחות טוב גם לשפות תכנות: ריבוי האידיומים באמת מאפשר הבעה יותר עשירה, אבל למע"ד לא תומך בּקְרִיאוּת.

אם נחזור ליידיש, יש בה פתגם ציורי שאומר שאיש איש נהנה מריח נפיחותיו הוא, ואולי זה מסביר גם את הקונפליקט הקטן שלנו.
חלוקות של מספר 533348
I should have known it better with a guy like you
חלוקות של מספר 533465
היופי הוא בעיני המתבונן:
#v&<     @.$<
:<\g05%p05:_^#
חלוקות של מספר 533277
לא. שגם אחרים ייהנו (הסיכוי הזניח שמישהו נוסף יהנה גובר בקלות מבחינתי על ה''נזק'' שבהימלטות ההמונים מהאתר הגיקי - כי כמובן, כשהם נכנסים לדיון על טרחנים מתמטיים, קוד כזה הוא הקש ששובר את גב הגמל).
חלוקות של מספר 533282
תודֶה שהסיבה האמתית היא שהפכת למסיונר רובי!
חלוקות של מספר 533285
רובים הם הילידים הכחולים מכוכב פנדורה?
חלוקות של מספר 533287
אולי. אבל שמעתי שכבשנו את אמריקה בעזרת רובים, חידקים ופלדה.
חלוקות של מספר 533310
אנחנו? מה פתאום. אנחנו כבשנו אותה בעזרת הלובי היהודי והרבה חוצפה.
סְקסְוואַנְג, או מאותגר קוד 533290
סְקסְוואַנְג, או מאותגר קוד 533334
סקסוואנג צייד הקרקפות.
זה נשמע מרשים.
וברצינות, סקסוואנג זה באמת מאותגר קוד? באיזה שפה או סלנג?
סְקסַוונְג 533335
מסתבר שלא דייקתי בניקוד וצ"ל סְקסַוונְג. פרופ' לבלשנות פיתח את שפת הנא'בי (לא על בסיס קלינגון, למרות מה שקמרון הבמאי של אוואטר אמר). השפה מבוססת בין השאר על פרסית, מלאית, מנדרינית וגם עברית. שלושת העיצורים הנפוצים בשפה הם קקס, פקס ו-טקס ומהם יצרו את הקללה הזו שפרושה טיפש, מטומטם.

חזרה לעמוד הראשי המאמר המלא

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