Language: C

#include <stdio.h>

//構造体
typedef struct dice
{
	int Upper;
	int South;
	int East;
	int West;
	int North;
	int Under;
} Dice;

//構造体を初期化する
Dice InitDice(void);
//要素を入れ替える
Dice RotateDice(Dice dice);
Dice ChangeNum_East(Dice dice);
Dice ChangeNum_South(Dice dice);
//さいころ１とさいころ２を比較する
int StructCmp(Dice dice1, Dice dice2);
//さいころを動かす
int MoveDice(Dice dice1, Dice dice2);

#define diceFace 6

int main(void)
{
	Dice dice1 = InitDice();	//さいころ１
	Dice dice2 = InitDice();	//さいころ２
	int num[diceFace];			//数値を入れる配列
	int i;

	//二つのさいころの値を入力する
	scanf("%d%d%d%d%d%d", &dice1.Upper, &dice1.South, &dice1.East
		, &dice1.West, &dice1.North, &dice1.Under);
	scanf("%d%d%d%d%d%d", &dice2.Upper, &dice2.South, &dice2.East
		, &dice2.West, &dice2.North, &dice2.Under);

	if (MoveDice(dice1, dice2, 0) == 1)
	{
		printf("Yes\n");
	}
	else if (MoveDice(dice1, dice2, 1) == 1)
	{
		printf("Yes\n");
	}
	else
	{
		printf("No\n");
	}

	return 0;
}

//構造体を初期化する
Dice InitDice(void)
{
	Dice di;

	di.Upper = 0;
	di.South = 0;
	di.East = 0;
	di.West = 0;
	di.North = 0;
	di.Under = 0;

	return di;
}

//反時計回りに１面ずつ回転する
Dice RotateDice(Dice dice)
{
	Dice di = InitDice();

	di.Upper = dice.Upper;
	di.South = dice.West;
	di.East = dice.South;
	di.West = dice.North;
	di.North = dice.East;
	di.Under = dice.Under;

	return di;
}

//E方向に転がす
Dice ChangeNum_East(Dice dice)
{
	Dice di = InitDice();

	di.Upper = dice.West;
	di.South = dice.South;
	di.East = dice.Upper;
	di.West = dice.Under;
	di.North = dice.North;
	di.Under = dice.East;

	return di;
}

//S方向に転がす
Dice ChangeNum_South(Dice dice)
{
	Dice di = InitDice();

	di.Upper = dice.North;
	di.South = dice.Upper;
	di.East = dice.East;
	di.West = dice.West;
	di.North = dice.Under;
	di.Under = dice.South;

	return di;
}

//さいころ１とさいころ２を比較する
int StructCmp(Dice dice1, Dice dice2)
{
	if (dice1.Upper == dice2.Upper)
	{
		if (dice1.South == dice2.South)
		{
			if (dice1.East == dice2.East)
			{
				if (dice1.West == dice2.West)
				{
					if (dice1.North == dice2.North)
					{
						if (dice1.Under == dice2.Under)
						{
							return 1;
						}
						else
						{
							return 0;
						}
					}
					else
					{
						return 0;
					}
				}
				else
				{
					return 0;
				}
			}
			else
			{
				return 0;
			}
		}
		else
		{
			return 0;
		}
	}
	else
	{
		return 0;
	}
}

//さいころを動かす
int MoveDice(Dice dice1, Dice dice2, int EorS)
{
	int operation[] = { 30, 20, 30, 20, 30, 20, 30, 20, 
				    10, 30, 20, 30, 20, 30, 20, 30, 20,
				    10, 30, 20, 30, 20, 30, 20, 30, 20,
				    10, 30, 20, 30, 20, 30, 20, 30, 20,
				    40 };
	int ope = 0;


	//case 10 : E方向へ１回動かす
	//case 20 : その場で3回回転する
	//case 30 : あっているかチェックする
	while (1)
	{
		switch (operation[ope])
		{
		case 10:
			if (EorS == 0)
			{
				dice2 = ChangeNum_East(dice2);
			}
			else
			{
				dice2 = ChangeNum_South(dice2);
			}
			++ope;
			break;
		case 20:
			dice2 = RotateDice(dice2);
			++ope;
			break;
		case 30:
			if (StructCmp(dice1, dice2) == 1)
			{
				return 1;
			}
			else
			{
				++ope;
				break;
			}
		default:
			return 0;
		}
	}

	return 0;
}


Compiler output:
main.c: In function 'main':
main.c:40:13: error: too many arguments to function 'MoveDice'
   40 |         if (MoveDice(dice1, dice2, 0) == 1)
      |             ^~~~~~~~
main.c:23:5: note: declared here
   23 | int MoveDice(Dice dice1, Dice dice2);
      |     ^~~~~~~~
main.c:44:18: error: too many arguments to function 'MoveDice'
   44 |         else if (MoveDice(dice1, dice2, 1) == 1)
      |                  ^~~~~~~~
main.c:23:5: note: declared here
   23 | int MoveDice(Dice dice1, Dice dice2);
      |     ^~~~~~~~
main.c: At top level:
main.c:165:5: error: conflicting types for 'MoveDice'; have 'int(Dice,  Dice,  int)' {aka 'int(struct dice,  struct dice,  int)'}
  165 | int MoveDice(Dice dice1, Dice dice2, int EorS)
      |     ^~~~~~~~
main.c:23:5: note: previous declaration of 'MoveDice' with type 'int(Dice,  Dice)' {aka 'int(struct dice,  struct dice)'}
   23 | int MoveDice(Dice dice1, Dice dice2);
      |     ^~~~~~~~