diff --git a/src/main/scad/akaki-kuumeri/akakis-picnic/akakis-picnic-basket-handle.stl b/src/main/scad/akaki-kuumeri/akakis-picnic/akakis-picnic-basket-handle.stl new file mode 100644 index 0000000..3b20af9 Binary files /dev/null and b/src/main/scad/akaki-kuumeri/akakis-picnic/akakis-picnic-basket-handle.stl differ diff --git a/src/main/scad/akaki-kuumeri/akakis-picnic/akakis-picnic-basket.stl b/src/main/scad/akaki-kuumeri/akakis-picnic/akakis-picnic-basket.stl new file mode 100644 index 0000000..e0f2aba Binary files /dev/null and b/src/main/scad/akaki-kuumeri/akakis-picnic/akakis-picnic-basket.stl differ diff --git a/src/main/scad/akaki-kuumeri/akakis-picnic/akakis-picnic.scad b/src/main/scad/akaki-kuumeri/akakis-picnic/akakis-picnic.scad new file mode 100644 index 0000000..c4213c4 --- /dev/null +++ b/src/main/scad/akaki-kuumeri/akakis-picnic/akakis-picnic.scad @@ -0,0 +1,231 @@ +/* ==================================================================== + + This is a 3D model of a mechanical puzzle. It is released under + the following license: + + Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported + https://creativecommons.org/licenses/by-nc-nd/3.0/ + + This means the model is licensed for personal, noncommercial use + only. Anyone may print a copy for their own use, but selling or + otherwise monetizing the model or print (or any derivatives) is + prohibited. For details, refer to the summary at the above URL. + + Puzzle design (c) Akaki Kuumeri + +==================================================================== */ +include + +$burr_scale = 15.24; //0.6 inch +$burr_bevel = 1; +$burr_inset = 0.07; +$plate_width = 210; +$joint_inset = 0.015; + +// Uncomment one of the following lines to render that component. + +*chocolate(); +*wine(); +*vegetable(); +*fruit(); +*subway(); +*egg(); +*ice_cream(); +*cake(); +*coffee(); +*sandwich(); +*salmiakki(); +*chicken(); +*hamburger(); + +module chocolate() { + burr_plate([ + + [".x.|...|.x.","xxx|.x|xx"], + + ["..x|...|...","..x|.x{label_text= Akaki ,label_orient=z-x+,label_hoffset=0.2,label_scale=0.35}x|...","...|..x|..x"], + + ["x|.|.","x|x|.",".|x"], + + [".x.|xx{label_text= Chocolate ,label_orient=z+x-,label_hoffset=0.2,label_scale=0.35}x|xx{label_text= Basket ,label_orient=z+x-,label_hoffset=0.2,label_scale=0.35}x","...|...|..x","...|...|..."] + + ], $auto_layout = true); +} + +module wine() { + burr_plate([ + + ["...|...|...","..x|...|..x","xxx|..x|x{label_text= Akaki,label_orient=y-x+,label_hoffset=0.2,label_scale=0.35}xx"], + + ["x{label_text= Wine ,label_orient=x+z+,label_hoffset=0.2,label_scale=0.35}..|x..|...","x..|xx{label_text= Basket ,label_orient=y-z+,label_hoffset=0.2,label_scale=0.35}.|...","...|xx.|..."], + + [".x|.x|xx",".x|...|xx"], + + ["..x|..x|..x"] + + ], $auto_layout = true); +} + + +module vegetable() { + burr_plate([ + + //This puzzle has two solutions. The solution with no voids visible on top is the canonical solution. + + ["...|...|xx.","...|...|x{label_text= Basket,label_orient=y-z-,label_hoffset=0.2,label_scale=0.3}..","x{label_text= Vegetable,label_orient=z-y+,label_hoffset=0.2,label_scale=0.3}x.|x..|x.."], + + ["...|.x{label_text= Akaki,label_orient=x+z+,label_hoffset=0.2,label_scale=0.35}.|...","...|.x.|...","..x|.xx|..."], + + ["...|...|...","..x|..x|.xx","...|...|.xx"], + + ["xxx|x.x|..x","x..|...|...","...|...|..."] + + ], $auto_layout = true); +} + + +module fruit() { + burr_plate([ + + ["...|...|x..","...|...|x{label_text= Basket,label_orient=y-z-,label_hoffset=0.2,label_scale=0.35}..","x{label_text= Fruit,label_orient=z-y+,label_hoffset=0.2,label_scale=0.35}x.|x..|x.."], + + ["...|...|...","...|xx.|...","..x|.xx{label_text= Akaki,label_orient=z-y-,label_hoffset=0.2,label_scale=0.35}|..."], + + ["..x|...|...",".xx|..x|..x","...|...|.xx"], + + ["xx.|xxx|.xx","x..|...|.x.","...|...|..."] + + ], $auto_layout = true); +} + + +module subway() { + burr_plate([ + + ["xxx|x{label_text= Basket,label_orient=z+y-,label_hoffset=0.2,label_scale=0.35}..|xxx","...|...|x.","...|...|x{label_text= Subway,label_orient=y-z-,label_hoffset=0.2,label_scale=0.35}x.."], + + ["...|.x.|...","x..|xx.|.xx","x..|...|..."], + + ["...|..x{label_text= Akaki,label_orient=y-z+,label_hoffset=0.2,label_scale=0.35}|...","...|..x|...",".xx|xxx|..x"] + + ], $auto_layout = true); +} + + +module egg() { + burr_plate([ + + [".xx|..x|x{label_text= Akaki ,label_orient=y-x+,label_hoffset=0.2,label_scale=0.35}xx","...|...|..x"], + + ["...|.x.|...","...|.x.|...","...|xx.|x.."], + + ["x{label_text= Basket,label_orient=x+y+,label_hoffset=0.2,label_scale=0.35}..|x..|...","xx.|x{label_text=Egg ,label_orient=x+y+,label_hoffset=0.2,label_scale=0.35}..|x{connect=mx+z-}.","x..|...|..."], + ["x{connect=fz+y-}|x"], + + ["...|...|...","...|..x|...",".xx|..x|..x"] + + ], $auto_layout = true); +} + + +module ice_cream() { + burr_plate([ + + ["...|x..|xx{connect=fx+z-}.","...|...|x..","...|...|xx."], + [".xx|..x{label_text= Basket,label_orient=z+y+,label_hoffset=0.2,label_scale=0.35}|..x{connect=mx-z-}","..x|...|...",".x{label_text= Ice ,label_orient=y+z-,label_hoffset=0.2,label_scale=0.35}x{label_text= Cream ,label_orient=y+z-,label_hoffset=0.2,label_scale=0.35}|...|..."], + + ["...|...|...",".x.|.xx|.x."], + + ["x..|.","x{label_text= Akaki ,label_orient=y+z-,label_hoffset=0.2,label_scale=0.35}","x|x"], + ["...|...|...","...|...|..x",".|.xx|..x"] + + ], $auto_layout = true); +} + + +module cake() { + burr_plate([ + + ["...|...|x..","...|x..|x{label_text= Cake Basket ,label_orient=x+z+,label_hoffset=0.2,label_scale=0.35}..","xx{label_text=Akaki ,label_orient=z-x+,label_hoffset=0.2,label_scale=0.35}x|xx.|x.."], + + [".xx|...|...","..x|.xx|...","...|..x|.xx"], + + ["x..|xxx|..x","x..|...|..x","...|...|..."] + + ], $auto_layout = true); +} + + +module coffee() { + burr_plate([ + + ["x..|...","x..|...","xx.|x.."], + ["..x|...|...","..x{label_text= Akaki,label_orient=y+z-,label_hoffset=0.2,label_scale=0.35}|...|...","..x|.xx|..."], + + + + + [".x.|.xx|..x{connect=mz+y+,clabel=A}",".x."], + ["...|...|..x{connect=fz-y+,clabel=A}","...|...|.xx"], + + ["...|x..|xx{label_text= Basket,label_orient=y-z+,label_hoffset=0.2,label_scale=0.35}.","...|...|x{label_text= Coffee ,label_orient=y-z+,label_hoffset=0.2,label_scale=0.35}x.","...|...|x.."] + + ], $auto_layout = true); +} + + +module sandwich() { + burr_plate([ + + ["xxx|x{label_text=Sandwich ,label_orient=z+y-,label_hoffset=0.2,label_scale=0.3}..|xx.","x{label_text= Basket,label_orient=y+z+,label_hoffset=0.2,label_scale=0.3}|.|.","xx|.|."], + + ["...|...|..x",".xx|..x|.xx","..."], + + ["...|.x.|...","...|.x{label_text= Akaki,label_orient=y+z+,label_hoffset=0.2,label_scale=0.3}.|...","..x|.xx|..x"], + + ["...|...|...","...|...|x..","...|x..|xx"] + + ], $auto_layout = true); +} + + +module salmiakki() { + burr_plate([ + + ["x{label_text= Basket ,label_orient=z+x+,label_hoffset=0.2,label_scale=0.35}xx|x{label_text= Salmiakki ,label_orient=z+x+,label_hoffset=0.2,label_scale=0.35}xx|x..","..x|...|x..",".xx|...|..."], + + ["...|...|...","xx.|...|...","x..|x{label_text= Akaki ,label_orient=z-y+,label_hoffset=0.2,label_scale=0.35}..|xx."], + + ["...|...|.x.","...|xx.|.x."], + ["...|...|...","...|...|..x","...|.xx|..x"], + + ], $auto_layout = true); +} + + +module chicken() { + burr_plate([ + + [".xx|..x|.xx","...|..x|..x","...|...|..."], + + ["...|.x.|x..","...|.x.|xx.",".xx|.xx|..."], + + ["...|x..|...","...|x{label_text= Akaki,label_orient=y-z-,label_hoffset=0.2,label_scale=0.3}..|...","x{label_text= Chicken,label_orient=x+y+,label_hoffset=0.2,label_scale=0.3}..|x..|xx{label_text= Basket,label_orient=y-x+,label_hoffset=0.2,label_scale=0.3}x"], + + ], $auto_layout = true); +} + + + +module hamburger() { + burr_plate([ + + ["xx{connect=mx+y+}.|x..|xx.","...|...|x..","...|...|x{label_text= Akaki,label_orient=y-z-,label_hoffset=0.2,label_scale=0.35}x."], + ["..x{connect=fx-y+}|...|...","..x|...|...",".xx|...|..."], + + ["...|...|..x",".x.|xx.|.xx","...|...|..."], + + ["...|...|...","x..|...|...","x..|x{label_text= Hamburger,label_orient=z-x+,label_hoffset=0.2,label_scale=0.35}x{label_text=Basket ,label_orient=y+x+,label_hoffset=0.2,label_scale=0.35}x|..x"] + + ], $auto_layout = true); +} diff --git a/src/main/scad/akaki-kuumeri/akakis-picnic/akakis-picnic.yaml b/src/main/scad/akaki-kuumeri/akakis-picnic/akakis-picnic.yaml new file mode 100644 index 0000000..9cf68d6 --- /dev/null +++ b/src/main/scad/akaki-kuumeri/akakis-picnic/akakis-picnic.yaml @@ -0,0 +1,49 @@ +thing-id: 0 +name: "Akaki's Picnic -- A packing puzzle series by Akaki Kuumeri" +tags: [puzzle, 3D_puzzle] +images: [all.jpg, cake.jpg, fruit.jpg, vegetable.jpg, ice-cream.jpg, hamburger.jpg, salmiakki.jpg, subway.jpg, coffee.jpg, +chicken.jpg, egg.jpg, sandwich.jpg, chocolate.jpg, wine.jpg] +targets: [cake, fruit, vegetable, ice-cream, hamburger, salmiakki, subway, coffee, +chicken, egg, sandwich, chocolate, wine] +aux_files: [akakis-picnic-basket.stl, akakis-picnic-basket-handle.stl] +description: | + Akaki's Picnic is a series of packing puzzles. Pack the pieces into a basket with a special handle. + + Each puzzle uses the same basket, so you can choose to print only one basket, with multiple sets of puzzle pieces. + + Each puzzle has the same goal: pack all the pieces into the basket, up to the brim line. + + Start with *Cake Basket*, the easiest design. Next you can try *Hamburger Basket* and *Egg Basket*, or try and solve them all in the order listen below. Each one requires a different trick to solve. + + ### List of puzzles by difficulty + + **Easy** + - **Cake Basket** Three symmetric pieces. This is the easiest design. (Yet not a piece of cake) + - **Fruit Basket** This puzzle fills the whole 27-block space, and only require a simple rotation to solve. + - **Vegetable Basket** Only linear moves are required to solve this puzzle. This one is somehwat tricky to unpack too. + - **Ice Cream Basket** An easy puzzle, but it has one movement that is not used in any of the other designs. + Medium + - **Hamburger Basket** It is easy to get disoriented with the shape of the large piece in this puzzle. + - **Salmiakki Basket** The key to this puzzle is how to position the two small identical pieces. + - **Subway Basket** One of the pieces travels in an unexpected direction. + - **Coffee Basket** The large coffee cup piece is easy to place in the basket, but what to do with the long coffee mixer sticks? + Difficult + - **Chicken Basket** At seven moves, the large piece in this puzzle has the most moves in the series for a single piece. + - **Egg Basket** The largest piece in this puzzle is hard enough to get in the basket on its own, but can you fit the surrounding pieces in the basket too? + - **Sandwich basket** The orientation is not hard to deduce, but how to get the filling inbetween the bread piece? + - **Chocolate Basket** You have to be careful about the order you pack these pieces in the basket. + - **Wine Basket** This is the hardest design. Might require some dexterity. + + This listing is part of the Printable Puzzle Project (see below). + + ### Printing Instructions + + All files can be printed without supports. + + Print akakis-picnic-basket.stl and akakis-picnic-basket-handle.stl. Glue the handle to the basket with superglue. + + Some of the puzzle designs have snap connectors. You must snap the pieces together before attempting the puzzle. Use glue if neccessary. + + ${ppp-boilerplate} + + Happy puzzling! diff --git a/src/main/scad/akaki-kuumeri/akakis-picnic/all.jpg b/src/main/scad/akaki-kuumeri/akakis-picnic/all.jpg new file mode 100644 index 0000000..f4fc71d Binary files /dev/null and b/src/main/scad/akaki-kuumeri/akakis-picnic/all.jpg differ diff --git a/src/main/scad/akaki-kuumeri/akakis-picnic/cake.jpg b/src/main/scad/akaki-kuumeri/akakis-picnic/cake.jpg new file mode 100644 index 0000000..e64c901 Binary files /dev/null and b/src/main/scad/akaki-kuumeri/akakis-picnic/cake.jpg differ diff --git a/src/main/scad/akaki-kuumeri/akakis-picnic/chicken.jpg b/src/main/scad/akaki-kuumeri/akakis-picnic/chicken.jpg new file mode 100644 index 0000000..ee9aba6 Binary files /dev/null and b/src/main/scad/akaki-kuumeri/akakis-picnic/chicken.jpg differ diff --git a/src/main/scad/akaki-kuumeri/akakis-picnic/chocolate.jpg b/src/main/scad/akaki-kuumeri/akakis-picnic/chocolate.jpg new file mode 100644 index 0000000..d977672 Binary files /dev/null and b/src/main/scad/akaki-kuumeri/akakis-picnic/chocolate.jpg differ diff --git a/src/main/scad/akaki-kuumeri/akakis-picnic/coffee.jpg b/src/main/scad/akaki-kuumeri/akakis-picnic/coffee.jpg new file mode 100644 index 0000000..5e2419e Binary files /dev/null and b/src/main/scad/akaki-kuumeri/akakis-picnic/coffee.jpg differ diff --git a/src/main/scad/akaki-kuumeri/akakis-picnic/egg.jpg b/src/main/scad/akaki-kuumeri/akakis-picnic/egg.jpg new file mode 100644 index 0000000..e014991 Binary files /dev/null and b/src/main/scad/akaki-kuumeri/akakis-picnic/egg.jpg differ diff --git a/src/main/scad/akaki-kuumeri/akakis-picnic/fruit.jpg b/src/main/scad/akaki-kuumeri/akakis-picnic/fruit.jpg new file mode 100644 index 0000000..8206814 Binary files /dev/null and b/src/main/scad/akaki-kuumeri/akakis-picnic/fruit.jpg differ diff --git a/src/main/scad/akaki-kuumeri/akakis-picnic/hamburger.jpg b/src/main/scad/akaki-kuumeri/akakis-picnic/hamburger.jpg new file mode 100644 index 0000000..03e2f3d Binary files /dev/null and b/src/main/scad/akaki-kuumeri/akakis-picnic/hamburger.jpg differ diff --git a/src/main/scad/akaki-kuumeri/akakis-picnic/ice-cream.jpg b/src/main/scad/akaki-kuumeri/akakis-picnic/ice-cream.jpg new file mode 100644 index 0000000..dcb6ce3 Binary files /dev/null and b/src/main/scad/akaki-kuumeri/akakis-picnic/ice-cream.jpg differ diff --git a/src/main/scad/akaki-kuumeri/akakis-picnic/salmiakki.jpg b/src/main/scad/akaki-kuumeri/akakis-picnic/salmiakki.jpg new file mode 100644 index 0000000..80e64d7 Binary files /dev/null and b/src/main/scad/akaki-kuumeri/akakis-picnic/salmiakki.jpg differ diff --git a/src/main/scad/akaki-kuumeri/akakis-picnic/sandwich.jpg b/src/main/scad/akaki-kuumeri/akakis-picnic/sandwich.jpg new file mode 100644 index 0000000..487a03a Binary files /dev/null and b/src/main/scad/akaki-kuumeri/akakis-picnic/sandwich.jpg differ diff --git a/src/main/scad/akaki-kuumeri/akakis-picnic/subway.jpg b/src/main/scad/akaki-kuumeri/akakis-picnic/subway.jpg new file mode 100644 index 0000000..5c73a73 Binary files /dev/null and b/src/main/scad/akaki-kuumeri/akakis-picnic/subway.jpg differ diff --git a/src/main/scad/akaki-kuumeri/akakis-picnic/vegetable.jpg b/src/main/scad/akaki-kuumeri/akakis-picnic/vegetable.jpg new file mode 100644 index 0000000..a0bc87e Binary files /dev/null and b/src/main/scad/akaki-kuumeri/akakis-picnic/vegetable.jpg differ diff --git a/src/main/scad/akaki-kuumeri/akakis-picnic/wine.jpg b/src/main/scad/akaki-kuumeri/akakis-picnic/wine.jpg new file mode 100644 index 0000000..66b9ef5 Binary files /dev/null and b/src/main/scad/akaki-kuumeri/akakis-picnic/wine.jpg differ