1. JavaScript / Говнокод #28650

    +1

    1. 1
    https://pastebin.com/MarcPuJc

    говно для подтирания важных комментов в вк. Весь не поместился, прилегаю ссылку.

    AnimeGovno, 26 Марта 2023

    Комментарии (5)
  2. JavaScript / Говнокод #28649

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    private async getNewKey(): Promise<string> {
    		let i: number = 0;
    		let key: string;
    		while (i < 50000) {
    			key = this.generateKey(MIN_REFERRAL_NAME_LENGTH);
    			const inDatabase: number = await ReferralEntity.count({ where: { name: key }, transaction: this._transaction });
    			if (inDatabase === 0) {
    				const inProcess: boolean = newKeyInProcess.has(key);
    				if (!inProcess) {
    					newKeyInProcess.add(key);
    					break;
    				}
    			}
    			i++;
    		}
    		return key;
    	}

    Тайпскрипт. MIN_REFERRAL_NAME_LENGTH = 3
    Как считаете, когда всё приложение встанет колом?

    alek0585, 26 Марта 2023

    Комментарии (2)
  3. C# / Говнокод #28648

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    protected override Detail GetDetailPage(
                aggregate aggregate, 
                int cashbackRate,
                BannerResponse bannerInfo,
                List<MediaShortResponse> mediaInfo,
                EntityFavourites likeCountInfo, 
                List<FavouriteEntity> likeInfo)
            {
                var announcementDetail = new Detail
                (
                    aggregate.Details.Id,
                    aggregate.Details.Alias,
                    aggregate.Details.Title,
                    aggregate.Details.Description,
                    aggregate.Details.DescriptionShortcut,
                    aggregate.Details.Age,
                    aggregate.ExtendedDetails.DataSourceId,
                    aggregate.ExtendedDetails.DataSourceItemId,
                    cashbackRate,
                    null,
                    aggregate.ExtendedDetails.LastEventDateTime,
                    aggregate.ExtendedDetails.EventClosestDateTime,
                    aggregate.ExtendedDetails.Url,
                    aggregate.ExtendedDetails.Category != null
                        ? new AnnouncementCategory(aggregate.ExtendedDetails.Category.Id, 
                            aggregate.ExtendedDetails.Category.Title,
                            aggregate.ExtendedDetails.Category.Url)
                        : null,
                    aggregate.ExtendedDetails.Tags?.Select(ss =>
                        new Tag(ss.Title, HttpUtility.UrlPathEncode(ss.Url))
                    ).ToList(),
                    aggregate.Details.Privileges?.Select(ss => new Privilege()
                    {
                        Description = ss.Description,
                        Id = ss.Id,
                        ImageUrl = ss.ImageUrl.ToString(),
                        Title = ss.Title
                    }).ToList(),
                    mediaInfo.Select(m => new Media
                    {
                        Type = m.Type,
                        Url = m.Url
                    }).ToList(),
                    aggregate.ExtendedDetails.EventMinPrice,
                    likeInfo.FirstOrDefault(x => x.EntityId == aggregate.Details.Id)?.IsSet ?? false,
                    likeCountInfo?.TotalCount,
                    aggregate.ExtendedDetails.Promotext,
                    bannerInfo != null ? new Banner { Url = bannerInfo.Url, ImageUrl = bannerInfo.ImageUrl } : null,
                    aggregate.Details.Venue != null
                        ? new ShortVenue(aggregate.Details.Venue.Id,
                            aggregate.Details.Venue.Title,
                            aggregate.Details.Venue.Url.Replace(_liveBaseAddress, ""),
                            aggregate.Details.Venue.Address)
                        : null,
                    (AnnouncementStatus)aggregate.Details.Status,
                    aggregate.ExtendedDetails.PremiumRule,
                    aggregate.Details.HasPrivilegeEnabled,
                );
    
                return announcementDetail;
     }

    tfnbupsc, 24 Марта 2023

    Комментарии (2)
  4. C++ / Говнокод #28647

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    void
    AuxFunc::homePath(std::string *filename)
    {
      char *fnm = getenv("USERPROFILE");
      if(fnm)
        {
          *filename = std::string(getenv("USERPROFILE"));
        }
      else
        {
          fnm = getenv("HOMEDRIVE");
          if(fnm)
        {
          *filename = std::string(getenv("HOMEDRIVE"));
        }
          else
        {
          fnm = getenv("HOMEPATH");
          if(fnm)
            {
              *filename = std::string(getenv("HOMEPATH"));
            }
          else
            {
              fnm = getenv("HOME");
              if(fnm)
            {
              *filename = std::string(getenv("HOME"));
            }
              else
            {
              fnm = getenv("SystemDrive");
              if(fnm)
                {
                  *filename = std::string(getenv("SystemDrive"));
                }
              else
                {
                  std::cerr << "Cannot find user home folder" << std::endl;
                  exit(1);
                }
            }
            }
        }
        }
      toutf8(*filename);
    }

    Угадайте откуда код!

    JloJle4Ka, 24 Марта 2023

    Комментарии (1101)
  5. Куча / Говнокод #28646

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    <script type="text/javascript">
    	var reformalOptions = {
    		project_id: 9409,
    		show_tab: false,
    		project_host: "govnokod.reformal.ru"
    	};
    
    	(function() {
    		var script = document.createElement('script');
    		script.type = 'text/javascript'; script.async = true;
    		script.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'media.reformal.ru/widgets/v3/reformal.js';
    		document.getElementsByTagName('head')[0].appendChild(script);
    	})();
    </script>
    --------------------------------------------------------------------------------
    Request:
    
    GET http://media.reformal.ru/widgets/v3/reformal.js
    Referer: http://govnokod.ru/
    --------------------------------------------------------------------------------
    Response:
    
    307 Temporary Redirect
    Location: http://r.rrzb.ru/?reg=11&orig=http%3A%2F%2Fmedia.reformal.ru%2Fwidgets%2Fv3%2Freformal.js
    --------------------------------------------------------------------------------

    С каких-то там пор, у недобросовестных провайдеров повелось добавлять на страницу без https свои шуры-муры и рекламные финтифлюшки, но сейчас, некоторые более хитрые провайдеры, пошли ещё дальше.

    Смотрят, значит, они на http страничку, или просто ловят запросы js по http, видят подключаемый javascript и вуаля - подменяют заголовок ответа на 307 Location с новым скриптом со своим содержимым.

    Можете сами посмотреть, если у кого такой вот провайдер, например.
    На этом сайте, по http://govnokod.ru, так и происходит.

    Как с этим бороться?

    Например добавлением атрибута "integrity":
    <script src="http://media.reformal.ru/widgets/v3/reformal.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4 YfRvH+8abtTE1Pi6jizo"></script>

    Но у этого способа, сами понимаете, существуют определённые сложности.

    Второй способ - это добавить к адресу любой get параметр:
    <script src="http://media.reformal.ru/widgets/v3/reformal.js?rand=random"></script>

    Конечно, это вообще не спасёт от подмены через 307 Location, но провайдер по своей методике такие URL пока не трогает.

    istem, 24 Марта 2023

    Комментарии (5)
  6. Куча / Говнокод #28645

    0

    1. 1
    Просто оффтоп #27

    #1: https://govnokod.ru/20162 https://govnokod.xyz/_20162
    #2: https://govnokod.ru/25329 https://govnokod.xyz/_25329
    #3: https://govnokod.ru/25415 https://govnokod.xyz/_25415
    #4: (vanished) https://govnokod.xyz/_25472
    #5: https://govnokod.ru/25693 https://govnokod.xyz/_25693
    #6: (vanished) https://govnokod.xyz/_26649
    #7: https://govnokod.ru/26672 https://govnokod.xyz/_26672
    #8: https://govnokod.ru/26924 https://govnokod.xyz/_26924
    #9: https://govnokod.ru/27072 https://govnokod.xyz/_27072
    #10: https://govnokod.ru/27086 https://govnokod.xyz/_27086
    #11: https://govnokod.ru/27122 https://govnokod.xyz/_27122
    #12: https://govnokod.ru/27153 https://govnokod.xyz/_27153
    #13: https://govnokod.ru/27159 https://govnokod.xyz/_27159
    #14: https://govnokod.ru/27200 https://govnokod.xyz/_27200
    #15: https://govnokod.ru/27237 https://govnokod.xyz/_27237
    #16: https://govnokod.ru/27282 https://govnokod.xyz/_27282
    #17: https://govnokod.ru/27319 https://govnokod.xyz/_27319
    #18: https://govnokod.ru/27380 https://govnokod.xyz/_27380
    #19: https://govnokod.ru/27500 https://govnokod.xyz/_27500
    #20: https://govnokod.ru/27607 https://govnokod.xyz/_27607
    #21: https://govnokod.ru/27951 https://govnokod.xyz/_27951
    #22: https://govnokod.ru/28076 https://govnokod.xyz/_28076
    #23: https://govnokod.ru/28266 https://govnokod.xyz/_28266
    #24: https://govnokod.ru/28373 https://govnokod.xyz/_28373
    #25: https://govnokod.ru/28474 https://govnokod.xyz/_28474
    #26: https://govnokod.ru/28563 https://govnokod.xyz/_28563

    nepeKamHblu_nemyx, 22 Марта 2023

    Комментарии (664)
  7. Pascal / Говнокод #28644

    +1

    1. 1
    В одном из минувших топиков приподымали тему POP SMDб я тоже решил напейсать генератор паролей к этой игре.

    https://pastebin.com/ANHTMmeM

    на основе исходников roman-pro

    Support, 20 Марта 2023

    Комментарии (7)
  8. Си / Говнокод #28643

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    void PasswordChecker(void);
    void sub_BB4F(unsigned char* Password);//subroutine $BB4F and so on...
    void sub_BB21(void);
    void sub_BBE0(void);
    void sub_BBEA(void);
    void SEC_SBC_6502(unsigned char operand);
    void ADC_6502_simplified(unsigned char operand);
    unsigned char Password[8];//$0766 to $076D in RAM, when a player enters it
    unsigned char Invalidity=0;//$0764 in RAM
    unsigned char Level;//$$0070 in RAM
    unsigned char TimeTens;//$04c5 in RAM
    unsigned char TimeOnes;//$04c6 in RAM
    unsigned char Byte4BF, Byte17, Byte18;
    unsigned char a, x;
    unsigned char c=0;//carry flag
    //former char Byte76A is Password[4] now, former char Byte76C is Password[6] now
    
    void PasswordGenerator(void);
    void BuildORTable(void);
    unsigned char* BuildParticularLevelsArray(unsigned char DesiredLevel);//will think of it later...
    void SimplifiedLevelGenerator(unsigned char* PassToFill,unsigned char Level);//finds just one 2nd,3rd,6th,8th digit combo
    
    int main()
    {
    	int Choice;
    	printf("Enter g if you'd like to generate a new password.\nEnter a to analyze an existing password.\n");
    	Choice=fgetc(stdin);
    	flushall();
    	if (Choice=='a')
    	PasswordChecker();
    	if (Choice=='g')
    	PasswordGenerator();
    	if (Choice=='s')//'level function' is basic when generating a pass
    	BuildORTable();//so here a bit of 'hidden' investigation, which will be useful
    	//if I ever decide to rewrite this prog to output all passes possible, not just one
    	printf("Press any key to quit.\n");
    	getch();
    	return 0;
    }
    
    void PasswordChecker(void)
    {
    	char InputString[9];//one extra byte needed due to fgets
    	int i;
    	printf("Please enter your password to test:\n");
    	fgets(InputString,9,stdin);
    	for(i=0;i<8;i++)
    	{
    		if ((InputString[i]>57)||(InputString[i]<48))
    		{
    			printf("This string contains non-digits.\n");
    			return;
    		}
    		else
    			Password[i]=InputString[i]-48;//ascii to digit
    	}
    	sub_BB4F(Password);
    	if (Invalidity==1)
    	{
    		printf("This password is invalid.\n");
    		return;
    	}
    	printf("%s%d","Level: ",Level);
    	printf("%s%d%d\n"," Time: ",TimeTens,TimeOnes);
    	if (Level==15)
    	printf("Level 15 doesn't exist. So-called level 15 passwords are programming mistakes and cause system hang.\n");
    	if (Level==16)
    	printf("Level 16 doesn't exist. So-called level 16 passwords are programming mistakes and lead you to a buggy screen where Prince can't move.\n");
    	return;
    }
    
    void sub_BB4F(unsigned char* Password)//$BB4F
    {
    	a=0;
    	x=0;
    	while (x<8)
    	{
    		a=a+Password[x];
    		x++;
    	}
    	if(a==0)
    	{
    		Invalidity=1;//$BBC0
    		return;
    	}
    	Byte17=Password[4];//$BB63
    	Byte18=Password[6];
    	Password[4]=0;
    	Password[6]=0;
    	sub_BB21();//$BB72,calculates and writes 1st checksum to Password[4], 2nd checksum to Password[6]
    	if (Password[4]!=Byte17)
    	{
    		Invalidity=1;
    		return;
    	}

    Генератор паролей для игры Prince Of Perisa. Пришлось немного повозиться...


    if (Password[6]!=Byte18)//$BB7C
    {
    Invalidity=1;
    return;
    }
    Invalidity=0;//$BB85
    a=Password[7];
    sub_BBEA();
    a=a&3;//$BB8E
    a=a*4;
    Password[7]=a;
    a=Password[1];
    sub_BBE0();//$BB98
    a=a|Password[7];
    Level=a+1;//+1 is my insertion
    //if (Level!=1)//I chose to omit this $BBA2-$BBA4 code b/c it's unknown what byte at $06EE means
    a=Password[0];
    sub_BBE0();//$BBAA
    TimeTens=a;
    a=Password[3];
    sub_BBEA();
    TimeOnes=a;
    return;//$BBBF
    }

    void SEC_SBC_6502(unsigned char operand)
    {
    c=1;
    if ((a-operand)>=0)
    a=a-operand;
    else
    {
    a=a-operand+256;
    c=0;
    };
    }

    void ADC_6502_simplified(unsigned char operand)
    {
    if ((a+operand)<256)
    a=a+operand;
    else a=a+operand-256;
    }

    void sub_BB21(void)
    {
    x=0;
    BB23: a=Password[4];
    a=a+Password[x];
    if(a<10)
    {
    BB46: Password[4]=a;//$BB46
    x++;
    if (x!=8)
    goto BB23;
    else return;//$BB4E
    }
    else //$BB2E
    {
    Byte4BF=a;
    a=Password[6];
    a++;//we came here b/c c=1
    if (a<10)
    goto BB3D;
    else
    SEC_SBC_6502(10);//can we get here? I doubt...
    BB3D: Password[6]=a;
    a=Byte4BF;
    SEC_SBC_6502(10);//$BB44, no danger of negative result
    goto BB46;
    }
    }

    cepreu_monoJlb, 19 Марта 2023

    Комментарии (6)
  9. C# / Говнокод #28642

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    class StargateSimulator
    {
        static bool shieldEnabled = false;
    
        static void Main()
        {
            Console.WriteLine("Stargate Simulator");
            Console.WriteLine("------------------");
    
            // Check for zero point module
            Console.Write("Zero Point Module detected. Proceed with simulation? (y/n) ");
            string response = Console.ReadLine();
            if (response.ToLower() != "y")
            {
                Console.WriteLine("Simulation cancelled.");
                return;
            }
    
            // Enable shield
            Console.Write("Enable gate shield? (y/n) ");
            response = Console.ReadLine();
            if (response.ToLower() == "y")
            {
                EnableShield();
            }
    
            // Enter gate address
            Console.Write("Enter gate address: ");
            string address = Console.ReadLine();
            if (address.Length != 6 && address.Length != 8)
            {
                Console.WriteLine("Invalid address length.");
                return;
            }
    
            // Dial gate
            Dial(address);
    
            Console.WriteLine("Simulation complete.");
        }
    
        static void Dial(string address)
        {
            // Check for valid address
            if (address.Length != 6 && address.Length != 8)
            {
                Console.WriteLine("Invalid address length.");
                return;
            }
    
            // Check for energy source
            Console.Write("Energy source detected. Proceed with dialing? (y/n) ");
            string response = Console.ReadLine();
            if (response.ToLower() != "y")
            {
                Console.WriteLine("Dialing cancelled.");
                return;
            }
    
            // Dial gate
            Console.WriteLine("Dialing gate...");
            if (shieldEnabled)
            {
                Console.WriteLine("Gate shield is active.");
            }
            Console.WriteLine("Chevron 1 encoded.");
            Console.WriteLine("Chevron 2 encoded.");
            Console.WriteLine("Chevron 3 encoded.");
            Console.WriteLine("Chevron 4 encoded.");
            Console.WriteLine("Chevron 5 encoded.");
            Console.WriteLine("Chevron 6 encoded.");
            if (address.Length == 8)
            {
                Console.WriteLine("Chevron 7 encoded.");
                Console.WriteLine("Gate engaged.");
            }
            else
            {
                Console.WriteLine("Gate engaged.");
            }
        }
    
        static void EnableShield()
        {
            // Check for available power
            Console.Write("Power levels stable. Activate gate shield? (y/n) ");
            string response = Console.ReadLine();
            if (response.ToLower() != "y")
            {
                Console.WriteLine("Shield activation cancelled.");
                return;
            }
    
            // Activate shield
            Console.WriteLine("Shield activated.");
            shieldEnabled = true;
        }
    }

    Симулятор наборного устройства звездных врат.

    P.S. За Канон-френдли не отвечаю, т.к. фанат серии но любитель немножко поизвращаться над ЛОРом...

    DartPower, 19 Марта 2023

    Комментарии (4)
  10. C# / Говнокод #28641

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    namespace TimeMachineSimulator
    {
        class Program
        {
            static void Main()
            {
                Console.WriteLine("Welcome to the Time Machine Simulator!");
                TimeMachine machine = new();
                while (true)
                {
                    Console.WriteLine("What would you like to do?");
                    Console.WriteLine("1. Travel in time");
                    Console.WriteLine("2. Show current time");
                    Console.WriteLine("3. Show travel history");
                    Console.WriteLine("4. Exit");
                    string input = Console.ReadLine();
                    Console.WriteLine();
                    switch (input)
                    {
                        case "1":
                            Console.Write("Enter the number of years to travel: ");
                            int years = int.Parse(Console.ReadLine());
                            try
                            {
                                machine.Travel(years);
                                Console.WriteLine("Travel successful.");
                            }
                            catch (TimeMachineException e)
                            {
                                Console.WriteLine(e.Message);
                            }
                            break;
                        case "2":
                            Console.WriteLine("Current time: " + machine.GetCurrentTime());
                            break;
                        case "3":
                            List<DateTime> history = machine.GetTravelHistory();
                            Console.WriteLine("Travel history:");
                            foreach (DateTime time in history)
                            {
                                Console.WriteLine(time);
                            }
                            Console.WriteLine();
                            break;
                        case "4":
                            Console.WriteLine("Thank you for using the Time Machine Simulator! Press any key to exit...");
                            Console.ReadKey();
                            return;
                        default:
                            Console.WriteLine("Invalid input. Please try again.");
                            break;
                    }
                }
            }
        }
    
        public class TimeMachineException : Exception { public TimeMachineException(string message) : base(message){}}
    
        public class TimeMachine
        {
            private DateTime currentTime;
            private readonly List<DateTime> travelHistory;
            public TimeMachine()
            {
                this.currentTime = DateTime.Now;
                this.travelHistory = new List<DateTime>();
            }
            public void Travel(int years)
            {
                DateTime futureTime = this.currentTime.AddYears(years);
                if (futureTime > DateTime.Now)
                {
                    throw new TimeMachineException("Cannot travel to the future!");
                }
                this.currentTime = futureTime;
                this.travelHistory.Add(futureTime);
            }
            public DateTime GetCurrentTime()
            {
                return this.currentTime;
            }
            public List<DateTime> GetTravelHistory()
            {
                return this.travelHistory;
            }
        }
    }

    Пространственно-временной квантовый реинтегратор. Правда в будущее не умеет отправлять, но используя свойства реверсивной энтропии может отправить куда угодно только в прошлое!

    DartPower, 19 Марта 2023

    Комментарии (0)