Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Akaki's Picnic puzzles #46

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
Binary file not shown.
231 changes: 231 additions & 0 deletions src/main/scad/akaki-kuumeri/akakis-picnic/akakis-picnic.scad
Original file line number Diff line number Diff line change
@@ -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 <puzzlecad.scad>

$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);
}
49 changes: 49 additions & 0 deletions src/main/scad/akaki-kuumeri/akakis-picnic/akakis-picnic.yaml
Original file line number Diff line number Diff line change
@@ -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!
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.