From 9edd865a9c951608bf7a0f5ccc3ee3191fb0d902 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 23 Nov 2011 11:15:49 +0400 Subject: [PATCH] More puzzlers --- docs/exPuzzlers/kotlin/std.kt | 2 +- .../_13_Animal_Farm/AnimalFarm.kt | 2 +- .../_48_All_I_Get_Is_Static/Bark.kt | 2 +- .../_06_classy/_53_Do_Your_Thing/MyThing.java | 24 +++++++++++++++++ .../_06_classy/_53_Do_Your_Thing/MyThing.kt | 14 ++++++++++ .../_06_classy/_53_Do_Your_Thing/Thing.java | 7 +++++ .../_06_classy/_54_Null_and_Void/Null.java | 11 ++++++++ .../src/_06_classy/_54_Null_and_Void/Null.kt | 19 ++++++++++++++ .../src/_06_classy/_55_Creationism/BUG | 0 .../_06_classy/_55_Creationism/Creator.java | 21 +++++++++++++++ .../src/_06_classy/_55_Creationism/Creator.kt | 21 +++++++++++++++ .../src/_07_library/_56_Big_Problem/BUG | 0 .../_56_Big_Problem/BigProblem.java | 18 +++++++++++++ .../_07_library/_56_Big_Problem/BigProblem.kt | 26 +++++++++++++++++++ .../_07_library/_59_Whats_the_Difference/BUG | 0 .../_59_Whats_the_Difference/Differences.java | 15 +++++++++++ .../_59_Whats_the_Difference/Differences.kt | 20 ++++++++++++++ 17 files changed, 199 insertions(+), 3 deletions(-) create mode 100644 docs/exPuzzlers/src/_06_classy/_53_Do_Your_Thing/MyThing.java create mode 100644 docs/exPuzzlers/src/_06_classy/_53_Do_Your_Thing/MyThing.kt create mode 100644 docs/exPuzzlers/src/_06_classy/_53_Do_Your_Thing/Thing.java create mode 100644 docs/exPuzzlers/src/_06_classy/_54_Null_and_Void/Null.java create mode 100644 docs/exPuzzlers/src/_06_classy/_54_Null_and_Void/Null.kt create mode 100644 docs/exPuzzlers/src/_06_classy/_55_Creationism/BUG create mode 100644 docs/exPuzzlers/src/_06_classy/_55_Creationism/Creator.java create mode 100644 docs/exPuzzlers/src/_06_classy/_55_Creationism/Creator.kt create mode 100644 docs/exPuzzlers/src/_07_library/_56_Big_Problem/BUG create mode 100644 docs/exPuzzlers/src/_07_library/_56_Big_Problem/BigProblem.java create mode 100644 docs/exPuzzlers/src/_07_library/_56_Big_Problem/BigProblem.kt create mode 100644 docs/exPuzzlers/src/_07_library/_59_Whats_the_Difference/BUG create mode 100644 docs/exPuzzlers/src/_07_library/_59_Whats_the_Difference/Differences.java create mode 100644 docs/exPuzzlers/src/_07_library/_59_Whats_the_Difference/Differences.kt diff --git a/docs/exPuzzlers/kotlin/std.kt b/docs/exPuzzlers/kotlin/std.kt index 9ad7308aae7..31cd9bf4f8f 100644 --- a/docs/exPuzzlers/kotlin/std.kt +++ b/docs/exPuzzlers/kotlin/std.kt @@ -9,7 +9,7 @@ inline fun array(vararg array : Long) = array inline fun array(vararg array : Double) = array inline fun array(vararg array : Float) = array -fun Any?.identityEquals(other : Any?) = this === other +//fun Any?.identityEquals(other : Any?) = this === other inline fun T?.sure() : T { if (this == null) diff --git a/docs/exPuzzlers/src/_03_character/_13_Animal_Farm/AnimalFarm.kt b/docs/exPuzzlers/src/_03_character/_13_Animal_Farm/AnimalFarm.kt index fe0c51d44a9..7dd33235955 100644 --- a/docs/exPuzzlers/src/_03_character/_13_Animal_Farm/AnimalFarm.kt +++ b/docs/exPuzzlers/src/_03_character/_13_Animal_Farm/AnimalFarm.kt @@ -12,5 +12,5 @@ fun main(args : Array) { println("Animals are equal: " + (pig == dog)); // Note: - println("Animals are equal: " + (pig identityEquals dog)); + println("Animals are equal: " + (pig identityEquals dog)) } \ No newline at end of file diff --git a/docs/exPuzzlers/src/_06_classy/_48_All_I_Get_Is_Static/Bark.kt b/docs/exPuzzlers/src/_06_classy/_48_All_I_Get_Is_Static/Bark.kt index 2cf523b8e1b..4c2fbb0bc40 100644 --- a/docs/exPuzzlers/src/_06_classy/_48_All_I_Get_Is_Static/Bark.kt +++ b/docs/exPuzzlers/src/_06_classy/_48_All_I_Get_Is_Static/Bark.kt @@ -25,4 +25,4 @@ fun main(args : Array) { // nipper.bark() Dog.bark() Basenji.bark() -} \ No newline at end of file +} diff --git a/docs/exPuzzlers/src/_06_classy/_53_Do_Your_Thing/MyThing.java b/docs/exPuzzlers/src/_06_classy/_53_Do_Your_Thing/MyThing.java new file mode 100644 index 00000000000..89a6cf15dab --- /dev/null +++ b/docs/exPuzzlers/src/_06_classy/_53_Do_Your_Thing/MyThing.java @@ -0,0 +1,24 @@ +package _06_classy._53_Do_Your_Thing; + +public class MyThing extends Thing { + private final int arg; + + /* + * This constructor is illegal. Rewrite it so that it has the same + * effect but is legal. + */ + public MyThing() { + this((int)System.currentTimeMillis()); + } + + /* + * This constructor is illegal. Rewrite it so that it has the same + * effect but is legal. + */ + public MyThing(int arg) { + super(arg); + this.arg = arg; + } + + +} diff --git a/docs/exPuzzlers/src/_06_classy/_53_Do_Your_Thing/MyThing.kt b/docs/exPuzzlers/src/_06_classy/_53_Do_Your_Thing/MyThing.kt new file mode 100644 index 00000000000..ff06e855549 --- /dev/null +++ b/docs/exPuzzlers/src/_06_classy/_53_Do_Your_Thing/MyThing.kt @@ -0,0 +1,14 @@ +namespace `do`.your.thing + +import std.io.* +import std.* +import _06_classy._53_Do_Your_Thing.Thing + +class MyThing(val arg : Int) : Thing(arg) { + +} + + +fun main(args : Array) { + println(MyThing(10).arg) +} \ No newline at end of file diff --git a/docs/exPuzzlers/src/_06_classy/_53_Do_Your_Thing/Thing.java b/docs/exPuzzlers/src/_06_classy/_53_Do_Your_Thing/Thing.java new file mode 100644 index 00000000000..85111834f2e --- /dev/null +++ b/docs/exPuzzlers/src/_06_classy/_53_Do_Your_Thing/Thing.java @@ -0,0 +1,7 @@ +package _06_classy._53_Do_Your_Thing; + +// This is meant to represent a library class. You must not modify it. +public class Thing { + public Thing(int i) { + } +} diff --git a/docs/exPuzzlers/src/_06_classy/_54_Null_and_Void/Null.java b/docs/exPuzzlers/src/_06_classy/_54_Null_and_Void/Null.java new file mode 100644 index 00000000000..409aa3392c6 --- /dev/null +++ b/docs/exPuzzlers/src/_06_classy/_54_Null_and_Void/Null.java @@ -0,0 +1,11 @@ +package _06_classy._54_Null_and_Void; + +public class Null { + public static void greet() { + System.out.println("Hello world!"); + } + + public static void main(String[] args) { + ((Null) null).greet(); + } +} diff --git a/docs/exPuzzlers/src/_06_classy/_54_Null_and_Void/Null.kt b/docs/exPuzzlers/src/_06_classy/_54_Null_and_Void/Null.kt new file mode 100644 index 00000000000..e73e94f3f1e --- /dev/null +++ b/docs/exPuzzlers/src/_06_classy/_54_Null_and_Void/Null.kt @@ -0,0 +1,19 @@ +namespace `null`.and.void + +import std.io.* +import std.* + +class Null() { + class object { + fun greet() { + println("Hello world!") + } + } +} + + +fun main(args : Array) { +// The problemati code does not compile: +// (null as Null).greet() + Null.greet() +} \ No newline at end of file diff --git a/docs/exPuzzlers/src/_06_classy/_55_Creationism/BUG b/docs/exPuzzlers/src/_06_classy/_55_Creationism/BUG new file mode 100644 index 00000000000..e69de29bb2d diff --git a/docs/exPuzzlers/src/_06_classy/_55_Creationism/Creator.java b/docs/exPuzzlers/src/_06_classy/_55_Creationism/Creator.java new file mode 100644 index 00000000000..1c6d57869bd --- /dev/null +++ b/docs/exPuzzlers/src/_06_classy/_55_Creationism/Creator.java @@ -0,0 +1,21 @@ +package _06_classy._55_Creationism; + +public class Creator { + public static void main(String[] args) { +// for (int i = 0; i < 100; i++) +// Creature creature = new Creature(); + System.out.println(Creature.numCreated()); + } +} + +class Creature { + private static long numCreated = 0; + + public Creature() { + numCreated++; + } + + public static long numCreated() { + return numCreated; + } +} diff --git a/docs/exPuzzlers/src/_06_classy/_55_Creationism/Creator.kt b/docs/exPuzzlers/src/_06_classy/_55_Creationism/Creator.kt new file mode 100644 index 00000000000..ca14d6e801a --- /dev/null +++ b/docs/exPuzzlers/src/_06_classy/_55_Creationism/Creator.kt @@ -0,0 +1,21 @@ +namespace creationism + +import std.io.* +import std.* + +class Creature() { + class object { + var numCreated = 0 + private set + } + + { +// Creature.numCreated++ + } +} + + +fun main(args : Array) { +// for (i in 1..100) +// val creature = Creature() +} \ No newline at end of file diff --git a/docs/exPuzzlers/src/_07_library/_56_Big_Problem/BUG b/docs/exPuzzlers/src/_07_library/_56_Big_Problem/BUG new file mode 100644 index 00000000000..e69de29bb2d diff --git a/docs/exPuzzlers/src/_07_library/_56_Big_Problem/BigProblem.java b/docs/exPuzzlers/src/_07_library/_56_Big_Problem/BigProblem.java new file mode 100644 index 00000000000..4c49110c285 --- /dev/null +++ b/docs/exPuzzlers/src/_07_library/_56_Big_Problem/BigProblem.java @@ -0,0 +1,18 @@ +package _07_library._56_Big_Problem; + +import java.math.BigInteger; + +public class BigProblem { + public static void main(String[] args) { + BigInteger fiveThousand = new BigInteger("5000"); + BigInteger fiftyThousand = new BigInteger("50000"); + BigInteger fiveHundredThousand + = new BigInteger("500000"); + + BigInteger total = BigInteger.ZERO; + total.add(fiveThousand); + total.add(fiftyThousand); + total.add(fiveHundredThousand); + System.out.println(total); + } +} diff --git a/docs/exPuzzlers/src/_07_library/_56_Big_Problem/BigProblem.kt b/docs/exPuzzlers/src/_07_library/_56_Big_Problem/BigProblem.kt new file mode 100644 index 00000000000..815ffe9b105 --- /dev/null +++ b/docs/exPuzzlers/src/_07_library/_56_Big_Problem/BigProblem.kt @@ -0,0 +1,26 @@ +namespace big.problem + +import std.io.* +import std.* +import java.math.BigInteger + +fun main(args : Array) { + val fiveThousand = "5000".bi() + val fiftyThousand = "50000".bi() + val fiveHundredThousand = "500000".bi() + + val total : BigInteger = "0".bi()//BigInteger.ZERO + total + fiveThousand + total + fiftyThousand + total + fiveHundredThousand + println(total) // No surprise + + var total1 : BigInteger = "0".bi()//BigInteger.ZERO + total1 += fiveThousand + total1 += fiftyThousand + total1 += fiveHundredThousand + println(total1) // Works +} + +inline fun String.bi() : BigInteger = BigInteger(this) +inline fun BigInteger.plus(other : BigInteger) = this add other \ No newline at end of file diff --git a/docs/exPuzzlers/src/_07_library/_59_Whats_the_Difference/BUG b/docs/exPuzzlers/src/_07_library/_59_Whats_the_Difference/BUG new file mode 100644 index 00000000000..e69de29bb2d diff --git a/docs/exPuzzlers/src/_07_library/_59_Whats_the_Difference/Differences.java b/docs/exPuzzlers/src/_07_library/_59_Whats_the_Difference/Differences.java new file mode 100644 index 00000000000..3f2bc5cdc8f --- /dev/null +++ b/docs/exPuzzlers/src/_07_library/_59_Whats_the_Difference/Differences.java @@ -0,0 +1,15 @@ +package _07_library._59_Whats_the_Difference; + +import java.util.*; + +public class Differences { + public static void main(String[] args) { + int vals[] = { 789, 678, 567, 456, 345, 234, 123, 012 }; + Set diffs = new HashSet(); + + for (int i = 0; i < vals.length; i++) + for (int j = i; j < vals.length; j++) + diffs.add(vals[i] - vals[j]); + System.out.println(diffs.size()); + } +} diff --git a/docs/exPuzzlers/src/_07_library/_59_Whats_the_Difference/Differences.kt b/docs/exPuzzlers/src/_07_library/_59_Whats_the_Difference/Differences.kt new file mode 100644 index 00000000000..c1afb5184f6 --- /dev/null +++ b/docs/exPuzzlers/src/_07_library/_59_Whats_the_Difference/Differences.kt @@ -0,0 +1,20 @@ +namespace whats.the.difference + +import std.io.* +import std.* +import java.util.* + +fun iarray(vararg a : Int) = a // BUG + +fun main(args : Array) { + // Problematic code does not compile +// val vals = iarray(789, 678, 567, 456, 345, 234, 123, 012) + val vals = iarray(789, 678, 567, 456, 345, 234, 123, 12) + val diffs = HashSet + for (i in vals.indices) + for (j in i..vals.lastIndex()) + diffs.add(vals[i] - vals[j]) + println(diffs.size()) +} + +fun IntArray.lastIndex() = size - 1 \ No newline at end of file