From 36911ce80c1eeb86b5e82ef6e28df7cedbfd8411 Mon Sep 17 00:00:00 2001 From: Dmitriy Zhukov Date: Fri, 8 Feb 2013 21:47:48 +0400 Subject: [PATCH 1/2] IDNA_Project_4 (first version) --- .DS_Store | Bin 0 -> 6148 bytes IDNA/.DS_Store | Bin 0 -> 6148 bytes IDNA/IDNA.xcodeproj/project.pbxproj | 361 ++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 32499 bytes .../xcdebugger/Breakpoints.xcbkptlist | 5 + .../xcschemes/IDNA.xcscheme | 86 + .../xcschemes/xcschememanagement.plist | 22 + IDNA/IDNA/.DS_Store | Bin 0 -> 12292 bytes IDNA/IDNA/IDNA-Info.plist | 34 + IDNA/IDNA/IDNA-Prefix.pch | 7 + IDNA/IDNA/IDNAppDelegate.h | 54 + IDNA/IDNA/IDNAppDelegate.m | 401 ++ IDNA/IDNA/IDNCell.h | 23 + IDNA/IDNA/IDNCell.m | 78 + IDNA/IDNA/IDNPopulation.h | 28 + IDNA/IDNA/IDNPopulation.m | 171 + IDNA/IDNA/IDNRandomGenerator.h | 19 + IDNA/IDNA/IDNRandomGenerator.m | 63 + IDNA/IDNA/en.lproj/.DS_Store | Bin 0 -> 6148 bytes IDNA/IDNA/en.lproj/Credits.rtf | 29 + IDNA/IDNA/en.lproj/IDNRandomGenerator.xib | 436 ++ IDNA/IDNA/en.lproj/InfoPlist.strings | 2 + IDNA/IDNA/en.lproj/Localizable.strings | 21 + IDNA/IDNA/en.lproj/MainMenu.xib | 4938 ++++++++++++++++ IDNA/IDNA/main.m | 14 + IDNA/IDNA/ru.lproj/.DS_Store | Bin 0 -> 6148 bytes IDNA/IDNA/ru.lproj/Credits.rtf | 29 + IDNA/IDNA/ru.lproj/IDNRandomGenerator.xib | 412 ++ IDNA/IDNA/ru.lproj/InfoPlist.strings | 2 + IDNA/IDNA/ru.lproj/Localizable.strings | 21 + IDNA/IDNA/ru.lproj/MainMenu.xib | 5023 +++++++++++++++++ 32 files changed, 12286 insertions(+) create mode 100644 .DS_Store create mode 100644 IDNA/.DS_Store create mode 100644 IDNA/IDNA.xcodeproj/project.pbxproj create mode 100644 IDNA/IDNA.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 IDNA/IDNA.xcodeproj/project.xcworkspace/xcuserdata/jdmbox.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 IDNA/IDNA.xcodeproj/xcuserdata/jdmbox.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist create mode 100644 IDNA/IDNA.xcodeproj/xcuserdata/jdmbox.xcuserdatad/xcschemes/IDNA.xcscheme create mode 100644 IDNA/IDNA.xcodeproj/xcuserdata/jdmbox.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 IDNA/IDNA/.DS_Store create mode 100644 IDNA/IDNA/IDNA-Info.plist create mode 100644 IDNA/IDNA/IDNA-Prefix.pch create mode 100644 IDNA/IDNA/IDNAppDelegate.h create mode 100644 IDNA/IDNA/IDNAppDelegate.m create mode 100644 IDNA/IDNA/IDNCell.h create mode 100644 IDNA/IDNA/IDNCell.m create mode 100644 IDNA/IDNA/IDNPopulation.h create mode 100644 IDNA/IDNA/IDNPopulation.m create mode 100644 IDNA/IDNA/IDNRandomGenerator.h create mode 100644 IDNA/IDNA/IDNRandomGenerator.m create mode 100644 IDNA/IDNA/en.lproj/.DS_Store create mode 100644 IDNA/IDNA/en.lproj/Credits.rtf create mode 100644 IDNA/IDNA/en.lproj/IDNRandomGenerator.xib create mode 100644 IDNA/IDNA/en.lproj/InfoPlist.strings create mode 100644 IDNA/IDNA/en.lproj/Localizable.strings create mode 100644 IDNA/IDNA/en.lproj/MainMenu.xib create mode 100644 IDNA/IDNA/main.m create mode 100644 IDNA/IDNA/ru.lproj/.DS_Store create mode 100644 IDNA/IDNA/ru.lproj/Credits.rtf create mode 100644 IDNA/IDNA/ru.lproj/IDNRandomGenerator.xib create mode 100644 IDNA/IDNA/ru.lproj/InfoPlist.strings create mode 100644 IDNA/IDNA/ru.lproj/Localizable.strings create mode 100644 IDNA/IDNA/ru.lproj/MainMenu.xib diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..241acc3ef4ef7304af48cd7fe6b6de7785cf5541 GIT binary patch literal 6148 zcmeHK!A{#i5S>jzYl~L$r4qeaJymLiNJ2^vJ(ws|aG*jMi36!x8>1$YiBaN^Llkh; z59kN>JO{ti5lo-5nxQtx-}V@`%WRGL~F4e-Z9yy(1;- zsQ?v^v6E)Uahk<=<^e?>KLfmW722UTeWuNY_4|#!chK@|rYACwi^sz=yUthfS=t-s zYioa0sa#ol_S|t@=SAnR*H5x>D;xEb;ZfMl#$hixiKD?6ZRb%w8n&W=?%9j-E_$?m zkYy?Cj*UL-C3*L&_j)pEZZxZYqyBzc^(VD@qgM6T8y}`q*Ku6$m-Fh)>c{PaXnJv3 z{Lo)Y3jd>)mlki}Cye<#&ci`J&HCTr<9L_$X^S?&#V&A_PAOSnP;VV*bO`|DYor#~`sxq#*#QhJ76##g zD3b~_smhiZ%2p1_q@zEu@r6N?PD;NS3krEJ9m z@G5-}&b$u&#x{|F_KE<_NaJs8&v@<6E89avsy;|+L}eoKpo|3{#Xp4mSzk!OwUmI0 z$JkHxd7SDPbskXU?K8l8SE7At&^OwBwtrvIw+t;jJeY+{{NiE1>-PCi+)dm4tXjQS zg<@%H`jhAT-puh)yOZc)T@N}*|9i8ghs}0!5l6ifV`ot|=+~p3={bn97J7_*sC5ea z*m)ndldN@GUL1{T8{3s&tGYI>1f$yO)@CJGU)vs!eb4jDx8D5H%FfdqzF*njSk2U?+@bWWNQx}YxgU|l`q<_`YMP0?`!Q$!dL z284lk!+<*@z0dDv#xhZ1Kp1!}2Kamkpp2oz+@d);P?!_|$j?Y4u+7sS7;pnHbeLO2 z3q;vapbb?n#ZWGDP&OR>q4Uoz+Hg|l%NWOfS-A{Fxx_;S#+_7XQA%Mz7*9OotC=2`L7AGMv%vB6uzKR#1M$jIx W0Sq1H7SRHchk&6$3Sr"; }; + 170B080F169A0EB9000DBF49 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 170B0811169A0EB9000DBF49 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 170B0813169A0EB9000DBF49 /* IDNA-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "IDNA-Prefix.pch"; sourceTree = ""; }; + 170B0815169A0EB9000DBF49 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; + 170B0817169A0EB9000DBF49 /* IDNAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IDNAppDelegate.h; sourceTree = ""; }; + 170B0818169A0EB9000DBF49 /* IDNAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IDNAppDelegate.m; sourceTree = ""; }; + 170B081B169A0EB9000DBF49 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = ""; }; + 170B0826169A1273000DBF49 /* IDNCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDNCell.h; sourceTree = ""; }; + 170B0827169A1273000DBF49 /* IDNCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IDNCell.m; sourceTree = ""; }; + 170B0829169A1700000DBF49 /* IDNPopulation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDNPopulation.h; sourceTree = ""; }; + 170B082A169A1700000DBF49 /* IDNPopulation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IDNPopulation.m; sourceTree = ""; }; + 172CB91316C54E3200D8B2C3 /* IDNRandomGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDNRandomGenerator.h; sourceTree = ""; }; + 172CB91416C54E3200D8B2C3 /* IDNRandomGenerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IDNRandomGenerator.m; sourceTree = ""; }; + 172CB91816C563C900D8B2C3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ru.lproj/MainMenu.xib; sourceTree = ""; }; + 172CB91916C563C900D8B2C3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; + 172CB91A16C563C900D8B2C3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ru; path = ru.lproj/Credits.rtf; sourceTree = ""; }; + 172CB91E16C5642000D8B2C3 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + 172CB92016C5642400D8B2C3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; + 172CB92216C565F900D8B2C3 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/IDNRandomGenerator.xib; sourceTree = ""; }; + 17335EF316C56C0A00F3CC0A /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ru.lproj/IDNRandomGenerator.xib; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 170B07FE169A0EB9000DBF49 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 170B0806169A0EB9000DBF49 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 170B07F6169A0EB9000DBF49 = { + isa = PBXGroup; + children = ( + 170B080B169A0EB9000DBF49 /* IDNA */, + 170B0804169A0EB9000DBF49 /* Frameworks */, + 170B0802169A0EB9000DBF49 /* Products */, + ); + sourceTree = ""; + }; + 170B0802169A0EB9000DBF49 /* Products */ = { + isa = PBXGroup; + children = ( + 170B0801169A0EB9000DBF49 /* IDNA.app */, + ); + name = Products; + sourceTree = ""; + }; + 170B0804169A0EB9000DBF49 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 170B0805169A0EB9000DBF49 /* Cocoa.framework */, + 170B0807169A0EB9000DBF49 /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + 170B0807169A0EB9000DBF49 /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 170B0808169A0EB9000DBF49 /* AppKit.framework */, + 170B0809169A0EB9000DBF49 /* CoreData.framework */, + 170B080A169A0EB9000DBF49 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 170B080B169A0EB9000DBF49 /* IDNA */ = { + isa = PBXGroup; + children = ( + 172CB91F16C5642000D8B2C3 /* Localizable.strings */, + 170B0826169A1273000DBF49 /* IDNCell.h */, + 170B0827169A1273000DBF49 /* IDNCell.m */, + 170B0829169A1700000DBF49 /* IDNPopulation.h */, + 170B082A169A1700000DBF49 /* IDNPopulation.m */, + 170B0817169A0EB9000DBF49 /* IDNAppDelegate.h */, + 170B0818169A0EB9000DBF49 /* IDNAppDelegate.m */, + 170B081A169A0EB9000DBF49 /* MainMenu.xib */, + 172CB91316C54E3200D8B2C3 /* IDNRandomGenerator.h */, + 172CB91416C54E3200D8B2C3 /* IDNRandomGenerator.m */, + 172CB92316C565F900D8B2C3 /* IDNRandomGenerator.xib */, + 170B080C169A0EB9000DBF49 /* Supporting Files */, + ); + path = IDNA; + sourceTree = ""; + }; + 170B080C169A0EB9000DBF49 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 170B080D169A0EB9000DBF49 /* IDNA-Info.plist */, + 170B080E169A0EB9000DBF49 /* InfoPlist.strings */, + 170B0811169A0EB9000DBF49 /* main.m */, + 170B0813169A0EB9000DBF49 /* IDNA-Prefix.pch */, + 170B0814169A0EB9000DBF49 /* Credits.rtf */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 170B0800169A0EB9000DBF49 /* IDNA */ = { + isa = PBXNativeTarget; + buildConfigurationList = 170B081F169A0EB9000DBF49 /* Build configuration list for PBXNativeTarget "IDNA" */; + buildPhases = ( + 170B07FD169A0EB9000DBF49 /* Sources */, + 170B07FE169A0EB9000DBF49 /* Frameworks */, + 170B07FF169A0EB9000DBF49 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = IDNA; + productName = IDNA; + productReference = 170B0801169A0EB9000DBF49 /* IDNA.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 170B07F8169A0EB9000DBF49 /* Project object */ = { + isa = PBXProject; + attributes = { + CLASSPREFIX = IDN; + LastUpgradeCheck = 0450; + ORGANIZATIONNAME = "Dmitriy Zhukov"; + }; + buildConfigurationList = 170B07FB169A0EB9000DBF49 /* Build configuration list for PBXProject "IDNA" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ru, + ); + mainGroup = 170B07F6169A0EB9000DBF49; + productRefGroup = 170B0802169A0EB9000DBF49 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 170B0800169A0EB9000DBF49 /* IDNA */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 170B07FF169A0EB9000DBF49 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 170B0810169A0EB9000DBF49 /* InfoPlist.strings in Resources */, + 170B0816169A0EB9000DBF49 /* Credits.rtf in Resources */, + 170B081C169A0EB9000DBF49 /* MainMenu.xib in Resources */, + 172CB92116C565F900D8B2C3 /* IDNRandomGenerator.xib in Resources */, + 172CB91D16C5642000D8B2C3 /* Localizable.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 170B07FD169A0EB9000DBF49 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 170B0812169A0EB9000DBF49 /* main.m in Sources */, + 170B0819169A0EB9000DBF49 /* IDNAppDelegate.m in Sources */, + 170B0828169A1273000DBF49 /* IDNCell.m in Sources */, + 170B082B169A1700000DBF49 /* IDNPopulation.m in Sources */, + 172CB91616C54E3200D8B2C3 /* IDNRandomGenerator.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 170B080E169A0EB9000DBF49 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 170B080F169A0EB9000DBF49 /* en */, + 172CB91916C563C900D8B2C3 /* ru */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 170B0814169A0EB9000DBF49 /* Credits.rtf */ = { + isa = PBXVariantGroup; + children = ( + 170B0815169A0EB9000DBF49 /* en */, + 172CB91A16C563C900D8B2C3 /* ru */, + ); + name = Credits.rtf; + sourceTree = ""; + }; + 170B081A169A0EB9000DBF49 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 170B081B169A0EB9000DBF49 /* en */, + 172CB91816C563C900D8B2C3 /* ru */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; + 172CB91F16C5642000D8B2C3 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + 172CB91E16C5642000D8B2C3 /* en */, + 172CB92016C5642400D8B2C3 /* ru */, + ); + name = Localizable.strings; + sourceTree = ""; + }; + 172CB92316C565F900D8B2C3 /* IDNRandomGenerator.xib */ = { + isa = PBXVariantGroup; + children = ( + 172CB92216C565F900D8B2C3 /* en */, + 17335EF316C56C0A00F3CC0A /* ru */, + ); + name = IDNRandomGenerator.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 170B081D169A0EB9000DBF49 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.8; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 170B081E169A0EB9000DBF49 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.8; + SDKROOT = macosx; + }; + name = Release; + }; + 170B0820169A0EB9000DBF49 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "IDNA/IDNA-Prefix.pch"; + INFOPLIST_FILE = "IDNA/IDNA-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.8; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 170B0821169A0EB9000DBF49 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "IDNA/IDNA-Prefix.pch"; + INFOPLIST_FILE = "IDNA/IDNA-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.8; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 170B07FB169A0EB9000DBF49 /* Build configuration list for PBXProject "IDNA" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 170B081D169A0EB9000DBF49 /* Debug */, + 170B081E169A0EB9000DBF49 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 170B081F169A0EB9000DBF49 /* Build configuration list for PBXNativeTarget "IDNA" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 170B0820169A0EB9000DBF49 /* Debug */, + 170B0821169A0EB9000DBF49 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 170B07F8169A0EB9000DBF49 /* Project object */; +} diff --git a/IDNA/IDNA.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/IDNA/IDNA.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..3f20b0e --- /dev/null +++ b/IDNA/IDNA.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/IDNA/IDNA.xcodeproj/project.xcworkspace/xcuserdata/jdmbox.xcuserdatad/UserInterfaceState.xcuserstate b/IDNA/IDNA.xcodeproj/project.xcworkspace/xcuserdata/jdmbox.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..c5ba21f7e88ccec2957c59e5dc66992741df1497 GIT binary patch literal 32499 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 F{{tttgBJh* literal 0 HcmV?d00001 diff --git a/IDNA/IDNA.xcodeproj/xcuserdata/jdmbox.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/IDNA/IDNA.xcodeproj/xcuserdata/jdmbox.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist new file mode 100644 index 0000000..05301bc --- /dev/null +++ b/IDNA/IDNA.xcodeproj/xcuserdata/jdmbox.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -0,0 +1,5 @@ + + + diff --git a/IDNA/IDNA.xcodeproj/xcuserdata/jdmbox.xcuserdatad/xcschemes/IDNA.xcscheme b/IDNA/IDNA.xcodeproj/xcuserdata/jdmbox.xcuserdatad/xcschemes/IDNA.xcscheme new file mode 100644 index 0000000..d6fa01d --- /dev/null +++ b/IDNA/IDNA.xcodeproj/xcuserdata/jdmbox.xcuserdatad/xcschemes/IDNA.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IDNA/IDNA.xcodeproj/xcuserdata/jdmbox.xcuserdatad/xcschemes/xcschememanagement.plist b/IDNA/IDNA.xcodeproj/xcuserdata/jdmbox.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..73c6e48 --- /dev/null +++ b/IDNA/IDNA.xcodeproj/xcuserdata/jdmbox.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + IDNA.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 170B0800169A0EB9000DBF49 + + primary + + + + + diff --git a/IDNA/IDNA/.DS_Store b/IDNA/IDNA/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1580155885086cc0ed7f24a3ecdbec1507cb133e GIT binary patch literal 12292 zcmeI1%Wl&^6o$_vr8ojakN{eYcpEdgL>a99=eu?|og+t`M&iMC3LIrZv67^yHz458&1x1~F5 z!`MVyEhnMnBur#sRwzP6ht5{+BpTXs%LJG}o`77tTeL$VRVhfX-`yZ`F(x0U$Eb6M zs-Sm_zdP)AjsF+78~FWrVd0x76lX5YUbadl>+05~A9~TS84W_O|GeFahHc;5ah=`^ z)sLNc&~G|DHL~W!9gL{{Mid3;ZyE1R--|o1%9YWmR$rR8YqiDkygjPd7v}Aydn@B{ z$+Al2Pu8tF)%#C3oOk2*9};!KB+OfbuIbN{_9J?^^xw97VGxD87?Zl|v`Q^{Mi1yN zdLg~R7DpAR0`jR(vE1xP!TJitoKzkjqMcT+VS8i;dY=x|4BOP1R*Q8g(x}Um*j+?y zK^>s(l0z|UHK+f6O8x$H{KCtOzGUJ*RFQ*x#KMo?Dl##Odl|(M-!*XU(f}FC?0kHZ zH)V!U@#m@3nb_)9{+zm%Z<_qp5i=wYG56^Sat%>?>O3OY+*y#k%6~IY=6uxkPS11u z56|ZSeB9}4C*-wH&ozr&9Qa9!nYijYr+qDCIe_2f6>#>C^l}Z4@$%Bjzj>rH>0};h zkmAAwE;xar&c7np|Bp`I|G(grIDIB?z6pq#R=d?ijz_ zq>DVRmgBIKKMc{g%~-?OL|crYocTt84y$5w!vvTB6JP>NfC(@GCcp%k025#WOn?b6 L0Vco%&MSdmtzAjy literal 0 HcmV?d00001 diff --git a/IDNA/IDNA/IDNA-Info.plist b/IDNA/IDNA/IDNA-Info.plist new file mode 100644 index 0000000..6c60bd9 --- /dev/null +++ b/IDNA/IDNA/IDNA-Info.plist @@ -0,0 +1,34 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + ru.DvaZhuka.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright © 2013 Dmitriy Zhukov. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/IDNA/IDNA/IDNA-Prefix.pch b/IDNA/IDNA/IDNA-Prefix.pch new file mode 100644 index 0000000..53fc94c --- /dev/null +++ b/IDNA/IDNA/IDNA-Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'IDNA' target in the 'IDNA' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/IDNA/IDNA/IDNAppDelegate.h b/IDNA/IDNA/IDNAppDelegate.h new file mode 100644 index 0000000..b4ae79d --- /dev/null +++ b/IDNA/IDNA/IDNAppDelegate.h @@ -0,0 +1,54 @@ +// +// IDNAppDelegate.h +// IDNA +// +// Created by Dmitriy Zhukov on 06.01.13. +// Copyright (c) 2013 Dmitriy Zhukov. All rights reserved. +// + +#import +#import "IDNRandomGenerator.h" +@class IDNCell; +@class IDNPopulation; + +extern NSString *const IDNPopulationSizePref; +extern NSString *const IDNDNALengthPref; +extern NSString *const IDNMutationPref; + + +@interface IDNAppDelegate : NSObject + +@property (assign) IBOutlet NSWindow *window; + +@property NSInteger populationSize; +@property NSInteger DNALength; +@property NSInteger mutationRate; +@property NSInteger generationCount; +@property NSInteger distanceToTargetDNA; +@property NSInteger progress; +@property IDNRandomGenerator* randomGenerator; + +@property IDNCell* goalDNA; +@property (weak) IBOutlet NSTextField *goalDNAField; + +@property IDNPopulation* workingPopulation; + +@property BOOL interfaceStatement; +@property BOOL startStatement; +@property BOOL pauseStatement; +@property BOOL pauseEvolutionFlag; +@property BOOL stopEvolutionFlag; +@property BOOL randomFlag; +@property BOOL openSaveDesible; + + +- (IBAction)loadDNAfromFile:(id)sender; +- (IBAction)saveData:(id)sender; +- (IBAction)startEvolution:(id)sender; +- (IBAction)pauseEvolution:(id)sender; +- (IBAction)stopEvolution:(id)sender; + + + + +@end diff --git a/IDNA/IDNA/IDNAppDelegate.m b/IDNA/IDNA/IDNAppDelegate.m new file mode 100644 index 0000000..1765630 --- /dev/null +++ b/IDNA/IDNA/IDNAppDelegate.m @@ -0,0 +1,401 @@ +// +// IDNAppDelegate.m +// IDNA +// +// Created by Dmitriy Zhukov on 06.01.13. +// Copyright (c) 2013 Dmitriy Zhukov. All rights reserved. +// + +#import "IDNAppDelegate.h" +#import "IDNCell.h" +#import "IDNPopulation.h" +#import "IDNRandomGenerator.h" + +@implementation IDNAppDelegate + +NSString *const IDNPopulationSizePref = @"IDNPopulationSizePref"; +NSString *const IDNDNALengthPref = @"IDNDNALengthPref"; +NSString *const IDNMutationPref = @"IDNMutationPref"; + + +#pragma mark +#pragma mark - userDefaultmethods + ++(void)initialize { + NSMutableDictionary *defaulValues = [NSMutableDictionary dictionary]; + [defaulValues setObject:[NSNumber numberWithInteger:1000]forKey:IDNPopulationSizePref]; + [defaulValues setObject:[NSNumber numberWithInteger:10] forKey:IDNDNALengthPref]; + [defaulValues setObject:[NSNumber numberWithInteger:10] forKey:IDNMutationPref]; + [[NSUserDefaults standardUserDefaults] registerDefaults:defaulValues]; +} + ++(void)setPreferenceIDNPopulationSize:(NSInteger)value { + [[NSUserDefaults standardUserDefaults] setInteger:value forKey:IDNPopulationSizePref]; +} + ++(NSInteger)preferenceIDNPopulationSize { + return [[NSUserDefaults standardUserDefaults] integerForKey:IDNPopulationSizePref]; +} + ++(void)setPreferenceIDNDNALength:(NSInteger)value { + [[NSUserDefaults standardUserDefaults] setInteger:value forKey:IDNDNALengthPref]; +} ++(NSInteger)preferenceIDNDNALength { + return [[NSUserDefaults standardUserDefaults] integerForKey:IDNDNALengthPref]; +} + ++(void)setPreferenceIDNMutationRate:(NSInteger)value { + [[NSUserDefaults standardUserDefaults] setInteger:value forKey:IDNMutationPref]; +} ++(NSInteger)preferenceIDNMutationRate { + return [[NSUserDefaults standardUserDefaults] integerForKey:IDNMutationPref]; +} + + +#pragma mark +#pragma mark - init dealloc + +-(id)init { + self = [super init]; + if (self) { + self.populationSize = [IDNAppDelegate preferenceIDNPopulationSize]; + self.DNALength = [IDNAppDelegate preferenceIDNDNALength]; + self.mutationRate = [IDNAppDelegate preferenceIDNMutationRate]; + self.generationCount=0; + self.progress=0; + self.distanceToTargetDNA=0; + self.interfaceStatement = true; + self.startStatement = true; + self.stopEvolutionFlag = true; + self.pauseEvolutionFlag = true; + self.pauseStatement = false; + self.randomFlag = false; + self.openSaveDesible = true; + + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc addObserver:self selector:@selector(handleRandomNumberChange:) name:IDNRandomNumberNotification object:nil]; + + } + return self; +} + +-(void)dealloc { + [self removeObserver:self forKeyPath:@"populationSize"]; + [self removeObserver:self forKeyPath:@"DNALength"]; + [self removeObserver:self forKeyPath:@"mutationRate"]; + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark +#pragma mark - load params + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification +{ + // Insert code here to initialize your application + self.workingPopulation = [[IDNPopulation alloc] init]; //возможно исключить + self.goalDNA = [[IDNCell alloc]init]; + [self.goalDNA fillDNAArrayWithCapacity:self.DNALength]; + [self.goalDNAField setStringValue:[self.goalDNA.DNA componentsJoinedByString:@""]]; + + [self addObserver:self forKeyPath:@"populationSize" options:NSKeyValueObservingOptionOld context:@"populationSizeContext"]; + + [self addObserver:self forKeyPath:@"DNALength" options:NSKeyValueObservingOptionOld context:@"DNALengthContext"]; + + [self addObserver:self forKeyPath:@"mutationRate" options:NSKeyValueObservingOptionOld context:@"mutationRateContext"]; + + + +} + +#pragma mark +#pragma mark - observe method + +-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + if(context == @"populationSizeContext") { + [IDNAppDelegate setPreferenceIDNPopulationSize:self.populationSize]; + } + else if(context == @"DNALengthContext") { + [IDNAppDelegate setPreferenceIDNDNALength:self.DNALength]; + [self.goalDNA fillDNAArrayWithCapacity:self.DNALength]; + [self.goalDNAField setStringValue:[self.goalDNA.DNA componentsJoinedByString:@""]]; + } + else if(context == @"mutationRateContext") { + [IDNAppDelegate setPreferenceIDNMutationRate:self.mutationRate]; + } + else { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + return; + } + + +} + +#pragma mark +#pragma mark - pause/stop/run + +- (IBAction)startEvolution:(id)sender { + self.interfaceStatement = false; + self.startStatement = false; + self.pauseStatement = true; + self.stopEvolutionFlag = false; + self.pauseEvolutionFlag = false; + if ([self.workingPopulation.population count]==0) { + [self showRandomPanel]; + // [self.workingPopulation createPopulationWithCount:_populationSize andDNALength:_DNALength]; + } + if (self.randomFlag) { + [self performSelectorInBackground:@selector(evolution) withObject:nil];} +} + +- (IBAction)pauseEvolution:(id)sender { + self.pauseEvolutionFlag = true; + self.startStatement = true; + self.pauseStatement = false; + +} + +- (IBAction)stopEvolution:(id)sender { + self.stopEvolutionFlag = true; +} + + + +#pragma mark +#pragma mark - upgrade/reset interface + +- (void)resetInterface { + self.stopEvolutionFlag = true; + self.pauseEvolutionFlag = true; + self.interfaceStatement = true; + self.startStatement = true; + self.pauseStatement = false; + self.randomFlag = false; + IDNPopulation *newPopulation = [[IDNPopulation alloc]init]; + self.workingPopulation = newPopulation; + self.generationCount = 0; + self.distanceToTargetDNA = 0; + self.progress = 0; + +} + +- (void)upgradeInterface { + self.generationCount = self.workingPopulation.generationNumber; + self.distanceToTargetDNA = self.workingPopulation.bestDNADistanseInPopulation; + self.progress = self.workingPopulation.progressToTarget; +} + +#pragma mark +#pragma mark - Evolution + +- (void) evolution { + for (;;) { + if (self.pauseEvolutionFlag) { + break; + } else if (self.stopEvolutionFlag){ + [self performSelectorOnMainThread:@selector(resetInterface) withObject:nil waitUntilDone:YES]; + break; + } + else { + [self.workingPopulation sortPopulationByHummingDistanceTo:self.goalDNA]; //первый этап + if (self.workingPopulation.bestDNADistanseInPopulation == 0) {//Если присутствует идеальное днк - прекращаем эволюцию. + + [self performSelectorOnMainThread:@selector(upgradeInterface) withObject:nil waitUntilDone:YES]; + [self performSelectorOnMainThread:@selector(modalArlertCall) withObject:nil waitUntilDone:YES]; //Вызываем модальное окно. + [self performSelectorOnMainThread:@selector(resetInterface) withObject:nil waitUntilDone:YES]; //Сбрасываем интерфейс + + break; + } else { + + [self.workingPopulation crossingBestDNA];//Второй этап + [self.workingPopulation populationMutate: self.mutationRate];//Третий этап + [self performSelectorOnMainThread:@selector(upgradeInterface) withObject:nil waitUntilDone:YES]; + + } + } + } +} + +#pragma mark +#pragma mark - load/save method + +#pragma mark +#pragma mark - load/save method + +- (IBAction)loadDNAfromFile:(id)sender { + NSOpenPanel* newOpenPanel = [NSOpenPanel openPanel]; + [newOpenPanel setAllowedFileTypes:[NSArray arrayWithObject:@"txt"]]; + + [newOpenPanel setAllowsOtherFileTypes:NO]; + NSInteger result = [newOpenPanel runModal]; + + if (result == NSOKButton) + { + //Начало проверки намерений пользователя + NSInteger check = NSRunAlertPanel (NSLocalizedString(@"OPEN_HEADER_MSG", @""), NSLocalizedString(@"SURE_MSG",@""), NSLocalizedString(@"YES_MSG",""),NSLocalizedString(@"NO_MSG",""), nil); + if (check != 1) { + return; + } + + check = NSRunAlertPanel (NSLocalizedString(@"OPEN_HEADER_MSG", @""), NSLocalizedString(@"MAY_BE_NO_MSG",@""), NSLocalizedString(@"YES_MSG",""),NSLocalizedString(@"NO_MSG",""), nil); + if (check != 1) { + return; + } + + check = NSRunAlertPanel (NSLocalizedString(@"OPEN_HEADER_MSG", @""), NSLocalizedString(@"OK_BUT_MSG",@""), @"OK", @"", nil); + if (check != 1) { + return; + } + //Конец проверки намерений пользователя + + + NSString *selectedFile = [[newOpenPanel URL] path]; + NSError* error = nil; + + NSString*newGoalDnaString = [NSString stringWithContentsOfFile:selectedFile + encoding:NSUTF8StringEncoding + error:&error]; + + if (error != nil) { + [self modalArlertCantOpenFile:[error localizedDescription]]; + return; + } + + NSCharacterSet* checkingSet = [[NSCharacterSet characterSetWithCharactersInString:@"ATGC"]invertedSet]; + + if ([newGoalDnaString rangeOfCharacterFromSet:checkingSet].location != NSNotFound) + { + [self modalArlertCantOpenFile:NSLocalizedString(@"INCORRECT_DATA_MSG", "")]; + } else if (newGoalDnaString.length !=self.DNALength) { + + NSString *allertMessege = [NSString stringWithFormat:NSLocalizedString(@"INCORRECT_DNA_LONG_MSG", ""),newGoalDnaString.length]; + [self modalArlertCantOpenFile:allertMessege]; + } else { + + NSMutableArray* myArray = [[NSMutableArray alloc]initWithCapacity:newGoalDnaString.length]; + + for (int i=0; i < newGoalDnaString.length; i++) { + NSString *ichar = [NSString stringWithFormat:@"%C", [newGoalDnaString characterAtIndex:i]]; + [myArray addObject:ichar]; + } + IDNCell *newGoalDNA= [[IDNCell alloc]init]; + newGoalDNA.arrayCapacity = [myArray count]; + newGoalDNA.DNA = myArray; + self.goalDNA = newGoalDNA; + [self.goalDNAField setStringValue:[self.goalDNA.DNA componentsJoinedByString:@""]]; + } + } +} + +- (IBAction)saveData:(id)sender { + NSSavePanel *newSavePanel = [NSSavePanel savePanel]; + [newSavePanel setAllowedFileTypes:[NSArray arrayWithObject:@"txt"]]; + [newSavePanel setAllowsOtherFileTypes:NO]; + NSInteger result = [newSavePanel runModal]; + + if (result == NSOKButton) + { + + //Начало проверки намерений пользователя + NSInteger check = NSRunAlertPanel (NSLocalizedString(@"SAVE_HEADER_MSG", @""), NSLocalizedString(@"SURE_MSG",@""), NSLocalizedString(@"YES_MSG",""),NSLocalizedString(@"NO_MSG",""), nil); + if (check != 1) { + return; + } + + check = NSRunAlertPanel (NSLocalizedString(@"SAVE_HEADER_MSG", @""), NSLocalizedString(@"MAY_BE_NO_MSG",@""), NSLocalizedString(@"YES_MSG",""),NSLocalizedString(@"NO_MSG",""), nil); + if (check != 1) { + return; + } + + check = NSRunAlertPanel (NSLocalizedString(@"SAVE_HEADER_MSG", @""), NSLocalizedString(@"OK_BUT_MSG",@""), NSLocalizedString(@"YES_MSG",""), @"", nil); + if (check != 1) { + return; + } + + //Конец проверки намерений пользователя + + NSString *selectedFile = [[newSavePanel URL] path]; + NSString *arrayComplete = [self.goalDNA.DNA componentsJoinedByString:@""]; + + NSError* error =nil; + + [arrayComplete writeToFile:selectedFile + atomically:NO + encoding:NSUTF8StringEncoding + error:&error]; + if (error != nil) { + [self modalArlertCantSaveFile:[error localizedDescription]]; + } + } +} + +#pragma mark +#pragma mark - modalAlert + +- (void)modalArlertCall { + NSAlert *alertFindDNA = [NSAlert alertWithMessageText:NSLocalizedString(@"FIND_MSG", "") defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:NSLocalizedString(@"GENERATIN_LEFT_MSG", ""), self.workingPopulation.generationNumber]; + [alertFindDNA runModal]; +} + +- (void)modalArlertCantSaveFile:(NSString*)Problem { + NSAlert *alertFindDNA = [NSAlert alertWithMessageText:NSLocalizedString(@"CANT_SAVE_MSG", "") defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:@"%@", Problem]; + [alertFindDNA runModal]; +} + +- (void)modalArlertCantOpenFile:(NSString*)Problem { + NSAlert *alertFindDNA = [NSAlert alertWithMessageText:NSLocalizedString(@"CANT_OPEN_MSG", "") defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:@"%@", Problem]; + [alertFindDNA runModal]; +} + + +#pragma mark +#pragma mark - random + +-(void)showRandomPanel { + self.randomGenerator = [[IDNRandomGenerator alloc]init]; + [self.randomGenerator showWindow:self]; + self.pauseStatement = false; +} + +-(void) createPopulationIn { + [self.workingPopulation createPopulationWithCount:self.populationSize andDNALength:self.DNALength]; +} + +-(void)handleRandomNumberChange:(NSNotification *) notif { + unsigned int temp = [[[notif userInfo] objectForKey:@"randomNumber"]intValue]; + + [self createPopulationIn]; + [self.workingPopulation setPopulationRandomNumber:temp]; + + + [self performSelectorInBackground:@selector(evolution) withObject:nil]; + + self.randomFlag = true; + self.pauseStatement = true; + + //NSLog(@"%i", temp); +} + +#pragma mark +#pragma mark - window closed + +- (BOOL) windowShouldClose:(id)sender +{ + NSInteger check = NSRunAlertPanel(NSLocalizedString(@"WINDOW_CLOSE_MSG", @""), NSLocalizedString(@"SURE_MSG",@""), NSLocalizedString(@"YES_MSG",""), NSLocalizedString(@"NO_MSG",""), nil); + + if (check == 1) { + if ([self.randomGenerator window]) { + [[self.randomGenerator window] close]; + } + self.openSaveDesible = false; + return YES; + } + return NO; +} + +- (IBAction)resetPref:(id)sender { + [[NSUserDefaults standardUserDefaults] removeObjectForKey:IDNPopulationSizePref]; + [[NSUserDefaults standardUserDefaults] removeObjectForKey:IDNDNALengthPref]; + [[NSUserDefaults standardUserDefaults] removeObjectForKey:IDNMutationPref]; +} + +@end diff --git a/IDNA/IDNA/IDNCell.h b/IDNA/IDNA/IDNCell.h new file mode 100644 index 0000000..7f27226 --- /dev/null +++ b/IDNA/IDNA/IDNCell.h @@ -0,0 +1,23 @@ +// +// IDNCell.h +// IDNA +// +// Created by Dmitriy Zhukov on 07.01.13. +// Copyright (c) 2013 Dmitriy Zhukov. All rights reserved. +// + +#import + +@interface IDNCell : NSObject + +@property NSMutableArray *DNA; +@property NSString *rangeOfDNACellValues; +@property NSInteger arrayCapacity; +@property NSInteger unitDistanceToTargetDNA; + +- (id)initWithRandom:(unsigned int)r; +- (void) fillDNAArrayWithCapacity: (NSInteger)fCapacity; +- (NSInteger) hammingDistance: (IDNCell*) anotherDNA; +- (void) mutate: (NSInteger) procentageOfMutations; + +@end diff --git a/IDNA/IDNA/IDNCell.m b/IDNA/IDNA/IDNCell.m new file mode 100644 index 0000000..b7e4ece --- /dev/null +++ b/IDNA/IDNA/IDNCell.m @@ -0,0 +1,78 @@ +// +// IDNCell.m +// IDNA +// +// Created by Dmitriy Zhukov on 07.01.13. +// Copyright (c) 2013 Dmitriy Zhukov. All rights reserved. +// + +#import "IDNCell.h" + +@implementation IDNCell + +- (id)init { + self= [super init]; + if (self) { + self.rangeOfDNACellValues = @"ATGC"; + self.unitDistanceToTargetDNA = 0; + self.arrayCapacity=0; + self.DNA = [[NSMutableArray alloc]init]; + } + return self; +} + +- (id)initWithRandom:(unsigned int)r { + self=[self init]; + if (self) { srandom(r); } + return self; +} + +- (void) fillDNAArrayWithCapacity: (NSInteger)fCapacity { + + srandom (random); + self.arrayCapacity = fCapacity; + NSMutableArray* setDNA = [NSMutableArray arrayWithCapacity:self.arrayCapacity]; + + for (NSInteger i = 0 ; i < self.arrayCapacity; i++) { + [setDNA addObject:[NSString stringWithFormat:@"%C", [self.rangeOfDNACellValues characterAtIndex: arc4random() % [self.rangeOfDNACellValues length]]]]; + } + self.DNA = setDNA; +} + +- (NSInteger) hammingDistance: (IDNCell*) anotherDNA { + NSInteger count = 0; + for (NSInteger i = 0 ; i < self.arrayCapacity; i++) { + if ([[self.DNA objectAtIndex:i] isNotEqualTo:[anotherDNA.DNA objectAtIndex: i]]) { + count++; + } + } + return count; +} + +- (void)mutate: (NSInteger) procentageOfMutations { + + float a = (self.arrayCapacity*procentageOfMutations)/100.0; + NSInteger numberOfcells = ceil(a); + NSMutableIndexSet *indexSetDNA = [[NSMutableIndexSet alloc] init]; + + for (NSInteger i = 0; i < numberOfcells; i++) { + NSInteger indexGen = arc4random ()%self.arrayCapacity; + + if (![indexSetDNA containsIndex:indexGen]) { + [indexSetDNA addIndex:indexGen]; + + for(;;) { + NSString *changes =[NSString stringWithFormat:@"%C", [self.rangeOfDNACellValues characterAtIndex: arc4random() % [self.rangeOfDNACellValues length]]]; + + if (![[self.DNA objectAtIndex: indexGen] isEqualToString:changes]) { + [self.DNA replaceObjectAtIndex:indexGen withObject:changes]; + break; + } + } + + } else {i--;} + } +} + + +@end diff --git a/IDNA/IDNA/IDNPopulation.h b/IDNA/IDNA/IDNPopulation.h new file mode 100644 index 0000000..4e80d81 --- /dev/null +++ b/IDNA/IDNA/IDNPopulation.h @@ -0,0 +1,28 @@ +// +// IDNPopulation.h +// IDNA +// +// Created by Dmitriy Zhukov on 07.01.13. +// Copyright (c) 2013 Dmitriy Zhukov. All rights reserved. +// + +#import +@class IDNCell; + +@interface IDNPopulation : NSObject + +@property NSMutableArray* population; +@property NSInteger generationNumber; +@property NSInteger bestDNADistanseInPopulation; +@property NSInteger progressToTarget; +@property unsigned int populationRandomNumber; + +- (void)createPopulationWithCount:(NSInteger)aPopulation andDNALength:(NSInteger)aDNALenght; +- (void)sortPopulationByHummingDistanceTo:(IDNCell*)aGoalDNA; +- (void)populationMutate: (NSInteger)percentage; +- (void) crossingBestDNA; +- (IDNCell*)halfByHalfCrossing:(IDNCell*)firstCell with:(IDNCell*)secondCell; +- (IDNCell*)oneByOneCrossing:(IDNCell*)firstCell with:(IDNCell*)secondCell; +- (IDNCell*)partsCrossing:(IDNCell*)firstCell with:(IDNCell*)secondCell; + +@end diff --git a/IDNA/IDNA/IDNPopulation.m b/IDNA/IDNA/IDNPopulation.m new file mode 100644 index 0000000..7aa6348 --- /dev/null +++ b/IDNA/IDNA/IDNPopulation.m @@ -0,0 +1,171 @@ +// +// IDNPopulation.m +// IDNA +// +// Created by Dmitriy Zhukov on 07.01.13. +// Copyright (c) 2013 Dmitriy Zhukov. All rights reserved. +// + +#import "IDNPopulation.h" +#import "IDNCell.h" + +@implementation IDNPopulation + +- (id)init { + self= [super init]; + if (self) { + self.population = [[NSMutableArray alloc]init]; + self.generationNumber = 0; + self.bestDNADistanseInPopulation = 0; + self.progressToTarget = 0; + self.populationRandomNumber = 0; + } + return self; +} + +- (void)createPopulationWithCount:(NSInteger)aPopulation andDNALength:(NSInteger)aDNALenght { + + for (int i = 0; i < aPopulation; i++) { + IDNCell* unicDNA = [[IDNCell alloc]initWithRandom:self.populationRandomNumber]; + [unicDNA fillDNAArrayWithCapacity:aDNALenght]; + [self.population addObject:unicDNA]; + } + +} + +- (void)sortPopulationByHummingDistanceTo:(IDNCell*)aGoalDNA { + + //проставляем хамминг дистанс + for (IDNCell *uDNA in self.population) { + uDNA.unitDistanceToTargetDNA = [aGoalDNA hammingDistance:uDNA]; + } + + //Сортируем массив по хамминг дистанс + self.population = [NSMutableArray arrayWithArray: [self.population sortedArrayUsingComparator: ^(IDNCell* obj1, IDNCell* obj2) { + + NSInteger a = [obj1 unitDistanceToTargetDNA]; + NSInteger b = [obj2 unitDistanceToTargetDNA]; + + if (a > b) { + return (NSComparisonResult)NSOrderedDescending; + } + if (b < a) { + return (NSComparisonResult)NSOrderedAscending; + } + return (NSComparisonResult)NSOrderedSame; + }]]; + + //Выбираем лучшее значение + self.bestDNADistanseInPopulation = [[self.population objectAtIndex:0] unitDistanceToTargetDNA]; + + float a = 100.0-((([[self.population objectAtIndex:0] unitDistanceToTargetDNA]*1.0)/([aGoalDNA.DNA count]*1.0))*100); + self.progressToTarget = ceil(a); +} + +- (void) crossingBestDNA { + //Выборка 50% массива. + + srandom (self.populationRandomNumber); //установка настроек рандома + + float a = ([self.population count]*50.0)/100.0; + NSInteger numberOfBestCells = ceil(a); //первые 50 % ячеек + NSInteger numberOfLastCells = ([self.population count]-numberOfBestCells); //это те ячейки которые нужно заменить + + //Создаем массив с изменениями днк для худших особей + NSMutableArray *crossDNA = [[NSMutableArray alloc]initWithCapacity:numberOfLastCells]; + + for (int i = 0 ; i < numberOfLastCells; i++) { //прогоняем алгоритм столько раз, сколько ячеек нужно заменить + + //Генерируем два случайных неодинаковых индекса в интервале от 0 до numberOfBestCells + + NSInteger indexM = arc4random ()%numberOfBestCells; + NSInteger indexF; + + for(;;){ + indexF = arc4random ()%numberOfBestCells; + if (indexF != indexM) { + break; + }} + + //Выбор одного из трех алгоритмoв скрещивания + switch (arc4random ()%3) { + + case 0: + [crossDNA addObject:[self halfByHalfCrossing:[_population objectAtIndex:indexM]with:[_population objectAtIndex:indexF]]]; + break; + case 1: + [crossDNA addObject:[self oneByOneCrossing:[_population objectAtIndex:indexM]with:[_population objectAtIndex:indexF]]]; + break; + case 2: + [crossDNA addObject:[self partsCrossing:[_population objectAtIndex:indexM]with:[_population objectAtIndex:indexF]]]; + break; + } + } + for(NSInteger i = numberOfBestCells; i < [_population count]; i++) { + NSInteger crossIndex = i-numberOfBestCells; + [self.population replaceObjectAtIndex:i withObject:[crossDNA objectAtIndex:crossIndex]]; + } +} + +- (IDNCell*)halfByHalfCrossing:(IDNCell*)firstCell with:(IDNCell*)secondCell { + + NSInteger DNALengthInPopulation = [[firstCell valueForKey:@"DNA"]count]; + IDNCell* unDNA = [[IDNCell alloc]initWithRandom:self.populationRandomNumber]; + + float a = DNALengthInPopulation/2.0; + NSInteger n1 = ceil(a); + NSInteger n2 = (DNALengthInPopulation-n1); + + for (int i = 0 ; i < n1; i++) { + [unDNA.DNA addObject:[firstCell.DNA objectAtIndex:i]]; + } + for (int i = 0 ; i < n2; i++) { + [unDNA.DNA addObject:[secondCell.DNA objectAtIndex:i]]; + } + return unDNA; +} + +- (IDNCell*)oneByOneCrossing:(IDNCell*)firstCell with:(IDNCell*)secondCell { + NSInteger DNALengthInPopulation = [[firstCell valueForKey:@"DNA"]count]; + IDNCell* unDNA = [[IDNCell alloc]initWithRandom:self.populationRandomNumber]; + for (int i = 0 ; i < DNALengthInPopulation; i++) { + if (i & 1) { + [unDNA.DNA addObject:[secondCell.DNA objectAtIndex:i]]; + } else { + [unDNA.DNA addObject:[firstCell.DNA objectAtIndex:i]]; + } + } + return unDNA; +} + +- (IDNCell*)partsCrossing:(IDNCell*)firstCell with:(IDNCell*)secondCell { + + NSInteger DNALengthInPopulation = [[firstCell valueForKey:@"DNA"]count]; + IDNCell* unDNA = [[IDNCell alloc]initWithRandom:self.populationRandomNumber]; + + float a = DNALengthInPopulation*0.4; + NSInteger n13 = ceil(a); + float b = n13/2.0; + NSInteger n1 = ceil(b); + NSInteger n2 = DNALengthInPopulation - n13; + + for (int i = 0 ; i < n1; i++) { + [unDNA.DNA addObject:[firstCell.DNA objectAtIndex:i]]; + } + for (int i = 0 ; i < n2; i++) { + [unDNA.DNA addObject:[secondCell.DNA objectAtIndex:i]]; + } + for (NSInteger i = n1+n2; i < DNALengthInPopulation; i++) { + [unDNA.DNA addObject:[firstCell.DNA objectAtIndex:i]]; + } + return unDNA; +} + +- (void) populationMutate: (NSInteger)percentage { + for (IDNCell *cell in _population) { + [cell mutate:percentage]; + } + self.generationNumber++; +} + +@end \ No newline at end of file diff --git a/IDNA/IDNA/IDNRandomGenerator.h b/IDNA/IDNA/IDNRandomGenerator.h new file mode 100644 index 0000000..851c00a --- /dev/null +++ b/IDNA/IDNA/IDNRandomGenerator.h @@ -0,0 +1,19 @@ +// +// IDNRandomGenerator.h +// IDNA +// +// Created by Dmitriy Zhukov on 08.02.13. +// Copyright (c) 2013 Dmitriy Zhukov. All rights reserved. +// + +#import +extern NSString *const IDNRandomNumberNotification; + +@interface IDNRandomGenerator : NSWindowController + +@property NSInteger numberOfMouseMove; +@property unsigned int randomNumber; + + + +@end diff --git a/IDNA/IDNA/IDNRandomGenerator.m b/IDNA/IDNA/IDNRandomGenerator.m new file mode 100644 index 0000000..7e58dc0 --- /dev/null +++ b/IDNA/IDNA/IDNRandomGenerator.m @@ -0,0 +1,63 @@ +// +// IDNRandomGenerator.m +// IDNA +// +// Created by Dmitriy Zhukov on 08.02.13. +// Copyright (c) 2013 Dmitriy Zhukov. All rights reserved. +// + +#import "IDNRandomGenerator.h" + +NSString *const IDNRandomNumberNotification = @"IDNRandomNumberNotification"; + +@interface IDNRandomGenerator () + +@end + +@implementation IDNRandomGenerator + + +-(id)init { + self = [super initWithWindowNibName:@"IDNRandomGenerator"]; + return self; +} + +- (id)initWithWindow:(NSWindow *)window +{ + self = [super initWithWindow:window]; + if (self) { + // Initialization code here. + self.numberOfMouseMove = 0; + self.randomNumber = 0; + } + + return self; +} + + +- (void)windowDidLoad +{ + [super windowDidLoad]; + [[self window] makeFirstResponder: self]; + [[self window] setAcceptsMouseMovedEvents: YES]; + // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file. +} + + +- ( void ) mouseMoved :( NSEvent *) theEvent +{ + if (self.numberOfMouseMove < 200) { + + NSPoint locationPoint = [theEvent locationInWindow]; + self.randomNumber = self.randomNumber + ((locationPoint.x+locationPoint.y)/2); + self.numberOfMouseMove ++; + } else { + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + NSDictionary *d = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:self.randomNumber] forKey:@"randomNumber"]; + [nc postNotificationName:IDNRandomNumberNotification object:self userInfo:d]; + [[self window] close]; + } +} + + +@end diff --git a/IDNA/IDNA/en.lproj/.DS_Store b/IDNA/IDNA/en.lproj/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1681f1bf55b3322078e02e19c074302b8f4ce08e GIT binary patch literal 6148 zcmeHK+e*Vg5ItKfRO&-T5Fhu^r-FYFYE%kVr2c@W7ZG9tNekjrKEsdl1N<93v%8cg zwfH7fW?=U0PUg%eXG1m%zzmktbD#&HLlYAEFSurvj9xIdV5H!? z@XD%5qt-{G))8xEn3Hjbl=&sueb*KoWq3kauVBWF3dgu1d%}5z|3*yMoBdMdvr**` zBQj;ik$aNmmirei-q*C?P)!w31yq3@QhB$oIk01*3qKNB8Mq z0EA1Umu8xJRYt))NE#U!ut lxT3J*wqoYWR(wi##<-OZF$!3DWQ3+a0!{{PRDnNL;2Y$TUQYl3 literal 0 HcmV?d00001 diff --git a/IDNA/IDNA/en.lproj/Credits.rtf b/IDNA/IDNA/en.lproj/Credits.rtf new file mode 100644 index 0000000..46576ef --- /dev/null +++ b/IDNA/IDNA/en.lproj/Credits.rtf @@ -0,0 +1,29 @@ +{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw9840\paperh8400 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural + +\f0\b\fs24 \cf0 Engineering: +\b0 \ + Some people\ +\ + +\b Human Interface Design: +\b0 \ + Some other people\ +\ + +\b Testing: +\b0 \ + Hopefully not nobody\ +\ + +\b Documentation: +\b0 \ + Whoever\ +\ + +\b With special thanks to: +\b0 \ + Mom\ +} diff --git a/IDNA/IDNA/en.lproj/IDNRandomGenerator.xib b/IDNA/IDNA/en.lproj/IDNRandomGenerator.xib new file mode 100644 index 0000000..e19fc7e --- /dev/null +++ b/IDNA/IDNA/en.lproj/IDNRandomGenerator.xib @@ -0,0 +1,436 @@ + + + + 1080 + 12C60 + 3084 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 3084 + + + IBNSLayoutConstraint + NSCustomObject + NSProgressIndicator + NSTextField + NSTextFieldCell + NSUserDefaultsController + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + IDNRandomGenerator + + + FirstResponder + + + NSApplication + + + 1 + 2 + {{196, 240}, {480, 84}} + 544735232 + Random generator + NSWindow + + + + + 256 + + + + 268 + {{20, 23}, {440, 20}} + + + + _NS:9 + {250, 250} + 16397 + 200 + + + + 268 + {{17, 50}, {297, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Move the mouse to generate random numbers + + LucidaGrande + 12 + 16 + + _NS:1535 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + disabledControlTextColor + + 3 + MC4zMzMzMzMzMzMzAA + + + + NO + + + {480, 84} + + + + + {{0, 0}, {1920, 1178}} + {10000000000000, 10000000000000} + YES + + + YES + + + + + + + window + + + + 3 + + + + delegate + + + + 4 + + + + value: self.numberOfMouseMove + + + + + + value: self.numberOfMouseMove + value + self.numberOfMouseMove + 2 + + + 55 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 1 + + + + + + + + 2 + + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 17 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + + + + + 5 + + + + + + 14 + + + + + 17 + + + + + + 7 + 0 + + 0 + 1 + + 291 + + 1000 + + 3 + 9 + 1 + + + + 8 + 0 + + 0 + 1 + + 17 + + 1000 + + 3 + 9 + 1 + + + + + + 18 + + + + + 20 + + + + + 22 + + + + + 23 + + + + + 38 + + + + + 51 + + + + + 56 + + + + + 57 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{357, 418}, {480, 270}} + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 57 + + + + + IDNRandomGenerator + NSWindowController + + IBProjectSource + ./Classes/IDNRandomGenerator.h + + + + NSLayoutConstraint + NSObject + + IBProjectSource + ./Classes/NSLayoutConstraint.h + + + + + 0 + IBCocoaFramework + YES + 3 + YES + + diff --git a/IDNA/IDNA/en.lproj/InfoPlist.strings b/IDNA/IDNA/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/IDNA/IDNA/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/IDNA/IDNA/en.lproj/Localizable.strings b/IDNA/IDNA/en.lproj/Localizable.strings new file mode 100644 index 0000000..915030b --- /dev/null +++ b/IDNA/IDNA/en.lproj/Localizable.strings @@ -0,0 +1,21 @@ +/* + Localizable.strings + IDNA + + Created by Dmitriy Zhukov on 06.02.13. + Copyright (c) 2013 Dmitriy Zhukov. All rights reserved. + */ +"REMOVE_MSG" = "Find ideal DNA"; +"GENERATIN_LEFT_MSG" = "Generation left:%lu"; +"CANT_SAVE_MSG" = "Can't save file"; +"CANT_OPEN_MSG" = "Can't open file"; +"INCORRECT_DATA_MSG" = "Incorrect data format. Currectly like this: 'ATGCCGAATGTT'"; +"INCORRECT_DNA_LONG_MSG" = "Incorrect DNA long. Change it to %li"; +"SAVE_HEADER_MSG" = "Save data to file"; +"OPEN_HEADER_MSG" = "Open data from file"; +"SURE_MSG" = "Are you sure?"; +"MAY_BE_NO_MSG" = "May be no?"; +"OK_BUT_MSG" = "ОK, but we warned you..."; +"YES_MSG" = "YES"; +"NO_MSG" = "NO"; +"WINDOW_CLOSE_MSG" = "Close current window"; \ No newline at end of file diff --git a/IDNA/IDNA/en.lproj/MainMenu.xib b/IDNA/IDNA/en.lproj/MainMenu.xib new file mode 100644 index 0000000..41bcc60 --- /dev/null +++ b/IDNA/IDNA/en.lproj/MainMenu.xib @@ -0,0 +1,4938 @@ + + + + 1080 + 12C60 + 3084 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 3084 + + + IBNSLayoutConstraint + NSBox + NSButton + NSButtonCell + NSCustomObject + NSMenu + NSMenuItem + NSNumberFormatter + NSProgressIndicator + NSSlider + NSSliderCell + NSTextField + NSTextFieldCell + NSUserDefaultsController + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + + + IDNA + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + IDNA + + + + About IDNA + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + Reset preferences… + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide IDNA + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit IDNA + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + + + New + n + 1048576 + 2147483647 + + + + + + Open DNA… + o + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save DNA... + s + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Paste and Match Style + V + 1572864 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + Format + + + + Font + + 2147483647 + + + submenuAction: + + Font + + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + Kern + + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligatures + + 2147483647 + + + submenuAction: + + Ligatures + + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + Baseline + + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + Text + + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Writing Direction + + 2147483647 + + + submenuAction: + + Writing Direction + + + + YES + Paragraph + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + YES + Selection + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 2147483647 + + + submenuAction: + + Help + + + + IDNA Help + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + 15 + 2 + {{335, 390}, {515, 410}} + 1954021376 + IDNA + NSWindow + + + + + 256 + + + + 268 + {{18, 374}, {101, 17}} + + + YES + + 68157504 + 272630784 + Population size + + LucidaGrande + 13 + 1044 + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + NO + + + + 268 + {{19, 346}, {77, 17}} + + + YES + + 68157504 + 272630784 + DNA length + + + + + + NO + + + + 268 + {{17, 318}, {102, 17}} + + + YES + + 68157504 + 272630784 + Mutation rate % + + + + + + NO + + + + 268 + {{182, 372}, {308, 21}} + + + YES + + 67371264 + 0 + + + 10000 + 3 + 5000 + 0.0 + 0 + 0 + NO + NO + + NO + + + + 268 + {{182, 344}, {308, 21}} + + + YES + + -2080112384 + 0 + + + 100 + 1 + 50 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{182, 316}, {308, 21}} + + + YES + + -2080112384 + 0 + + + 100 + 0.0 + 50 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{198, 285}, {117, 22}} + + + YES + + 68157504 + 272630784 + Generation: + + LucidaGrande-Bold + 14 + 16 + + + + + + NO + + + + 268 + {{160, 265}, {209, 17}} + + + YES + + 68157504 + 272630784 + Best individual match %: + + + + + + NO + + + + 268 + {{20, 238}, {475, 20}} + + + 16392 + 100 + + + + 268 + {{367, 10}, {134, 32}} + + + YES + + 67108864 + 134217728 + Load goal DNA + + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{14, 10}, {132, 32}} + + + YES + + 67108864 + 134217728 + Start evolution + + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{146, 10}, {77, 32}} + + + YES + + 67108864 + 134217728 + Pause + + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{223, 10}, {68, 32}} + + + YES + + 67108864 + 134217728 + Stop + + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{126, 343}, {50, 22}} + + + _NS:9 + YES + + -1804599231 + 272630784 + + + + + + + + + + + -∞ + + +∞ + + # + # + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + _NS:9 + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + + + NO + + + + 12 + + + + 274 + + + + 268 + {{200, 150}, {65, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + Goal DNA + + _NS:1535 + + + + + NO + + + + 268 + {{18, 14}, {441, 133}} + + + _NS:9 + {250, 750} + YES + + -2074083327 + 272629760 + + + _NS:9 + + YES + + + + NO + + + {{1, 1}, {477, 172}} + + + _NS:11 + + + {{19, 48}, {479, 188}} + + + _NS:9 + {0, 0} + + 67108864 + 0 + + + LucidaGrande + 11 + 3100 + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 1 + 0 + 2 + NO + + + + 268 + {{126, 315}, {50, 22}} + + + _NS:9 + YES + + -1804599231 + 272630784 + + + + + + + + + -∞ + + +∞ + + # + # + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + _NS:9 + + YES + + + + NO + + + + 268 + {{126, 371}, {50, 22}} + + + _NS:9 + YES + + -1804599231 + 272630784 + + + + + + + + + -∞ + + +∞ + + # + # + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + _NS:9 + + YES + + + + NO + + + {515, 410} + + + + {{0, 0}, {1920, 1178}} + {10000000000000, 10000000000000} + YES + + + IDNAppDelegate + + + NSFontManager + + + YES + + + + + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 495 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + performClose: + + + + 193 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + paste: + + + + 226 + + + + cut: + + + + 228 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 373 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + pasteAsPlainText: + + + + 486 + + + + showHelp: + + + + 493 + + + + alignCenter: + + + + 518 + + + + pasteRuler: + + + + 519 + + + + toggleRuler: + + + + 520 + + + + alignRight: + + + + 521 + + + + copyRuler: + + + + 522 + + + + alignJustified: + + + + 523 + + + + alignLeft: + + + + 524 + + + + makeBaseWritingDirectionNatural: + + + + 525 + + + + makeBaseWritingDirectionLeftToRight: + + + + 526 + + + + makeBaseWritingDirectionRightToLeft: + + + + 527 + + + + makeTextWritingDirectionNatural: + + + + 528 + + + + makeTextWritingDirectionLeftToRight: + + + + 529 + + + + makeTextWritingDirectionRightToLeft: + + + + 530 + + + + enabled: self.openSaveDesible + + + + + + enabled: self.openSaveDesible + enabled + self.openSaveDesible + 2 + + + 778 + + + + enabled: self.openSaveDesible + + + + + + enabled: self.openSaveDesible + enabled + self.openSaveDesible + 2 + + + 781 + + + + delegate + + + + 782 + + + + addFontTrait: + + + + 421 + + + + addFontTrait: + + + + 422 + + + + modifyFont: + + + + 423 + + + + orderFrontFontPanel: + + + + 424 + + + + modifyFont: + + + + 425 + + + + window + + + + 532 + + + + goalDNAField + + + + 751 + + + + loadDNAfromFile: + + + + 752 + + + + saveData: + + + + 753 + + + + startEvolution: + + + + 756 + + + + pauseEvolution: + + + + 757 + + + + stopEvolution: + + + + 771 + + + + loadDNAfromFile: + + + + 772 + + + + resetPref: + + + + 792 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + 2 + + + 722 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + 2 + + + 726 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + 2 + + + 730 + + + + value: self.populationSize + + + + + + value: self.populationSize + value + self.populationSize + 2 + + + 673 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + 2 + + + 742 + + + + value: self.DNALength + + + + + + value: self.DNALength + value + self.DNALength + 2 + + + 680 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + 2 + + + 744 + + + + value: self.mutationRate + + + + + + value: self.mutationRate + value + self.mutationRate + 2 + + + 686 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + 2 + + + 746 + + + + displayPatternValue1: self.generationCount + + + + + + displayPatternValue1: self.generationCount + displayPatternValue1 + self.generationCount + + NSDisplayPattern + Generation: %{value1}@ + + 2 + + + 707 + + + + displayPatternValue1: self.progress + + + + + + displayPatternValue1: self.progress + displayPatternValue1 + self.progress + + NSDisplayPattern + Best individual match %: %{value1}@ + + 2 + + + 775 + + + + value: self.progress + + + + + + value: self.progress + value + self.progress + 2 + + + 710 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + 2 + + + 718 + + + + enabled: self.startStatement + + + + + + enabled: self.startStatement + enabled + self.startStatement + 2 + + + 758 + + + + enabled: self.pauseStatement + + + + + + enabled: self.pauseStatement + enabled + self.pauseStatement + 2 + + + 750 + + + + value: self.DNALength + + + + + + value: self.DNALength + value + self.DNALength + 2 + + + 677 + + + + editable: self.interfaceStatement + + + + + + editable: self.interfaceStatement + editable + self.interfaceStatement + 2 + + + 691 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + + 2 + + + 736 + + + + value: self.mutationRate + + + + + + value: self.mutationRate + value + self.mutationRate + 2 + + + 683 + + + + editable: self.interfaceStatement + + + + + + editable: self.interfaceStatement + editable + self.interfaceStatement + 2 + + + 694 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + + 2 + + + 739 + + + + value: self.populationSize + + + + + + value: self.populationSize + value + self.populationSize + 2 + + + 670 + + + + editable: self.interfaceStatement + + + + + + editable: self.interfaceStatement + editable + self.interfaceStatement + 2 + + + 688 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + + 2 + + + 733 + + + + enabled: self.pauseStatement + + + + + + enabled: self.pauseStatement + enabled + self.pauseStatement + 2 + + + 764 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + + + + + 19 + + + + + + + + 56 + + + + + + + + 217 + + + + + + + + 83 + + + + + + + + 81 + + + + + + + + + + + + + + + 75 + + + + + 78 + + + + + 72 + + + + + 82 + + + + + 77 + + + + + 73 + + + + + 79 + + + + + 74 + + + + + 205 + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 57 + + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 149 + + + + + 145 + + + + + 24 + + + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + + + + + + 296 + + + + + + + + + 297 + + + + + 298 + + + + + 371 + + + + + + + + 372 + + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 12 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 6 + 1 + + 12 + + 1000 + + 6 + 24 + 3 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 4 + 0 + + 4 + 1 + + 17 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 103 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 201 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 3 + 1 + + 128 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 163 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 3 + 1 + + 174 + + 1000 + + 3 + 9 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 4 + 0 + + 4 + 1 + + 52 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 3 + 1 + + 73 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 3 + 1 + + 45 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 3 + 1 + + 17 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 126 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 22 + + 1000 + + 3 + 9 + 3 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + + + + + + + + + + + + + + + + + + + + 375 + + + + + + + + 376 + + + + + + + + + 377 + + + + + + + + 388 + + + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + + + + + + 398 + + + + + + + + 399 + + + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 420 + + + + + 485 + + + + + 490 + + + + + + + + 491 + + + + + + + + 492 + + + + + 494 + + + + + 496 + + + + + + + + 497 + + + + + + + + + + + + + + + + + 498 + + + + + 499 + + + + + 500 + + + + + 501 + + + + + 502 + + + + + 503 + + + + + + + + 504 + + + + + 505 + + + + + 506 + + + + + 507 + + + + + 508 + + + + + + + + + + + + + + + + 509 + + + + + 510 + + + + + 511 + + + + + 512 + + + + + 513 + + + + + 514 + + + + + 515 + + + + + 516 + + + + + 517 + + + + + 536 + + + + + + + + 537 + + + + + + + + 538 + + + + + + + + 539 + + + + + + 7 + 0 + + 0 + 1 + + 304 + + 1000 + + 3 + 9 + 1 + + + + + + 540 + + + + + + + + 541 + + + + + + + + 542 + + + + + + 8 + 0 + + 0 + 1 + + 22 + + 1000 + + 3 + 9 + 1 + + + + 7 + 0 + + 0 + 1 + + 111 + + 1000 + + 3 + 9 + 1 + + + + + + 543 + + + + + + 7 + 0 + + 0 + 1 + + 203 + + 1000 + + 3 + 9 + 1 + + + + + + 544 + + + + + + 545 + + + + + + + + 546 + + + + + + + + 547 + + + + + + + + 548 + + + + + + + + 549 + + + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 201 + + 1000 + + 3 + 9 + 3 + + + + 6 + 0 + + 6 + 1 + + 16 + + 1000 + + 8 + 29 + 3 + + + + 4 + 0 + + 4 + 1 + + 11 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 16 + + 1000 + + 8 + 29 + 3 + + + + + + + 550 + + + + + + + + 551 + + + + + + 7 + 0 + + 0 + 1 + + 50 + + 1000 + + 3 + 9 + 1 + + + + + + 553 + + + + + + + + 555 + + + + + + + + 558 + + + + + + + + 563 + + + + + 565 + + + + + 569 + + + + + + + + 571 + + + + + 572 + + + + + 573 + + + + + 574 + + + + + 575 + + + + + 576 + + + + + 577 + + + + + 578 + + + + + 579 + + + + + 580 + + + + + 582 + + + + + 583 + + + + + 584 + + + + + 585 + + + + + 588 + + + + + 589 + + + + + 590 + + + + + 591 + + + + + 596 + + + + + 597 + + + + + 598 + + + + + 599 + + + + + 605 + + + + + 607 + + + + + 609 + + + + + 610 + + + + + 611 + + + + + 612 + + + + + 614 + + + + + 616 + + + + + 620 + + + + + 621 + + + + + 624 + + + + + 627 + + + + + 629 + + + + + 630 + + + + + 631 + + + + + 632 + + + + + 634 + + + + + 635 + + + + + 636 + + + + + 637 + + + + + 638 + + + + + 639 + + + + + 640 + + + + + 641 + + + + + 642 + + + + + 643 + + + + + 644 + + + + + 645 + + + + + 647 + + + + + 648 + + + + + + 8 + 0 + + 0 + 1 + + 133 + + 1000 + + 3 + 9 + 1 + + + + + + 649 + + + + + 650 + + + + + 654 + + + + + 655 + + + + + 656 + + + + + 657 + + + + + 661 + + + + + 646 + + + + + 633 + + + + + 759 + + + + + 760 + + + + + 761 + + + + + 762 + + + + + + + + 763 + + + + + 768 + + + + + 769 + + + + + 770 + + + + + 790 + + + + + 791 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{380, 496}, {480, 360}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 792 + + + 0 + IBCocoaFramework + YES + 3 + + {11, 11} + {10, 3} + + YES + + diff --git a/IDNA/IDNA/main.m b/IDNA/IDNA/main.m new file mode 100644 index 0000000..86cf41d --- /dev/null +++ b/IDNA/IDNA/main.m @@ -0,0 +1,14 @@ +// +// main.m +// IDNA +// +// Created by Dmitriy Zhukov on 06.01.13. +// Copyright (c) 2013 Dmitriy Zhukov. All rights reserved. +// + +#import + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **)argv); +} diff --git a/IDNA/IDNA/ru.lproj/.DS_Store b/IDNA/IDNA/ru.lproj/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c8fe87b3627665b6f65088b058ab30a7d39c7a12 GIT binary patch literal 6148 zcmeHK+e*Vg5Is{XRO&-T5FhjCQ^7w7wJHTG(*A&^7ZGX-NekjrKEsdl1N@tKW_Kw~ zYw=B}%)so~o$Q%S&W21DfOMAQOP~dyL07CDvH8LDy84#YLgbJrF2@TN$k9edG}{LS zbnlwD;*L!)#`^wEd$ai{navZ<(AVRJeo;DO4>&^)UEE`UC#2-g@rqk!N$DA53q~@& z3vbMtY~=dXTy!Z*O@$NYN--tl0W;3e$!@zg<0!>5@@fVdkhOj{r??|~#C4VbPE6RF z{F3EsBg--RWa^52_aw_5_pe%ftZBianJHijm;!sG0Bg2dqv_FFQ@|831y%~^_aUMy z#sLeD?$g1>9RY}ShMlpmKa0wV0>%LgkGw(?PbGS)gd>J{I^$887Y8gndO9Q=J|wIx z;e;Y?b>@%UbV%&cT2sIjs48&ahb^uD*SpXERg#TN0aM^#DIoRku-oAyh1$CHa9V34 s`XgOU=M^4T6n0!G=3Fhs=X7U`N7^CA0Sk|e(CkOR$zY8s@TUrV16c!FQ~&?~ literal 0 HcmV?d00001 diff --git a/IDNA/IDNA/ru.lproj/Credits.rtf b/IDNA/IDNA/ru.lproj/Credits.rtf new file mode 100644 index 0000000..46576ef --- /dev/null +++ b/IDNA/IDNA/ru.lproj/Credits.rtf @@ -0,0 +1,29 @@ +{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw9840\paperh8400 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural + +\f0\b\fs24 \cf0 Engineering: +\b0 \ + Some people\ +\ + +\b Human Interface Design: +\b0 \ + Some other people\ +\ + +\b Testing: +\b0 \ + Hopefully not nobody\ +\ + +\b Documentation: +\b0 \ + Whoever\ +\ + +\b With special thanks to: +\b0 \ + Mom\ +} diff --git a/IDNA/IDNA/ru.lproj/IDNRandomGenerator.xib b/IDNA/IDNA/ru.lproj/IDNRandomGenerator.xib new file mode 100644 index 0000000..c22326a --- /dev/null +++ b/IDNA/IDNA/ru.lproj/IDNRandomGenerator.xib @@ -0,0 +1,412 @@ + + + + 1080 + 12C60 + 3084 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 3084 + + + IBNSLayoutConstraint + NSCustomObject + NSProgressIndicator + NSTextField + NSTextFieldCell + NSUserDefaultsController + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + IDNRandomGenerator + + + FirstResponder + + + NSApplication + + + 1 + 2 + {{196, 240}, {480, 84}} + 544735232 + Генератор случайных чисел + NSWindow + + + + + 256 + + + + 268 + {{20, 23}, {440, 20}} + + + _NS:9 + {250, 250} + 16397 + 200 + + + + 268 + {{17, 50}, {363, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Подвигайте мышкой чтобы сгенерировать случайное число + + LucidaGrande + 12 + 16 + + _NS:1535 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + disabledControlTextColor + + 3 + MC4zMzMzMzMzMzMzAA + + + + NO + + + {480, 84} + + + + + {{0, 0}, {1920, 1178}} + {10000000000000, 10000000000000} + YES + + + YES + + + + + + + window + + + + 3 + + + + delegate + + + + 4 + + + + value: self.numberOfMouseMove + + + + + + value: self.numberOfMouseMove + value + self.numberOfMouseMove + 2 + + + 55 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 1 + + + + + + + + 2 + + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 17 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + + + + + 5 + + + + + + 14 + + + + + 17 + + + + + + 8 + 0 + + 0 + 1 + + 17 + + 1000 + + 3 + 9 + 1 + + + + + + 18 + + + + + 20 + + + + + 22 + + + + + 38 + + + + + 51 + + + + + 56 + + + + + 57 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{357, 418}, {480, 270}} + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 57 + + + + + IDNRandomGenerator + NSWindowController + + IBProjectSource + ./Classes/IDNRandomGenerator.h + + + + NSLayoutConstraint + NSObject + + IBProjectSource + ./Classes/NSLayoutConstraint.h + + + + + 0 + IBCocoaFramework + YES + 3 + YES + + diff --git a/IDNA/IDNA/ru.lproj/InfoPlist.strings b/IDNA/IDNA/ru.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/IDNA/IDNA/ru.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/IDNA/IDNA/ru.lproj/Localizable.strings b/IDNA/IDNA/ru.lproj/Localizable.strings new file mode 100644 index 0000000..72d2651 --- /dev/null +++ b/IDNA/IDNA/ru.lproj/Localizable.strings @@ -0,0 +1,21 @@ +/* + Localizable.strings + IDNA + + Created by Dmitriy Zhukov on 06.02.13. + Copyright (c) 2013 Dmitriy Zhukov. All rights reserved. + */ +"FIND_MSG" = "Идеальная ДНК найдена"; +"GENERATIN_LEFT_MSG" = "Прошло %lu поколений"; +"CANT_SAVE_MSG" = "Не удалось сохранить файл"; +"CANT_OPEN_MSG" = "Не удалось открыть файл"; +"INCORRECT_DATA_MSG" = "Неправильный формат данных. Правильно так: 'ATGCCGAATGTT'"; +"INCORRECT_DNA_LONG_MSG" = "Длинна загружаемой ДНК и установленная длинна ДНК в интерфейсе не совпадают. Поменяйте длинну ДНК в интерфейсе на: %li"; +"SAVE_HEADER_MSG" = "Сохранить данные в файлe"; +"OPEN_HEADER_MSG" = "Загрузить данные из файла"; +"SURE_MSG" = "Вы уверенны что хотите это сделать?"; +"MAY_BE_NO_MSG" = "Точно? Может быть нет?"; +"OK_BUT_MSG" = "Хорошо, но мы вас предупреждали..."; +"YES_MSG" = "Да"; +"NO_MSG" = "Нет"; +"WINDOW_CLOSE_MSG" = "Закрыть текущее окно"; \ No newline at end of file diff --git a/IDNA/IDNA/ru.lproj/MainMenu.xib b/IDNA/IDNA/ru.lproj/MainMenu.xib new file mode 100644 index 0000000..fe65e34 --- /dev/null +++ b/IDNA/IDNA/ru.lproj/MainMenu.xib @@ -0,0 +1,5023 @@ + + + + 1080 + 12C60 + 3084 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 3084 + + + IBNSLayoutConstraint + NSBox + NSButton + NSButtonCell + NSCustomObject + NSMenu + NSMenuItem + NSNumberFormatter + NSProgressIndicator + NSSlider + NSSliderCell + NSTextField + NSTextFieldCell + NSUserDefaultsController + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + + + IDNA + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + IDNA + + + + О программе + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Настройки… + , + 1048576 + 2147483647 + + + + + + Перегрузить настройки… + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Скрыть IDNA + h + 1048576 + 2147483647 + + + + + + Скрыть другие окна + h + 1572864 + 2147483647 + + + + + + Показать все + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Выход из IDNA + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + Файл + + 1048576 + 2147483647 + + + submenuAction: + + Файл + + + + Новый + n + 1048576 + 2147483647 + + + + + + Открыть ДНК... + o + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Закрыть текущее окно + З + 2147483647 + + + + + + Сохранить ДНК... + s + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Настройка страницы... + P + 1179648 + 2147483647 + + + + + + + Печать… + p + 1048576 + 2147483647 + + + + + + + + + Редактирование + + 1048576 + 2147483647 + + + submenuAction: + + Редактирование + + + + Вперед + z + 1048576 + 2147483647 + + + + + + Назад + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Вырезать + x + 1048576 + 2147483647 + + + + + + Копировать + c + 1048576 + 2147483647 + + + + + + Вставить + v + 1048576 + 2147483647 + + + + + + Специальная вставка + V + 1572864 + 2147483647 + + + + + + Удалить + + 1048576 + 2147483647 + + + + + + Выделить все + a + 1048576 + 2147483647 + + + + + + + + + Формат + + 2147483647 + + + submenuAction: + + Формат + + + + Шрифт + + 2147483647 + + + submenuAction: + + Шрифт + + + + Показать шрифты + t + 1048576 + 2147483647 + + + + + + Жирный + b + 1048576 + 2147483647 + + + 2 + + + + Курсив + i + 1048576 + 2147483647 + + + 1 + + + + Подчеркнутый + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Больше + + + 1048576 + 2147483647 + + + 3 + + + + Меньше + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Кернинг + + 2147483647 + + + submenuAction: + + Кернинг + + + + Использовать по умолчанию + + 2147483647 + + + + + + Не использовать + + 2147483647 + + + + + + Сжатый + + 2147483647 + + + + + + Разряженный + + 2147483647 + + + + + + + + + Лигатура + + 2147483647 + + + submenuAction: + + Лигатура + + + + Использовать по умолчанию + + 2147483647 + + + + + + Не использовать + + 2147483647 + + + + + + Использовать все + + 2147483647 + + + + + + + + + Базовые линии + + 2147483647 + + + submenuAction: + + Базовые линии + + + + Использовать по умолчанию + + 2147483647 + + + + + + Суперскрипт + + 2147483647 + + + + + + Сабскрипт + + 2147483647 + + + + + + Верхние + + 2147483647 + + + + + + Нижнии + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Показать цвета + П + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Стиль копирования + c + 1572864 + 2147483647 + + + + + + Стиль вставки + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Текст + + 2147483647 + + + submenuAction: + + Текст + + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Writing Direction + + 2147483647 + + + submenuAction: + + Writing Direction + + + + YES + Paragraph + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + YES + Selection + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + Вид + + 1048576 + 2147483647 + + + submenuAction: + + Вид + + + + Показать панель инструментов + t + 1572864 + 2147483647 + + + + + + Кастомизировать панель инструментов… + + 1048576 + 2147483647 + + + + + + + + + Окно + + 1048576 + 2147483647 + + + submenuAction: + + Окно + + + + Минимизировать + m + 1048576 + 2147483647 + + + + + + Увеличить + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Поместить наверх + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Помощь + + 2147483647 + + + submenuAction: + + Помощь + + + + IDNA помощь + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + 15 + 2 + {{335, 390}, {515, 410}} + 1954021376 + IDNA + NSWindow + + + + + 256 + + + + 268 + {{19, 374}, {125, 17}} + + + + YES + + 68157504 + 272630784 + Размер популяции + + LucidaGrande + 13 + 1044 + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + NO + + + + 268 + {{19, 346}, {86, 17}} + + + + YES + + 68157504 + 272630784 + Длинна ДНК + + + + + + NO + + + + 268 + {{17, 318}, {129, 17}} + + + + YES + + 68157504 + 272630784 + Степень мутации % + + + + + + NO + + + + 268 + {{216, 372}, {274, 21}} + + + + YES + + 67371264 + 0 + + + 10000 + 3 + 5000 + 0.0 + 0 + 0 + NO + NO + + NO + + + + 268 + {{216, 344}, {274, 21}} + + + + YES + + -2080112384 + 0 + + + 100 + 1 + 50 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{216, 316}, {274, 21}} + + + + YES + + -2080112384 + 0 + + + 100 + 0.0 + 50 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{203, 281}, {117, 22}} + + + + YES + + 68157504 + 272630784 + Поколение: + + LucidaGrande-Bold + 14 + 16 + + + + + + NO + + + + 268 + {{150, 265}, {209, 17}} + + + + YES + + 68157504 + 272630784 + Совпадение с целевой ДНК %: + + + + + + NO + + + + 268 + {{20, 238}, {475, 20}} + + + + 16392 + 100 + + + + 268 + {{366, 10}, {135, 32}} + + + YES + + 67108864 + 134217728 + Загрузить ДНК + + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{14, 10}, {175, 32}} + + + + YES + + 67108864 + 134217728 + Запустить эволюцию + + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{189, 10}, {77, 32}} + + + + YES + + 67108864 + 134217728 + Пауза + + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{266, 10}, {72, 32}} + + + + YES + + 67108864 + 134217728 + Стоп + + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{153, 343}, {50, 22}} + + + + _NS:9 + YES + + -1804599231 + 272630784 + + + + + + + + + + + -∞ + + +∞ + + # + # + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + _NS:9 + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + + + NO + + + + 12 + + + + 274 + + + + 268 + {{186, 152}, {89, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Целевая ДНК + + _NS:1535 + + + + + NO + + + + 268 + {{18, 14}, {441, 133}} + + + + _NS:9 + {250, 750} + YES + + -2074083327 + 272629760 + + + _NS:9 + + YES + + + + NO + + + {{1, 1}, {477, 172}} + + + + _NS:11 + + + {{19, 48}, {479, 188}} + + + + _NS:9 + {0, 0} + + 67108864 + 0 + + + LucidaGrande + 11 + 3100 + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 1 + 0 + 2 + NO + + + + 268 + {{153, 315}, {50, 22}} + + + + _NS:9 + YES + + -1804599231 + 272630784 + + + + + + + + + -∞ + + +∞ + + # + # + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + _NS:9 + + YES + + + + NO + + + + 268 + {{153, 371}, {50, 22}} + + + + _NS:9 + YES + + -1804599231 + 272630784 + + + + + + + + + -∞ + + +∞ + + # + # + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + _NS:9 + + YES + + + + NO + + + {515, 410} + + + + + {{0, 0}, {1920, 1178}} + {10000000000000, 10000000000000} + YES + + + IDNAppDelegate + + + NSFontManager + + + YES + + + + + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 495 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + performClose: + + + + 193 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + paste: + + + + 226 + + + + cut: + + + + 228 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 373 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + pasteAsPlainText: + + + + 486 + + + + showHelp: + + + + 493 + + + + alignCenter: + + + + 518 + + + + pasteRuler: + + + + 519 + + + + toggleRuler: + + + + 520 + + + + alignRight: + + + + 521 + + + + copyRuler: + + + + 522 + + + + alignJustified: + + + + 523 + + + + alignLeft: + + + + 524 + + + + makeBaseWritingDirectionNatural: + + + + 525 + + + + makeBaseWritingDirectionLeftToRight: + + + + 526 + + + + makeBaseWritingDirectionRightToLeft: + + + + 527 + + + + makeTextWritingDirectionNatural: + + + + 528 + + + + makeTextWritingDirectionLeftToRight: + + + + 529 + + + + makeTextWritingDirectionRightToLeft: + + + + 530 + + + + enabled: self.openSaveDesible + + + + + + enabled: self.openSaveDesible + enabled + self.openSaveDesible + 2 + + + 778 + + + + enabled: self.openSaveDesible + + + + + + enabled: self.openSaveDesible + enabled + self.openSaveDesible + 2 + + + 781 + + + + delegate + + + + 782 + + + + addFontTrait: + + + + 421 + + + + addFontTrait: + + + + 422 + + + + modifyFont: + + + + 423 + + + + orderFrontFontPanel: + + + + 424 + + + + modifyFont: + + + + 425 + + + + window + + + + 532 + + + + goalDNAField + + + + 751 + + + + loadDNAfromFile: + + + + 752 + + + + saveData: + + + + 753 + + + + startEvolution: + + + + 756 + + + + pauseEvolution: + + + + 757 + + + + stopEvolution: + + + + 771 + + + + loadDNAfromFile: + + + + 772 + + + + resetPref: + + + + 792 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + 2 + + + 722 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + 2 + + + 726 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + 2 + + + 730 + + + + value: self.populationSize + + + + + + value: self.populationSize + value + self.populationSize + 2 + + + 673 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + 2 + + + 742 + + + + value: self.DNALength + + + + + + value: self.DNALength + value + self.DNALength + 2 + + + 680 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + 2 + + + 744 + + + + value: self.mutationRate + + + + + + value: self.mutationRate + value + self.mutationRate + 2 + + + 686 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + 2 + + + 746 + + + + displayPatternValue1: self.generationCount + + + + + + displayPatternValue1: self.generationCount + displayPatternValue1 + self.generationCount + + NSDisplayPattern + Поколение: %{value1}@ + + 2 + + + 834 + + + + displayPatternValue1: self.progress + + + + + + displayPatternValue1: self.progress + displayPatternValue1 + self.progress + + NSDisplayPattern + Совпадение с целевой ДНК %: %{value1}@ + + 2 + + + 835 + + + + value: self.progress + + + + + + value: self.progress + value + self.progress + 2 + + + 710 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + 2 + + + 718 + + + + enabled: self.startStatement + + + + + + enabled: self.startStatement + enabled + self.startStatement + 2 + + + 758 + + + + enabled: self.pauseStatement + + + + + + enabled: self.pauseStatement + enabled + self.pauseStatement + 2 + + + 750 + + + + value: self.DNALength + + + + + + value: self.DNALength + value + self.DNALength + 2 + + + 677 + + + + editable: self.interfaceStatement + + + + + + editable: self.interfaceStatement + editable + self.interfaceStatement + 2 + + + 691 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + + 2 + + + 736 + + + + value: self.mutationRate + + + + + + value: self.mutationRate + value + self.mutationRate + 2 + + + 683 + + + + editable: self.interfaceStatement + + + + + + editable: self.interfaceStatement + editable + self.interfaceStatement + 2 + + + 694 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + + 2 + + + 739 + + + + value: self.populationSize + + + + + + value: self.populationSize + value + self.populationSize + 2 + + + 670 + + + + editable: self.interfaceStatement + + + + + + editable: self.interfaceStatement + editable + self.interfaceStatement + 2 + + + 688 + + + + enabled: self.interfaceStatement + + + + + + enabled: self.interfaceStatement + enabled + self.interfaceStatement + + 2 + + + 733 + + + + enabled: self.pauseStatement + + + + + + enabled: self.pauseStatement + enabled + self.pauseStatement + 2 + + + 764 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + + + + + 19 + + + + + + + + 56 + + + + + + + + 217 + + + + + + + + 83 + + + + + + + + 81 + + + + + + + + + + + + + + + 75 + + + + + 78 + + + + + 72 + + + + + 82 + + + + + 77 + + + + + 73 + + + + + 79 + + + + + 74 + + + + + 205 + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 57 + + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 149 + + + + + 145 + + + + + 24 + + + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + + + + + + 296 + + + + + + + + + 297 + + + + + 298 + + + + + 371 + + + + + + + + 372 + + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 12 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 6 + 1 + + 12 + + 1000 + + 6 + 24 + 3 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 4 + 0 + + 4 + 1 + + 17 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 206 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 3 + 1 + + 107 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 218 + + 1000 + + 3 + 9 + 3 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 3 + 1 + + 128 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 3 + 1 + + 174 + + 1000 + + 3 + 9 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 3 + 1 + + 45 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 153 + + 1000 + + 3 + 9 + 3 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 3 + 1 + + 17 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 22 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + + + + + + + + + + + + + + + + + + + + 375 + + + + + + + + 376 + + + + + + + + + 377 + + + + + + + + 388 + + + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + + + + + + 398 + + + + + + + + 399 + + + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 420 + + + + + 485 + + + + + 490 + + + + + + + + 491 + + + + + + + + 492 + + + + + 494 + + + + + 496 + + + + + + + + 497 + + + + + + + + + + + + + + + + + 498 + + + + + 499 + + + + + 500 + + + + + 501 + + + + + 502 + + + + + 503 + + + + + + + + 504 + + + + + 505 + + + + + 506 + + + + + 507 + + + + + 508 + + + + + + + + + + + + + + + + 509 + + + + + 510 + + + + + 511 + + + + + 512 + + + + + 513 + + + + + 514 + + + + + 515 + + + + + 516 + + + + + 517 + + + + + 536 + + + + + + + + 537 + + + + + + + + 538 + + + + + + + + 539 + + + + + + 7 + 0 + + 0 + 1 + + 270 + + 1000 + + 3 + 9 + 1 + + + + + + 540 + + + + + + + + 541 + + + + + + + + 542 + + + + + + 8 + 0 + + 0 + 1 + + 22 + + 1000 + + 3 + 9 + 1 + + + + 7 + 0 + + 0 + 1 + + 111 + + 1000 + + 3 + 9 + 1 + + + + + + 543 + + + + + + 7 + 0 + + 0 + 1 + + 203 + + 1000 + + 3 + 9 + 1 + + + + + + 544 + + + + + + 545 + + + + + + + + 546 + + + + + + + + 547 + + + + + + + + 548 + + + + + + + + 549 + + + + + 3 + 0 + + 3 + 1 + + 18 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 187 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 3 + 1 + + 40 + + 1000 + + 3 + 9 + 3 + + + + 6 + 0 + + 6 + 1 + + 16 + + 1000 + + 8 + 29 + 3 + + + + 4 + 0 + + 4 + 1 + + 11 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 16 + + 1000 + + 8 + 29 + 3 + + + + + + + + 550 + + + + + + + + 551 + + + + + + 7 + 0 + + 0 + 1 + + 50 + + 1000 + + 3 + 9 + 1 + + + + + + 553 + + + + + + + + 555 + + + + + + + + 558 + + + + + + + + 565 + + + + + 569 + + + + + + + + 571 + + + + + 572 + + + + + 573 + + + + + 574 + + + + + 575 + + + + + 576 + + + + + 577 + + + + + 578 + + + + + 579 + + + + + 580 + + + + + 582 + + + + + 583 + + + + + 584 + + + + + 585 + + + + + 588 + + + + + 591 + + + + + 596 + + + + + 599 + + + + + 605 + + + + + 607 + + + + + 609 + + + + + 610 + + + + + 611 + + + + + 614 + + + + + 616 + + + + + 620 + + + + + 621 + + + + + 624 + + + + + 629 + + + + + 632 + + + + + 635 + + + + + 636 + + + + + 638 + + + + + 639 + + + + + 640 + + + + + 641 + + + + + 642 + + + + + 644 + + + + + 647 + + + + + 648 + + + + + + 8 + 0 + + 0 + 1 + + 133 + + 1000 + + 3 + 9 + 1 + + + + + + 649 + + + + + 650 + + + + + 654 + + + + + 655 + + + + + 656 + + + + + 661 + + + + + 759 + + + + + 760 + + + + + 761 + + + + + 762 + + + + + + + + 763 + + + + + 768 + + + + + 769 + + + + + 770 + + + + + 790 + + + + + 791 + + + + + 793 + + + + + 797 + + + + + 798 + + + + + 801 + + + + + 802 + + + + + 803 + + + + + 804 + + + + + 805 + + + + + 815 + + + + + 817 + + + + + 822 + + + + + 825 + + + + + 829 + + + + + 833 + + + + + 837 + + + + + 839 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{380, 496}, {480, 360}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 839 + + + + + IDNAppDelegate + NSObject + + id + id + id + id + id + id + + + + loadDNAfromFile: + id + + + pauseEvolution: + id + + + resetPref: + id + + + saveData: + id + + + startEvolution: + id + + + stopEvolution: + id + + + + NSTextField + NSWindow + + + + goalDNAField + NSTextField + + + window + NSWindow + + + + IBProjectSource + ./Classes/IDNAppDelegate.h + + + + NSLayoutConstraint + NSObject + + IBProjectSource + ./Classes/NSLayoutConstraint.h + + + + + 0 + IBCocoaFramework + YES + 3 + + {11, 11} + {10, 3} + + YES + + From 7a962e817143b5584a5dea17fa052ec797381dc3 Mon Sep 17 00:00:00 2001 From: Dmitriy Zhukov Date: Fri, 8 Feb 2013 22:41:53 +0400 Subject: [PATCH 2/2] IDNA_Project_4 (second version) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Исправлены вылеты --- .DS_Store | Bin 6148 -> 6148 bytes .../UserInterfaceState.xcuserstate | Bin 32499 -> 33592 bytes IDNA/IDNA/IDNAppDelegate.m | 8 ++++---- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.DS_Store b/.DS_Store index 241acc3ef4ef7304af48cd7fe6b6de7785cf5541..9c5c6fcd5f6cd92d892a3758e6b2809ef4adf2ba 100644 GIT binary patch delta 71 zcmZoMXffEJ&cwNufq_96h&d-4FiA76pX|ewEGSW3ZD^pQU~FtstD{hDXlOb4Ad?tt aO>JF$!{j?m@{CQJ|1fd0Zf4{7#}5F1K@->j delta 72 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 QgyLTlKk={OciWr)2M(IxSO5S3 literal 32499 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 F{{tttgBJh* diff --git a/IDNA/IDNA/IDNAppDelegate.m b/IDNA/IDNA/IDNAppDelegate.m index 1765630..5730461 100644 --- a/IDNA/IDNA/IDNAppDelegate.m +++ b/IDNA/IDNA/IDNAppDelegate.m @@ -358,16 +358,16 @@ -(void)showRandomPanel { -(void) createPopulationIn { [self.workingPopulation createPopulationWithCount:self.populationSize andDNALength:self.DNALength]; + [self performSelectorInBackground:@selector(evolution) withObject:nil]; } -(void)handleRandomNumberChange:(NSNotification *) notif { unsigned int temp = [[[notif userInfo] objectForKey:@"randomNumber"]intValue]; - - [self createPopulationIn]; [self.workingPopulation setPopulationRandomNumber:temp]; - - [self performSelectorInBackground:@selector(evolution) withObject:nil]; + if ([self.workingPopulation.population count] == 0) { + [self createPopulationIn]; + } self.randomFlag = true; self.pauseStatement = true;