Pull to refresh

Never send a human to do a machine's job

Reading time 3 min
Views 891
Здравствуйте, господа.
Как новичок в C# и .NET я вчера спросил на stackoverflow (http://stackoverflow.com/questions/2192808/simple-but-interesting-task-for-c-newbie) о предложениях тестовых заданий для новичков. В результате получил ряд ответов, интересных и не очень. Но среди них выгодно выделялся один, с предложением решить программерский quiz.

Цель головоломки — с помощью доступных классов (код 1) вывести фразу, которую я поместил в топик этой публикации. Для тех, кто захочет почитать пост в оригинале — ссылку на сам вопрос я дал выше, искомый ответ там помечен как accepted. Для всех остальных же непосредственно задание вот:

  1. using System;
  2.  
  3. public interface IWord {
  4.   void Print();
  5. }
  6.  
  7. public interface IWord2 : IWord {
  8.   new void Print();
  9. }
  10.  
  11. public abstract class Base {
  12.   protected static string msg = "send ";
  13.  
  14.   public Base() {
  15.      Console.Write(this.GetString());
  16.   }
  17.  
  18.   static Base() {
  19.      Console.Write("Never ");
  20.   }
  21.  
  22.   public virtual void Print() {
  23.      Console.Write("to ");
  24.   }
  25.  
  26.   protected virtual string GetString() {
  27.      return "llama ";
  28.   }
  29. }
  30.  
  31. public class Derived : Base, IWord {
  32.  
  33.   static Derived() {
  34.      Console.Write(Derived.msg);
  35.   }
  36.  
  37.   public new virtual void Print() {
  38.      Console.Write("do ");
  39.   }
  40.  
  41.   protected override string GetString() {
  42.      return "a ";
  43.   }
  44. }
  45.  
  46. public sealed class MoreDerived : Derived, IWord {
  47.   public override void Print() {
  48.      Console.Write("mach");
  49.   }
  50.  
  51.   void IWord.Print() {
  52.      Console.Write("a ");
  53.   }
  54.  
  55.   protected override string GetString() {
  56.      return "do ";
  57.   }
  58. }
  59.  
  60. public sealed class MoreDerived2 : Derived, IWord2 {
  61.  
  62.   static MoreDerived2() {
  63.      Console.Write("ine");
  64.   }
  65.  
  66.   public new void Print() {
  67.      Console.Write("job. ");
  68.   }
  69.  
  70.   void IWord2.Print() {
  71.      Console.Write("job.");
  72.   }
  73.  
  74.   protected override string GetString() {
  75.      return "'s ";
  76.   }
  77. }
  78.  
  79. public abstract class Unfinished : Base {
  80.   protected new void Print() {
  81.      Console.Write("camel ");
  82.   }
  83.  
  84.   protected override string GetString() {
  85.      return "human ";
  86.   }
  87. }
  88.  
  89. public class Finished: Unfinished {
  90. }
* This source code was highlighted with Source Code Highlighter.


Автором этого ответа предлагается реализовать сам код внутри
  1. using System;
  2.  
  3. public class AgentSmith {
  4.   //Never send a human to do a machine's job.
  5.   public static void Main()
  6.   {
  7.      //put your code here
  8.  
  9.      Console.ReadLine();
  10.   }
  11. }
* This source code was highlighted with Source Code Highlighter.


PS: сам ещё не решал (но мысли определённые есть, конечно же), поэтому, более опытные товарищи, особо в комментариях спойлеры не оставляйте :-)

Всем спасибо и удачи в решении :-)

UPD 1: исправил в соответствии с первым комментарием, однако я не совсем уверен, что условиями задачи запрещается создание новых классов + наследование. и не уверен, что задача решается без этого. естественно могу ошибаться.
Tags:
Hubs:
+16
Comments 19
Comments Comments 19

Articles