Created
November 22, 2020 12:02
-
-
Save paulk-asert/6f4b349f51d8a3e59d56dfefcb2edbff to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "We use the `choco-solver` constraint programming library and `tablesaw-beakerx` to get a nice table output." | |
}, | |
{ | |
"metadata": { | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "%%classpath add mvn\norg.choco-solver choco-solver 4.10.5\ntech.tablesaw tablesaw-beakerx 0.38.1", | |
"execution_count": 11, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"method": "display_data", | |
"application/vnd.jupyter.widget-view+json": { | |
"version_minor": 0, | |
"model_id": "", | |
"version_major": 2 | |
} | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "%%latex\nConstraint programming solution for pythagorean triples, i.e. $x^2 + y^2 = z^2$ for $x$, $y$, $z$ less than 30." | |
}, | |
{ | |
"metadata": { | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "import org.chocosolver.solver.Model\nimport tech.tablesaw.api.*\n\ndef table = Table.create('triples', *['x', 'y', 'z'].collect{ IntColumn.create(it) })\nnew Model('Pythagorean-triple').with {\n def x = intVar(1, 30)\n def y = intVar(1, 30)\n def z = intVar(1, 30)\n y.gt(x).post() // y > x to remove duplicates\n z.gt(y).post() // z > y for efficiency\n x.mul(x).add(y.mul(y)).eq(z.mul(z)).post()\n while (solver.solve()) {\n table.appendRow().with {\n setInt('x', x.value)\n setInt('y', y.value)\n setInt('z', z.value)\n }\n }\n}\n\ntable", | |
"execution_count": 12, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 12, | |
"data": { | |
"text/plain": " triples \n x | y | z |\n--------------------\n 3 | 4 | 5 |\n 6 | 8 | 10 |\n 5 | 12 | 13 |\n 9 | 12 | 15 |\n 8 | 15 | 17 |\n 7 | 24 | 25 |\n 12 | 16 | 20 |\n 10 | 24 | 26 |\n 15 | 20 | 25 |\n 20 | 21 | 29 |\n 18 | 24 | 30 |" | |
}, | |
"metadata": {} | |
} | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"name": "groovy", | |
"display_name": "Groovy", | |
"language": "groovy" | |
}, | |
"toc": { | |
"nav_menu": {}, | |
"number_sections": false, | |
"sideBar": false, | |
"skip_h1_title": false, | |
"base_numbering": 1, | |
"title_cell": "Table of Contents", | |
"title_sidebar": "Contents", | |
"toc_cell": false, | |
"toc_position": {}, | |
"toc_section_display": false, | |
"toc_window_display": false | |
}, | |
"language_info": { | |
"nbconverter_exporter": "", | |
"codemirror_mode": "groovy", | |
"name": "Groovy", | |
"mimetype": "", | |
"file_extension": ".groovy", | |
"version": "2.4.3" | |
}, | |
"widgets": { | |
"application/vnd.jupyter.widget-state+json": { | |
"version_major": 2, | |
"version_minor": 0, | |
"state": { | |
"1c544f94-7be4-4b7b-8084-6dbcefd58af1": { | |
"model_name": "LayoutModel", | |
"model_module": "@jupyter-widgets/base", | |
"model_module_version": "*", | |
"state": { | |
"overflow_y": "", | |
"max_height": "", | |
"justify_content": "", | |
"overflow_x": "", | |
"max_width": "", | |
"_model_module_version": "*", | |
"align_self": "", | |
"overflow": "", | |
"msg_throttle": 3, | |
"top": "", | |
"flex": "", | |
"height": "", | |
"min_width": "", | |
"align_content": "", | |
"border": "", | |
"padding": "", | |
"margin": "", | |
"bottom": "", | |
"right": "", | |
"min_height": "", | |
"_view_module_version": "*", | |
"left": "" | |
} | |
}, | |
"0040457e-cacd-4381-8fd2-c386f306f9d4": { | |
"model_name": "LayoutModel", | |
"model_module": "@jupyter-widgets/base", | |
"model_module_version": "*", | |
"state": { | |
"overflow_y": "", | |
"max_height": "", | |
"justify_content": "", | |
"overflow_x": "", | |
"max_width": "", | |
"_model_module_version": "*", | |
"align_self": "", | |
"overflow": "", | |
"msg_throttle": 3, | |
"top": "", | |
"flex": "", | |
"height": "", | |
"min_width": "", | |
"align_content": "", | |
"border": "", | |
"padding": "", | |
"margin": "", | |
"bottom": "", | |
"right": "", | |
"min_height": "", | |
"_view_module_version": "*", | |
"left": "" | |
} | |
}, | |
"fd02f011-fc8d-42d8-8228-3f4f88dc3dde": { | |
"model_name": "FoldoutModel", | |
"model_module": "beakerx", | |
"model_module_version": "*", | |
"state": { | |
"font_weight": "", | |
"visible": true, | |
"color": null, | |
"headerLabel": "Added jars: ", | |
"font_size": "", | |
"description": "", | |
"font_style": "", | |
"layout": "IPY_MODEL_0040457e-cacd-4381-8fd2-c386f306f9d4", | |
"background_color": null, | |
"msg_throttle": 3, | |
"children": [ | |
"IPY_MODEL_35db4d97-7929-4c38-9152-826f206ce852" | |
], | |
"disabled": false, | |
"font_family": "", | |
"hidePreview": false | |
} | |
}, | |
"a0bde121-ddfa-4c9a-b886-52c0720f4744": { | |
"model_name": "LayoutModel", | |
"model_module": "@jupyter-widgets/base", | |
"model_module_version": "*", | |
"state": { | |
"overflow_y": "", | |
"max_height": "", | |
"justify_content": "", | |
"overflow_x": "", | |
"max_width": "", | |
"_model_module_version": "*", | |
"align_self": "", | |
"overflow": "", | |
"msg_throttle": 3, | |
"top": "", | |
"flex": "", | |
"height": "", | |
"min_width": "", | |
"align_content": "", | |
"border": "", | |
"padding": "", | |
"margin": "", | |
"bottom": "", | |
"right": "", | |
"min_height": "", | |
"_view_module_version": "*", | |
"left": "" | |
} | |
}, | |
"35db4d97-7929-4c38-9152-826f206ce852": { | |
"model_name": "BxHTMLModel", | |
"model_module": "beakerx", | |
"model_module_version": "*", | |
"state": { | |
"font_weight": "", | |
"visible": true, | |
"color": null, | |
"font_size": "", | |
"font_style": "", | |
"layout": "IPY_MODEL_a0bde121-ddfa-4c9a-b886-52c0720f4744", | |
"background_color": null, | |
"msg_throttle": 3, | |
"font_family": "", | |
"placeholder": "", | |
"value": "VectorGraphics2D-0.13.jar, choco-sat-4.10.5.jar, jheaps-0.11.jar, graphics2d-0.27.jar, cpprof-java-1.3.0.jar, commons-logging-1.2.jar, choco-solver-4.10.5.jar, fontbox-2.0.19.jar, trove4j-3.0.3.jar, automaton-1.11-8.jar, xchart-3.6.4.jar, protobuf-java-2.6.1.jar, jgrapht-core-1.4.0.jar, pdfbox-2.0.19.jar, animated-gif-lib-1.4.jar" | |
} | |
}, | |
"1ac5bc30-8640-424f-bf4b-44c77967584d": { | |
"model_name": "LayoutModel", | |
"model_module": "@jupyter-widgets/base", | |
"model_module_version": "*", | |
"state": { | |
"overflow_y": "", | |
"max_height": "", | |
"justify_content": "", | |
"overflow_x": "", | |
"max_width": "", | |
"_model_module_version": "*", | |
"align_self": "", | |
"overflow": "", | |
"msg_throttle": 3, | |
"top": "", | |
"flex": "", | |
"height": "", | |
"min_width": "", | |
"align_content": "", | |
"border": "", | |
"padding": "", | |
"margin": "", | |
"bottom": "", | |
"right": "", | |
"min_height": "", | |
"_view_module_version": "*", | |
"left": "" | |
} | |
}, | |
"5ede4171-d518-44be-8c0d-abdfbe939cf5": { | |
"model_name": "LayoutModel", | |
"model_module": "@jupyter-widgets/base", | |
"model_module_version": "*", | |
"state": { | |
"overflow_y": "", | |
"max_height": "", | |
"justify_content": "", | |
"overflow_x": "", | |
"max_width": "", | |
"_model_module_version": "*", | |
"align_self": "", | |
"overflow": "", | |
"msg_throttle": 3, | |
"top": "", | |
"flex": "", | |
"height": "", | |
"min_width": "", | |
"align_content": "", | |
"border": "", | |
"padding": "", | |
"margin": "", | |
"bottom": "", | |
"right": "", | |
"min_height": "", | |
"_view_module_version": "*", | |
"left": "" | |
} | |
}, | |
"d8e5ce6f-cf32-4d56-830c-63eda82ddc56": { | |
"model_name": "FoldoutModel", | |
"model_module": "beakerx", | |
"model_module_version": "*", | |
"state": { | |
"font_weight": "", | |
"visible": true, | |
"color": null, | |
"headerLabel": "Added jars: ", | |
"font_size": "", | |
"description": "", | |
"font_style": "", | |
"layout": "IPY_MODEL_5ede4171-d518-44be-8c0d-abdfbe939cf5", | |
"background_color": null, | |
"msg_throttle": 3, | |
"children": [ | |
"IPY_MODEL_db3a7cae-f231-4f77-acfa-b3278bcc0cf2" | |
], | |
"disabled": false, | |
"font_family": "", | |
"hidePreview": false | |
} | |
}, | |
"91f13017-aff9-459c-9c1f-af80d2ee0b0f": { | |
"model_name": "LayoutModel", | |
"model_module": "@jupyter-widgets/base", | |
"model_module_version": "*", | |
"state": { | |
"overflow_y": "", | |
"max_height": "", | |
"justify_content": "", | |
"overflow_x": "", | |
"max_width": "", | |
"_model_module_version": "*", | |
"align_self": "", | |
"overflow": "", | |
"msg_throttle": 3, | |
"top": "", | |
"flex": "", | |
"height": "", | |
"min_width": "", | |
"align_content": "", | |
"border": "", | |
"padding": "", | |
"margin": "", | |
"bottom": "", | |
"right": "", | |
"min_height": "", | |
"_view_module_version": "*", | |
"left": "" | |
} | |
}, | |
"db3a7cae-f231-4f77-acfa-b3278bcc0cf2": { | |
"model_name": "BxHTMLModel", | |
"model_module": "beakerx", | |
"model_module_version": "*", | |
"state": { | |
"font_weight": "", | |
"visible": true, | |
"color": null, | |
"font_size": "", | |
"font_style": "", | |
"layout": "IPY_MODEL_91f13017-aff9-459c-9c1f-af80d2ee0b0f", | |
"background_color": null, | |
"msg_throttle": 3, | |
"font_family": "", | |
"placeholder": "", | |
"value": "RoaringBitmap-0.8.12.jar, icu4j-65.1.jar, failureaccess-1.0.1.jar, error_prone_annotations-2.3.4.jar, tablesaw-core-0.38.1.jar, univocity-parsers-2.8.4.jar, checker-qual-2.10.0.jar, commons-math3-3.6.1.jar, classgraph-4.8.60.jar, guava-28.2-jre.jar, j2objc-annotations-1.3.jar, slf4j-api-1.7.30.jar, tablesaw-beakerx-0.38.1.jar, listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar, fastutil-8.3.0.jar, jsr305-3.0.2.jar, shims-0.8.12.jar" | |
} | |
}, | |
"a7909ac3-ef8f-44f8-96c4-20a3cb9fcd94": { | |
"model_name": "LayoutModel", | |
"model_module": "@jupyter-widgets/base", | |
"model_module_version": "*", | |
"state": { | |
"overflow_y": "", | |
"max_height": "", | |
"justify_content": "", | |
"overflow_x": "", | |
"max_width": "", | |
"_model_module_version": "*", | |
"align_self": "", | |
"overflow": "", | |
"msg_throttle": 3, | |
"top": "", | |
"flex": "", | |
"height": "", | |
"min_width": "", | |
"align_content": "", | |
"border": "", | |
"padding": "", | |
"margin": "", | |
"bottom": "", | |
"right": "", | |
"min_height": "", | |
"_view_module_version": "*", | |
"left": "" | |
} | |
}, | |
"ddc46a79-921f-4be5-9af3-75d69a94f3d5": { | |
"model_name": "LayoutModel", | |
"model_module": "@jupyter-widgets/base", | |
"model_module_version": "*", | |
"state": { | |
"overflow_y": "", | |
"max_height": "", | |
"justify_content": "", | |
"overflow_x": "", | |
"max_width": "", | |
"_model_module_version": "*", | |
"align_self": "", | |
"overflow": "", | |
"msg_throttle": 3, | |
"top": "", | |
"flex": "", | |
"height": "", | |
"min_width": "", | |
"align_content": "", | |
"border": "", | |
"padding": "", | |
"margin": "", | |
"bottom": "", | |
"right": "", | |
"min_height": "", | |
"_view_module_version": "*", | |
"left": "" | |
} | |
}, | |
"4d5235e5-1d29-41f5-b33d-c97b2d650ed9": { | |
"model_name": "LayoutModel", | |
"model_module": "@jupyter-widgets/base", | |
"model_module_version": "*", | |
"state": { | |
"overflow_y": "", | |
"max_height": "", | |
"justify_content": "", | |
"overflow_x": "", | |
"max_width": "", | |
"_model_module_version": "*", | |
"align_self": "", | |
"overflow": "", | |
"msg_throttle": 3, | |
"top": "", | |
"flex": "", | |
"height": "", | |
"min_width": "", | |
"align_content": "", | |
"border": "", | |
"padding": "", | |
"margin": "", | |
"bottom": "", | |
"right": "", | |
"min_height": "", | |
"_view_module_version": "*", | |
"left": "" | |
} | |
}, | |
"ee10adc6-0c83-4bd5-a258-1d62ac73fa29": { | |
"model_name": "LayoutModel", | |
"model_module": "@jupyter-widgets/base", | |
"model_module_version": "*", | |
"state": { | |
"overflow_y": "", | |
"max_height": "", | |
"justify_content": "", | |
"overflow_x": "", | |
"max_width": "", | |
"_model_module_version": "*", | |
"align_self": "", | |
"overflow": "", | |
"msg_throttle": 3, | |
"top": "", | |
"flex": "", | |
"height": "", | |
"min_width": "", | |
"align_content": "", | |
"border": "", | |
"padding": "", | |
"margin": "", | |
"bottom": "", | |
"right": "", | |
"min_height": "", | |
"_view_module_version": "*", | |
"left": "" | |
} | |
} | |
} | |
} | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment