Snake Moves
Здравейте,
Мислих как да реша тази задача и намерих лесен начин с "Queue".
Ето моето решение: https://pastebin.com/pAs1dZEa
Бих Ви помолил, ако някой е решил задачата с "масив" да сподели решението си.
Благодаря предварително!
Здравейте,
Мислих как да реша тази задача и намерих лесен начин с "Queue".
Ето моето решение: https://pastebin.com/pAs1dZEa
Бих Ви помолил, ако някой е решил задачата с "масив" да сподели решението си.
Благодаря предварително!
Твоето решение дава 40 точки. Преработих го и добавих матрица и вече дава 100. Беше изпуснал, че всеки втори ред трябва да принтиш отзад напред. Ето и решението: https://pastebin.com/AL2c7ipK
Благодаря за споделените решения на задачата. И аз при четенето на условието стигнах до заключението, че ще се наложи използването на опашка и печатането и в матрица.
Впрочем така и не успях да разбера защо се използва променливата capacity в решението с матрицата. След два часа опити най-накрая успях да направя едно решение, без да използвам нищо друго освен опашка и матрица. Решението ми е вдъхновено от вашите решения.
- още в самото начало качвам змията в опашката;
-създавам си една чар матрица - 0' с точно толкова редове и колони, колкото имам;
-започвам да пълня новосъздадената матрица ред по ред с чаровете на змията, като ако е нечетен ред просто я пълня отзад напред. И при пъленето непрекъснато въртя oпашката- Dequeue(), Enqueue();
- и накрая я печатам
https://pastebin.com/KPah0pQa
Поздрави и Весела Коледа! :)
Колегата е използвал capacity, защото зарежда всички необходими символи за матрицата в опашката предварително, т.е. при размери на матрицата 4 * 5 ще зареди 20 символа в опашката.
В решението има някои излишни неща.
Например този код:
var queueSnake = new Queue<char>();
foreach (char symbol in snake)
{
queueSnake.Enqueue(symbol);
}
char[,] matrix = new char[rows, cols]; // create char matrix with rows and cols
for (int row = 0; row < rows; row++)
{
char[] currentRow = new char[cols];
for (int col = 0; col < cols; col++)
{
matrix[row, col] = currentRow[col];
}
}
Може да се замени само с:
var queueSnake = new Queue<char>(snake.ToCharArray());
var matrix = new char[rows, cols]; // create char matrix with rows and cols
В основния цикъл има повторяемост на код, която може да бъде избегната.
Примерен вариант:
for (int row = 0; row < rows; row++) // fill in the matrix
{
bool isEvenRow = row % 2 == 0;
int startCol = isEvenRow ? 0 : cols - 1;
int stopCol = isEvenRow ? cols : -1;
int step = isEvenRow ? 1 : -1;
for (int col = startCol; col != stopCol; col += step)
{
char currentSymbol = queueSnake.Dequeue();
queueSnake.Enqueue(currentSymbol);
matrix[row, col] = currentSymbol;
}
}
Задачата може да се реши и с използване на двумерен масив вместо матрица, като това леко ще опрости обръщането на нечетните редове и принтирането (заради използването на вградени функционалности в езика).
Давам го като вариант, без да твърдя, че превъзхожда с нещо този с матрицата:
char[][] matrix = new char[rows][];
for (int row = 0; row < rows; row++)
{
matrix[row] = new char[cols];
for (int col = 0; col < cols; col++)
{
char currentSymbol = queueSnake.Dequeue();
queueSnake.Enqueue(currentSymbol);
matrix[row][col] = currentSymbol;
}
if (row % 2 != 0)
{
matrix[row] = matrix[row].Reverse().ToArray();
}
}
foreach (var row in matrix)
{
Console.WriteLine(new string(row));
}
* * * !Весела Коледа! * * *
@MartinBG ,
благодаря за подробните обяснения, корекциите и за по-краткото решение. След като нанеса вашите корекции, чак тогава ще си го кача в github, че найстина имам ужасно много повторения.
Весела Коледа!
@Axiomatik ,
Весела Коледа и на теб!
Ето го и кода с нанесените корекции- змийчето се качва в опашката с един ред код и матрицата е създадена с един ред код без фор цикли. Добавих и един метод за ролването на опашката (съдържа само Dequeue() и Enqueue()), че да избегна повтаряемост на кода при запълването на матрицата- https://pastebin.com/KPah0pQa . @MartinBG , а съкратения Ви код си го запазвам и отново много благодаря! Поздрави!
Здравейте !
Изпращам едно примерно решение , в което основно изпозлвам едномерни и двумерни масиви.
https://pastebin.com/HS1jbkyy
А какво е условието на задачата?
using System;
using System.Linq;
namespace snakeMoves
{
class Program
{
static void Main(string[] args)
{
int[] size = ReadLine();
string[,] matrix = new string[size[0], size[1]];
for (int i = 0; i < size[0]; i++)
{
if (i % 2 == 0)
{
for (int j = 0; j < size[1]; j++)
{
matrix[i, j] += GetNextChar();
}
}
else
{
for (int j = size[1] - 1; j >= 0; j--)
{
matrix[i, j] += GetNextChar();
}
}
}
for (int i = 0; i < size[0]; i++)
{
for (int j = 0; j < size[1]; j++)
{
Console.Write(matrix[i, j]);
}
Console.WriteLine();
}
}
static int counter = 0;
static string inputWord=Console.ReadLine();
private static char GetNextChar()
{
char nextChar = inputWord[counter];
counter++;
if (counter >= inputWord.Length)
{
counter = 0;
}
return nextChar;
}
static int[] ReadLine()
{
return Console.ReadLine()
.Split(" ", StringSplitOptions.RemoveEmptyEntries)
.Select(int.Parse)
.ToArray();
}
}
}
Здравейте,
Защо не ми се получава така https://pastebin.com/MAAMAYAP