Sheldon Coopers Friendship Algorithm

This site uses cookies. By continuing to browse this site, you are agreeing to our use of cookies. More details

  • Sheldon Coopers Friendship Algorithm



    Hier ist eine spontane Implementierung des aus The Big Bang Theory bekannten Sheldon Coopers Friendship Algorithm in C.

    ..:: Ablaufgraph ::..



    Edit: 23.06.2014 wrote:


    OK, hier das C-Projekt, welches aber noch nicht ganz fertig ist. Es fehlen noch die vollständige Synchronisation bei zufälligen Interessen beider beteiligter Personen. (Wie gesagt, es war in einem Ruck mal spontan gemacht). Dieses reiche ich irgendwann mal nach. VERSPROCHEN :admin3:

    C Source Code

    1. /******************************************************
    2. Sheldons Friendship Algorithm ©Dr. Sheldon Cooper, PhD
    3. date : 27/11/13
    4. coder : hackmac89
    5. nach : http://www.allposters.de/-sp/The-Big-Bang-Theory-Friendship-Poster_i9589681_.htm
    6. ******************************************************
    7. */
    8. #include <stdio.h>
    9. #include <stdlib.h>
    10. #include <time.h> // Für prng
    11. #include <windows.h> // für "Sleep(ms)"
    12. #include <ctype.h> // für "toupper"
    13. #include <stdbool.h> // für "bool"
    14. // Funktionsprototypen
    15. void seed();
    16. void Dialogue();
    17. int prn;
    18. // HAUPTPROGRAMM
    19. int main()
    20. {
    21. system("COLOR 2B");
    22. // Deklarationen und Initialisierungen
    23. int i, j, /*prn,*/ n;
    24. i = j = prn = n = 0;
    25. char* msg = (char*) malloc (256);
    26. // personen-"Attribute"
    27. char* name = (char*) malloc (20); // Name des Bekannten
    28. char* interestTypes[] = {"Mentale Spiele", "Schach spielen", "zocken", "Comics", "Jogging", "Kino", "Climbing",
    29. "Equationen loesen", "Wandern", "Museumsbesuche", "Paintball", "Bowling"};
    30. int size = (rand() %6 +2) - (rand() %2 +1);
    31. if(size == 0) size = 1;
    32. int interests[size];
    33. char* personalActivities[size];
    34. int interestCount = sizeof(interests)/sizeof(int);
    35. bool randomActivity; // Flag
    36. // MAIN CODE
    37. printf("\t__..::Sheldons Friendship Algorithm v1.0 ©Dr.Sheldon Cooper,PhD::..__\n\n");
    38. while( strlen(name) <= 1 )
    39. {
    40. printf("Gib den Namen deines Bekannten ein,\nwelchen du anrufen moechtest : ");
    41. fgets(name, 20, stdin); // Name einlesen
    42. }
    43. strtok(name, "\n"); // Newline Character entfernen
    44. // Dem Bekannten individuelle Interessen geben.
    45. for(; i < interestCount; i++)
    46. {
    47. do
    48. {
    49. interests[i] = rand() %9 +0;
    50. randomActivity = true; // positive Grundeinstellung
    51. for(j = 0; j < i; j++)
    52. if(interests[j] == interests[i])
    53. randomActivity = false;
    54. }while(!randomActivity);
    55. personalActivities[i] = interestTypes[interests[i]];
    56. }
    57. // Eigene Interessen anpassen
    58. //...
    59. printf("Rufe %s an", name);
    60. for(i = 0; i <= 2; i++)
    61. {
    62. printf("."); Sleep( ((rand() %64 +1) / 3) * 100);
    63. }
    64. printf("\n");
    65. seed();
    66. prn = rand() % 100 + 1;
    67. if( prn >= 50 )
    68. {
    69. printf("%s ist momentan nicht erreichbar.\nHinterlasse eine Nachricht und warte auf seinen Rueckruf.\n", name);
    70. printf("Gib die zu hinterlassende Nachricht ein : \n");
    71. fgets(msg, 256, stdin);
    72. strtok(msg, "\n"); // Newline Character entfernen
    73. if( strlen(msg) == 1 )
    74. printf("==>Du hast keine Nachricht hinterlassen.<==\n");
    75. else
    76. printf("\nDie Nachricht\n\t%s\nwurde hinterlassen.\nWarte auf den Rueckruf oder versuche es spaeter noch einmal.\n\n", msg);
    77. // Fragen, ob gewartet werden soll ?
    78. printf("Moechtest du auf den Rueckruf warten (J/N) ?\n");
    79. switch(toupper(getchar()))
    80. {
    81. case 'J' : printf("\nWarten");
    82. for( i = 0; i < 3; i++)
    83. {
    84. printf("...");
    85. Sleep( ((rand() %128 +1) / 3) * 100 );
    86. }
    87. printf("\n");
    88. // Gespräch beginnen
    89. Dialogue(name, interests, personalActivities);
    90. break;
    91. case 'N' : break; // Programm beenden
    92. default : printf("Keine Ahnung fuer was du dich nun entschieden hast.\nIch beende jedenfalls deinen holprigen Versuch.\n\n");
    93. }
    94. }
    95. else
    96. {
    97. // Gespräch beginnen
    98. Dialogue(name, interests, personalActivities);
    99. }
    100. system("PAUSE");
    101. return 0;
    102. }
    103. /** PRNG initialisieren (damit nicht bei jedem Programmstart derselbe Ablauf erfolgt **/
    104. void seed()
    105. {
    106. srand(time(NULL));
    107. }
    108. /** Der Dialog zwischen Anrufer und Bekanntem (fast Freund)
    109. param "Ref" = Name des "Bekannten", welcher im Hauptprogramm festgelegt worden ist.
    110. **/
    111. void Dialogue(const char* Ref, int iHobbies, const char* sHobbies[])
    112. {
    113. // Deklarationen
    114. bool continueFlag = false;
    115. printf("\n!!! HINWEIS : Druecke jeweils ENTER, um mit dem Gepraech fortzufahren !!!\n\n");
    116. srand(time(NULL));
    117. printf("%s : "Hallo ?"\n", Ref);
    118. getchar();
    119. printf("DU : "Hi %s, Lust `was essen zu gehen ?"\n", Ref);
    120. getchar();
    121. switch(rand() %2 + 0)
    122. {
    123. case 0 : printf("%s : "Nein, mit dir eher nicht..."\n", Ref); getchar();
    124. Sleep(1000);
    125. printf("Du : "Mhh..."\n"); getchar();
    126. Sleep(750);
    127. printf(" "Bevorzugst du vielleicht ein heisses Getraenk ?"\n"); getchar();
    128. prn = rand() %2 + 0;
    129. if( prn == 0 )
    130. {
    131. // "Name" (also Bekannten) wählen lassen.
    132. //Dann wieder Ausgabe "Dies koennte der beginn einer ..." nachen
    133. printf("%s : "OK. Da waere ich dabei."\n", Ref); getchar();
    134. //switch case mit "Tee, Kaffee, Kakao".
    135. // LIEBER NE WHILE SCHLEIFE DRAUS MACHEN --> wäre aber nicht nach seinem Algorithmus...
    136. switch(rand() %3 + 1)
    137. {
    138. case 1 : printf("Du : "Wie waere es denn mit einer Tasse Tee ?"\n"); getchar();
    139. if( (rand() % 2 + 0) == 0 )
    140. {
    141. printf("%s : "Tee ist immer gut."\n", Ref);
    142. printf("Dies koennte der Beginn einer wunderbaren Freundschaft sein... \nENDE.\n\n");
    143. exit(1);
    144. }
    145. else
    146. {
    147. printf("%s : "Ich weiss nicht. Eher nicht."\n", Ref); getchar();
    148. continueFlag = true; // Fahre mit Interessen fort...
    149. }
    150. break;
    151. case 2 : printf("Du : "Mhh OK, sagt dir Kaffee zu ?"\n"); getchar();
    152. if( (rand() % 2 + 0) == 0 )
    153. {
    154. printf("%s : "Wie koennte ich dazu nen sagen !?."\n", Ref);
    155. printf("Dies koennte der Beginn einer wunderbaren Freundschaft sein... \nENDE.\n\n");
    156. exit(1);
    157. }
    158. else
    159. {
    160. printf("%s : "Nee, schon zu spaet. Dann kann ich nachher nicht pennen."\n", Ref); getchar();
    161. continueFlag = true; // Fahre mit Interessen fort...
    162. }
    163. break;
    164. case 3 : printf("Du : "Ohhh, wie waere es dann mit einer Tasse Kakao ?"\n"); getchar();
    165. if( (rand() % 2 + 0) == 0 )
    166. {
    167. printf("%s : "Dazu sage ich nicht nein."\n", Ref);
    168. printf("Dies koennte der Beginn einer wunderbaren Freundschaft sein... \nENDE.\n\n");
    169. exit(1);
    170. }
    171. else
    172. {
    173. printf("%s : "Nee, wie alt bist du denn !?"\n", Ref); getchar();
    174. continueFlag = true; // Fahre mit Interessen fort...
    175. }
    176. break;
    177. default : printf("Knack.");
    178. printf("DU : "Tz...Einfach aufgelegt."\n");
    179. break;
    180. }
    181. }
    182. if( prn != 0 || continueFlag )
    183. {
    184. // Folgendes NUR ausgeben, wenn heißes Getränk gleich abgelehnt wurde...
    185. if(!continueFlag) printf("%s : "Oh Gott NEIN !"\n", Ref);
    186. printf("Du : "OK. Keine heissen Getraenke fuer %s.\n Dann erzaehle mir doch von deinen Interessen."\n", Ref);
    187. getchar();
    188. printf("%s : ...\n", Ref); getchar();
    189. printf("Zufaellige Interessen = \n"); getchar();
    190. switch(iHobbies)
    191. {
    192. case 0 : printf("%s : "Ich verbringe z.B. viel Zeit mit %s."\n", Ref, sHobbies[0]); break;
    193. case 1 :
    194. case 2 :
    195. case 3 :
    196. case 4 :
    197. default : printf("%s : "Ich habe keine Hobbies."\n", Ref);
    198. printf("Knack.");
    199. printf("DU : "Tz...Einfach aufgelegt."\n");
    200. break;
    201. }
    202. // Hole Interesse 1 .. n
    203. // prüfe auf Interessen-Gleichheit
    204. // JA
    205. //--> lass uns das zusammen machen.
    206. // NEIN
    207. //--> inc(n), n > 6 ? Wähle das am wenigstens unangenehme : Frage weiter
    208. // An Interesse teilhaben
    209. //--> Dann wieder Ausgabe "Dies koennte der beginn einer ..." nachen
    210. }
    211. break;
    212. case 1 : printf("%s : "Klar, wieso nicht !?"\n", Ref);
    213. printf("Dies koennte der Beginn einer wunderbaren Freundschaft sein... \nENDE.\n\n"); break;
    214. }
    215. }
    Display All


    ..:: Beispielausgabe ::..


    ..:: Download ::..

    Share-Online : Link wird hier eingefügt


  • So, da noch kein Code hochgeladen wurde, habe ich die chance ergriffen und mich mal rangesetzt.
    Ich bin für jegliche Verbesserungen offen :)

    EDIT: Es könnte durchaus schlampig sein, da u.a. keine Kommentare enthalten sind und ich mir nur die Zeit bis Formel 1 vertreiben wollte, seid also nicht so streng mit mir :D

    C Source Code

    1. #pragma hdrstop
    2. #pragma argsused
    3. #include <tchar.h>
    4. #include <stdio.h>
    5. #include <iostream>
    6. using namespace std;
    7. class BeginFriendship
    8. {
    9. public:
    10. void Begin()
    11. {
    12. cout << "Beginnt eure Freundschaft !\n\n";
    13. }
    14. };
    15. class DoItTogether
    16. {
    17. public:
    18. void Fun()
    19. {
    20. cout << "\n"Wollen wir das zusammen machen ?"" << endl;
    21. cout << "Am interesse teilnehmen !\n\n";
    22. }
    23. };
    24. int _tmain(int argc, _TCHAR* argv[])
    25. {
    26. int j;
    27. BeginFriendship a;
    28. DoItTogether z;
    29. char Input;
    30. cout << "\t\t Sheldon Coopers Freundschaftsalgorithmus in C++" << endl;
    31. cout << "Anruf Getaetigt." << endl;
    32. cout << "Ist die Person zuhause ? [j/n]" << endl;
    33. cin >> Input;
    34. if(toupper(Input) == 'N')
    35. {
    36. cout << "\nHinterlasse eine Nachricht.\nWarte auf Rueckruf.";
    37. }
    38. cout << "\nWuerde die Person gerne essen gehen ? [j/n]" << endl;
    39. cin >> Input;
    40. if(toupper(Input) == 'N')
    41. {
    42. cout << "\nWie waere es mit einem heissen Getraenk ? [j/n]" << endl;
    43. cin >> Input;
    44. if(toupper(Input) == 'N')
    45. {
    46. cout << "Erzaehl mir von einer deiner Interessen !\n";
    47. int cnt = 0;
    48. for (;;)
    49. {
    50. cnt++;
    51. cout << "Teile ich diese interesse ?\n";
    52. cin >> Input;
    53. if (cnt >= 5)
    54. {
    55. cout << "\n\nWas war die am wenigsten unangenehme Beschaeftigung ?" << endl;
    56. cout << ""Wollen wir das zusammen machen ?"" << endl;
    57. cout << "Am interesse teilnehmen !";
    58. break;
    59. }
    60. if(toupper(Input) == 'N')
    61. {
    62. cout << "\nErzaehl mir von einer weiteren interesse\n";
    63. }
    64. else
    65. {
    66. z.Fun();
    67. break;
    68. }
    69. }
    70. }
    71. else
    72. {
    73. cout << "\t1.Tee\n\t2.Kaffee\n\t3.Kakao\n\n";
    74. cin >> j;
    75. switch (j)
    76. {
    77. case 1 : cout << "Trinkt Tee und beginnt eure Freundschaft !\n\n"; break;
    78. case 2 : cout << "Trinkt Kaffee und beginnt eure Freundschaft !\n\n"; break;
    79. case 3 : cout << "Trinkt Kakao und beginnt eure Freundschaft !\n\n"; break;
    80. default: cout << "Keine gueltige Eingabe\n\n"; break;
    81. system("PAUSE");
    82. return 0;
    83. ;
    84. }
    85. }
    86. }
    87. else
    88. {
    89. cout << "Esst zusammen !\n";
    90. a.Begin();
    91. }
    92. system("PAUSE");
    93. return 0;
    94. }
    Display All



    - Paschee


  • "Fixxe" mal Zeile 24 und 68 und mach das Ganze GNU/GCC-Kompatibel :D.

    Also die "pragmas" und tchar includes entfernen bzw. vor allem die main folgendermaßen deklarieren

    C Source Code

    1. int main(int argc, char* argv[])
    2. {
    3. //...
    4. }

    Damit das Ganze auch bei nicht Embarcaderos läuft :thumbsup: