diff --git a/docs/exPuzzlers/.idea/.name b/docs/exPuzzlers/.idea/.name
new file mode 100644
index 00000000000..140eaf3b823
--- /dev/null
+++ b/docs/exPuzzlers/.idea/.name
@@ -0,0 +1 @@
+exPuzzlers
\ No newline at end of file
diff --git a/docs/exPuzzlers/.idea/ant.xml b/docs/exPuzzlers/.idea/ant.xml
new file mode 100644
index 00000000000..2581ca3fe84
--- /dev/null
+++ b/docs/exPuzzlers/.idea/ant.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/docs/exPuzzlers/.idea/compiler.xml b/docs/exPuzzlers/.idea/compiler.xml
new file mode 100644
index 00000000000..a1b41c52c72
--- /dev/null
+++ b/docs/exPuzzlers/.idea/compiler.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/exPuzzlers/.idea/copyright/profiles_settings.xml b/docs/exPuzzlers/.idea/copyright/profiles_settings.xml
new file mode 100644
index 00000000000..3572571ad83
--- /dev/null
+++ b/docs/exPuzzlers/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/exPuzzlers/.idea/encodings.xml b/docs/exPuzzlers/.idea/encodings.xml
new file mode 100644
index 00000000000..e206d70d859
--- /dev/null
+++ b/docs/exPuzzlers/.idea/encodings.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/docs/exPuzzlers/.idea/misc.xml b/docs/exPuzzlers/.idea/misc.xml
new file mode 100644
index 00000000000..41321dce6d5
--- /dev/null
+++ b/docs/exPuzzlers/.idea/misc.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ http://www.w3.org/1999/xhtml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+
diff --git a/docs/exPuzzlers/.idea/modules.xml b/docs/exPuzzlers/.idea/modules.xml
new file mode 100644
index 00000000000..1233f39cda9
--- /dev/null
+++ b/docs/exPuzzlers/.idea/modules.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/docs/exPuzzlers/.idea/scopes/scope_settings.xml b/docs/exPuzzlers/.idea/scopes/scope_settings.xml
new file mode 100644
index 00000000000..922003b8433
--- /dev/null
+++ b/docs/exPuzzlers/.idea/scopes/scope_settings.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/exPuzzlers/.idea/uiDesigner.xml b/docs/exPuzzlers/.idea/uiDesigner.xml
new file mode 100644
index 00000000000..3b000203088
--- /dev/null
+++ b/docs/exPuzzlers/.idea/uiDesigner.xml
@@ -0,0 +1,125 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+
diff --git a/docs/exPuzzlers/.idea/vcs.xml b/docs/exPuzzlers/.idea/vcs.xml
new file mode 100644
index 00000000000..def6a6a1845
--- /dev/null
+++ b/docs/exPuzzlers/.idea/vcs.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/docs/exPuzzlers/.idea/workspace.xml b/docs/exPuzzlers/.idea/workspace.xml
new file mode 100644
index 00000000000..2fe1fe3b5e5
--- /dev/null
+++ b/docs/exPuzzlers/.idea/workspace.xml
@@ -0,0 +1,953 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ localhost
+ 5050
+
+
+
+
+
+
+ 1321010637439
+ 1321010637439
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No facets are configured
+
+
+
+
+
+
+
+
+
+
+
+ annotations
+
+
+
+
+
+
+
+
+
+
+
+ IDEA 10.x
+
+
+
+
+
+
+
+
+
+
+
+ exPuzzlers
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.6
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/exPuzzlers/exPuzzlers.iml b/docs/exPuzzlers/exPuzzlers.iml
new file mode 100644
index 00000000000..e0dc2c45a79
--- /dev/null
+++ b/docs/exPuzzlers/exPuzzlers.iml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/exPuzzlers/kotlin/std.kt b/docs/exPuzzlers/kotlin/std.kt
new file mode 100644
index 00000000000..3ea1a381dac
--- /dev/null
+++ b/docs/exPuzzlers/kotlin/std.kt
@@ -0,0 +1,49 @@
+namespace std
+
+fun array(vararg array : T) = array
+fun array(vararg array : Byte) = array
+fun array(vararg array : Char) = array
+fun array(vararg array : Short) = array
+fun array(vararg array : Int) = array
+fun array(vararg array : Long) = array
+fun array(vararg array : Double) = array
+fun array(vararg array : Float) = array
+
+fun Any?.identityEquals(other : Any?) = this === other
+
+namespace io {
+ import java.io.*
+
+ fun print(message : Any?) { System.out?.print(message) }
+ fun print(message : Int) { System.out?.print(message) }
+ fun print(message : Long) { System.out?.print(message) }
+ fun print(message : Byte) { System.out?.print(message) }
+ fun print(message : Short) { System.out?.print(message) }
+ fun print(message : Char) { System.out?.print(message) }
+ fun print(message : Boolean) { System.out?.print(message) }
+ fun print(message : Float) { System.out?.print(message) }
+ fun print(message : Double) { System.out?.print(message) }
+ fun print(message : CharArray) { System.out?.print(message) }
+
+ fun println(message : Any?) { System.out?.println(message) }
+ fun println(message : Int) { System.out?.println(message) }
+ fun println(message : Long) { System.out?.println(message) }
+ fun println(message : Byte) { System.out?.println(message) }
+ fun println(message : Short) { System.out?.println(message) }
+ fun println(message : Char) { System.out?.println(message) }
+ fun println(message : Boolean) { System.out?.println(message) }
+ fun println(message : Float) { System.out?.println(message) }
+ fun println(message : Double) { System.out?.println(message) }
+ fun println(message : CharArray) { System.out?.println(message) }
+
+ private var systemIn : InputStream? = null // Unfortunately, System.in may change
+ private var stdin : BufferedReader? = null // This may introduce leaks of system.in objects...
+
+ fun readLine() : String? {
+ if (stdin == null || systemIn != System.`in`) {
+ stdin = java.io.BufferedReader(java.io.InputStreamReader(System.`in`))
+ systemIn = System.`in`
+ }
+ return stdin?.readLine()
+ }
+}
\ No newline at end of file
diff --git a/docs/exPuzzlers/src/_02_expressive/_01_Oddity/Oddity.java b/docs/exPuzzlers/src/_02_expressive/_01_Oddity/Oddity.java
new file mode 100644
index 00000000000..e18ac4118ca
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_01_Oddity/Oddity.java
@@ -0,0 +1,14 @@
+package _02_expressive._01_Oddity;
+
+/**
+ * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 5). Pearson Education (USA). Kindle Edition.
+ */
+public class Oddity {
+ public static boolean isOdd(int i) {
+ return i % 2 == 1;
+ }
+
+ public static void main(String[] args) {
+ System.out.println(isOdd(-1));
+ }
+}
diff --git a/docs/exPuzzlers/src/_02_expressive/_02_Time_for_a_Change/BigDecimalSolution.kt b/docs/exPuzzlers/src/_02_expressive/_02_Time_for_a_Change/BigDecimalSolution.kt
new file mode 100644
index 00000000000..008841a00cf
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_02_Time_for_a_Change/BigDecimalSolution.kt
@@ -0,0 +1,19 @@
+namespace change
+
+import java.math.BigDecimal
+import std.io.*
+
+fun main(args : Array) {
+ // Easy to make BigDecimals user-friendly
+ println(
+ "2.00".bd - "1.00"
+ )
+}
+
+val String.bd = BigDecimal(this)
+
+fun BigDecimal.minus(other : BigDecimal) = this.subtract(other)
+fun BigDecimal.minus(other : String) = subtract(other.bd) // this can be omitted
+
+
+
diff --git a/docs/exPuzzlers/src/_02_expressive/_02_Time_for_a_Change/Change.java b/docs/exPuzzlers/src/_02_expressive/_02_Time_for_a_Change/Change.java
new file mode 100644
index 00000000000..882e193fbf9
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_02_Time_for_a_Change/Change.java
@@ -0,0 +1,11 @@
+package _02_expressive._02_Time_for_a_Change;
+
+/**
+ * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 7). Pearson Education (USA). Kindle Edition.
+ */
+public class Change {
+ public static void main(String args[ ] ) {
+ System.out.println(2.00 - 1.10);
+ }
+}
+
diff --git a/docs/exPuzzlers/src/_02_expressive/_02_Time_for_a_Change/ChangeSolutions.java b/docs/exPuzzlers/src/_02_expressive/_02_Time_for_a_Change/ChangeSolutions.java
new file mode 100644
index 00000000000..be1736a2d9f
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_02_Time_for_a_Change/ChangeSolutions.java
@@ -0,0 +1,20 @@
+package _02_expressive._02_Time_for_a_Change;
+
+import java.math.BigDecimal;
+
+/**
+ * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 7). Pearson Education (USA). Kindle Edition.
+ */
+public class ChangeSolutions {
+ public static void main(String args[ ] ) {
+ // Poor solution - still uses binary floating-point!
+ System.out.printf("%.2f%n", 2.00 - 1.10);
+
+ // Calculation in cents
+ System.out.println((200 - 110) + " cents");
+
+ // BigDecimal
+ System.out.println(new BigDecimal("2.00"). subtract(new BigDecimal("1.10")));
+ }
+}
+
diff --git a/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivision.java b/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivision.java
new file mode 100644
index 00000000000..e4de049aba5
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivision.java
@@ -0,0 +1,12 @@
+package _02_expressive._03_Long_Division;
+
+/**
+ * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 9). Pearson Education (USA). Kindle Edition.
+ */
+public class LongDivision {
+ public static void main(String[] args) {
+ final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000;
+ final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000;
+ System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY);
+ }
+}
\ No newline at end of file
diff --git a/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivision.kt b/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivision.kt
new file mode 100644
index 00000000000..b1eaeda45e2
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivision.kt
@@ -0,0 +1,15 @@
+namespace long.division
+
+import std.io.*
+
+fun main(args : Array) {
+ // Problematic case does not compile
+// val MICROS_PER_DAY_ : Long = 24 * 60 * 60 * 1000 * 1000;
+// val MILLIS_PER_DAY_ : Long = 24 * 60 * 60 * 1000
+
+ // Solution:
+ val MICROS_PER_DAY : Long = 24.lng * 60 * 60 * 1000 * 1000;
+ val MILLIS_PER_DAY : Long = 24.lng * 60 * 60 * 1000
+
+ println(MICROS_PER_DAY / MILLIS_PER_DAY)
+}
diff --git a/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivisionSolution.java b/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivisionSolution.java
new file mode 100644
index 00000000000..24c8083f863
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivisionSolution.java
@@ -0,0 +1,12 @@
+package _02_expressive._03_Long_Division;
+
+/**
+ * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 9). Pearson Education (USA). Kindle Edition.
+ */
+public class LongDivisionSolution {
+ public static void main(String[] args) {
+ final long MICROS_PER_DAY = 24L * 60 * 60 * 1000 * 1000;
+ final long MILLIS_PER_DAY = 24L * 60 * 60 * 1000;
+ System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY);
+ }
+}
\ No newline at end of file
diff --git a/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivisionSolution.kt b/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivisionSolution.kt
new file mode 100644
index 00000000000..ae7c2538e0e
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivisionSolution.kt
@@ -0,0 +1,10 @@
+namespace long.division.solution
+
+import std.io.*
+
+fun main(args : Array) {
+ val MICROS_PER_DAY : Long = 24.lng * 60 * 60 * 1000 * 1000;
+ val MILLIS_PER_DAY : Long = 24.lng * 60 * 60 * 1000
+
+ println(MICROS_PER_DAY / MILLIS_PER_DAY)
+}
diff --git a/docs/exPuzzlers/src/_02_expressive/_04_Elementary/Elementary.java b/docs/exPuzzlers/src/_02_expressive/_04_Elementary/Elementary.java
new file mode 100644
index 00000000000..f81edefb51c
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_04_Elementary/Elementary.java
@@ -0,0 +1,11 @@
+package _02_expressive._04_Elementary;
+
+/**
+ * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 11). Pearson Education (USA). Kindle Edition.
+ */
+public class Elementary {
+ public static void main(String[] args) {
+ System.out.println(12345 + 5432l);
+ }
+}
+
diff --git a/docs/exPuzzlers/src/_02_expressive/_04_Elementary/Elementary.kt b/docs/exPuzzlers/src/_02_expressive/_04_Elementary/Elementary.kt
new file mode 100644
index 00000000000..60113574771
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_04_Elementary/Elementary.kt
@@ -0,0 +1,11 @@
+namespace elementary
+
+import std.io.*
+
+fun main(args : Array) {
+ // Problematic case does not compile
+// println(12345 + 5432l)
+
+ // Correct syntax:
+ println(12345 + 5432.lng)
+}
\ No newline at end of file
diff --git a/docs/exPuzzlers/src/_02_expressive/_04_Elementary/ElementarySolution.java b/docs/exPuzzlers/src/_02_expressive/_04_Elementary/ElementarySolution.java
new file mode 100644
index 00000000000..e1bc9464414
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_04_Elementary/ElementarySolution.java
@@ -0,0 +1,11 @@
+package _02_expressive._04_Elementary;
+
+/**
+ * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 11). Pearson Education (USA). Kindle Edition.
+ */
+public class ElementarySolution {
+ public static void main(String[] args) {
+ System.out.println(12345 + 5432L);
+ }
+}
+
diff --git a/docs/exPuzzlers/src/_02_expressive/_05_The_Joy_of_Hex/JoyOfHex.java b/docs/exPuzzlers/src/_02_expressive/_05_The_Joy_of_Hex/JoyOfHex.java
new file mode 100644
index 00000000000..93fbb99ee62
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_05_The_Joy_of_Hex/JoyOfHex.java
@@ -0,0 +1,11 @@
+package _02_expressive._05_The_Joy_of_Hex;
+
+/**
+ * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 13). Pearson Education (USA). Kindle Edition.
+ */
+public class JoyOfHex {
+ public static void main(String[] args) {
+ System.out.println(Long.toHexString(0x100000000L + 0xcafebabe));
+ }
+}
+
diff --git a/docs/exPuzzlers/src/_02_expressive/_06_Multicast/Multicast.kt b/docs/exPuzzlers/src/_02_expressive/_06_Multicast/Multicast.kt
new file mode 100644
index 00000000000..c58ec8c6b18
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_06_Multicast/Multicast.kt
@@ -0,0 +1,8 @@
+namespace multicast
+
+import std.io.*
+
+fun main(args : Array) {
+ println(-1.byt.chr.int)
+ println((-1).byt.chr.int)
+}
diff --git a/docs/exPuzzlers/src/_02_expressive/_06_Multicast/Mutlicast.java b/docs/exPuzzlers/src/_02_expressive/_06_Multicast/Mutlicast.java
new file mode 100644
index 00000000000..5fd49b5f325
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_06_Multicast/Mutlicast.java
@@ -0,0 +1,11 @@
+package _02_expressive._06_Multicast;
+
+/**
+ * @author abreslav
+ */
+public class Mutlicast {
+ public static void main(String[] args) {
+ System.out.println((int) (char) (byte) -1);
+ }
+}
+
diff --git a/docs/exPuzzlers/src/_02_expressive/_07_Swap_Meat/CleverSwap.java b/docs/exPuzzlers/src/_02_expressive/_07_Swap_Meat/CleverSwap.java
new file mode 100644
index 00000000000..874747f3a3a
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_07_Swap_Meat/CleverSwap.java
@@ -0,0 +1,16 @@
+package _02_expressive._07_Swap_Meat;
+
+/**
+ * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 17). Pearson Education (USA). Kindle Edition.
+ */
+public class CleverSwap {
+ public static void main(String[] args) {
+ int x = 1984; // (0x7c0)
+ int y = 2001; // (0x7d1)
+ x ^= y ^= x ^= y;
+ System.out.println("x = " + x + "; y = " + y);
+
+ // Solution: swap with a temp variable
+ // Do not assign to the same variable more than once in a single expression.
+ }
+}
\ No newline at end of file
diff --git a/docs/exPuzzlers/src/_02_expressive/_07_Swap_Meat/CleverSwap.kt b/docs/exPuzzlers/src/_02_expressive/_07_Swap_Meat/CleverSwap.kt
new file mode 100644
index 00000000000..68debbabd4b
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_07_Swap_Meat/CleverSwap.kt
@@ -0,0 +1,10 @@
+namespace cleverswap
+
+import std.io.*
+
+fun main(args : Array) {
+ var x = 1
+ // Do not assign to the same variable more than once in a single expression.
+ // Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 19). Pearson Education (USA). Kindle Edition.
+// x += (y += z)
+}
diff --git a/docs/exPuzzlers/src/_02_expressive/_08_Dos_Equis/DosEquis.java b/docs/exPuzzlers/src/_02_expressive/_08_Dos_Equis/DosEquis.java
new file mode 100644
index 00000000000..06ebbce669e
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_08_Dos_Equis/DosEquis.java
@@ -0,0 +1,13 @@
+package _02_expressive._08_Dos_Equis;
+
+/**
+ * @author abreslav
+ */
+public class DosEquis {
+ public static void main(String[] args) {
+ char x = 'X';
+ int i = 0;
+ System.out.print(true ? x : 0);
+ System.out.print(false ? i : x);
+ }
+}
diff --git a/docs/exPuzzlers/src/_02_expressive/_08_Dos_Equis/DosEquis.kt b/docs/exPuzzlers/src/_02_expressive/_08_Dos_Equis/DosEquis.kt
new file mode 100644
index 00000000000..1231cb2b1af
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_08_Dos_Equis/DosEquis.kt
@@ -0,0 +1,15 @@
+namespace dos.equis
+
+import std.io.*
+
+fun main(args : Array) {
+ // Problematic case does not compile
+ val x = 'X'
+ val i = 0
+ print(if (true) x else 0)
+ print(if (false) 0 else x)
+
+ // Mixed computations do not compile:
+// val int : Int = if (true) x else 0
+// val char : Char = if (false) 0 else x
+}
\ No newline at end of file
diff --git a/docs/exPuzzlers/src/_02_expressive/_09_Tweedledum/Tweedledum.java b/docs/exPuzzlers/src/_02_expressive/_09_Tweedledum/Tweedledum.java
new file mode 100644
index 00000000000..cceb3cb3e1a
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_09_Tweedledum/Tweedledum.java
@@ -0,0 +1,13 @@
+package _02_expressive._09_Tweedledum;
+
+/**
+ * @author abreslav
+ */
+public class Tweedledum {
+ public static void main(String[] args) {
+ byte x = 1;
+ byte i = 1;
+ x += i;
+// x = x + i;
+ }
+}
diff --git a/docs/exPuzzlers/src/_02_expressive/_10_Tweedledee/Tweedledee.java b/docs/exPuzzlers/src/_02_expressive/_10_Tweedledee/Tweedledee.java
new file mode 100644
index 00000000000..61758e70835
--- /dev/null
+++ b/docs/exPuzzlers/src/_02_expressive/_10_Tweedledee/Tweedledee.java
@@ -0,0 +1,13 @@
+package _02_expressive._10_Tweedledee;
+
+/**
+ * @author abreslav
+ */
+public class Tweedledee {
+ public static void main(String[] args) {
+ Object x = 1;
+ String i = "1";
+// x += i;
+ x = x + i;
+ }
+}
diff --git a/docs/exPuzzlers/src/_03_character/_11_The_Last_Laugh/LastLaugh.java b/docs/exPuzzlers/src/_03_character/_11_The_Last_Laugh/LastLaugh.java
new file mode 100644
index 00000000000..da25b2ad75b
--- /dev/null
+++ b/docs/exPuzzlers/src/_03_character/_11_The_Last_Laugh/LastLaugh.java
@@ -0,0 +1,12 @@
+package _03_character._11_The_Last_Laugh;
+
+/**
+ * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 25). Pearson Education (USA). Kindle Edition.
+ */
+public class LastLaugh {
+ public static void main(String args[]) {
+ System.out.print("H" + "a");
+ System.out.print('H' + 'a');
+ }
+}
+
diff --git a/docs/exPuzzlers/src/_03_character/_11_The_Last_Laugh/LastLaugh.kt b/docs/exPuzzlers/src/_03_character/_11_The_Last_Laugh/LastLaugh.kt
new file mode 100644
index 00000000000..3f4b33b5431
--- /dev/null
+++ b/docs/exPuzzlers/src/_03_character/_11_The_Last_Laugh/LastLaugh.kt
@@ -0,0 +1,12 @@
+namespace last.laugh
+
+import std.io.*
+
+fun main(args : Array) {
+ print("H" + "a")
+ // Problematic case does not compile
+// System.out?.print('H' + 'a')
+
+ // Solution
+ print('H'.toString() + 'a')
+}
\ No newline at end of file
diff --git a/docs/exPuzzlers/src/_03_character/_12_ABC/Abc.java b/docs/exPuzzlers/src/_03_character/_12_ABC/Abc.java
new file mode 100644
index 00000000000..5eef04a52f9
--- /dev/null
+++ b/docs/exPuzzlers/src/_03_character/_12_ABC/Abc.java
@@ -0,0 +1,19 @@
+package _03_character._12_ABC;
+
+/**
+ * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 27). Pearson Education (USA). Kindle Edition.
+ */
+public class Abc {
+ public static void main(String[] args) {
+ String letters = "ABC";
+ char[] numbers = {'1', '2', '3'};
+ System.out.println(letters + " easy as " + numbers);
+
+ // Solution:
+ System.out.println(letters + " easy as ");
+ System.out.println(numbers);
+ // or
+ System.out.println(letters + " easy as " + String.valueOf(numbers));
+ }
+}
+
diff --git a/docs/exPuzzlers/src/_03_character/_13_Animal_Farm/AnimalFarm.java b/docs/exPuzzlers/src/_03_character/_13_Animal_Farm/AnimalFarm.java
new file mode 100644
index 00000000000..d7c19aeecf5
--- /dev/null
+++ b/docs/exPuzzlers/src/_03_character/_13_Animal_Farm/AnimalFarm.java
@@ -0,0 +1,18 @@
+package _03_character._13_Animal_Farm;
+
+/**
+ * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 29). Pearson Education (USA). Kindle Edition.
+ */
+public class AnimalFarm {
+ public static void main(String[] args) {
+ final String pig = "length: 10";
+ final String dog = "length: " + pig.length();
+ System.out.println("Animals are equal: " + pig == dog);
+
+ // Solution:
+ System.out.println("Animals are equal: " + pig.equals(dog));
+ // or
+ System.out.println("Animals are equal: " + (pig.intern() == dog.intern()));
+ }
+}
+
diff --git a/docs/exPuzzlers/src/_03_character/_13_Animal_Farm/AnimalFarm.kt b/docs/exPuzzlers/src/_03_character/_13_Animal_Farm/AnimalFarm.kt
new file mode 100644
index 00000000000..fe0c51d44a9
--- /dev/null
+++ b/docs/exPuzzlers/src/_03_character/_13_Animal_Farm/AnimalFarm.kt
@@ -0,0 +1,16 @@
+namespace animal.farm
+
+import std.io.*
+import std.*
+
+fun main(args : Array) {
+ val pig = "length: 10";
+ val dog = "length: " + pig.length;
+ println("Animals are equal: " + pig == dog);
+
+ // Solution:
+ println("Animals are equal: " + (pig == dog));
+
+ // Note:
+ println("Animals are equal: " + (pig identityEquals dog));
+}
\ No newline at end of file