{"id":286167,"date":"2017-05-11T13:10:03","date_gmt":"2017-05-11T09:10:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=286167"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2017-05-11T09:10:03","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=286167","title":{"rendered":"\u0410\u0432\u0442\u043e\u043d\u043e\u043c\u0435\u0440 \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u044f\u0437\u044b\u043a\u0430\u0445. \u0427\u0430\u0441\u0442\u044c 2"},"content":{"rendered":"<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/habrastorage.org\/files\/5e7\/678\/00f\/5e767800f809427e896af2d878ab26c0.png\"\/><\/div>\n<p>  <\/p>\n<h1>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 8037?<\/h1>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0438\u0433\u0440\u0430: \u0432\u044b \u0438\u0434\u0435\u0442\u0435 \u043f\u043e \u0443\u043b\u0438\u0446\u0435, \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u0441\u0443\u043c\u043c\u0443 \u0446\u0438\u0444\u0440 \u0432 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u043d\u043e\u043c\u0435\u0440\u0430\u0445. \u042d\u0442\u0443 \u0438\u0433\u0440\u0443 \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435, \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u044f\u0437\u044b\u043a\u0430\u0445: Swift, Objective-C, Java \u0438 C#.<\/p>\n<p>  <\/p>\n<p>\u0412 <a href=\"https:\/\/habrahabr.ru\/post\/326568\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> \u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u0442\u0432\u0435\u0442 \u043f\u043e\u043a\u0430 \u0442\u043e\u0442 \u043d\u0435 \u0432\u0432\u0435\u0434\u0435\u0442 \u0441\u043b\u043e\u0432\u043e \u0434\u043b\u044f \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041a\u0430\u043a \u0440\u0435\u0437\u043e\u043d\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0446\u0438\u043a\u043b \u0432\u043c\u0435\u0441\u0442\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u2014 \u0443\u0431\u0435\u0440\u0435\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e \u0438 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0435 \u0446\u0438\u043a\u043b \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>startGame<\/code>.<\/p>\n<p>  <\/p>\n<p><a name=\"habracut\"><\/a><\/p>\n<h3><i>Swift:<\/i><\/h3>\n<\/p>\n<p>  <\/p>\n<pre><code>func startGame() {     var inputWord: String     repeat {         print(GreetingMessage.replacingOccurrences(of: ExitWordPlaceholder, with: self.exitWord))         inputWord = readLine() ?? &quot;&quot;     } while check(inputWord: inputWord) }  private func check(inputWord: String) -&gt; Bool {     let isExitWord = (inputWord == self.exitWord)     print(isExitWord ? GoodByeMessage : InputAcceptMessage.replacingOccurrences(of: InputWordPlaceholder, with: inputWord))     return !isExitWord }<\/code><\/pre>\n<p>  <\/p>\n<h3><i>Objective-C:<\/i><\/h3>\n<p>  <\/p>\n<pre><code>- (void)startGame {     NSString *inputWord;      do {         NSLog(GreetingMessage, self.exitWord);         inputWord = [self readLine];     } while ([self checkInputWord:inputWord]); }  - (BOOL)checkInputWord:(NSString *)inputWord {     BOOL isExitWord = [inputWord isEqualToString:self.exitWord];     isExitWord ? NSLog(@&quot;%@&quot;, GoodByeMessage) : NSLog(InputAcceptMessage, inputWord);     return !isExitWord; }<\/code><\/pre>\n<p>  <\/p>\n<h3><i>Java:<\/i><\/h3>\n<p>  <\/p>\n<pre><code class=\"java\">void startGame() {     String inputWord;      do {         System.out.println(String.format(GreetingMessage, exitWord));         inputWord = readLine();     } while (checkInputWord(inputWord)); }  private boolean checkInputWord(String inputWord) {     boolean isExitWord = inputWord.equals(exitWord);     System.out.println(isExitWord ? GoodByeMessage : String.format(InputAcceptMessage, inputWord));     return !isExitWord; }<\/code><\/pre>\n<p>  <\/p>\n<h3><i>C#:<\/i><\/h3>\n<p>  <\/p>\n<pre><code class=\"cs\">public void startGame() {     string inputWord;     do     {         Console.WriteLine(string.Format(GreetingMessage, exitWord));         inputWord = Console.ReadLine();     }     while (checkInputWord(inputWord)); }  bool checkInputWord(string inputWord) {     bool isExitWord = inputWord.Equals(exitWord);     Console.WriteLine(isExitWord ? GoodByeMessage : string.Format(InputAcceptMessage, inputWord));     return !isExitWord; }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0443 \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u2014 \u043c\u044b, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043b\u0430\u0441\u0441 \u043d\u0430\u0448\u0435\u0439 \u0438\u0433\u0440\u044b (\u043a\u0430\u043a \u0432\u044b \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u043c\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b) <code>Game<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u0435):<\/p>\n<p>  <\/p>\n<pre><code>class Game8037: Game {      \/\/ MARK: - Game      func greet(with exitWord: String) {      }      func check(userAnswer: String) {      }  }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043f\u0443\u0441\u0442\u044b\u043c\u0438, \u0438 \u0437\u0430\u0439\u043c\u0435\u043c\u0441\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u0430. \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f enum \u0441 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438:<\/p>\n<p>  <\/p>\n<pre><code>private enum Level: String {     case easy     case normal     case hard1     case hard2      func forSelect() -&gt; String {         return LevelForSelect.replacingOccurrences(of: LevelPlaceholder, with: self.rawValue)                 .replacingOccurrences(of: LevelNumberPlaceholder, with: &quot;\\(self.hashValue+1)&quot;)     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 enum \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 <code>forSelect()<\/code> \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0432\u0438\u0434\u0430 <code>1 - easy<\/code> (\u043d\u043e\u043c\u0435\u0440 \u0443\u0440\u043e\u0432\u043d\u044f \u0438 \u0435\u0433\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435). \u042d\u0442\u043e \u043d\u0430\u043c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0434\u0432\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code>private var level: Level private var result: UInt32<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u0448 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440:<\/p>\n<p>  <\/p>\n<pre><code>init?() {     self.result = 0     let levels = Level.easy.forSelect() + Level.normal.forSelect() + Level.hard1.forSelect() + Level.hard2.forSelect()     print(StartGreeting.replacingOccurrences(of: LevelsPlaceholder, with: levels))      let selectedLevel = readLine() ?? &quot;&quot;     switch selectedLevel {     case &quot;\\(Level.easy.hashValue+1)&quot;, Level.easy.rawValue:         self.level = .easy     case &quot;\\(Level.normal.hashValue+1)&quot;, Level.normal.rawValue:         self.level = .normal     case &quot;\\(Level.hard1.hashValue+1)&quot;, Level.hard1.rawValue:         self.level = .hard1     case &quot;\\(Level.hard2.hashValue+1)&quot;, Level.hard2.rawValue:         self.level = .hard2     default:         print(ErrorLevelMessage)         return nil     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u043c\u044b \u0437\u0430\u0434\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <code>result<\/code> (\u043e\u043d\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043d\u043e\u043b\u044c). \u0414\u0430\u043b\u044c\u0448\u0435 \u043c\u044b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u0412 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/habrastorage.org\/files\/17b\/f2a\/605\/17bf2a605b8442ba83777b8ff4eceec9.png\"\/><\/div>\n<p>  <\/p>\n<p>\u041d\u0443 \u0438 \u043f\u043e\u0442\u043e\u043c, \u043c\u044b \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438, \u0435\u0441\u043b\u0438 \u043e\u043d \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0435\u043d \u2014 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435 <code>level<\/code>.<\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0443\u0440\u043e\u0432\u043d\u044f:<\/p>\n<p>  <\/p>\n<pre><code>private func result(with level: Level, and randomizer: Randomizer) -&gt; UInt32 {     let result: UInt32      switch level {     case .easy:         result = randomizer.firstNumber + randomizer.secondNumber + randomizer.thirdNumber + randomizer.fourthNumber     case .normal:         result = randomizer.firstNumber*10 + randomizer.secondNumber + randomizer.thirdNumber*10 + randomizer.fourthNumber     case .hard1:         let firstNumber = (randomizer.firstNumber == 0) ? 1 : randomizer.firstNumber         let secondNumber = (randomizer.secondNumber == 0) ? 1 : randomizer.secondNumber         let thirdNumber = (randomizer.thirdNumber == 0) ? 1 : randomizer.thirdNumber         let fourthNumber = (randomizer.fourthNumber == 0) ? 1 : randomizer.fourthNumber         result = firstNumber * secondNumber * thirdNumber * fourthNumber     case .hard2:         result = (randomizer.firstNumber*10 + randomizer.secondNumber) * (randomizer.thirdNumber*10 + randomizer.fourthNumber)     }      return result }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 <code>Game<\/code>.<br \/>  \u041c\u0435\u0442\u043e\u0434 <code>greet(with exitWord: String)<\/code>:<\/p>\n<p>  <\/p>\n<pre><code>func greet(with exitWord: String) {     let randomizer = Randomizer()     self.result = self.result(with: self.level, and: randomizer)     let task = BaseGreeting.replacingOccurrences(of: FirstNumberPlaceholder, with: &quot;\\(randomizer.firstNumber)&quot;)             .replacingOccurrences(of: SecondNumberPlaceholder, with: &quot;\\(randomizer.secondNumber)&quot;)             .replacingOccurrences(of: ThirdNumberPlaceholder, with: &quot;\\(randomizer.thirdNumber)&quot;)             .replacingOccurrences(of: FourthNumberPlaceholder, with: &quot;\\(randomizer.fourthNumber)&quot;)      print(TaskMessage.replacingOccurrences(of: TaskPlaceholder, with: task)             .replacingOccurrences(of: ExitWordPlaceholder, with: exitWord)) }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0443\u0442 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 <code>Randomizer<\/code> \u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0437\u0430\u0434\u0430\u043d\u0438\u0435.<\/p>\n<p>  <\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 <code>check(userAnswer: String)<\/code>:<\/p>\n<p>  <\/p>\n<pre><code>func check(userAnswer: String) {     if self.result == UInt32(userAnswer) {         print(CorrectMessage)     } else {         print(WrongMessage)     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0443\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e: \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0432\u0432\u0435\u043b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d.<\/p>\n<p>  <\/p>\n<h3><i>\u0418\u0442\u0430\u043a \u043f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 \u0432 Swift \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/i><\/h3>\n<p>  <\/p>\n<pre><code>private let LevelsPlaceholder = &quot;{levels}&quot; private let LevelNumberPlaceholder = &quot;{levelNumber}&quot; private let LevelPlaceholder = &quot;{level}&quot;  private let FirstNumberPlaceholder = &quot;{firstNumber}&quot; private let SecondNumberPlaceholder = &quot;{secondNumber}&quot; private let ThirdNumberPlaceholder = &quot;{thirdNumber}&quot; private let FourthNumberPlaceholder = &quot;{fourthNumber}&quot;  private let ExitWordPlaceholder = &quot;{exitWord}&quot; private let TaskPlaceholder = &quot;{taskPlaceholder}&quot;  private let StartGreeting = &quot;Hello, let's play. Please select difficulty level:\\(LevelsPlaceholder)&quot; private let LevelForSelect = &quot;\\n\\(LevelNumberPlaceholder) - \\(LevelPlaceholder)&quot; private let BaseGreeting = &quot;\\(FirstNumberPlaceholder) \\(SecondNumberPlaceholder) \\(ThirdNumberPlaceholder) \\(FourthNumberPlaceholder)&quot; private let TaskMessage = &quot;The next task is \\(TaskPlaceholder)\\n(enter \\&quot;\\(ExitWordPlaceholder)\\&quot; for exit)&quot; private let CorrectMessage = &quot;Absolutely right.\\n&quot; private let WrongMessage = &quot;Sorry, you made a mistake. Try again.\\n&quot; private let ErrorLevelMessage = &quot;Sorry, you have selected wrong level. Good bye.\\n&quot;  class Game8037: Game {      private enum Level: String {         case easy         case normal         case hard1         case hard2          func forSelect() -&gt; String {             return LevelForSelect.replacingOccurrences(of: LevelPlaceholder, with: self.rawValue)                 .replacingOccurrences(of: LevelNumberPlaceholder, with: &quot;\\(self.hashValue+1)&quot;)         }     }      private var level: Level     private var result: UInt32      init?() {         self.result = 0         let levels = Level.easy.forSelect() + Level.normal.forSelect() + Level.hard1.forSelect() + Level.hard2.forSelect()         print(StartGreeting.replacingOccurrences(of: LevelsPlaceholder, with: levels))          let selectedLevel = readLine() ?? &quot;&quot;         switch selectedLevel {         case &quot;\\(Level.easy.hashValue+1)&quot;, Level.easy.rawValue:             self.level = .easy         case &quot;\\(Level.normal.hashValue+1)&quot;, Level.normal.rawValue:             self.level = .normal         case &quot;\\(Level.hard1.hashValue+1)&quot;, Level.hard1.rawValue:             self.level = .hard1         case &quot;\\(Level.hard2.hashValue+1)&quot;, Level.hard2.rawValue:             self.level = .hard2         default:             print(ErrorLevelMessage)             return nil         }     }      private func result(with level: Level, and randomizer: Randomizer) -&gt; UInt32 {         let result: UInt32          switch level {         case .easy:             result = randomizer.firstNumber + randomizer.secondNumber + randomizer.thirdNumber + randomizer.fourthNumber         case .normal:             result = randomizer.firstNumber*10 + randomizer.secondNumber + randomizer.thirdNumber*10 + randomizer.fourthNumber         case .hard1:             let firstNumber = (randomizer.firstNumber == 0) ? 1 : randomizer.firstNumber             let secondNumber = (randomizer.secondNumber == 0) ? 1 : randomizer.secondNumber             let thirdNumber = (randomizer.thirdNumber == 0) ? 1 : randomizer.thirdNumber             let fourthNumber = (randomizer.fourthNumber == 0) ? 1 : randomizer.fourthNumber             result = firstNumber * secondNumber * thirdNumber * fourthNumber         case .hard2:             result = (randomizer.firstNumber*10 + randomizer.secondNumber) * (randomizer.thirdNumber*10 + randomizer.fourthNumber)         }          return result     }      \/\/ MARK: - Game      func greet(with exitWord: String) {         let randomizer = Randomizer()         self.result = self.result(with: self.level, and: randomizer)         let task = BaseGreeting.replacingOccurrences(of: FirstNumberPlaceholder, with: &quot;\\(randomizer.firstNumber)&quot;)             .replacingOccurrences(of: SecondNumberPlaceholder, with: &quot;\\(randomizer.secondNumber)&quot;)             .replacingOccurrences(of: ThirdNumberPlaceholder, with: &quot;\\(randomizer.thirdNumber)&quot;)             .replacingOccurrences(of: FourthNumberPlaceholder, with: &quot;\\(randomizer.fourthNumber)&quot;)          print(TaskMessage.replacingOccurrences(of: TaskPlaceholder, with: task)             .replacingOccurrences(of: ExitWordPlaceholder, with: exitWord))     }      func check(userAnswer: String) {         if self.result == UInt32(userAnswer) {             print(CorrectMessage)         } else {             print(WrongMessage)         }     }  }<\/code><\/pre>\n<p>  <\/p>\n<h3><i>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0436\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u0432 Objective-C:<\/i><\/h3>\n<p>  <\/p>\n<pre><code>\/\/ \u0444\u0430\u0439\u043b \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 Game8037.h @interface Game8037 : NSObject &lt;Game&gt;  @end  \/\/ \u0444\u0430\u0439\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 GameStart.m const NSString *EasyLevelNumber = @&quot;1&quot;; const NSString *NormalLevelNumber = @&quot;2&quot;; const NSString *Hard1LevelNumber = @&quot;3&quot;; const NSString *Hard2LevelNumber = @&quot;4&quot;;  const NSString *EasyLevelName = @&quot;easy&quot;; const NSString *NormalLevelName = @&quot;normal&quot;; const NSString *Hard1LevelName = @&quot;hard1&quot;; const NSString *Hard2LevelName = @&quot;hard2&quot;;  const NSString *StartGreeting = @&quot;Hello, let's play. Please select difficulty level:%@&quot;; const NSString *LevelForSelect = @&quot;\\n%@ - %@&quot;; const NSString *BaseGreeting = @&quot;%i %i %i %i&quot;; const NSString *TaskMessage = @&quot;The next task is %@\\n(enter \\&quot;%@\\&quot; for exit)&quot;; const NSString *CorrectMessage = @&quot;Absolutely right.\\n&quot;; const NSString *WrongMessage = @&quot;Sorry, you made a mistake. Try again.\\n&quot;; const NSString *ErrorLevelMessage = @&quot;Sorry, you have selected wrong level. Good bye.\\n&quot;;  typedef enum {     LevelEasy,     LevelNormal,     LevelHard1,     LevelHard2 } Level;  @interface Game8037()  @property (assign, nonatomic) Level level; @property (assign, nonatomic) NSInteger result;  @end  @implementation Game8037  - (instancetype)init {     self = [super init];     if (self) {         self.result = 0;         NSString *levels = [NSString stringWithFormat:@&quot;%@%@%@%@&quot;,                             [self levelForSelect:LevelEasy],                             [self levelForSelect:LevelNormal],                             [self levelForSelect:LevelHard1],                             [self levelForSelect:LevelHard2]];          NSLog(StartGreeting, levels);         NSString *selectedLevel = [self readLine];         if ([selectedLevel isEqualToString:EasyLevelNumber] || [selectedLevel isEqualToString:EasyLevelName]) {             self.level = LevelEasy;         } else if ([selectedLevel isEqualToString:NormalLevelNumber] || [selectedLevel isEqualToString:NormalLevelName]) {             self.level = LevelNormal;         } else if ([selectedLevel isEqualToString:Hard1LevelNumber] || [selectedLevel isEqualToString:Hard1LevelName]) {             self.level = LevelHard1;         } else if ([selectedLevel isEqualToString:Hard2LevelNumber] || [selectedLevel isEqualToString:Hard2LevelName]) {             self.level = LevelHard2;         } else {             NSLog(@&quot;%@&quot;, ErrorLevelMessage);             return nil;         }     }     return self; }  - (NSString *)levelForSelect:(Level)level {     NSString *levelNumber;     NSString *levelName;      switch (level) {         case LevelEasy:             levelNumber = EasyLevelNumber;             levelName = EasyLevelName;             break;         case LevelNormal:             levelNumber = NormalLevelNumber;             levelName = NormalLevelName;             break;         case LevelHard1:             levelNumber = Hard1LevelNumber;             levelName = Hard1LevelName;             break;         case LevelHard2:             levelNumber = Hard2LevelNumber;             levelName = Hard2LevelName;             break;     }      return [NSString stringWithFormat:LevelForSelect, levelNumber, levelName]; }  - (NSInteger)resultWithLevel:(Level)level andRandomizer:(Randomizer *)randomizer {     NSInteger result = 0;      switch (level) {         case LevelEasy:             result = randomizer.firstNumber + randomizer.secondNumber + randomizer.thirdNumber + randomizer.fourthNumber;             break;         case LevelNormal:             result = randomizer.firstNumber*10 + randomizer.secondNumber + randomizer.thirdNumber*10 + randomizer.fourthNumber;             break;         case LevelHard1:             result = (randomizer.firstNumber == 0 ? 1 : randomizer.firstNumber) * (randomizer.secondNumber == 0 ? 1 : randomizer.secondNumber) * (randomizer.thirdNumber == 0 ? 1 : randomizer.thirdNumber) * (randomizer.fourthNumber == 0 ? 1 : randomizer.fourthNumber);             break;         case LevelHard2:             result = (randomizer.firstNumber*10 + randomizer.secondNumber) * (randomizer.thirdNumber*10 + randomizer.fourthNumber);             break;     }      return result; }  - (NSString *)descriptionOfLevel:(Level)level {     NSString *result = @&quot;&quot;;      switch (level) {         case LevelEasy:             result = EasyLevelName;             break;         case LevelNormal:             result = NormalLevelName;             break;         case LevelHard1:             result = Hard1LevelName;             break;         case LevelHard2:             result = Hard2LevelName;             break;     }      return result; }  - (NSString *)readLine {     char inputValue;     scanf(&quot;%s&quot;, &amp;inputValue);     return [NSString stringWithUTF8String:&amp;inputValue]; }  #pragma mark - Game  - (void)greetWithExitWord:(NSString *)exitWord {     Randomizer *randomizer = [[Randomizer alloc] init];     self.result = [self resultWithLevel:self.level andRandomizer:randomizer];     NSString *task = [NSString stringWithFormat:BaseGreeting,                       randomizer.firstNumber,                       randomizer.secondNumber,                       randomizer.thirdNumber,                       randomizer.fourthNumber];      NSLog(TaskMessage, task, exitWord); }  - (void)checkUserAnswer:(NSString *)userAnswer {     if (self.result == [userAnswer integerValue]) {         NSLog(@&quot;%@&quot;, CorrectMessage);     } else {         NSLog(@&quot;%@&quot;, WrongMessage);     } }  @end<\/code><\/pre>\n<p>  <\/p>\n<h3><i>Java:<\/i><\/h3>\n<p>  <\/p>\n<pre><code class=\"java\">public class Game8037 implements Game {      private static final String EasyLevelNumber = &quot;1&quot;;     private static final String NormalLevelNumber = &quot;2&quot;;     private static final String Hard1LevelNumber = &quot;3&quot;;     private static final String Hard2LevelNumber = &quot;4&quot;;      private static final String EasyLevelName = &quot;easy&quot;;     private static final String NormalLevelName = &quot;normal&quot;;     private static final String Hard1LevelName = &quot;hard1&quot;;     private static final String Hard2LevelName = &quot;hard2&quot;;      private static final String StartGreeting = &quot;Hello, let's play. Please select difficulty level:%s&quot;;     private static final String LevelForSelect = &quot;\\n%s - %s&quot;;     private static final String BaseGreeting = &quot;%s %s %s %s&quot;;     private static final String TaskMessage = &quot;The next task is %s\\n(enter \\&quot;%s\\&quot; for exit)&quot;;     private static final String CorrectMessage = &quot;Absolutely right.\\n&quot;;     private static final String WrongMessage = &quot;Sorry, you made a mistake. Try again.\\n&quot;;     private static final String ErrorLevelMessage = &quot;Sorry, you have selected wrong level. Good bye.\\n&quot;;      private enum Level {         Easy {             public String toString() {                 return EasyLevelName;             }         },         Normal {             public String toString() {                 return NormalLevelName;             }         },         Hard1 {             public String toString() {                 return Hard1LevelName;             }         },         Hard2 {             public String toString() {                 return Hard2LevelName;             }         }     }      private Level level;     private int result;      private Game8037(Level level) {         this.level = level;         this.result = 0;     }      @Nullable     public static Game8037 Create() {         String levels = String.format(&quot;%s%s%s%s&quot;, levelForSelect(Level.Easy), levelForSelect(Level.Normal), levelForSelect(Level.Hard1), levelForSelect(Level.Hard2));         System.out.println(String.format(StartGreeting, levels));          Game8037 game8037;          String selectedLevel = readLine();         switch (selectedLevel) {             case EasyLevelNumber:             case EasyLevelName:                 game8037 = new Game8037(Level.Easy);                 break;             case NormalLevelNumber:             case NormalLevelName:                 game8037 = new Game8037(Level.Normal);                 break;             case Hard1LevelNumber:             case Hard1LevelName:                 game8037 = new Game8037(Level.Hard1);                 break;             case Hard2LevelNumber:             case Hard2LevelName:                 game8037 = new Game8037(Level.Hard2);                 break;             default:                 game8037 = null;                 System.out.println(ErrorLevelMessage);                 break;         }          return game8037;     }      private static String levelForSelect(Level level) {         String levelNumber = &quot;&quot;;         String levelName = &quot;&quot;;          switch (level) {             case Easy:                 levelNumber = EasyLevelNumber;                 levelName = EasyLevelName;                 break;             case Normal:                 levelNumber = NormalLevelNumber;                 levelName = NormalLevelName;                 break;             case Hard1:                 levelNumber = Hard1LevelNumber;                 levelName = Hard1LevelName;                 break;             case Hard2:                 levelNumber = Hard2LevelNumber;                 levelName = Hard2LevelName;                 break;         }          return String.format(LevelForSelect, levelNumber, levelName);     }      private int resultWithLevelAndRandomizer(Level level, Randomizer randomizer) {         int result = 0;          switch (level) {             case Easy:                 result = randomizer.firstNumber + randomizer.secondNumber + randomizer.thirdNumber + randomizer.fourthNumber;                 break;             case Normal:                 result = randomizer.firstNumber*10 + randomizer.secondNumber + randomizer.thirdNumber*10 + randomizer.fourthNumber;                 break;             case Hard1:                 int firstNumber = (randomizer.firstNumber == 0) ? 1 : randomizer.firstNumber;                 int secondNumber = (randomizer.secondNumber == 0) ? 1 : randomizer.secondNumber;                 int thirdNumber = (randomizer.thirdNumber == 0) ? 1 : randomizer.thirdNumber;                 int fourthNumber = (randomizer.fourthNumber == 0) ? 1 : randomizer.fourthNumber;                 result = firstNumber * secondNumber * thirdNumber * fourthNumber;                 break;             case Hard2:                 result = (randomizer.firstNumber*10 + randomizer.secondNumber) * (randomizer.thirdNumber*10 + randomizer.fourthNumber);                 break;         }          return result;     }      static private String readLine() {         java.util.Scanner scanner = new java.util.Scanner(System.in);         return scanner.next();     }      @Override     public void greet(String exitWord) {         Randomizer randomizer = new Randomizer();         result = resultWithLevelAndRandomizer(level, randomizer);          String task = String.format(BaseGreeting, randomizer.firstNumber, randomizer.secondNumber, randomizer.thirdNumber, randomizer.fourthNumber);         System.out.println(String.format(TaskMessage, task, exitWord));     }      @Override     public void checkUserAnswer(String userAnswer) {         int answer;          try {             answer = Integer.parseInt(userAnswer);         } catch (Exception e) {             System.out.println(WrongMessage);             return;         }          if (result == answer) {             System.out.println(CorrectMessage);         } else {             System.out.println(WrongMessage);         }     } }<\/code><\/pre>\n<p>  <\/p>\n<h3><i>C#:<\/i><\/h3>\n<p>  <\/p>\n<pre><code class=\"cs\">public class Game8037 : IGame {     const string EasyLevelNumber = &quot;1&quot;;     const string NormalLevelNumber = &quot;2&quot;;     const string Hard1LevelNumber = &quot;3&quot;;     const string Hard2LevelNumber = &quot;4&quot;;      const string EasyLevelName = &quot;easy&quot;;     const string NormalLevelName = &quot;normal&quot;;     const string Hard1LevelName = &quot;hard1&quot;;     const string Hard2LevelName = &quot;hard2&quot;;      const string StartGreeting = &quot;Hello, let's play. Please select difficulty level:{0}&quot;;     const string LevelForSelect = &quot;\\n{0} - {1}&quot;;     const string BaseGreeting = &quot;{0} {1} {2} {3}&quot;;     const string TaskMessage = &quot;The next task is {0}\\n(enter \\&quot;{1}\\&quot; for exit)&quot;;     const string CorrectMessage = &quot;Absolutely right.\\n&quot;;     const string WrongMessage = &quot;Sorry, you made a mistake. Try again.\\n&quot;;     const string ErrorLevelMessage = &quot;Sorry, you have selected wrong level. Good bye.\\n&quot;;      enum Level { Easy, Normal, Hard1, Hard2 };      Level level;     int result;      private Game8037(Level level)     {         this.level = level;         result = 0;     }      public static Game8037 Create()     {         string levels = string.Format(&quot;{0}{1}{2}{3}&quot;, levelForSelect(Level.Easy), levelForSelect(Level.Normal), levelForSelect(Level.Hard1), levelForSelect(Level.Hard2));         Console.WriteLine(string.Format(StartGreeting, levels));          Game8037 game8037;          string selectedLevel = Console.ReadLine();         switch (selectedLevel)         {             case EasyLevelNumber:             case EasyLevelName:                 game8037 = new Game8037(Level.Easy);                 break;             case NormalLevelNumber:             case NormalLevelName:                 game8037 = new Game8037(Level.Normal);                 break;             case Hard1LevelNumber:             case Hard1LevelName:                 game8037 = new Game8037(Level.Hard1);                 break;             case Hard2LevelNumber:             case Hard2LevelName:                 game8037 = new Game8037(Level.Hard2);                 break;             default:                 game8037 = null;                 Console.WriteLine(ErrorLevelMessage);                 break;         }          return game8037;     }      static string levelForSelect(Level level)     {         string levelNumber = &quot;&quot;;         string levelName = &quot;&quot;;          switch (level)         {             case Level.Easy:                 levelNumber = EasyLevelNumber;                 levelName = EasyLevelName;                 break;             case Level.Normal:                 levelNumber = NormalLevelNumber;                 levelName = NormalLevelName;                 break;             case Level.Hard1:                 levelNumber = Hard1LevelNumber;                 levelName = Hard1LevelName;                 break;             case Level.Hard2:                 levelNumber = Hard2LevelNumber;                 levelName = Hard2LevelName;                 break;         }          return string.Format(LevelForSelect, levelNumber, levelName);     }      int resultWithLevelAndRandomizer(Level level, Randomizer randomizer)     {         int result = 0;          switch (level)         {             case Level.Easy:                 result = randomizer.firstNumber + randomizer.secondNumber + randomizer.thirdNumber + randomizer.fourthNumber;                 break;             case Level.Normal:                 result = randomizer.firstNumber * 10 + randomizer.secondNumber + randomizer.thirdNumber * 10 + randomizer.fourthNumber;                 break;             case Level.Hard1:                 int firstNumber = (randomizer.firstNumber == 0) ? 1 : randomizer.firstNumber;                 int secondNumber = (randomizer.secondNumber == 0) ? 1 : randomizer.secondNumber;                 int thirdNumber = (randomizer.thirdNumber == 0) ? 1 : randomizer.thirdNumber;                 int fourthNumber = (randomizer.fourthNumber == 0) ? 1 : randomizer.fourthNumber;                 result = firstNumber* secondNumber * thirdNumber * fourthNumber;                 break;             case Level.Hard2:                 result = (randomizer.firstNumber * 10 + randomizer.secondNumber) * (randomizer.thirdNumber * 10 + randomizer.fourthNumber);                 break;         }          return result;     }      string descriptionOfLevel(Level level)     {         string result = &quot;&quot;;          switch (level)         {             case Level.Easy:                 result = &quot;easy&quot;;                 break;             case Level.Normal:                 result = &quot;normal&quot;;                 break;             case Level.Hard1:                 result = &quot;hard1&quot;;                 break;             case Level.Hard2:                 result = &quot;hard2&quot;;                 break;         }          return result;     }      public void greet(string exitWord)     {         Randomizer randomizer = new Randomizer();         result = resultWithLevelAndRandomizer(level, randomizer);          string task = string.Format(BaseGreeting, randomizer.firstNumber, randomizer.secondNumber, randomizer.thirdNumber, randomizer.fourthNumber);         Console.WriteLine(string.Format(TaskMessage, task, exitWord));     }      public void checkUserAnswer(string userAnswer)     {         int answer;          try         {             answer = int.Parse(userAnswer);         }         catch         {             Console.WriteLine(WrongMessage);             return;         }          if (result == answer)         {             Console.WriteLine(CorrectMessage);         }         else         {             Console.WriteLine(WrongMessage);         }     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 Java \u0438 C# \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 <code>Game8037<\/code>. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442 failable \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u043c \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0439 \u0438\u0433\u0440\u044b \u0432 \u043a\u043b\u0430\u0441\u0441 <code>GameStart<\/code> \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 <code>greet(...)<\/code> \u0438 <code>check(...)<\/code>. \u0422\u0435\u043f\u0435\u0440\u044c \u043a\u043b\u0430\u0441\u0441 <code>GameStart<\/code> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a.<\/p>\n<p>  <\/p>\n<h3><i>Swift:<\/i><\/h3>\n<p>  <\/p>\n<pre><code>class GameStart {      private var exitWord: String     private var game: Game      init?(with exitWord: String) {         self.exitWord = exitWord         if let game = Game8037() {             self.game = game         } else {             return nil         }     }      func startGame() {         var inputWord: String         repeat {             self.game.greet(with: self.exitWord)             inputWord = readLine() ?? &quot;&quot;         } while check(inputWord: inputWord)     }      private func check(inputWord: String) -&gt; Bool {         let isExitWord = (inputWord == self.exitWord)         if isExitWord {             print(GoodByeMessage)         } else {             self.game.check(userAnswer: inputWord)         }         return !isExitWord     }  }<\/code><\/pre>\n<p>  <\/p>\n<h3><i>Objective-C:<\/i><\/h3>\n<p>  <\/p>\n<pre><code>@interface GameStart()  @property (strong, nonatomic) NSString *exitWord; @property (strong, nonatomic) id&lt;Game&gt; game;  @end  @implementation GameStart  - (instancetype)initWithExitWord:(NSString *)exitWord {     self = [super init];     if (self) {         self.exitWord = exitWord;         self.game = [[Game8037 alloc] init];     }     return self; }  - (void)startGame {     if (self.game) {         NSString *inputWord;          do {             [self.game greetWithExitWord:self.exitWord];             inputWord = [self readLine];         } while ([self checkInputWord:inputWord]);     } }  - (BOOL)checkInputWord:(NSString *)inputWord {     BOOL isExitWord = [inputWord isEqualToString:self.exitWord];     if (isExitWord) {         NSLog(@&quot;%@&quot;, GoodByeMessage);     } else {         [self.game checkUserAnswer:inputWord];     }     return !isExitWord; }  - (NSString *)readLine {     char inputValue;     scanf(&quot;%s&quot;, &amp;inputValue);     return [NSString stringWithUTF8String:&amp;inputValue]; }  @end<\/code><\/pre>\n<p>  <\/p>\n<h3><i>Java:<\/i><\/h3>\n<p>  <\/p>\n<pre><code class=\"java\">public class GameStart {      private static final String GreetingMessage = &quot;Please enter your answer (enter \\&quot;%s\\&quot; for exit):&quot;;     private static final String InputAcceptMessage = &quot;You entered \\&quot;%s\\&quot;.\\n&quot;;     private static final String GoodByeMessage = &quot;Good bye.\\n&quot;;      private String exitWord;     private Game game;      public GameStart(String exitWord) {         this.exitWord = exitWord;         this.game = Game8037.Create();     }      void startGame() {         if (game != null) {             String inputWord;              do {                 game.greet(exitWord);                 inputWord = readLine();             } while (checkInputWord(inputWord));         }     }      private boolean checkInputWord(String inputWord) {         boolean isExitWord = inputWord.equals(exitWord);         if (isExitWord) {             System.out.println(GoodByeMessage);         } else {             game.checkUserAnswer(inputWord);         }         return !isExitWord;     }      private String readLine() {         java.util.Scanner scanner = new java.util.Scanner(System.in);         return scanner.next();     }  }<\/code><\/pre>\n<p>  <\/p>\n<h3><i>C#:<\/i><\/h3>\n<p>  <\/p>\n<pre><code class=\"cs\">public class GameStart {     const string GreetingMessage = &quot;Please enter your answer (enter \\&quot;{0}\\&quot; for exit):&quot;;     const string InputAcceptMessage = &quot;You entered \\&quot;{0}\\&quot;.\\n&quot;;     const string GoodByeMessage = &quot;Good bye.\\n&quot;;      readonly string exitWord;     readonly IGame iGame;      public GameStart(string exitWord)     {         this.exitWord = exitWord;         iGame = Game8037.Create();     }      public void startGame()     {         if (iGame != null)         {             string inputWord;             do             {                 iGame.greet(exitWord);                 inputWord = Console.ReadLine();             }             while (checkInputWord(inputWord));         }     }      bool checkInputWord(string inputWord)     {         bool isExitWord = inputWord.Equals(exitWord);         if (isExitWord)         {             Console.WriteLine(GoodByeMessage);         }         else         {             iGame.checkUserAnswer(inputWord);         }         return !isExitWord;     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0443 \u043d\u0430\u0441 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u043e\u0441\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>game<\/code> \u0442\u0438\u043f\u0430 <code>Game<\/code> (\u0438\u043b\u0438 <code>IGame<\/code> \u0432 C#). \u0422\u0430\u043a\u0436\u0435 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>startGame()<\/code> \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c <code>self.game.greet(...)<\/code>, \u0430 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>check(...)<\/code> \u2014 <code>self.game.check(...)<\/code>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043c\u0435\u0441\u0442\u043e <code>Game8037<\/code> \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u043b\u044e\u0431\u0443\u044e \u0434\u0440\u0443\u0433\u0443\u044e \u0438\u0433\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043d\u0430\u0448 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b <code>Game<\/code>.<\/p>\n<p>  <\/p>\n<h1>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h1>\n<p>  <\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0430\u0434 \u043d\u0430\u0448\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043e\u043a\u043e\u043d\u0447\u0435\u043d\u0430, \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0437\u0434\u0435\u0441\u044c: <a href=\"https:\/\/github.com\/ssuhanov\/8037\">https:\/\/github.com\/ssuhanov\/8037<\/a><br \/>  \u0412\u0441\u0435\u043c \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f, \u043a\u0440\u0438\u0442\u0438\u043a\u0443, \u0441\u043e\u0432\u0435\u0442\u044b, \u043f\u043e\u0436\u0435\u043b\u0430\u043d\u0438\u044f. \ud83d\ude42<\/p>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/327168\/\"> https:\/\/habrahabr.ru\/post\/327168\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/habrastorage.org\/files\/5e7\/678\/00f\/5e767800f809427e896af2d878ab26c0.png\"\/><\/div>\n<p>  <\/p>\n<h1>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 8037?<\/h1>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0438\u0433\u0440\u0430: \u0432\u044b \u0438\u0434\u0435\u0442\u0435 \u043f\u043e \u0443\u043b\u0438\u0446\u0435, \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u0441\u0443\u043c\u043c\u0443 \u0446\u0438\u0444\u0440 \u0432 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u043d\u043e\u043c\u0435\u0440\u0430\u0445. \u042d\u0442\u0443 \u0438\u0433\u0440\u0443 \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435, \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u044f\u0437\u044b\u043a\u0430\u0445: Swift, Objective-C, Java \u0438 C#.<\/p>\n<p>  <\/p>\n<p>\u0412 <a href=\"https:\/\/habrahabr.ru\/post\/326568\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> \u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u0442\u0432\u0435\u0442 \u043f\u043e\u043a\u0430 \u0442\u043e\u0442 \u043d\u0435 \u0432\u0432\u0435\u0434\u0435\u0442 \u0441\u043b\u043e\u0432\u043e \u0434\u043b\u044f \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041a\u0430\u043a \u0440\u0435\u0437\u043e\u043d\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0446\u0438\u043a\u043b \u0432\u043c\u0435\u0441\u0442\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u2014 \u0443\u0431\u0435\u0440\u0435\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e \u0438 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0435 \u0446\u0438\u043a\u043b \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>startGame<\/code>.<\/p>\n<p>  <\/p>\n<p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-286167","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/286167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=286167"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/286167\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=286167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=286167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=286167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}