Google Code Jam 2014. Задача A квалификационного раунда


Задача А. Фокус (исходный текст на англ. яз.)

Недавно вы побывали на представлении фокусника. Вас очень впечатлил один фокус, так что вы решили разгадать его секрет!

Фокусник раскладывает 16 карточек в 4 ряда по 4 карточки. На видимой стороне каждой карточке число от 1 до 16, числа не повторяются. Затем фокусник просит зрителя выбрать карточку и сказать, в каком она ряду.

Потом фокусник раскладывает 16 карточек снова, необязательно в том же порядке. Он спрашивает зрителя, в каком ряду находится выбранная ранее карточка. Получив ответы на эти два вопроса, фокусник определяет, какую карточку выбрал зритель. Удивительно, правда?

Вы решили написать программу, помогающую понять секрет фокусника. Программа будет получать два расклада карточек и два ответа зрителя: ряд с выбранной карточкой при первом и втором раскладе. Ряды нумеруются от 1 до 4 сверху вниз.

Ваша программа должна определить, какую карточку выбрал зритель; мог ли зритель выбрать больше одной карточки (фокусник оплошал) или сделать вывод о том, что нет карточки, соответствующей ответам (зритель сжульничал).

Входные данные

В первой строке указано количество наборов данных, T. Далее следуют T наборов данных. Каждый набор данных начинается со строки, содержащей целое число: ответ на первый вопрос. Следующие 4 строки представляют первый расклад карточек: каждая строка содержит 4 целых числа, разделённых одним пробелом. Следующая строка содержит ответ на второй вопрос, последующие 4 строки содержат второй расклад карточек в том же формате.

Выходные данные

Для каждого набора данных выведите одну строку с текстом «Case #x: y», где x – номер набора данных (начиная с 1).

Если зритель выбрал одну карточку, y должно быть числом с карточки. Если зритель мог выбрать несколько карточек, y должно быть строкой «Bad magician!» без кавычек. Если ни одна карточка не соответствует ответам зрителя, y должно быть строкой «Volunteer cheated!» без кавычек. Текст должен быть именно таким, поэтому скопируйте его отсюда.

Пределы

1 ≤ T ≤ 100.
1 ≤ каждый из ответов ≤ 4.
Каждое число от 1 до 16 присутствует в каждом раскладе только один раз.

using System;
using System.Linq;

class Magic
{
  static void Main(string[] args)
  {
    Byte T = Byte.Parse(Console.ReadLine());
    Byte answer1, answer2;
    const Byte rows = 4;
    string[] nums1, nums2;
    var numbers1 = new Byte[rows];
    var numbers2 = new Byte[rows];

    for (Byte i = 1; i <= T; i++)
    {
      answer1 = Byte.Parse(Console.ReadLine());
      for (Byte j = 1; j <= rows; j++)
      {
        nums1 = Console.ReadLine().Split();
        if (j == answer1)
          for (Byte k = 0; k < rows; k++)
            numbers1[k] = Byte.Parse(nums1[k]);
      }

      answer2 = Byte.Parse(Console.ReadLine());
      for (Byte j = 1; j <= rows; j++)
      {
        nums2 = Console.ReadLine().Split();
        if (j == answer2)
          for (Byte k = 0; k < rows; k++)
            numbers2[k] = Byte.Parse(nums2[k]);
      }

      int matches = 0;
      Byte match = 0;
      int matchCount;
      for (Byte k = 0; k < rows; k++)
      {
        matchCount = numbers2.Count(n => n == numbers1[k]);
        if (matchCount == 1)
          match = numbers2.First(n => n == numbers1[k]);
        matches += matchCount;
      }
      switch (matches)
      {
        case 0:
          Console.WriteLine(String.Format("Case #{0}: Volunteer cheated!", i));
          break;
        case 1:
          Console.WriteLine(String.Format("Case #{0}: {1}", i, match));
          break;
        default:
          Console.WriteLine(String.Format("Case #{0}: Bad magician!", i));
          break;
      }
    }
  }
}
Реклама
Запись опубликована в рубрике перевод, программирование с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s