- 1
В одном из минувших топиков приподымали тему POP SMDб я тоже решил напейсать генератор паролей к этой игре.
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1
В одном из минувших топиков приподымали тему POP SMDб я тоже решил напейсать генератор паролей к этой игре.
https://pastebin.com/ANHTMmeM
на основе исходников roman-pro
+1
#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;
}
}
0
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. За Канон-френдли не отвечаю, т.к. фанат серии но любитель немножко поизвращаться над ЛОРом...
0
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;
}
}
}
Пространственно-временной квантовый реинтегратор. Правда в будущее не умеет отправлять, но используя свойства реверсивной энтропии может отправить куда угодно только в прошлое!
0
namespace NardeGame { public class NardeGame { static void Main() { Console.WriteLine("Welcome to Narde Game!"); NardeGame game = new(); game.Play(); Console.WriteLine("Thank you for playing Narde Game! Press any key to exit..."); Console.ReadKey(); } private readonly Player player1; private readonly Player player2; private readonly Board board; public NardeGame() { player1 = new Player("Armen"); player2 = new Player("Suren"); board = new Board(); } public void Play() { while (!board.IsGameOver()) { Player currentPlayer = board.GetTurn() == Turn.WHITE ? player1 : player2; Console.WriteLine("It's " + currentPlayer.GetName() + "'s turn."); Console.WriteLine(board); int from, to; do { Console.Write("Enter the starting point of your move: "); from = int.Parse(Console.ReadLine()); Console.Write("Enter the ending point of your move: "); to = int.Parse(Console.ReadLine()); } while (!Board.IsValidMove(from, to, currentPlayer.GetColor())); Board.MakeMove(from, to); board.NextTurn(); } Console.WriteLine("Game over."); Console.WriteLine(board); Console.WriteLine(board.GetWinner().GetName() + " won!"); } } public enum Color { WHITE, BLACK } public enum Turn { WHITE, BLACK } public class Player { private readonly string name; private readonly Color color; public Player(string name) { this.name = name; color = name == "Armen" ? Color.WHITE : Color.BLACK; } public string GetName() { return name; } public Color GetColor() { return color; } } public class Board { private readonly int[] points; private Turn turn; public Board() { points = new int[24] { 2, 0, 0, 0, 0, -5, 0, 3, 0, 0, 0, -5, 5, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, -2 }; turn = Turn.WHITE; } public bool IsGameOver() { int whiteCount = 0; int blackCount = 0; for (int i = 0; i < 24; i++) { if (points[i] > 0) { whiteCount += points[i]; } else if (points[i] < 0) { blackCount -= points[i]; } } return whiteCount == 0 || blackCount == 0; } public Player? GetWinner() { int whiteCount = 0; int blackCount = 0; for (int i = 0; i < 24; i++) { if (points[i] > 0) { whiteCount += points[i]; } else if (points[i] < 0) { blackCount -= points[i]; } } if (whiteCount > blackCount) { return new Player("Armen"); } else if (blackCount > whiteCount) { return new Player("Suren"); } else { return null; } } public Turn GetTurn() { return turn; } public void NextTurn() { turn = turn == Turn.WHITE ? Turn.BLACK : Turn.WHITE; } public static bool IsValidMove(int from, int to, Color color) { return true; } public static void MakeMove(int from, int to) { } public override string ToString() { string output = ""; for (int i = 0; i < 24; i++) { output += points[i] + " "; } return output.TrimEnd(); } } }
Армяне играют в однострочные нарды... :)
0
namespace ParticleAccelSim
{
public class Particle
{
public double X { get; set; } // координата частицы по оси x
public double Y { get; set; } // координата частицы по оси y
public double VX { get; set; } // скорость частицы по оси x
public double VY { get; set; } // скорость частицы по оси y
public double Mass { get; set; } // масса частицы
public double Charge { get; set; } // заряд частицы
public Particle(double x, double y, double vx, double vy, double mass, double charge)
{
X = x;
Y = y;
VX = vx;
VY = vy;
Mass = mass;
Charge = charge;
}
}
public class ParticleAccelerator
{
private List<Particle> particles = new List<Particle>(); // список всех частиц
private double timeStep = 0.01; // размер шага при моделировании
public void AddParticle(Particle p)
{
particles.Add(p);
}
public void RunSimulation(int numSteps)
{
for (int i = 0; i < numSteps; i++)
{
foreach (Particle p in particles)
{
// вычисляем силы, действующие на частицу
double ax = 0;
double ay = 0;
foreach (Particle other in particles)
{
if (other != p)
{
double dx = other.X - p.X;
double dy = other.Y - p.Y;
double r = Math.Sqrt(dx * dx + dy * dy);
double f = (p.Charge * other.Charge) / (r * r); // закон Кулона
ax += f * dx / r;
ay += f * dy / r;
}
}
// вычисляем новое положение и скорость частицы
p.VX += ax * timeStep / p.Mass;
p.VY += ay * timeStep / p.Mass;
p.X += p.VX * timeStep;
p.Y += p.VY * timeStep;
}
}
}
}
}
Исходный код симулятора ускорителя частиц, например "Большой адронный коллайдер". Просьба не запускать этот код, т.к. я уже пару дней назад запустил, а сегодня уже не могу понять правильно говорить "Возможность этого резиста крайне мала" или "Вероятность этого резиста крайне мала"... ТАК ЧТО БУДЬТЕ ОСТОРОЖНЫ! Можно сломать нашу реальность!
0
AttributeError: type object 'datetime.datetime' has no attribute 'from_timestamp'. Did you mean: 'fromtimestamp'?
0
Пиздец-оффтоп #68
#38: https://govnokod.ru/27833 https://govnokod.xyz/_27833
#39: https://govnokod.ru/27862 https://govnokod.xyz/_27862
#40: https://govnokod.ru/27869 https://govnokod.xyz/_27869
#41: https://govnokod.ru/27933 https://govnokod.xyz/_27933
#42: (vanished) https://govnokod.xyz/_27997
#43: https://govnokod.ru/28042 https://govnokod.xyz/_28042
#44: https://govnokod.ru/28080 https://govnokod.xyz/_28080
#45: https://govnokod.ru/28086 https://govnokod.xyz/_28086
#46: https://govnokod.ru/28105 https://govnokod.xyz/_28105
#47: https://govnokod.ru/28166 https://govnokod.xyz/_28166
#48: https://govnokod.ru/28229 https://govnokod.xyz/_28229
#49: https://govnokod.ru/28298 https://govnokod.xyz/_28298
#50: https://govnokod.ru/28308 https://govnokod.xyz/_28308
#51: https://govnokod.ru/28329 https://govnokod.xyz/_28329
#52: https://govnokod.ru/28340 https://govnokod.xyz/_28340
#53: (vanished) https://govnokod.xyz/_28346
#54: https://govnokod.ru/28353 https://govnokod.xyz/_28353
#55: https://govnokod.ru/28361 https://govnokod.xyz/_28361
#56: https://govnokod.ru/28383 https://govnokod.xyz/_28383
#57: https://govnokod.ru/28411 https://govnokod.xyz/_28411
#58: https://govnokod.ru/28454 https://govnokod.xyz/_28454
#59: https://govnokod.ru/28472 https://govnokod.xyz/_28472
#60: https://govnokod.ru/28540 https://govnokod.xyz/_28540
#61: https://govnokod.ru/28548 https://govnokod.xyz/_28548
#62: https://govnokod.ru/28555 https://govnokod.xyz/_28555
#63: https://govnokod.ru/28573 https://govnokod.xyz/_28573
#64: https://govnokod.ru/28584 https://govnokod.xyz/_28584
#65: https://govnokod.ru/28599 https://govnokod.xyz/_28599
#66: https://govnokod.ru/28609 https://govnokod.xyz/_28609
#67: https://govnokod.ru/28615 https://govnokod.xyz/_28615
0
Плохие новости, Говнокод скоро закроется. Ищите более уютную борду.
Начитайте искать уже сичас.
+7
Логика работы бота для создания активности.
...Часто бывает ситуация, когда обсуждение в ветке достигает некоторого ситуационного апогея, когда вопрос, быть может, уже решен и никто из юзеров больше не хочет добавлять ответы, чтобы не портить общую картину завершенности.
Особенно опасна такая ситуация на небольших форумах, где тем - две-три и - обчелся, ибо ведет к охлаждению интереса к ним у юзеров и запустеванию. В целях борьбы с этим явлением, на форумах обязательно имеются разделы "флудильня" и подобные, где пользователи могли бы пообщаться на нейтральные темы, но ввиду вышеописанного принципа эта мера также не является эффективной.
...На говнокоде некоторыми заинтересованными пользователями используются боты, которые создают активность в "решенных" темах, разряжая обстановку нейтральными комментами, и ломая картину завершенности, чем сподвигают пользователей к активности.
1. Бот бот-батбот-батбот "прошевеливает пламень уст" в замершей ветке, анализируя дату последнего коммента и отвечая на него комментарием, который будет являться своеобразным эвентом - сигналом, подталкивающих пользователей к общению.
2. Поскольку по статистике человек запоминает последнюю сказанную собеседником фразу (а читатель - последнее предложение в абзаце), несложно было разработать незамысловатый алгоритм, который парсит комментарии и сортирует по дате. Комментарии дифференцируются на пригодные - в последнем предложении есть по крайней мере один глагол, - и непригодные, т.е. не содержащие глаголов.
3. Из фразы в случайном порядке вычленяется глагол. Затем, при использовании таблицы спряжений, глаголу придается изъявительное наклонение единственного числа прошедшего времени (нашёл, сделал, обработал, уснул, купил). Далее бог составляет вопросительное предложение по схеме частица+вопросительное наречие+глагол, например, "ну как, сделал?", которое бот постит в ответ на последний комментарий.