From cf357785f7c993f6862483f04c56d6b368c5a531 Mon Sep 17 00:00:00 2001 From: Alexander Shalamov Date: Thu, 28 Mar 2019 23:30:29 +0300 Subject: [PATCH 1/3] Exercises -> KidnapperNote, RomanTranslator, DoomsdayMachine, MatrixHacker, TinyURL --- .../RSSchool_T2.xcodeproj/project.pbxproj | 553 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 43417 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 5 + .../xcschemes/xcschememanagement.plist | 14 + .../RSSchool_T2/RSSchool_T2/1/KidnapperNote.h | 18 + .../RSSchool_T2/RSSchool_T2/1/KidnapperNote.m | 5 + .../RSSchool_T2/2/RomanTranslator.h | 41 ++ .../RSSchool_T2/2/RomanTranslator.m | 5 + .../RSSchool_T2/3/DoomsdayMachine.h | 47 ++ .../RSSchool_T2/3/DoomsdayMachine.m | 5 + .../RSSchool_T2/RSSchool_T2/4/MatrixHacker.h | 40 ++ .../RSSchool_T2/RSSchool_T2/4/MatrixHacker.m | 5 + .../Task2/RSSchool_T2/RSSchool_T2/5/TinyURL.h | 27 + .../Task2/RSSchool_T2/RSSchool_T2/5/TinyURL.m | 5 + .../RSSchool_T2/Irrelevant/AppDelegate.h | 9 + .../RSSchool_T2/Irrelevant/AppDelegate.m | 21 + .../AppIcon.appiconset/Contents.json | 98 ++++ .../Irrelevant/Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 + .../RSSchool_T2/Irrelevant/Info.plist | 43 ++ .../RSSchool_T2/Irrelevant/ViewController.h | 4 + .../RSSchool_T2/Irrelevant/ViewController.m | 14 + .../RSSchool_T2/RSSchool_T2/Irrelevant/main.m | 8 + .../RSSchool_T2Tests/DoomsdayMachineTests.m | 49 ++ .../RSSchool_T2/RSSchool_T2Tests/Info.plist | 22 + .../RSSchool_T2Tests/KidnapperNoteTests.m | 39 ++ .../RSSchool_T2Tests/MatrixHackerTests.m | 32 + .../RSSchool_T2Tests/RomanTranslatorTests.m | 55 ++ .../RSSchool_T2Tests/TinyURLTests.m | 53 ++ 31 files changed, 1263 insertions(+) create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/project.pbxproj create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/project.xcworkspace/xcuserdata/alexander_shalamov.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/xcuserdata/alexander_shalamov.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/xcuserdata/alexander_shalamov.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/1/KidnapperNote.h create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/1/KidnapperNote.m create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/2/RomanTranslator.h create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/2/RomanTranslator.m create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/3/DoomsdayMachine.h create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/3/DoomsdayMachine.m create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/4/MatrixHacker.h create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/4/MatrixHacker.m create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/5/TinyURL.h create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/5/TinyURL.m create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/AppDelegate.h create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/AppDelegate.m create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/Assets.xcassets/Contents.json create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/Base.lproj/LaunchScreen.storyboard create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/Info.plist create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/ViewController.h create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/ViewController.m create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/main.m create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/DoomsdayMachineTests.m create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/Info.plist create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/KidnapperNoteTests.m create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/MatrixHackerTests.m create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/RomanTranslatorTests.m create mode 100644 Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/TinyURLTests.m diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/project.pbxproj b/Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/project.pbxproj new file mode 100644 index 0000000..49eae0a --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/project.pbxproj @@ -0,0 +1,553 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + E38F8D97224A3CDE009EF306 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E38F8D96224A3CDE009EF306 /* AppDelegate.m */; }; + E38F8D9A224A3CDE009EF306 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E38F8D99224A3CDE009EF306 /* ViewController.m */; }; + E38F8D9F224A3CE0009EF306 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E38F8D9E224A3CE0009EF306 /* Assets.xcassets */; }; + E38F8DA2224A3CE0009EF306 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E38F8DA0224A3CE0009EF306 /* LaunchScreen.storyboard */; }; + E38F8DA5224A3CE0009EF306 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E38F8DA4224A3CE0009EF306 /* main.m */; }; + E38F8DBB224A3EF0009EF306 /* KidnapperNote.m in Sources */ = {isa = PBXBuildFile; fileRef = E38F8DBA224A3EF0009EF306 /* KidnapperNote.m */; }; + E38F8DC0224A41A4009EF306 /* KidnapperNoteTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E38F8DBF224A41A4009EF306 /* KidnapperNoteTests.m */; }; + E38F8DC9224A4825009EF306 /* RomanTranslator.m in Sources */ = {isa = PBXBuildFile; fileRef = E38F8DC8224A4825009EF306 /* RomanTranslator.m */; }; + E38F8DCA224A4825009EF306 /* RomanTranslator.m in Sources */ = {isa = PBXBuildFile; fileRef = E38F8DC8224A4825009EF306 /* RomanTranslator.m */; }; + E38F8DCF224A7EE2009EF306 /* RomanTranslatorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E38F8DCE224A7EE2009EF306 /* RomanTranslatorTests.m */; }; + E38F8DD2224A8AEA009EF306 /* DoomsdayMachine.m in Sources */ = {isa = PBXBuildFile; fileRef = E38F8DD1224A8AEA009EF306 /* DoomsdayMachine.m */; }; + E38F8DD6224A8B08009EF306 /* DoomsdayMachineTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E38F8DD5224A8B08009EF306 /* DoomsdayMachineTests.m */; }; + E38F8DD7224B8A77009EF306 /* DoomsdayMachine.m in Sources */ = {isa = PBXBuildFile; fileRef = E38F8DD1224A8AEA009EF306 /* DoomsdayMachine.m */; }; + E38F8DDA224BA508009EF306 /* MatrixHacker.m in Sources */ = {isa = PBXBuildFile; fileRef = E38F8DD9224BA508009EF306 /* MatrixHacker.m */; }; + E38F8DDB224BA508009EF306 /* MatrixHacker.m in Sources */ = {isa = PBXBuildFile; fileRef = E38F8DD9224BA508009EF306 /* MatrixHacker.m */; }; + E38F8DDE224BA528009EF306 /* MatrixHackerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E38F8DDD224BA528009EF306 /* MatrixHackerTests.m */; }; + E38F8DE1224D0B8F009EF306 /* TinyURL.m in Sources */ = {isa = PBXBuildFile; fileRef = E38F8DE0224D0B8F009EF306 /* TinyURL.m */; }; + E38F8DE2224D0B8F009EF306 /* TinyURL.m in Sources */ = {isa = PBXBuildFile; fileRef = E38F8DE0224D0B8F009EF306 /* TinyURL.m */; }; + E38F8DE5224D1296009EF306 /* TinyURLTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E38F8DE4224D1296009EF306 /* TinyURLTests.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + E38F8DAB224A3CE0009EF306 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E38F8D8A224A3CDE009EF306 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E38F8D91224A3CDE009EF306; + remoteInfo = RSSchool_T2; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + E38F8D92224A3CDE009EF306 /* RSSchool_T2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RSSchool_T2.app; sourceTree = BUILT_PRODUCTS_DIR; }; + E38F8D95224A3CDE009EF306 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + E38F8D96224A3CDE009EF306 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + E38F8D98224A3CDE009EF306 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + E38F8D99224A3CDE009EF306 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + E38F8D9E224A3CE0009EF306 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + E38F8DA1224A3CE0009EF306 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + E38F8DA3224A3CE0009EF306 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E38F8DA4224A3CE0009EF306 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + E38F8DAA224A3CE0009EF306 /* RSSchool_T2Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RSSchool_T2Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + E38F8DB0224A3CE0009EF306 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E38F8DB9224A3EF0009EF306 /* KidnapperNote.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KidnapperNote.h; sourceTree = ""; }; + E38F8DBA224A3EF0009EF306 /* KidnapperNote.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KidnapperNote.m; sourceTree = ""; }; + E38F8DBF224A41A4009EF306 /* KidnapperNoteTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KidnapperNoteTests.m; sourceTree = ""; }; + E38F8DC7224A4825009EF306 /* RomanTranslator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RomanTranslator.h; sourceTree = ""; }; + E38F8DC8224A4825009EF306 /* RomanTranslator.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RomanTranslator.m; sourceTree = ""; }; + E38F8DCE224A7EE2009EF306 /* RomanTranslatorTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RomanTranslatorTests.m; sourceTree = ""; }; + E38F8DD0224A8AEA009EF306 /* DoomsdayMachine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DoomsdayMachine.h; sourceTree = ""; }; + E38F8DD1224A8AEA009EF306 /* DoomsdayMachine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DoomsdayMachine.m; sourceTree = ""; }; + E38F8DD5224A8B08009EF306 /* DoomsdayMachineTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DoomsdayMachineTests.m; sourceTree = ""; }; + E38F8DD8224BA508009EF306 /* MatrixHacker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MatrixHacker.h; sourceTree = ""; }; + E38F8DD9224BA508009EF306 /* MatrixHacker.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MatrixHacker.m; sourceTree = ""; }; + E38F8DDD224BA528009EF306 /* MatrixHackerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MatrixHackerTests.m; sourceTree = ""; }; + E38F8DDF224D0B8F009EF306 /* TinyURL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TinyURL.h; sourceTree = ""; }; + E38F8DE0224D0B8F009EF306 /* TinyURL.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TinyURL.m; sourceTree = ""; }; + E38F8DE4224D1296009EF306 /* TinyURLTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TinyURLTests.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + E38F8D8F224A3CDE009EF306 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E38F8DA7224A3CE0009EF306 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + E38F8D89224A3CDE009EF306 = { + isa = PBXGroup; + children = ( + E38F8D94224A3CDE009EF306 /* RSSchool_T2 */, + E38F8DAD224A3CE0009EF306 /* RSSchool_T2Tests */, + E38F8D93224A3CDE009EF306 /* Products */, + ); + sourceTree = ""; + }; + E38F8D93224A3CDE009EF306 /* Products */ = { + isa = PBXGroup; + children = ( + E38F8D92224A3CDE009EF306 /* RSSchool_T2.app */, + E38F8DAA224A3CE0009EF306 /* RSSchool_T2Tests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + E38F8D94224A3CDE009EF306 /* RSSchool_T2 */ = { + isa = PBXGroup; + children = ( + E38F8DBD224A3EFD009EF306 /* 1 */, + E38F8DCB224A482C009EF306 /* 2 */, + E38F8DD4224A8AF0009EF306 /* 3 */, + E38F8DDC224BA510009EF306 /* 4 */, + E38F8DE3224D0B93009EF306 /* 5 */, + E38F8DBE224A3F0A009EF306 /* Irrelevant */, + ); + path = RSSchool_T2; + sourceTree = ""; + }; + E38F8DAD224A3CE0009EF306 /* RSSchool_T2Tests */ = { + isa = PBXGroup; + children = ( + E38F8DBF224A41A4009EF306 /* KidnapperNoteTests.m */, + E38F8DCE224A7EE2009EF306 /* RomanTranslatorTests.m */, + E38F8DD5224A8B08009EF306 /* DoomsdayMachineTests.m */, + E38F8DDD224BA528009EF306 /* MatrixHackerTests.m */, + E38F8DE4224D1296009EF306 /* TinyURLTests.m */, + E38F8DB0224A3CE0009EF306 /* Info.plist */, + ); + path = RSSchool_T2Tests; + sourceTree = ""; + }; + E38F8DBD224A3EFD009EF306 /* 1 */ = { + isa = PBXGroup; + children = ( + E38F8DB9224A3EF0009EF306 /* KidnapperNote.h */, + E38F8DBA224A3EF0009EF306 /* KidnapperNote.m */, + ); + path = 1; + sourceTree = ""; + }; + E38F8DBE224A3F0A009EF306 /* Irrelevant */ = { + isa = PBXGroup; + children = ( + E38F8D95224A3CDE009EF306 /* AppDelegate.h */, + E38F8D96224A3CDE009EF306 /* AppDelegate.m */, + E38F8D98224A3CDE009EF306 /* ViewController.h */, + E38F8D99224A3CDE009EF306 /* ViewController.m */, + E38F8D9E224A3CE0009EF306 /* Assets.xcassets */, + E38F8DA0224A3CE0009EF306 /* LaunchScreen.storyboard */, + E38F8DA3224A3CE0009EF306 /* Info.plist */, + E38F8DA4224A3CE0009EF306 /* main.m */, + ); + path = Irrelevant; + sourceTree = ""; + }; + E38F8DCB224A482C009EF306 /* 2 */ = { + isa = PBXGroup; + children = ( + E38F8DC7224A4825009EF306 /* RomanTranslator.h */, + E38F8DC8224A4825009EF306 /* RomanTranslator.m */, + ); + path = 2; + sourceTree = ""; + }; + E38F8DD4224A8AF0009EF306 /* 3 */ = { + isa = PBXGroup; + children = ( + E38F8DD0224A8AEA009EF306 /* DoomsdayMachine.h */, + E38F8DD1224A8AEA009EF306 /* DoomsdayMachine.m */, + ); + path = 3; + sourceTree = ""; + }; + E38F8DDC224BA510009EF306 /* 4 */ = { + isa = PBXGroup; + children = ( + E38F8DD8224BA508009EF306 /* MatrixHacker.h */, + E38F8DD9224BA508009EF306 /* MatrixHacker.m */, + ); + path = 4; + sourceTree = ""; + }; + E38F8DE3224D0B93009EF306 /* 5 */ = { + isa = PBXGroup; + children = ( + E38F8DDF224D0B8F009EF306 /* TinyURL.h */, + E38F8DE0224D0B8F009EF306 /* TinyURL.m */, + ); + path = 5; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + E38F8D91224A3CDE009EF306 /* RSSchool_T2 */ = { + isa = PBXNativeTarget; + buildConfigurationList = E38F8DB3224A3CE0009EF306 /* Build configuration list for PBXNativeTarget "RSSchool_T2" */; + buildPhases = ( + E38F8D8E224A3CDE009EF306 /* Sources */, + E38F8D8F224A3CDE009EF306 /* Frameworks */, + E38F8D90224A3CDE009EF306 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = RSSchool_T2; + productName = RSSchool_T2; + productReference = E38F8D92224A3CDE009EF306 /* RSSchool_T2.app */; + productType = "com.apple.product-type.application"; + }; + E38F8DA9224A3CE0009EF306 /* RSSchool_T2Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = E38F8DB6224A3CE0009EF306 /* Build configuration list for PBXNativeTarget "RSSchool_T2Tests" */; + buildPhases = ( + E38F8DA6224A3CE0009EF306 /* Sources */, + E38F8DA7224A3CE0009EF306 /* Frameworks */, + E38F8DA8224A3CE0009EF306 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + E38F8DAC224A3CE0009EF306 /* PBXTargetDependency */, + ); + name = RSSchool_T2Tests; + productName = RSSchool_T2Tests; + productReference = E38F8DAA224A3CE0009EF306 /* RSSchool_T2Tests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E38F8D8A224A3CDE009EF306 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1020; + ORGANIZATIONNAME = "Alexander Shalamov"; + TargetAttributes = { + E38F8D91224A3CDE009EF306 = { + CreatedOnToolsVersion = 10.2; + }; + E38F8DA9224A3CE0009EF306 = { + CreatedOnToolsVersion = 10.2; + TestTargetID = E38F8D91224A3CDE009EF306; + }; + }; + }; + buildConfigurationList = E38F8D8D224A3CDE009EF306 /* Build configuration list for PBXProject "RSSchool_T2" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = E38F8D89224A3CDE009EF306; + productRefGroup = E38F8D93224A3CDE009EF306 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + E38F8D91224A3CDE009EF306 /* RSSchool_T2 */, + E38F8DA9224A3CE0009EF306 /* RSSchool_T2Tests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + E38F8D90224A3CDE009EF306 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E38F8DA2224A3CE0009EF306 /* LaunchScreen.storyboard in Resources */, + E38F8D9F224A3CE0009EF306 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E38F8DA8224A3CE0009EF306 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + E38F8D8E224A3CDE009EF306 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E38F8D9A224A3CDE009EF306 /* ViewController.m in Sources */, + E38F8DD2224A8AEA009EF306 /* DoomsdayMachine.m in Sources */, + E38F8DDA224BA508009EF306 /* MatrixHacker.m in Sources */, + E38F8DE1224D0B8F009EF306 /* TinyURL.m in Sources */, + E38F8DA5224A3CE0009EF306 /* main.m in Sources */, + E38F8DBB224A3EF0009EF306 /* KidnapperNote.m in Sources */, + E38F8D97224A3CDE009EF306 /* AppDelegate.m in Sources */, + E38F8DC9224A4825009EF306 /* RomanTranslator.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E38F8DA6224A3CE0009EF306 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E38F8DC0224A41A4009EF306 /* KidnapperNoteTests.m in Sources */, + E38F8DD7224B8A77009EF306 /* DoomsdayMachine.m in Sources */, + E38F8DCF224A7EE2009EF306 /* RomanTranslatorTests.m in Sources */, + E38F8DE2224D0B8F009EF306 /* TinyURL.m in Sources */, + E38F8DD6224A8B08009EF306 /* DoomsdayMachineTests.m in Sources */, + E38F8DE5224D1296009EF306 /* TinyURLTests.m in Sources */, + E38F8DDB224BA508009EF306 /* MatrixHacker.m in Sources */, + E38F8DDE224BA528009EF306 /* MatrixHackerTests.m in Sources */, + E38F8DCA224A4825009EF306 /* RomanTranslator.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + E38F8DAC224A3CE0009EF306 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = E38F8D91224A3CDE009EF306 /* RSSchool_T2 */; + targetProxy = E38F8DAB224A3CE0009EF306 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + E38F8DA0224A3CE0009EF306 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + E38F8DA1224A3CE0009EF306 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + E38F8DB1224A3CE0009EF306 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = NO; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.2; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + E38F8DB2224A3CE0009EF306 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = NO; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.2; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + E38F8DB4224A3CE0009EF306 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = "$(SRCROOT)/RSSchool_T2/Irrelevant/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "RSSchool.RSSchool-T2"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + E38F8DB5224A3CE0009EF306 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = "$(SRCROOT)/RSSchool_T2/Irrelevant/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "RSSchool.RSSchool-T2"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + E38F8DB7224A3CE0009EF306 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = RSSchool_T2Tests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.rss.task.ios.RSSchool-T2Tests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RSSchool_T2.app/RSSchool_T2"; + }; + name = Debug; + }; + E38F8DB8224A3CE0009EF306 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = RSSchool_T2Tests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.rss.task.ios.RSSchool-T2Tests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RSSchool_T2.app/RSSchool_T2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + E38F8D8D224A3CDE009EF306 /* Build configuration list for PBXProject "RSSchool_T2" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E38F8DB1224A3CE0009EF306 /* Debug */, + E38F8DB2224A3CE0009EF306 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E38F8DB3224A3CE0009EF306 /* Build configuration list for PBXNativeTarget "RSSchool_T2" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E38F8DB4224A3CE0009EF306 /* Debug */, + E38F8DB5224A3CE0009EF306 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E38F8DB6224A3CE0009EF306 /* Build configuration list for PBXNativeTarget "RSSchool_T2Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E38F8DB7224A3CE0009EF306 /* Debug */, + E38F8DB8224A3CE0009EF306 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = E38F8D8A224A3CDE009EF306 /* Project object */; +} diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..03f2892 --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/project.xcworkspace/xcuserdata/alexander_shalamov.xcuserdatad/UserInterfaceState.xcuserstate b/Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/project.xcworkspace/xcuserdata/alexander_shalamov.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..db299e18928342f5d715eb88b300fea649405316 GIT binary patch literal 43417 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 + + diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/xcuserdata/alexander_shalamov.xcuserdatad/xcschemes/xcschememanagement.plist b/Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/xcuserdata/alexander_shalamov.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..3ae23fa --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2.xcodeproj/xcuserdata/alexander_shalamov.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + RSSchool_T2.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/1/KidnapperNote.h b/Tasks/Task2/RSSchool_T2/RSSchool_T2/1/KidnapperNote.h new file mode 100644 index 0000000..b794491 --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/1/KidnapperNote.h @@ -0,0 +1,18 @@ +#import +/* + Harold is a kidnapper who wrote a ransom note, but now he is worried it will be traced back to him through his handwriting. He found a magazine and wants to know if he can cut out whole words from it and use them to create an untraceable replica of his ransom note. The words in his note are case-insensitive and he must use only whole words available in the magazine. He cannot use substrings or concatenation to create the words he needs. + Given the words in the magazine and the words in the ransom note, complete the checkMagazine function to return YES if he can replicate his ransom note exactly using whole words from the magazine; otherwise, return NO. + For example, the note is "Attack At Dawn". The magazine contains only "attack at dawn". The magazine has all the right words and even if there's a case mismatch, the answer is YES. + Another example, the note says "give two grand today" and the magazine contains "give me one grand today night". The magazine doesnt have all the right words, so the answer is NO. +*/ + +@interface KidnapperNote : NSObject +/** + A function to check if a magazine can be used for a ransom note. + + @param magaine a string, representing the text of a magazine + @param note a string, representing a desired ransom note + @return flag indicating if a magazine can be used for a ransom note, YES or NO + */ +- (BOOL)checkMagazine:(NSString *)magaine note:(NSString *)note; +@end diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/1/KidnapperNote.m b/Tasks/Task2/RSSchool_T2/RSSchool_T2/1/KidnapperNote.m new file mode 100644 index 0000000..ff5282d --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/1/KidnapperNote.m @@ -0,0 +1,5 @@ +#import "KidnapperNote.h" + +@implementation KidnapperNote +// your code here +@end diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/2/RomanTranslator.h b/Tasks/Task2/RSSchool_T2/RSSchool_T2/2/RomanTranslator.h new file mode 100644 index 0000000..9bdba29 --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/2/RomanTranslator.h @@ -0,0 +1,41 @@ +#import +/* + A roman translator Brutus was hired by a merchant. + Brutus will be responsible for translating arabic numerals to roman and vise-versa + You need to help him and implement a couple of handy methods. + Roman numbers are represented by 7 different letters: + + Symbol Value + I 1 + V 5 + X 10 + L 50 + C 100 + D 500 + M 1000 + + For example, two is written as II in Roman numeral, just two one's added together. Twelve is written as, XII, which is simply X + II. The number twenty seven is written as XXVII, which is XX + V + II. + + Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used: + + I can be placed before V (5) and X (10) to make 4 and 9. + X can be placed before L (50) and C (100) to make 40 and 90. + C can be placed before D (500) and M (1000) to make 400 and 900. + */ + +@interface RomanTranslator : NSObject +/** + Arabic to roman numbers converter + + @param arabicString a regular (arabic) number string + @return a roman representation + */ +- (NSString *)romanFromArabic:(NSString *)arabicString; +/** + Roman to arabic numbers converter + + @param romanString a roman number string + @return an arabic number string + */ +- (NSString *)arabicFromRoman:(NSString *)romanString; +@end diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/2/RomanTranslator.m b/Tasks/Task2/RSSchool_T2/RSSchool_T2/2/RomanTranslator.m new file mode 100644 index 0000000..6b9ea6b --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/2/RomanTranslator.m @@ -0,0 +1,5 @@ +#import "RomanTranslator.h" + +@implementation RomanTranslator +// your code here +@end diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/3/DoomsdayMachine.h b/Tasks/Task2/RSSchool_T2/RSSchool_T2/3/DoomsdayMachine.h new file mode 100644 index 0000000..8634c81 --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/3/DoomsdayMachine.h @@ -0,0 +1,47 @@ +#import +/* + You are a Borg and you are going to assimilate the humans. + The date of assimilation is set to 14 August 2208 03:13:37 (in obsolete human calendar) + However, the Borg messep up the date format with their own, + so 26 March 2019 12:34:56 in human will look like: + 2019:03:26@56\34/12 + + As an engineer, you need to design a program which will take a messed up date string and + return how many years, months, weeks, days, hours, minutes and seconds left between + the specified date and the assimilation date. You need to create a class conforming to + AssimilationInfo protocol and use it as a wrapper for the returned data. + - Example + Input: 2200:01:01@15\30/00 + Output: AssimilationInfo(years:8, months:7, days:13, hours:2, minutes:43, seconds:22) + + The machine should also be able to return the assimilation date in string + representation for humans to behold and the format should be easily read by them. + (as it would be displayed on the countdown screen) + - Example + Output: Sunday, August 14, 2208 + */ +@protocol AssimilationInfo +@property (nonatomic, readonly) NSString *dateString; +@property (nonatomic, readonly) NSInteger years; +@property (nonatomic, readonly) NSInteger months; +@property (nonatomic, readonly) NSInteger weeks; +@property (nonatomic, readonly) NSInteger days; +@property (nonatomic, readonly) NSInteger hours; +@property (nonatomic, readonly) NSInteger minutes; +@property (nonatomic, readonly) NSInteger seconds; +@end +@interface DoomsdayMachine : NSObject +/** + Returns AssimilationInfo for a gived date string + + @param dateString a date string in a messed up Borg format + @return AssimilationInfo for the specified date + */ +- (id)assimilationInfoForCurrentDateString:(NSString *)dateString; +/** + Returns a human-readable string of the assimilation date + + @return a human-readable string + */ +- (NSString *)doomsdayString; +@end diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/3/DoomsdayMachine.m b/Tasks/Task2/RSSchool_T2/RSSchool_T2/3/DoomsdayMachine.m new file mode 100644 index 0000000..16272ab --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/3/DoomsdayMachine.m @@ -0,0 +1,5 @@ +#import "DoomsdayMachine.h" + +@implementation DoomsdayMachine +// your code here +@end diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/4/MatrixHacker.h b/Tasks/Task2/RSSchool_T2/RSSchool_T2/4/MatrixHacker.h new file mode 100644 index 0000000..be9caa2 --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/4/MatrixHacker.h @@ -0,0 +1,40 @@ +#import +/* + Agent Smith is taking over the Matrix, turning everyone into his clones. + Luckily, Neo hacked into the system and is able to inject arbitrary code. + Turned out the Matrix is written in Objective-C, so he needs your help. + + You need to implement a method injectCode: which would take a block and peersist it. + Later, when runCodeWithData: is called, the class should apply the saved block to each + element of the array, creating either a character with the same name either a clone + named "Agent Smith". If the name is not "Neo", the clone of "Agent Smith" is created. + + - Example: + Input: ["Jane Doe", "Delivery Guy", "Postman", "Neo", "Agent John", "Dog"] + Output: [Character(name: "Agent Smith", isClone: true), + Character(name: "Agent Smith", isClone: true), + Character(name: "Agent Smith", isClone: true), + Character(name: "Neo", isClone: false), + Character(name: "Agent Smith", isClone: true), + Character(name: "Agent Smith", isClone: true)] + */ +@protocol Character +- (NSString *)name; +- (BOOL)isClone; ++ (instancetype)createWithName:(NSString *)name isClone:(BOOL)clone; +@end +@interface MatrixHacker : NSObject +/** + Injects the given block into the Matrix by saving it in the class. + + @param theBlock the block of code to be injected + */ +- (void)injectCode:(id (^)(NSString *name))theBlock; +/** + Runs the saved block of code against every element of the array + + @param names the array of names of characters + @return an array of character after applying the injected block + */ +- (NSArray> *)runCodeWithData:(NSArray *)names; +@end diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/4/MatrixHacker.m b/Tasks/Task2/RSSchool_T2/RSSchool_T2/4/MatrixHacker.m new file mode 100644 index 0000000..edb4520 --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/4/MatrixHacker.m @@ -0,0 +1,5 @@ +#import "MatrixHacker.h" +// your code here +@implementation MatrixHacker +// your code here +@end diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/5/TinyURL.h b/Tasks/Task2/RSSchool_T2/RSSchool_T2/5/TinyURL.h new file mode 100644 index 0000000..0643a0b --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/5/TinyURL.h @@ -0,0 +1,27 @@ +#import +/* + URL shortening services like tinyurl.com or vk.cc allow you to enter a URL + such as https://drive.google.com/file/d/1EBGP1ntXPGVSfYyKGenOdzgh_hna4vg4/view + and get back a short one such as https://vk.cc/9dEj5S + + Design the encode and decode methods for the TinyURL service. + There is no restriction on how your encode/decode algorithm should work. + You just need to ensure that a URL can be encoded to a tiny URL + and the tiny URL can be decoded to the original URL. + */ +@interface TinyURL : NSObject +/** + Takes a URL and encodes it into a tiny format + + @param originalURL the URL + @return encoded URL + */ +- (NSURL *)encode:(NSURL *)originalURL; +/** + Taken an encoded URL and returns its original form + + @param shortenedURL encoded URL + @return original URL + */ +- (NSURL *)decode:(NSURL *)shortenedURL; +@end diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/5/TinyURL.m b/Tasks/Task2/RSSchool_T2/RSSchool_T2/5/TinyURL.m new file mode 100644 index 0000000..ece240f --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/5/TinyURL.m @@ -0,0 +1,5 @@ +#import "TinyURL.h" + +@implementation TinyURL +// your code here +@end diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/AppDelegate.h b/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/AppDelegate.h new file mode 100644 index 0000000..3621106 --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/AppDelegate.h @@ -0,0 +1,9 @@ +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + + +@end + diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/AppDelegate.m b/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/AppDelegate.m new file mode 100644 index 0000000..1435db3 --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/AppDelegate.m @@ -0,0 +1,21 @@ +#import "AppDelegate.h" + +@interface AppDelegate () +@end + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; + [self.window setRootViewController: [UIViewController new]]; + self.window.backgroundColor = [UIColor whiteColor]; + [self.window makeKeyAndVisible]; + return YES; +} + +- (void)applicationWillResignActive:(UIApplication *)application {} +- (void)applicationDidEnterBackground:(UIApplication *)application {} +- (void)applicationWillEnterForeground:(UIApplication *)application {} +- (void)applicationDidBecomeActive:(UIApplication *)application {} +- (void)applicationWillTerminate:(UIApplication *)application {} +@end diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/Assets.xcassets/AppIcon.appiconset/Contents.json b/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/Assets.xcassets/Contents.json b/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/Base.lproj/LaunchScreen.storyboard b/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..bfa3612 --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/Info.plist b/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/Info.plist new file mode 100644 index 0000000..4222ac2 --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/Info.plist @@ -0,0 +1,43 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/ViewController.h b/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/ViewController.h new file mode 100644 index 0000000..d2fc081 --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/ViewController.h @@ -0,0 +1,4 @@ +#import + +@interface ViewController : UIViewController +@end diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/ViewController.m b/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/ViewController.m new file mode 100644 index 0000000..010680c --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/ViewController.m @@ -0,0 +1,14 @@ +#import "ViewController.h" + +@interface ViewController () + +@end + +@implementation ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +@end diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/main.m b/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/main.m new file mode 100644 index 0000000..0edc47d --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/Irrelevant/main.m @@ -0,0 +1,8 @@ +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/DoomsdayMachineTests.m b/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/DoomsdayMachineTests.m new file mode 100644 index 0000000..c4fa7be --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/DoomsdayMachineTests.m @@ -0,0 +1,49 @@ +// +// DoomsdayMachineTests.m +// RSSchool_T2Tests +// +// Created by Alexander Shalamov on 3/26/19. +// Copyright © 2019 Alexander Shalamov. All rights reserved. +// + +#import +#import "DoomsdayMachine.h" +@interface DoomsdayMachineTests : XCTestCase +@property (nonatomic, retain) DoomsdayMachine *machine; +@end + +@implementation DoomsdayMachineTests + +- (void)setUp { + self.machine = [DoomsdayMachine new]; +} + +- (void)test1 { + XCTAssertEqual(@"Sunday, August 14, 2208", [self.machine doomsdayString]); +} + +- (void)test2 { + id assimilationInfo = [self.machine assimilationInfoForCurrentDateString:@"2019:03:26@00\\00/12"]; + [assimilationInfo retain]; + XCTAssertEqual(assimilationInfo.years, 189); + XCTAssertEqual(assimilationInfo.months, 4); + XCTAssertEqual(assimilationInfo.days, 18); + XCTAssertEqual(assimilationInfo.hours, 15); + XCTAssertEqual(assimilationInfo.minutes, 13); + XCTAssertEqual(assimilationInfo.seconds, 37); + XCTAssertEqual(assimilationInfo.dateString, @"2019:03:26@00\\00/12"); +} + +- (void)test3 { + id assimilationInfo = [self.machine assimilationInfoForCurrentDateString:@"2219:01:01@00\\00/00"]; + [assimilationInfo retain]; + XCTAssertEqual(assimilationInfo.years, -10); + XCTAssertEqual(assimilationInfo.months, -4); + XCTAssertEqual(assimilationInfo.days, -17); + XCTAssertEqual(assimilationInfo.hours, -20); + XCTAssertEqual(assimilationInfo.minutes, -46); + XCTAssertEqual(assimilationInfo.seconds, -23); + XCTAssertEqual(assimilationInfo.dateString, @"2219:01:01@00\\00/00"); +} + +@end diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/Info.plist b/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/KidnapperNoteTests.m b/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/KidnapperNoteTests.m new file mode 100644 index 0000000..49d35ab --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/KidnapperNoteTests.m @@ -0,0 +1,39 @@ +#import +#import "KidnapperNote.h" + +@interface KidnapperNoteTests : XCTestCase +@property (nonatomic, retain) KidnapperNote *note; +@end + +@implementation KidnapperNoteTests + +- (void)setUp { + self.note = [KidnapperNote new]; +} + +- (void)test1 { + XCTAssertTrue([self.note checkMagazine:@"I will give you one grand for today" + note:@"give one grand today"]); +} + +- (void)test2 { + XCTAssertTrue([self.note checkMagazine:@"To be alone is to be free" + note:@"Be alone"]); +} + +- (void)test3 { + XCTAssertFalse([self.note checkMagazine:@"He put the money in a black bag" + note:@"Put the money in the black bag"]); +} + +- (void)test4 { + XCTAssertFalse([self.note checkMagazine:@"Always call the cops in case of trouble" + note:@"don't call the cops"]); +} + +- (void)test5 { + XCTAssertFalse([self.note checkMagazine:@"Don't leave your the bag outside" + note:@"hide the bag and leave"]); +} + +@end diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/MatrixHackerTests.m b/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/MatrixHackerTests.m new file mode 100644 index 0000000..73bd20d --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/MatrixHackerTests.m @@ -0,0 +1,32 @@ +#import +#import "MatrixHacker.h" + +@interface MatrixHackerTests : XCTestCase +@property (nonatomic, strong) MatrixHacker *hacker; +@property (nonatomic, retain) NSArray *people; +@end + +@interface Char : NSObject +@end +@implementation Char +@end + +@implementation MatrixHackerTests + +- (void)setUp { + self.hacker = [MatrixHacker new]; + self.people = @[@"Delivery Guy", @"Neo", @"Policeman", @"Agent John", @"Agent Black", @"Bartender"]; +} + +- (void)test1 { + __block NSInteger counter = 0; + [self.hacker injectCode:^id(NSString *name) { + counter += 1; + return [Char new]; + }]; + [self.hacker runCodeWithData:self.people]; + XCTAssertTrue(self.people.count == counter); +} + + +@end diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/RomanTranslatorTests.m b/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/RomanTranslatorTests.m new file mode 100644 index 0000000..d664cdf --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/RomanTranslatorTests.m @@ -0,0 +1,55 @@ +#import +#import "RomanTranslator.h" + +@interface RomanTranslatorTests : XCTestCase +@property (nonatomic, retain) RomanTranslator *translator; +@end + +@implementation RomanTranslatorTests + +- (void)setUp { + self.translator = [RomanTranslator new]; +} + +- (void)test1 { + XCTAssertEqual(@"III", [self.translator romanFromArabic:@"3"]); +} + +- (void)test2 { + XCTAssertEqual(@"IV", [self.translator romanFromArabic:@"4"]); +} + +- (void)test3 { + XCTAssertEqual(@"IX", [self.translator romanFromArabic:@"9"]); +} + +- (void)test4 { + XCTAssertEqual(@"LVIII", [self.translator romanFromArabic:@"58"]); +} + +- (void)test5 { + XCTAssertEqual(@"MCMXCIV", [self.translator romanFromArabic:@"1994"]); +} + +- (void)test6 { + XCTAssertEqual(@"3", [self.translator arabicFromRoman:@"III"]); +} + +- (void)test7 { + XCTAssertEqual(@"4", [self.translator arabicFromRoman:@"IV"]); +} + +- (void)test8 { + XCTAssertEqual(@"9", [self.translator arabicFromRoman:@"IX"]); +} + +- (void)test9 { + XCTAssertEqual(@"58", [self.translator arabicFromRoman:@"LVIII"]); +} + +- (void)test10 { + XCTAssertEqual(@"1994", [self.translator arabicFromRoman:@"MCMXCIV"]); +} + + +@end diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/TinyURLTests.m b/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/TinyURLTests.m new file mode 100644 index 0000000..9b13726 --- /dev/null +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/TinyURLTests.m @@ -0,0 +1,53 @@ +#import +#import "TinyURL.h" + +@interface TinyURLTests : XCTestCase +@property (nonatomic, retain) TinyURL *urlEncoder; +@end + +@implementation TinyURLTests + +- (void)setUp { + self.urlEncoder = [TinyURL new]; +} + + +- (void)test1 { + NSURL *url = [[NSURL alloc] initWithString:@"https://rs.school/ios/index.html"]; + NSURL *encoded = [self.urlEncoder encode:url]; + + NSURL *decoded = [self.urlEncoder decode:encoded]; + XCTAssertTrue([url.absoluteString isEqualToString:decoded.absoluteString]); +} + +- (void)test2 { + NSURL *url = [[NSURL alloc] initWithString:@"https://google.com"]; + NSURL *encoded = [self.urlEncoder encode:url]; + + NSURL *decoded = [self.urlEncoder decode:encoded]; + XCTAssertTrue([url.absoluteString isEqualToString:decoded.absoluteString]); +} + +- (void)test3 { + NSURL *url = [[NSURL alloc] initWithString:@"https://yandex.by/images/"]; + NSURL *encoded = [self.urlEncoder encode:url]; + + NSURL *decoded = [self.urlEncoder decode:encoded]; + XCTAssertTrue([url.absoluteString isEqualToString:decoded.absoluteString]); +} + +- (void)test4 { + NSURL *url1 = [[NSURL alloc] initWithString:@"https://rs.school/ios/index.html"]; + NSURL *encoded1 = [self.urlEncoder encode:url1]; + NSURL *decoded1 = [self.urlEncoder decode:encoded1]; + XCTAssertTrue([url1.absoluteString isEqualToString:decoded1.absoluteString]); + + NSURL *url2 = [[NSURL alloc] initWithString:@"http://rs.school/ios/index.html"]; + NSURL *encoded2 = [self.urlEncoder encode:url2]; + NSURL *decoded2 = [self.urlEncoder decode:encoded2]; + XCTAssertTrue([url2.absoluteString isEqualToString:decoded2.absoluteString]); + + XCTAssertFalse([encoded1.absoluteString isEqualToString:encoded2.absoluteString]); +} + +@end From d7efedc81646013adc88082e23d26b26471d9ffd Mon Sep 17 00:00:00 2001 From: Alexander Shalamov Date: Fri, 29 Mar 2019 13:23:13 +0300 Subject: [PATCH 2/3] Modified the tests to use a correct assertion --- .../RSSchool_T2/3/DoomsdayMachine.h | 1 - .../RSSchool_T2Tests/DoomsdayMachineTests.m | 2 -- .../RSSchool_T2Tests/RomanTranslatorTests.m | 20 +++++++++---------- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2/3/DoomsdayMachine.h b/Tasks/Task2/RSSchool_T2/RSSchool_T2/3/DoomsdayMachine.h index 8634c81..e312389 100644 --- a/Tasks/Task2/RSSchool_T2/RSSchool_T2/3/DoomsdayMachine.h +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2/3/DoomsdayMachine.h @@ -21,7 +21,6 @@ Output: Sunday, August 14, 2208 */ @protocol AssimilationInfo -@property (nonatomic, readonly) NSString *dateString; @property (nonatomic, readonly) NSInteger years; @property (nonatomic, readonly) NSInteger months; @property (nonatomic, readonly) NSInteger weeks; diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/DoomsdayMachineTests.m b/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/DoomsdayMachineTests.m index c4fa7be..d7153be 100644 --- a/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/DoomsdayMachineTests.m +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/DoomsdayMachineTests.m @@ -31,7 +31,6 @@ - (void)test2 { XCTAssertEqual(assimilationInfo.hours, 15); XCTAssertEqual(assimilationInfo.minutes, 13); XCTAssertEqual(assimilationInfo.seconds, 37); - XCTAssertEqual(assimilationInfo.dateString, @"2019:03:26@00\\00/12"); } - (void)test3 { @@ -43,7 +42,6 @@ - (void)test3 { XCTAssertEqual(assimilationInfo.hours, -20); XCTAssertEqual(assimilationInfo.minutes, -46); XCTAssertEqual(assimilationInfo.seconds, -23); - XCTAssertEqual(assimilationInfo.dateString, @"2219:01:01@00\\00/00"); } @end diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/RomanTranslatorTests.m b/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/RomanTranslatorTests.m index d664cdf..1e1fa83 100644 --- a/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/RomanTranslatorTests.m +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/RomanTranslatorTests.m @@ -12,43 +12,43 @@ - (void)setUp { } - (void)test1 { - XCTAssertEqual(@"III", [self.translator romanFromArabic:@"3"]); + XCTAssertTrue([@"III" isEqualToString:[self.translator romanFromArabic:@"3"]]); } - (void)test2 { - XCTAssertEqual(@"IV", [self.translator romanFromArabic:@"4"]); + XCTAssertTrue([@"IV" isEqualToString:[self.translator romanFromArabic:@"4"]]); } - (void)test3 { - XCTAssertEqual(@"IX", [self.translator romanFromArabic:@"9"]); + XCTAssertTrue([@"IX" isEqualToString:[self.translator romanFromArabic:@"9"]]); } - (void)test4 { - XCTAssertEqual(@"LVIII", [self.translator romanFromArabic:@"58"]); + XCTAssertTrue([@"LVIII" isEqualToString:[self.translator romanFromArabic:@"58"]]); } - (void)test5 { - XCTAssertEqual(@"MCMXCIV", [self.translator romanFromArabic:@"1994"]); + XCTAssertTrue([@"MCMXCIV" isEqualToString:[self.translator romanFromArabic:@"1994"]]); } - (void)test6 { - XCTAssertEqual(@"3", [self.translator arabicFromRoman:@"III"]); + XCTAssertTrue([@"3" isEqualToString:[self.translator arabicFromRoman:@"III"]]); } - (void)test7 { - XCTAssertEqual(@"4", [self.translator arabicFromRoman:@"IV"]); + XCTAssertTrue([@"4" isEqualToString:[self.translator arabicFromRoman:@"IV"]]); } - (void)test8 { - XCTAssertEqual(@"9", [self.translator arabicFromRoman:@"IX"]); + XCTAssertTrue([@"9" isEqualToString:[self.translator arabicFromRoman:@"IX"]]); } - (void)test9 { - XCTAssertEqual(@"58", [self.translator arabicFromRoman:@"LVIII"]); + XCTAssertTrue([@"58" isEqualToString:[self.translator arabicFromRoman:@"LVIII"]]); } - (void)test10 { - XCTAssertEqual(@"1994", [self.translator arabicFromRoman:@"MCMXCIV"]); + XCTAssertTrue([@"1994" isEqualToString:[self.translator arabicFromRoman:@"MCMXCIV"]]); } From 5b11c7e3be84675fd0a1d361813a0a439185eb64 Mon Sep 17 00:00:00 2001 From: Alexander Shalamov Date: Sat, 30 Mar 2019 12:18:41 +0300 Subject: [PATCH 3/3] Updated a test in the 3rd exercise --- Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/DoomsdayMachineTests.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/DoomsdayMachineTests.m b/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/DoomsdayMachineTests.m index d7153be..db9da95 100644 --- a/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/DoomsdayMachineTests.m +++ b/Tasks/Task2/RSSchool_T2/RSSchool_T2Tests/DoomsdayMachineTests.m @@ -19,7 +19,7 @@ - (void)setUp { } - (void)test1 { - XCTAssertEqual(@"Sunday, August 14, 2208", [self.machine doomsdayString]); + XCTAssertTrue([@"Sunday, August 14, 2208" isEqualToString:[self.machine doomsdayString]]); } - (void)test2 {