ranger-compiler 2.1.70 → 3.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +114 -0
- package/README.md +956 -133
- package/{compiler/Lang.clj → dist/Lang.rgr} +2345 -75
- package/dist/README.md +116 -0
- package/dist/{bin/api.d.ts → api.d.ts} +430 -154
- package/dist/api.js +34345 -0
- package/{lib/Ajax.clj → dist/lib/Ajax.rgr} +1 -1
- package/{lib/CmdParams.clj → dist/lib/CmdParams.rgr} +72 -72
- package/{lib/Crypto.clj → dist/lib/Crypto.rgr} +1 -1
- package/{lib/DOMLib.clj → dist/lib/DOMLib.rgr} +2 -2
- package/{lib/Engine3D.clj → dist/lib/Engine3D.rgr} +1 -1
- package/{lib/ImmutableVector.clj → dist/lib/ImmutableVector.rgr} +364 -364
- package/{lib/IndexedDB.clj → dist/lib/IndexedDB.rgr} +1 -1
- package/{lib/JSON.clj → dist/lib/JSON.rgr} +105 -2
- package/{lib/JinxProcess.clj → dist/lib/JinxProcess.rgr} +3 -3
- package/{lib/Storage.clj → dist/lib/Storage.rgr} +1 -1
- package/{lib/Timers.clj → dist/lib/Timers.rgr} +176 -170
- package/{lib/ViewLib.clj → dist/lib/ViewLib.rgr} +1 -1
- package/dist/lib/lib/ACEEditor.rgr +5 -0
- package/dist/lib/lib/Ajax.rgr +196 -0
- package/dist/lib/lib/CmdParams.rgr +72 -0
- package/dist/lib/lib/Crypto.rgr +90 -0
- package/dist/lib/lib/DOMLib.rgr +307 -0
- package/{examples/3D/Engine3D.clj → dist/lib/lib/Engine3D.rgr} +870 -857
- package/dist/lib/lib/ImmutableVector.rgr +364 -0
- package/dist/lib/lib/IndexedDB.rgr +32 -0
- package/{compiler/JSON.clj → dist/lib/lib/JSON.rgr} +106 -3
- package/dist/lib/lib/JinxProcess.rgr +838 -0
- package/dist/lib/lib/SQL.rgr +44 -0
- package/dist/lib/lib/ServiceLib.rgr +9 -0
- package/dist/lib/lib/Storage.rgr +89 -0
- package/dist/lib/lib/Time.rgr +75 -0
- package/dist/lib/lib/Timers.rgr +176 -0
- package/dist/lib/lib/TypedArrays.rgr +14 -0
- package/dist/lib/lib/ViewLib.rgr +851 -0
- package/dist/lib/lib/WebLib.rgr +47 -0
- package/dist/lib/lib/WebServerLib.rgr +137 -0
- package/{lib/ranger-dir.clj → dist/lib/lib/ranger-dir.rgr} +1 -1
- package/{compiler/stdlib.clj → dist/lib/lib/stdlib.rgr} +42 -19
- package/{lib/stdops.clj → dist/lib/lib/stdops.rgr} +1 -1
- package/dist/lib/ranger-dir.rgr +175 -0
- package/{lib/stdlib.clj → dist/lib/stdlib.rgr} +2 -2
- package/dist/lib/stdops.rgr +168 -0
- package/dist/package.json +47 -0
- package/{compiler/bin/output.js → dist/rgrc.js} +15377 -7936
- package/dist/stdops.rgr +168 -0
- package/package.json +196 -39
- package/adventofcode/day1/bin/LambdaSignature1.java +0 -3
- package/adventofcode/day1/bin/LambdaSignature2.java +0 -3
- package/adventofcode/day1/bin/LambdaSignature3.java +0 -3
- package/adventofcode/day1/bin/day1.cpp +0 -124
- package/adventofcode/day1/bin/day1.go +0 -75
- package/adventofcode/day1/bin/day1.js +0 -45
- package/adventofcode/day1/bin/day1.php +0 -46
- package/adventofcode/day1/bin/day1.scala +0 -48
- package/adventofcode/day1/bin/day1.swift +0 -48
- package/adventofcode/day1/bin/day1_part2.cpp +0 -180
- package/adventofcode/day1/bin/day1_part2.go +0 -123
- package/adventofcode/day1/bin/day1_part2.js +0 -76
- package/adventofcode/day1/bin/day1_part2.php +0 -88
- package/adventofcode/day1/bin/day1_part2.scala +0 -81
- package/adventofcode/day1/bin/day1_part2.swift +0 -91
- package/adventofcode/day1/bin/day_one.java +0 -38
- package/adventofcode/day1/bin/day_one_part_two.java +0 -57
- package/adventofcode/day1/bin/operatorsOf.java +0 -37
- package/adventofcode/day1/bin/operatorsOf_5.java +0 -10
- package/adventofcode/day1/bin/operatorsOfboolean_5.java +0 -10
- package/adventofcode/day1/bin/variant.hpp +0 -2416
- package/adventofcode/day1/compile.bat +0 -7
- package/adventofcode/day1/compile2.bat +0 -7
- package/adventofcode/day1/day1.clj +0 -19
- package/adventofcode/day1/day1_part2.clj +0 -43
- package/adventofcode/day1/input1.txt +0 -1
- package/adventofcode/day2/bin/LambdaSignature1.class +0 -0
- package/adventofcode/day2/bin/LambdaSignature1.java +0 -3
- package/adventofcode/day2/bin/LambdaSignature2.class +0 -0
- package/adventofcode/day2/bin/LambdaSignature2.java +0 -3
- package/adventofcode/day2/bin/day2.cpp +0 -133
- package/adventofcode/day2/bin/day2.go +0 -85
- package/adventofcode/day2/bin/day2.js +0 -45
- package/adventofcode/day2/bin/day2.php +0 -59
- package/adventofcode/day2/bin/day2.scala +0 -54
- package/adventofcode/day2/bin/day2.swift +0 -62
- package/adventofcode/day2/bin/day2_part2.cpp +0 -150
- package/adventofcode/day2/bin/day2_part2.go +0 -101
- package/adventofcode/day2/bin/day2_part2.js +0 -54
- package/adventofcode/day2/bin/day2_part2.php +0 -80
- package/adventofcode/day2/bin/day2_part2.scala +0 -68
- package/adventofcode/day2/bin/day2_part2.swift +0 -82
- package/adventofcode/day2/bin/day_two.java +0 -61
- package/adventofcode/day2/bin/day_two_part_two$1$1$1.class +0 -0
- package/adventofcode/day2/bin/day_two_part_two$1$1.class +0 -0
- package/adventofcode/day2/bin/day_two_part_two$1.class +0 -0
- package/adventofcode/day2/bin/day_two_part_two.class +0 -0
- package/adventofcode/day2/bin/day_two_part_two.java +0 -80
- package/adventofcode/day2/bin/operatorsOf.class +0 -0
- package/adventofcode/day2/bin/operatorsOf.java +0 -18
- package/adventofcode/day2/bin/variant.hpp +0 -2416
- package/adventofcode/day2/compile.bat +0 -7
- package/adventofcode/day2/compile2.bat +0 -7
- package/adventofcode/day2/day2.clj +0 -60
- package/adventofcode/day2/day2_part2.clj +0 -69
- package/adventofcode/day2/input1.txt +0 -1
- package/adventofcode/day3/bin/Grid.java +0 -92
- package/adventofcode/day3/bin/GridRow.java +0 -5
- package/adventofcode/day3/bin/LambdaSignature1.java +0 -3
- package/adventofcode/day3/bin/LambdaSignature2.java +0 -3
- package/adventofcode/day3/bin/LambdaSignature3.java +0 -3
- package/adventofcode/day3/bin/day3.cpp +0 -64
- package/adventofcode/day3/bin/day3.go +0 -55
- package/adventofcode/day3/bin/day3.js +0 -42
- package/adventofcode/day3/bin/day3.php +0 -41
- package/adventofcode/day3/bin/day3.scala +0 -52
- package/adventofcode/day3/bin/day3.swift +0 -43
- package/adventofcode/day3/bin/day3_part2.cpp +0 -216
- package/adventofcode/day3/bin/day3_part2.go +0 -188
- package/adventofcode/day3/bin/day3_part2.js +0 -123
- package/adventofcode/day3/bin/day3_part2.php +0 -135
- package/adventofcode/day3/bin/day3_part2.swift +0 -131
- package/adventofcode/day3/bin/day_three_part_two.java +0 -43
- package/adventofcode/day3/bin/day_two.java +0 -42
- package/adventofcode/day3/bin/operatorsOf.java +0 -14
- package/adventofcode/day3/bin/variant.hpp +0 -2416
- package/adventofcode/day3/compile.bat +0 -7
- package/adventofcode/day3/compile2.bat +0 -7
- package/adventofcode/day3/day3.clj +0 -42
- package/adventofcode/day3/day3_part2.clj +0 -112
- package/adventofcode/day4/bin/LambdaSignature1.java +0 -3
- package/adventofcode/day4/bin/day4.cpp +0 -118
- package/adventofcode/day4/bin/day4.go +0 -75
- package/adventofcode/day4/bin/day4.js +0 -40
- package/adventofcode/day4/bin/day4.php +0 -52
- package/adventofcode/day4/bin/day4.scala +0 -47
- package/adventofcode/day4/bin/day4.swift +0 -56
- package/adventofcode/day4/bin/day4_part2.go +0 -129
- package/adventofcode/day4/bin/day4_part2.js +0 -72
- package/adventofcode/day4/bin/day_four.java +0 -41
- package/adventofcode/day4/bin/inputData.java +0 -7
- package/adventofcode/day4/bin/operatorsOf.java +0 -11
- package/adventofcode/day4/bin/variant.hpp +0 -2416
- package/adventofcode/day4/compile.bat +0 -7
- package/adventofcode/day4/compile2.bat +0 -7
- package/adventofcode/day4/day4.clj +0 -32
- package/adventofcode/day4/day4_part2.clj +0 -44
- package/adventofcode/day4/input.clj +0 -519
- package/adventofcode/day4/input.txt +0 -512
- package/bin/api.ts +0 -24471
- package/bin/compiler.ts +0 -24482
- package/bin/output.js +0 -23819
- package/compiler/ColorConsole.clj +0 -22
- package/compiler/ContextOperators.clj +0 -75
- package/compiler/FlowEnterVarDef.clj +0 -223
- package/compiler/InputFileSystem.clj +0 -276
- package/compiler/RangerDocs.clj +0 -7
- package/compiler/TFactory.clj +0 -146
- package/compiler/TFiles.clj +0 -23
- package/compiler/TFlow.clj +0 -39
- package/compiler/TNodeFactory.clj +0 -84
- package/compiler/TTypes.clj +0 -188
- package/compiler/VirtualCompiler.clj +0 -807
- package/compiler/bin/ng_Compiler.js +0 -23779
- package/compiler/commonmark_plugin.clj +0 -359
- package/compiler/feat2.bat +0 -2
- package/compiler/feats.bat +0 -9
- package/compiler/feature_tests.clj +0 -192
- package/compiler/index.js +0 -2
- package/compiler/issue_57.clj +0 -25
- package/compiler/makefile_plugin.clj +0 -135
- package/compiler/markdown_plugin.clj +0 -386
- package/compiler/maven_plugin.clj +0 -162
- package/compiler/ng_AndroidPageWriter.clj +0 -299
- package/compiler/ng_CodeNode.clj +0 -756
- package/compiler/ng_CodeNodeCompilerExtensions.clj +0 -839
- package/compiler/ng_Compiler.clj +0 -49
- package/compiler/ng_CompilerGeneric.clj +0 -260
- package/compiler/ng_CompilerOrig.clj +0 -854
- package/compiler/ng_DictNode.clj +0 -346
- package/compiler/ng_DictNode2.clj +0 -316
- package/compiler/ng_Execute.clj +0 -138
- package/compiler/ng_Execute1.clj +0 -129
- package/compiler/ng_FlowWork.clj +0 -3951
- package/compiler/ng_LiveCompiler.clj +0 -1109
- package/compiler/ng_RagnerJavaScriptClassWriter.clj +0 -402
- package/compiler/ng_RangerActiveOperators.clj +0 -86
- package/compiler/ng_RangerAppClassDesc.clj +0 -400
- package/compiler/ng_RangerAppEnums.clj +0 -86
- package/compiler/ng_RangerAppFunctionDesc.clj +0 -127
- package/compiler/ng_RangerAppMessages.clj +0 -15
- package/compiler/ng_RangerAppOperatorDesc.clj +0 -20
- package/compiler/ng_RangerAppParamDesc.clj +0 -388
- package/compiler/ng_RangerAppWriterContext.clj +0 -1793
- package/compiler/ng_RangerArgMatch.clj +0 -638
- package/compiler/ng_RangerCSharpClassWriter.clj +0 -484
- package/compiler/ng_RangerCppClassWriter.clj +0 -1023
- package/compiler/ng_RangerDocGenerator.clj +0 -305
- package/compiler/ng_RangerFlowParser.clj +0 -4992
- package/compiler/ng_RangerFlowParserOrig.clj +0 -4002
- package/compiler/ng_RangerGenericClassWriter.clj +0 -573
- package/compiler/ng_RangerGolangClassWriter.clj +0 -1766
- package/compiler/ng_RangerImmutableExtension.clj +0 -77
- package/compiler/ng_RangerJava7ClassWriter.clj +0 -961
- package/compiler/ng_RangerJavaScriptClassWriter.clj +0 -1040
- package/compiler/ng_RangerKotlinClassWriter.clj +0 -372
- package/compiler/ng_RangerLanguageWriters.clj +0 -14
- package/compiler/ng_RangerLispParser.clj +0 -873
- package/compiler/ng_RangerPHPClassWriter.clj +0 -643
- package/compiler/ng_RangerPlugin.clj +0 -41
- package/compiler/ng_RangerRangerClassWriter.clj +0 -357
- package/compiler/ng_RangerRustClassWriter.clj +0 -420
- package/compiler/ng_RangerScalaClassWriter.clj +0 -818
- package/compiler/ng_RangerSerializeClass.clj +0 -502
- package/compiler/ng_RangerServiceBuilder.clj +0 -63
- package/compiler/ng_RangerSwift3ClassWriter.clj +0 -809
- package/compiler/ng_RangerSwiftClassWriter.clj +0 -0
- package/compiler/ng_RangerTypeClass.clj +0 -45
- package/compiler/ng_SourceParser.clj +0 -241
- package/compiler/ng_SourceParser2.clj +0 -214
- package/compiler/ng_WebPageWriter.clj +0 -39
- package/compiler/ng_jsonParser.clj +0 -340
- package/compiler/ng_p_test.clj +0 -1711
- package/compiler/ng_parser.clj +0 -911
- package/compiler/ng_parser2.clj +0 -735
- package/compiler/ng_parser2_backup.clj +0 -1679
- package/compiler/ng_parser_backup.clj +0 -886
- package/compiler/ng_parser_ok.clj +0 -1718
- package/compiler/ng_parser_ok2.clj +0 -1717
- package/compiler/ng_parser_std_match.clj +0 -687
- package/compiler/ng_parser_std_match2.clj +0 -1012
- package/compiler/ng_parser_v2.clj +0 -1251
- package/compiler/ng_ui.clj +0 -403
- package/compiler/ng_ui_test.clj +0 -18
- package/compiler/ng_writer.clj +0 -338
- package/compiler/ng_xmlParser.clj +0 -472
- package/compiler/ng_xmlParser2.clj +0 -317
- package/compiler/ng_xmlParser3.clj +0 -251
- package/compiler/opdoc.bat +0 -4
- package/compiler/operators.md +0 -290
- package/compiler/p.bat +0 -4
- package/compiler/package.json +0 -10
- package/compiler/pcmd.bat +0 -4
- package/compiler/pcmd2.bat +0 -3
- package/compiler/plaintext_plugin.clj +0 -69
- package/compiler/plugin.bat +0 -19
- package/compiler/plugin2.bat +0 -4
- package/compiler/plugin_app.bat +0 -3
- package/compiler/plugin_apps.clj +0 -27
- package/compiler/plugins.bat +0 -10
- package/compiler/reveal_plugin.clj +0 -409
- package/compiler/simplePlugin.clj +0 -780
- package/compiler/t.bat +0 -3
- package/compiler/test_any.clj +0 -43
- package/compiler/test_call.clj +0 -141
- package/compiler/test_chain.clj +0 -79
- package/compiler/test_json.clj +0 -10
- package/compiler/test_lambda.clj +0 -153
- package/compiler/test_pcmd.clj +0 -32
- package/compiler/test_pcmd2.clj +0 -29
- package/compiler/test_plugin.clj +0 -237
- package/compiler/test_readfile.clj +0 -13
- package/compiler/test_reveal.clj +0 -19
- package/compiler/test_slides.clj +0 -312
- package/compiler/test_types.clj +0 -143
- package/compiler/test_types2.clj +0 -49
- package/compiler/test_types3.clj +0 -53
- package/compiler/test_var.clj +0 -40
- package/compiler/tonpm.bat +0 -14
- package/compiler/tonpm2.bat +0 -12
- package/compiler/ui_plugin.clj +0 -507
- package/compiler/ui_plugin2.clj +0 -427
- package/compiler/update-git.bat +0 -3
- package/compiler/vcomp.bat +0 -4
- package/compiler/viewbuilder_Android.clj +0 -176
- package/compiler/viewbuilder_Web.clj +0 -105
- package/dist/bin/api.js +0 -32422
- package/dist/bin/compiler.d.ts +0 -1638
- package/dist/bin/compiler.js +0 -32444
- package/examples/3D/bin/test_3d.js +0 -329
- package/examples/3D/test_3d.clj +0 -385
- package/examples/EVGColor/EVGColor.clj +0 -310
- package/examples/EVGColor/EVGColorContext.clj +0 -176
- package/examples/EVGColor/bin/EVGColor.js +0 -286
- package/examples/EVGColor/bin/minimized.js +0 -286
- package/examples/SVGPath/SVGPath.clj +0 -625
- package/examples/SVGPath/Vec2.clj +0 -103
- package/examples/SVGPath/bin/SVGPath.cpp +0 -887
- package/examples/SVGPath/bin/SVGPath.js +0 -682
- package/examples/SVGPath/bin/SVGPath.ts +0 -711
- package/examples/SVGPath/bin/minimized.js +0 -578
- package/examples/SVGPath/bin/variant.hpp +0 -2416
- package/examples/minification/Vec2.clj +0 -103
- package/examples/minification/bin/minified.js +0 -44
- package/examples/minification/bin/test.js +0 -117
- package/examples/minification/test.clj +0 -13
- package/fiddle/VirtualCompiler.js +0 -23495
- package/fiddle/browser_editor.js +0 -13240
- package/fiddle/compileEnv.js +0 -1
- package/fiddle/compileEnv.json +0 -1
- package/fiddle/lang_data.js +0 -1
- package/index.html +0 -18
- package/native/httpd/HttpTester.clj +0 -33
- package/native/httpd/RangerWebService.clj +0 -81
- package/operators.md +0 -290
- package/tsconfig.json +0 -29
- package/versions/cpp/compiler.cpp +0 -15032
- package/versions/es6/compiler.js +0 -12860
- package/versions/go/compiler.go +0 -21338
- package/versions/java/AfterCodeNode.java +0 -4
- package/versions/java/ClassJoinPoint.java +0 -6
- package/versions/java/CodeFile.java +0 -42
- package/versions/java/CodeFileSystem.java +0 -72
- package/versions/java/CodeNode.java +0 -807
- package/versions/java/CodeSlice.java +0 -13
- package/versions/java/CodeWriter.java +0 -185
- package/versions/java/ColorConsole.java +0 -8
- package/versions/java/CompilerInterface.java +0 -213
- package/versions/java/DictNode.java +0 -353
- package/versions/java/LiveCompiler.java +0 -772
- package/versions/java/NodeEvalState.java +0 -24
- package/versions/java/OpFindResult.java +0 -6
- package/versions/java/RangerAppArrayValue.java +0 -7
- package/versions/java/RangerAppClassDesc.java +0 -217
- package/versions/java/RangerAppEnum.java +0 -14
- package/versions/java/RangerAppFunctionDesc.java +0 -20
- package/versions/java/RangerAppHashValue.java +0 -11
- package/versions/java/RangerAppInterfaceImpl.java +0 -6
- package/versions/java/RangerAppMethodVariants.java +0 -6
- package/versions/java/RangerAppParamDesc.java +0 -321
- package/versions/java/RangerAppTodo.java +0 -6
- package/versions/java/RangerAppValue.java +0 -10
- package/versions/java/RangerAppWriterContext.java +0 -800
- package/versions/java/RangerArgMatch.java +0 -317
- package/versions/java/RangerBackReference.java +0 -7
- package/versions/java/RangerCSharpClassWriter.java +0 -287
- package/versions/java/RangerCompilerMessage.java +0 -9
- package/versions/java/RangerCppClassWriter.java +0 -725
- package/versions/java/RangerFlowParser.java +0 -2142
- package/versions/java/RangerGenericClassWriter.java +0 -367
- package/versions/java/RangerGolangClassWriter.java +0 -1379
- package/versions/java/RangerJava7ClassWriter.java +0 -652
- package/versions/java/RangerJavaScriptClassWriter.java +0 -305
- package/versions/java/RangerKotlinClassWriter.java +0 -380
- package/versions/java/RangerLispParser.java +0 -845
- package/versions/java/RangerNodeValue.java +0 -9
- package/versions/java/RangerPHPClassWriter.java +0 -527
- package/versions/java/RangerParamEventHandler.java +0 -6
- package/versions/java/RangerParamEventList.java +0 -5
- package/versions/java/RangerParamEventMap.java +0 -27
- package/versions/java/RangerRangerClassWriter.java +0 -268
- package/versions/java/RangerRefForce.java +0 -7
- package/versions/java/RangerScalaClassWriter.java +0 -365
- package/versions/java/RangerSerializeClass.java +0 -148
- package/versions/java/RangerSwift3ClassWriter.java +0 -548
- package/versions/java/RangerTypeClass.java +0 -17
- package/versions/java/SourceCode.java +0 -65
- package/versions/php/compiler.php +0 -13830
- package/versions/swift3/compiler.swift +0 -12542
- /package/{lib/ACEEditor.clj → dist/lib/ACEEditor.rgr} +0 -0
- /package/{lib/SQL.clj → dist/lib/SQL.rgr} +0 -0
- /package/{lib/ServiceLib.clj → dist/lib/ServiceLib.rgr} +0 -0
- /package/{lib/Time.clj → dist/lib/Time.rgr} +0 -0
- /package/{lib/TypedArrays.clj → dist/lib/TypedArrays.rgr} +0 -0
- /package/{lib/WebLib.clj → dist/lib/WebLib.rgr} +0 -0
- /package/{lib/WebServerLib.clj → dist/lib/WebServerLib.rgr} +0 -0
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
#include <memory>
|
|
2
|
-
#include "variant.hpp"
|
|
3
|
-
#include <map>
|
|
4
|
-
#include <functional>
|
|
5
|
-
#include <vector>
|
|
6
|
-
#include <string>
|
|
7
|
-
#include <sstream>
|
|
8
|
-
#include <iostream>
|
|
9
|
-
|
|
10
|
-
// define classes here to avoid compiler errors
|
|
11
|
-
class GridRow;
|
|
12
|
-
class Grid;
|
|
13
|
-
class day_three_part_two;
|
|
14
|
-
class operatorsOf;
|
|
15
|
-
|
|
16
|
-
typedef mpark::variant<std::shared_ptr<GridRow>, std::shared_ptr<Grid>, std::shared_ptr<day_three_part_two>, int, std::string, bool, double> r_union_Any;
|
|
17
|
-
|
|
18
|
-
template <class T>
|
|
19
|
-
class r_optional_primitive {
|
|
20
|
-
public:
|
|
21
|
-
bool has_value;
|
|
22
|
-
T value;
|
|
23
|
-
r_optional_primitive<T> & operator=(const r_optional_primitive<T> & rhs) {
|
|
24
|
-
has_value = rhs.has_value;
|
|
25
|
-
value = rhs.value;
|
|
26
|
-
return *this;
|
|
27
|
-
}
|
|
28
|
-
r_optional_primitive<T> & operator=(const T a_value) {
|
|
29
|
-
has_value = true;
|
|
30
|
-
value = a_value;
|
|
31
|
-
return *this;
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
template<typename T>
|
|
37
|
-
r_optional_primitive<int> cpp_get_map_int_value( std::map<int, int> m , int key) {
|
|
38
|
-
r_optional_primitive<int> result;
|
|
39
|
-
try {
|
|
40
|
-
result.value = m[key];
|
|
41
|
-
result.has_value = true;
|
|
42
|
-
} catch (...) {
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
return result;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
template <typename T>
|
|
49
|
-
std::string join(const T& v, const std::string& delim) {
|
|
50
|
-
std::ostringstream s;
|
|
51
|
-
for (const auto& i : v) {
|
|
52
|
-
if (&i != &v[0]) {
|
|
53
|
-
s << delim;
|
|
54
|
-
}
|
|
55
|
-
s << i;
|
|
56
|
-
}
|
|
57
|
-
return s.str();
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
// header definitions
|
|
62
|
-
class GridRow : public std::enable_shared_from_this<GridRow> {
|
|
63
|
-
public :
|
|
64
|
-
std::map<int,int> values;
|
|
65
|
-
/* class constructor */
|
|
66
|
-
GridRow( );
|
|
67
|
-
};
|
|
68
|
-
class Grid : public std::enable_shared_from_this<Grid> {
|
|
69
|
-
public :
|
|
70
|
-
std::map<int,std::shared_ptr<GridRow>> cols;
|
|
71
|
-
int minx;
|
|
72
|
-
int maxx;
|
|
73
|
-
int miny;
|
|
74
|
-
int maxy;
|
|
75
|
-
int turtle_limit;
|
|
76
|
-
int first_largest;
|
|
77
|
-
/* class constructor */
|
|
78
|
-
Grid( );
|
|
79
|
-
/* instance methods */
|
|
80
|
-
int getValue( int x , int y );
|
|
81
|
-
void setValue( int x , int y , int value );
|
|
82
|
-
int getAdjacentSum( int x , int y );
|
|
83
|
-
void printGrid();
|
|
84
|
-
};
|
|
85
|
-
class day_three_part_two : public std::enable_shared_from_this<day_three_part_two> {
|
|
86
|
-
public :
|
|
87
|
-
/* class constructor */
|
|
88
|
-
day_three_part_two( );
|
|
89
|
-
/* static methods */
|
|
90
|
-
static int distance( int data );
|
|
91
|
-
static void main();
|
|
92
|
-
};
|
|
93
|
-
class operatorsOf : public std::enable_shared_from_this<operatorsOf> {
|
|
94
|
-
public :
|
|
95
|
-
/* class constructor */
|
|
96
|
-
operatorsOf( );
|
|
97
|
-
/* static methods */
|
|
98
|
-
static std::vector<std::string> map_2( std::vector<int> __self , std::function<std::string(int, int)> cb );
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
int __g_argc;
|
|
102
|
-
char **__g_argv;
|
|
103
|
-
GridRow::GridRow( ) {
|
|
104
|
-
}
|
|
105
|
-
Grid::Grid( ) {
|
|
106
|
-
this->minx = 0;
|
|
107
|
-
this->maxx = 0;
|
|
108
|
-
this->miny = 0;
|
|
109
|
-
this->maxy = 0;
|
|
110
|
-
this->turtle_limit = 0;
|
|
111
|
-
this->first_largest = 0;
|
|
112
|
-
}
|
|
113
|
-
int Grid::getValue( int x , int y ) {
|
|
114
|
-
if ( cols.count(y) > 0 ) {
|
|
115
|
-
std::shared_ptr<GridRow> col = cols[y];
|
|
116
|
-
if ( col->values.count(x) > 0 ) {
|
|
117
|
-
return /*unwrap int*/(cpp_get_map_int_value<int>(col->values, x)).value;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
return 0;
|
|
121
|
-
}
|
|
122
|
-
void Grid::setValue( int x , int y , int value ) {
|
|
123
|
-
if ( (value > turtle_limit) && (first_largest == 0) ) {
|
|
124
|
-
first_largest = value;
|
|
125
|
-
}
|
|
126
|
-
if ( cols.count(y) > 0 ) {
|
|
127
|
-
std::shared_ptr<GridRow> col = cols[y];
|
|
128
|
-
col->values[x] = value;
|
|
129
|
-
} else {
|
|
130
|
-
std::shared_ptr<GridRow> newCol = std::make_shared<GridRow>();
|
|
131
|
-
cols[y] = newCol;
|
|
132
|
-
newCol->values[x] = value;
|
|
133
|
-
}
|
|
134
|
-
if ( x < minx ) {
|
|
135
|
-
minx = x;
|
|
136
|
-
}
|
|
137
|
-
if ( x > maxx ) {
|
|
138
|
-
maxx = x;
|
|
139
|
-
}
|
|
140
|
-
if ( y < miny ) {
|
|
141
|
-
miny = y;
|
|
142
|
-
}
|
|
143
|
-
if ( y > maxy ) {
|
|
144
|
-
maxy = y;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
int Grid::getAdjacentSum( int x , int y ) {
|
|
148
|
-
std::function<int(int, int)> v = [&, x, y](int dx, int dy) mutable {
|
|
149
|
-
return (shared_from_this())->getValue((x + dx), (y + dy));
|
|
150
|
-
};
|
|
151
|
-
return ((((((v(-1, -1) + v(-1, 0)) + v(-1, 1)) + v(0, -1)) + v(0, 1)) + v(1, -1)) + v(1, 0)) + v(1, 1);
|
|
152
|
-
}
|
|
153
|
-
void Grid::printGrid() {
|
|
154
|
-
int xx = minx;
|
|
155
|
-
int yy = miny;
|
|
156
|
-
while (yy <= maxy) {
|
|
157
|
-
xx = minx;
|
|
158
|
-
std::vector<int> row;
|
|
159
|
-
while (xx <= maxx) {
|
|
160
|
-
row.push_back( (shared_from_this())->getValue(xx, yy) );
|
|
161
|
-
xx = xx + 1;
|
|
162
|
-
}
|
|
163
|
-
std::cout << join( operatorsOf::map_2(row, [&](int item, int index) mutable {
|
|
164
|
-
return std::to_string(item);
|
|
165
|
-
}) , std::string(" ")) << std::endl;
|
|
166
|
-
yy = yy + 1;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
day_three_part_two::day_three_part_two( ) {
|
|
170
|
-
}
|
|
171
|
-
int day_three_part_two::distance( int data ) {
|
|
172
|
-
std::shared_ptr<Grid> myGrid = std::make_shared<Grid>();
|
|
173
|
-
myGrid->turtle_limit = data;
|
|
174
|
-
myGrid->setValue(0, 0, 1);
|
|
175
|
-
int i = 0;
|
|
176
|
-
int j = 0;
|
|
177
|
-
std::function<void(int, int, int)> moveTurtle = [&](int dx, int dy, int steps) mutable {
|
|
178
|
-
int cnt = steps;
|
|
179
|
-
while (cnt > 0) {
|
|
180
|
-
i = i + dx;
|
|
181
|
-
j = j + dy;
|
|
182
|
-
int sum = myGrid->getAdjacentSum(i, j);
|
|
183
|
-
myGrid->setValue(i, j, sum);
|
|
184
|
-
cnt = cnt - 1;
|
|
185
|
-
}
|
|
186
|
-
};
|
|
187
|
-
int step = 2;
|
|
188
|
-
while (myGrid->first_largest == 0) {
|
|
189
|
-
moveTurtle(1, 0, 1);
|
|
190
|
-
moveTurtle(0, -1, step - 1);
|
|
191
|
-
moveTurtle(-1, 0, step);
|
|
192
|
-
moveTurtle(0, 1, step);
|
|
193
|
-
moveTurtle(1, 0, step);
|
|
194
|
-
step = step + 2;
|
|
195
|
-
}
|
|
196
|
-
myGrid->printGrid();
|
|
197
|
-
std::cout << std::string("the first largest was ") + std::to_string(myGrid->first_largest) << std::endl;
|
|
198
|
-
return myGrid->turtle_limit;
|
|
199
|
-
}
|
|
200
|
-
int main(int argc, char* argv[]) {
|
|
201
|
-
__g_argc = argc;
|
|
202
|
-
__g_argv = argv;
|
|
203
|
-
day_three_part_two::distance(289326);
|
|
204
|
-
return 0;
|
|
205
|
-
}
|
|
206
|
-
operatorsOf::operatorsOf( ) {
|
|
207
|
-
}
|
|
208
|
-
std::vector<std::string> operatorsOf::map_2( std::vector<int> __self , std::function<std::string(int, int)> cb ) {
|
|
209
|
-
/** unused: int __len = (int)(__self.size()) **/ ;
|
|
210
|
-
std::vector<std::string> res;
|
|
211
|
-
for ( int i = 0; i != (int)(__self.size()); i++) {
|
|
212
|
-
int it = __self.at(i);
|
|
213
|
-
res.push_back( cb(it, i) );
|
|
214
|
-
}
|
|
215
|
-
return res;
|
|
216
|
-
}
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
package main
|
|
2
|
-
import (
|
|
3
|
-
"strconv"
|
|
4
|
-
"fmt"
|
|
5
|
-
"strings"
|
|
6
|
-
)
|
|
7
|
-
|
|
8
|
-
type GoNullable struct {
|
|
9
|
-
value interface{}
|
|
10
|
-
has_value bool
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
func r_has_key_int64_GridRow( a map[int64]*GridRow, key int64 ) bool {
|
|
14
|
-
_, ok := a[key]
|
|
15
|
-
return ok
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
func r_get_int64_GridRow( a map[int64]*GridRow, key int64 ) *GoNullable {
|
|
19
|
-
res := new(GoNullable)
|
|
20
|
-
v, ok := a[key]
|
|
21
|
-
if ok {
|
|
22
|
-
res.has_value = true
|
|
23
|
-
res.value = v
|
|
24
|
-
return res
|
|
25
|
-
}
|
|
26
|
-
res.has_value = false
|
|
27
|
-
return res
|
|
28
|
-
}
|
|
29
|
-
func r_has_key_int64_int64( a map[int64]int64, key int64 ) bool {
|
|
30
|
-
_, ok := a[key]
|
|
31
|
-
return ok
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
func r_get_int64_int64( a map[int64]int64, key int64 ) *GoNullable {
|
|
35
|
-
res := new(GoNullable)
|
|
36
|
-
v, ok := a[key]
|
|
37
|
-
if ok {
|
|
38
|
-
res.has_value = true
|
|
39
|
-
res.value = v
|
|
40
|
-
return res
|
|
41
|
-
}
|
|
42
|
-
res.has_value = false
|
|
43
|
-
return res
|
|
44
|
-
}
|
|
45
|
-
type GridRow struct {
|
|
46
|
-
values map[int64]int64 `json:"values"`
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
func CreateNew_GridRow() *GridRow {
|
|
50
|
-
me := new(GridRow)
|
|
51
|
-
me.values = make(map[int64]int64)
|
|
52
|
-
return me;
|
|
53
|
-
}
|
|
54
|
-
type Grid struct {
|
|
55
|
-
cols map[int64]*GridRow `json:"cols"`
|
|
56
|
-
minx int64 `json:"minx"`
|
|
57
|
-
maxx int64 `json:"maxx"`
|
|
58
|
-
miny int64 `json:"miny"`
|
|
59
|
-
maxy int64 `json:"maxy"`
|
|
60
|
-
turtle_limit int64 `json:"turtle_limit"`
|
|
61
|
-
first_largest int64 `json:"first_largest"`
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
func CreateNew_Grid() *Grid {
|
|
65
|
-
me := new(Grid)
|
|
66
|
-
me.cols = make(map[int64]*GridRow)
|
|
67
|
-
me.minx = int64(0)
|
|
68
|
-
me.maxx = int64(0)
|
|
69
|
-
me.miny = int64(0)
|
|
70
|
-
me.maxy = int64(0)
|
|
71
|
-
me.turtle_limit = int64(0)
|
|
72
|
-
me.first_largest = int64(0)
|
|
73
|
-
return me;
|
|
74
|
-
}
|
|
75
|
-
func (this *Grid) getValue (x int64, y int64) int64 {
|
|
76
|
-
if r_has_key_int64_GridRow(this.cols, y) {
|
|
77
|
-
var col *GoNullable = new(GoNullable);
|
|
78
|
-
col = r_get_int64_GridRow(this.cols, y);
|
|
79
|
-
if r_has_key_int64_int64(col.value.(*GridRow).values, x) {
|
|
80
|
-
return (r_get_int64_int64(col.value.(*GridRow).values, x)).value.(int64)
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return int64(0)
|
|
84
|
-
}
|
|
85
|
-
func (this *Grid) setValue (x int64, y int64, value int64) () {
|
|
86
|
-
if (value > this.turtle_limit) && (this.first_largest == int64(0)) {
|
|
87
|
-
this.first_largest = value;
|
|
88
|
-
}
|
|
89
|
-
if r_has_key_int64_GridRow(this.cols, y) {
|
|
90
|
-
var col *GoNullable = new(GoNullable);
|
|
91
|
-
col = r_get_int64_GridRow(this.cols, y);
|
|
92
|
-
col.value.(*GridRow).values[x] = value;
|
|
93
|
-
} else {
|
|
94
|
-
var newCol *GridRow= CreateNew_GridRow();
|
|
95
|
-
this.cols[y] = newCol;
|
|
96
|
-
newCol.values[x] = value;
|
|
97
|
-
}
|
|
98
|
-
if x < this.minx {
|
|
99
|
-
this.minx = x;
|
|
100
|
-
}
|
|
101
|
-
if x > this.maxx {
|
|
102
|
-
this.maxx = x;
|
|
103
|
-
}
|
|
104
|
-
if y < this.miny {
|
|
105
|
-
this.miny = y;
|
|
106
|
-
}
|
|
107
|
-
if y > this.maxy {
|
|
108
|
-
this.maxy = y;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
func (this *Grid) getAdjacentSum (x int64, y int64) int64 {
|
|
112
|
-
var v func(int64, int64) int64= func (dx int64, dy int64) int64 {
|
|
113
|
-
return (this).getValue((x + dx), (y + dy))
|
|
114
|
-
};
|
|
115
|
-
return ((((((v(int64(-1), int64(-1)) + v(int64(-1), int64(0))) + v(int64(-1), int64(1))) + v(int64(0), int64(-1))) + v(int64(0), int64(1))) + v(int64(1), int64(-1))) + v(int64(1), int64(0))) + v(int64(1), int64(1))
|
|
116
|
-
}
|
|
117
|
-
func (this *Grid) printGrid () () {
|
|
118
|
-
var xx int64= this.minx;
|
|
119
|
-
var yy int64= this.miny;
|
|
120
|
-
for yy <= this.maxy {
|
|
121
|
-
xx = this.minx;
|
|
122
|
-
var row []int64 = make([]int64, 0);
|
|
123
|
-
for xx <= this.maxx {
|
|
124
|
-
row = append(row,(this).getValue(xx, yy));
|
|
125
|
-
xx = xx + int64(1);
|
|
126
|
-
}
|
|
127
|
-
fmt.Println( strings.Join(operatorsOf_static_map_2(row, func (item int64, index int64) string {
|
|
128
|
-
return strconv.FormatInt(item, 10)
|
|
129
|
-
}), " ") )
|
|
130
|
-
yy = yy + int64(1);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
type day_three_part_two struct {
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
func CreateNew_day_three_part_two() *day_three_part_two {
|
|
137
|
-
me := new(day_three_part_two)
|
|
138
|
-
return me;
|
|
139
|
-
}
|
|
140
|
-
func day_three_part_two_static_distance(data int64) int64 {
|
|
141
|
-
var myGrid *Grid= CreateNew_Grid();
|
|
142
|
-
myGrid.turtle_limit = data;
|
|
143
|
-
myGrid.setValue(int64(0), int64(0), int64(1));
|
|
144
|
-
var i int64= int64(0);
|
|
145
|
-
var j int64= int64(0);
|
|
146
|
-
var moveTurtle func(int64, int64, int64) ()= func (dx int64, dy int64, steps int64) () {
|
|
147
|
-
var cnt int64= steps;
|
|
148
|
-
for cnt > int64(0) {
|
|
149
|
-
i = i + dx;
|
|
150
|
-
j = j + dy;
|
|
151
|
-
var sum int64= myGrid.getAdjacentSum(i, j);
|
|
152
|
-
myGrid.setValue(i, j, sum);
|
|
153
|
-
cnt = cnt - int64(1);
|
|
154
|
-
}
|
|
155
|
-
};
|
|
156
|
-
var step int64= int64(2);
|
|
157
|
-
for myGrid.first_largest == int64(0) {
|
|
158
|
-
moveTurtle(int64(1), int64(0), int64(1));
|
|
159
|
-
moveTurtle(int64(0), int64(-1), step - int64(1));
|
|
160
|
-
moveTurtle(int64(-1), int64(0), step);
|
|
161
|
-
moveTurtle(int64(0), int64(1), step);
|
|
162
|
-
moveTurtle(int64(1), int64(0), step);
|
|
163
|
-
step = step + int64(2);
|
|
164
|
-
}
|
|
165
|
-
myGrid.printGrid();
|
|
166
|
-
fmt.Println( strings.Join([]string{ "the first largest was ",strconv.FormatInt(myGrid.first_largest, 10) }, "") )
|
|
167
|
-
return myGrid.turtle_limit
|
|
168
|
-
}
|
|
169
|
-
func main() {
|
|
170
|
-
day_three_part_two_static_distance(int64(289326));
|
|
171
|
-
}
|
|
172
|
-
type operatorsOf struct {
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
func CreateNew_operatorsOf() *operatorsOf {
|
|
176
|
-
me := new(operatorsOf)
|
|
177
|
-
return me;
|
|
178
|
-
}
|
|
179
|
-
func operatorsOf_static_map_2(__self []int64, cb func(int64, int64) string) []string {
|
|
180
|
-
/** unused: __len*/
|
|
181
|
-
var res []string = make([]string, 0);
|
|
182
|
-
var i int64 = 0;
|
|
183
|
-
for ; i < int64(len(__self)) ; i++ {
|
|
184
|
-
it := __self[i];
|
|
185
|
-
res = append(res,cb(it, i));
|
|
186
|
-
}
|
|
187
|
-
return res
|
|
188
|
-
}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
class GridRow {
|
|
2
|
-
constructor() {
|
|
3
|
-
this.values = {};
|
|
4
|
-
}
|
|
5
|
-
}
|
|
6
|
-
class Grid {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.cols = {};
|
|
9
|
-
this.minx = 0;
|
|
10
|
-
this.maxx = 0;
|
|
11
|
-
this.miny = 0;
|
|
12
|
-
this.maxy = 0;
|
|
13
|
-
this.turtle_limit = 0;
|
|
14
|
-
this.first_largest = 0;
|
|
15
|
-
}
|
|
16
|
-
getValue (x, y) {
|
|
17
|
-
if ( ( typeof(this.cols[y] ) != "undefined" && this.cols.hasOwnProperty(y) ) ) {
|
|
18
|
-
const col = this.cols[y];
|
|
19
|
-
if ( ( typeof(col.values[x] ) != "undefined" && col.values.hasOwnProperty(x) ) ) {
|
|
20
|
-
return (col.values[x]);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return 0;
|
|
24
|
-
};
|
|
25
|
-
setValue (x, y, value) {
|
|
26
|
-
if ( (value > this.turtle_limit) && (this.first_largest == 0) ) {
|
|
27
|
-
this.first_largest = value;
|
|
28
|
-
}
|
|
29
|
-
if ( ( typeof(this.cols[y] ) != "undefined" && this.cols.hasOwnProperty(y) ) ) {
|
|
30
|
-
const col = this.cols[y];
|
|
31
|
-
col.values[x] = value;
|
|
32
|
-
} else {
|
|
33
|
-
const newCol = new GridRow();
|
|
34
|
-
this.cols[y] = newCol;
|
|
35
|
-
newCol.values[x] = value;
|
|
36
|
-
}
|
|
37
|
-
if ( x < this.minx ) {
|
|
38
|
-
this.minx = x;
|
|
39
|
-
}
|
|
40
|
-
if ( x > this.maxx ) {
|
|
41
|
-
this.maxx = x;
|
|
42
|
-
}
|
|
43
|
-
if ( y < this.miny ) {
|
|
44
|
-
this.miny = y;
|
|
45
|
-
}
|
|
46
|
-
if ( y > this.maxy ) {
|
|
47
|
-
this.maxy = y;
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
getAdjacentSum (x, y) {
|
|
51
|
-
const v = ((dx, dy) => {
|
|
52
|
-
return (this).getValue((x + dx), (y + dy));
|
|
53
|
-
});
|
|
54
|
-
return ((((((v(-1, -1) + v(-1, 0)) + v(-1, 1)) + v(0, -1)) + v(0, 1)) + v(1, -1)) + v(1, 0)) + v(1, 1);
|
|
55
|
-
};
|
|
56
|
-
printGrid () {
|
|
57
|
-
let xx = this.minx;
|
|
58
|
-
let yy = this.miny;
|
|
59
|
-
while (yy <= this.maxy) {
|
|
60
|
-
xx = this.minx;
|
|
61
|
-
let row = [];
|
|
62
|
-
while (xx <= this.maxx) {
|
|
63
|
-
row.push((this).getValue(xx, yy));
|
|
64
|
-
xx = xx + 1;
|
|
65
|
-
};
|
|
66
|
-
console.log(operatorsOf.map_2(row, ((item, index) => {
|
|
67
|
-
return (item.toString());
|
|
68
|
-
})).join(" "));
|
|
69
|
-
yy = yy + 1;
|
|
70
|
-
};
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
class day_three_part_two {
|
|
74
|
-
constructor() {
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
day_three_part_two.distance = function(data) {
|
|
78
|
-
const myGrid = new Grid();
|
|
79
|
-
myGrid.turtle_limit = data;
|
|
80
|
-
myGrid.setValue(0, 0, 1);
|
|
81
|
-
let i = 0;
|
|
82
|
-
let j = 0;
|
|
83
|
-
const moveTurtle = ((dx, dy, steps) => {
|
|
84
|
-
let cnt = steps;
|
|
85
|
-
while (cnt > 0) {
|
|
86
|
-
i = i + dx;
|
|
87
|
-
j = j + dy;
|
|
88
|
-
const sum = myGrid.getAdjacentSum(i, j);
|
|
89
|
-
myGrid.setValue(i, j, sum);
|
|
90
|
-
cnt = cnt - 1;
|
|
91
|
-
};
|
|
92
|
-
});
|
|
93
|
-
let step = 2;
|
|
94
|
-
while (myGrid.first_largest == 0) {
|
|
95
|
-
moveTurtle(1, 0, 1);
|
|
96
|
-
moveTurtle(0, -1, step - 1);
|
|
97
|
-
moveTurtle(-1, 0, step);
|
|
98
|
-
moveTurtle(0, 1, step);
|
|
99
|
-
moveTurtle(1, 0, step);
|
|
100
|
-
step = step + 2;
|
|
101
|
-
};
|
|
102
|
-
myGrid.printGrid();
|
|
103
|
-
console.log("the first largest was " + myGrid.first_largest);
|
|
104
|
-
return myGrid.turtle_limit;
|
|
105
|
-
};
|
|
106
|
-
class operatorsOf {
|
|
107
|
-
constructor() {
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
operatorsOf.map_2 = function(__self, cb) {
|
|
111
|
-
/** unused: const __len = __self.length **/
|
|
112
|
-
let res = [];
|
|
113
|
-
for ( let i = 0; i < __self.length; i++) {
|
|
114
|
-
var it = __self[i];
|
|
115
|
-
res.push(cb(it, i));
|
|
116
|
-
};
|
|
117
|
-
return res;
|
|
118
|
-
};
|
|
119
|
-
/* static JavaSript main routine at the end of the JS file */
|
|
120
|
-
function __js_main() {
|
|
121
|
-
day_three_part_two.distance(289326);
|
|
122
|
-
}
|
|
123
|
-
__js_main();
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
<?php
|
|
2
|
-
|
|
3
|
-
class GridRow {
|
|
4
|
-
var $values;
|
|
5
|
-
function __construct( ) {
|
|
6
|
-
$this->values = array();
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
class Grid {
|
|
10
|
-
var $cols;
|
|
11
|
-
var $minx;
|
|
12
|
-
var $maxx;
|
|
13
|
-
var $miny;
|
|
14
|
-
var $maxy;
|
|
15
|
-
var $turtle_limit;
|
|
16
|
-
var $first_largest;
|
|
17
|
-
function __construct( ) {
|
|
18
|
-
$this->cols = array();
|
|
19
|
-
$this->minx = 0;
|
|
20
|
-
$this->maxx = 0;
|
|
21
|
-
$this->miny = 0;
|
|
22
|
-
$this->maxy = 0;
|
|
23
|
-
$this->turtle_limit = 0;
|
|
24
|
-
$this->first_largest = 0;
|
|
25
|
-
}
|
|
26
|
-
function getValue( $x , $y ) {
|
|
27
|
-
if ( array_key_exists($y , $this->cols ) ) {
|
|
28
|
-
$col = $this->cols[$y];
|
|
29
|
-
if ( array_key_exists($x , $col->values ) ) {
|
|
30
|
-
return ($col->values[$x]);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return 0;
|
|
34
|
-
}
|
|
35
|
-
function setValue( $x , $y , $value ) {
|
|
36
|
-
if ( ($value > $this->turtle_limit) && ($this->first_largest == 0) ) {
|
|
37
|
-
$this->first_largest = $value;
|
|
38
|
-
}
|
|
39
|
-
if ( array_key_exists($y , $this->cols ) ) {
|
|
40
|
-
$col = $this->cols[$y];
|
|
41
|
-
$col->values[$x] = $value;
|
|
42
|
-
} else {
|
|
43
|
-
$newCol = new GridRow();
|
|
44
|
-
$this->cols[$y] = $newCol;
|
|
45
|
-
$newCol->values[$x] = $value;
|
|
46
|
-
}
|
|
47
|
-
if ( $x < $this->minx ) {
|
|
48
|
-
$this->minx = $x;
|
|
49
|
-
}
|
|
50
|
-
if ( $x > $this->maxx ) {
|
|
51
|
-
$this->maxx = $x;
|
|
52
|
-
}
|
|
53
|
-
if ( $y < $this->miny ) {
|
|
54
|
-
$this->miny = $y;
|
|
55
|
-
}
|
|
56
|
-
if ( $y > $this->maxy ) {
|
|
57
|
-
$this->maxy = $y;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
function getAdjacentSum( $x , $y ) {
|
|
61
|
-
$v = (function ($dx, $dy) use ( &$x, &$y) {
|
|
62
|
-
return ($this)->getValue(($x + $dx), ($y + $dy));
|
|
63
|
-
// captured var x
|
|
64
|
-
// captured var y
|
|
65
|
-
});
|
|
66
|
-
return ((((((call_user_func($v, -1, -1) + call_user_func($v, -1, 0)) + call_user_func($v, -1, 1)) + call_user_func($v, 0, -1)) + call_user_func($v, 0, 1)) + call_user_func($v, 1, -1)) + call_user_func($v, 1, 0)) + call_user_func($v, 1, 1);
|
|
67
|
-
}
|
|
68
|
-
function printGrid() {
|
|
69
|
-
$xx = $this->minx;
|
|
70
|
-
$yy = $this->miny;
|
|
71
|
-
while ($yy <= $this->maxy) {
|
|
72
|
-
$xx = $this->minx;
|
|
73
|
-
$row = array();
|
|
74
|
-
while ($xx <= $this->maxx) {
|
|
75
|
-
array_push($row, ($this)->getValue($xx, $yy));
|
|
76
|
-
$xx = $xx + 1;
|
|
77
|
-
}
|
|
78
|
-
echo( implode(" ", operatorsOf::map_2($row, (function ($item, $index) {
|
|
79
|
-
return strval($item);
|
|
80
|
-
}))) . "\n");
|
|
81
|
-
$yy = $yy + 1;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
class day_three_part_two {
|
|
86
|
-
function __construct( ) {
|
|
87
|
-
}
|
|
88
|
-
public static function distance( $data ) {
|
|
89
|
-
$myGrid = new Grid();
|
|
90
|
-
$myGrid->turtle_limit = $data;
|
|
91
|
-
$myGrid->setValue(0, 0, 1);
|
|
92
|
-
$i = 0;
|
|
93
|
-
$j = 0;
|
|
94
|
-
$moveTurtle = (function ($dx, $dy, $steps) use ( &$i, &$j, &$myGrid) {
|
|
95
|
-
$cnt = $steps;
|
|
96
|
-
while ($cnt > 0) {
|
|
97
|
-
$i = $i + $dx;
|
|
98
|
-
$j = $j + $dy;
|
|
99
|
-
$sum = $myGrid->getAdjacentSum($i, $j);
|
|
100
|
-
$myGrid->setValue($i, $j, $sum);
|
|
101
|
-
$cnt = $cnt - 1;
|
|
102
|
-
}
|
|
103
|
-
// captured var i
|
|
104
|
-
// captured var j
|
|
105
|
-
// captured var myGrid
|
|
106
|
-
});
|
|
107
|
-
$step = 2;
|
|
108
|
-
while ($myGrid->first_largest == 0) {
|
|
109
|
-
call_user_func($moveTurtle, 1, 0, 1);
|
|
110
|
-
call_user_func($moveTurtle, 0, -1, $step - 1);
|
|
111
|
-
call_user_func($moveTurtle, -1, 0, $step);
|
|
112
|
-
call_user_func($moveTurtle, 0, 1, $step);
|
|
113
|
-
call_user_func($moveTurtle, 1, 0, $step);
|
|
114
|
-
$step = $step + 2;
|
|
115
|
-
}
|
|
116
|
-
$myGrid->printGrid();
|
|
117
|
-
echo( "the first largest was " . $myGrid->first_largest . "\n");
|
|
118
|
-
return $myGrid->turtle_limit;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
/* static PHP main routine */
|
|
122
|
-
day_three_part_two::distance(289326);
|
|
123
|
-
class operatorsOf {
|
|
124
|
-
function __construct( ) {
|
|
125
|
-
}
|
|
126
|
-
public static function map_2( $__self , $cb ) {
|
|
127
|
-
/** unused: $__len = count($__self) **/ ;
|
|
128
|
-
$res = array();
|
|
129
|
-
for ( $i = 0; $i < count($__self); $i++) {
|
|
130
|
-
$it = $__self[$i];
|
|
131
|
-
array_push($res, call_user_func($cb, $it, $i));
|
|
132
|
-
}
|
|
133
|
-
return $res;
|
|
134
|
-
}
|
|
135
|
-
}
|