Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Need some JavaScript puzzles

5 views
Skip to first unread message

Oltmans

unread,
Sep 23, 2008, 11:50:08 AM9/23/08
to
Hi guys,
I'm learning JavaScript and I need some puzzles that can make me a
better JavaScript programmer. I mean I'm looking out for programming
puzzles (e.g. Project Euler or TopCoder) but I'm looking out for
language specific puzzles that can make me a top-notch JavaScript
programmer. a) Any puzzles you can recommend? b) Any programs that you
can suggest that can make me learn JavaScript internals in greatest
depth.

Please recommend anything. I know some very best programmers lurk
around here so any help will be appreciated. Moreover, to people
who've been using JavaScript for sometime, please recommend programs
that you wish you had done earlier to understand internals in a better
way. Thanks in advance.

Thomas 'PointedEars' Lahn

unread,
Sep 23, 2008, 12:58:45 PM9/23/08
to
Oltmans wrote:
> I'm learning JavaScript and I need some puzzles that can make me a better
> JavaScript programmer. I mean I'm looking out for programming puzzles
> (e.g. Project Euler or TopCoder) but I'm looking out for language
> specific puzzles that can make me a top-notch JavaScript programmer. a)
> Any puzzles you can recommend?

You will not become what you aspire to be by solving trivial puzzles. Find
a *real-world problem* that you want to solve. Try to solve it using an
ECMAScript implementation like JavaScript. There is no better exercise,
even if the scripted solution turns out not to be the best approach to solve
that particular problem.

> b) Any programs that you can suggest that can make me learn JavaScript
> internals in greatest depth.

Programs?

> Please recommend anything. I know some very best programmers lurk around
> here so any help will be appreciated.

I do not think they just *lurk* *here*.

> Moreover, to people who've been using JavaScript for sometime, please
> recommend programs that you wish you had done earlier to understand
> internals in a better way. Thanks in advance.

I can recommend Mozilla Thunderbird to subscribe to, read, and post to
comp.lang.javascript using your real name.


PointedEars
--
Prototype.js was written by people who don't know javascript for people
who don't know javascript. People who don't know javascript are not
the best source of advice on designing systems that use javascript.
-- Richard Cornford, cljs, <f806at$ail$1$8300...@news.demon.co.uk>

Oltmans

unread,
Sep 23, 2008, 2:27:00 PM9/23/08
to

> You will not become what you aspire to be by solving trivial puzzles.  Find
> a *real-world problem* that you want to solve.  Try to solve it using an
> ECMAScript implementation like JavaScript.  There is no better exercise,
> even if the scripted solution turns out not to be the best approach to solve
> that particular problem.

Point taken. On a serious note, can you recommend some projects that I
should be working on in my spare time? Any ideas that you have. Thanks
in advance.

Steve Swift

unread,
Sep 23, 2008, 3:27:53 PM9/23/08
to
Oltmans wrote:
> Please recommend anything. I know some very best programmers lurk
> around here so any help will be appreciated. Moreover, to people
> who've been using JavaScript for sometime, please recommend programs
> that you wish you had done earlier to understand internals in a better
> way. Thanks in advance.

Well, one recommendation would be to lurk around here. You'll get a
never-ending supply of "why doesn't this work?" questions. Since you'll
be facing some of these (of your own making), skill in working out why
something doesn't work can be quite handy. I probably spend more time on
the one thing that doesn't work than I do on the few things coded by me
that do work.

--
Steve Swift
http://www.swiftys.org.uk/swifty.html
http://www.ringers.org.uk

Thomas 'PointedEars' Lahn

unread,
Sep 23, 2008, 4:01:59 PM9/23/08
to

There are several open-source projects you could generally contribute to,
however I am afraid that without more-than-pedestrian knowledge you could
neither appreciate your participation in those projects as you would like
to, nor would it be likely that you could make a considerable contribution
to them.

IMHO, programming languages can be learned best like natural languages: by
using them in everyday life. Therefore, I (seriously) suggested you try to
use scripting to solve *your* problems first, those which bug *you* the
most. Start with the ones that look simple on the outset. Find them to be
more complex than you thought. Do not let yourself be discouraged, and take
your time to solve them eventually. Then use the experience gained to solve
even more complex problems.

When (not: if) you get stuck in the process, read *again* everything about
the topic that you can get your hands on (electronic material is cheapest
and readily available, but not always best; books are more expensive and
tend to be bad). Read it again. What is most important: Do not fall for
self-proclaimed gurus; compare your sources, verify what they are saying.
Look into the message, not at the messenger. If anything still remains
unclear, ask smart questions[1] about it.

This is how I started learning the languages a decade ago and it is still
serving me well.


HTH

PointedEars

P.S.
Please shorten, but do not remove attribution lines for quotations you leave in.
___________
[1] <http://catb.org/~esr/faqs/smart-questions.html>
--
realism: HTML 4.01 Strict
evangelism: XHTML 1.0 Strict
madness: XHTML 1.1 as application/xhtml+xml
-- Bjoern Hoehrmann

Hal Rosser

unread,
Sep 23, 2008, 8:28:30 PM9/23/08
to

"Oltmans" <rolf.o...@gmail.com> wrote in message
news:8c661acb-a57c-4b45...@l64g2000hse.googlegroups.com...

OK -
Create a Bingo Game
or a Checkers game
or a Calculator like the windows accessories calculator
or a number-to-words (like writing a check) program without getting help
or all the above.
or if you like recursion, look at the "towers of Hanoi" puzzle.(google it)


dhtml

unread,
Sep 23, 2008, 9:14:24 PM9/23/08
to
Oltmans wrote:
> Hi guys,
> I'm learning JavaScript and I need some puzzles that can make me a
> better JavaScript programmer. I mean I'm looking out for programming
> puzzles (e.g. Project Euler or TopCoder) but I'm looking out for
> language specific puzzles that can make me a top-notch JavaScript
> programmer. a) Any puzzles you can recommend? b) Any programs that you
> can suggest that can make me learn JavaScript internals in greatest
> depth.
>
> Please recommend anything. I know some very best programmers lurk


Only the best lurkers here!
O_o
:-D

> around here so any help will be appreciated. Moreover, to people
> who've been using JavaScript for sometime, please recommend programs
> that you wish you had done earlier to understand internals in a better
> way. Thanks in advance.


1. write a function return the binary representation of a given number
in "ON" and "OFF". For example, if the input is 47 (101111 in binary),
it should return "ON OFF ON ON ON ON".

Message has been deleted

Jorge

unread,
Sep 24, 2008, 9:12:44 AM9/24/08
to
On Sep 24, 3:14 am, dhtml <dhtmlkitc...@gmail.com> wrote:
>
> 1. write a function return the binary representation of a given number
> in "ON" and "OFF".  For example, if the input is 47 (101111 in binary),
> it should return "ON OFF ON ON ON ON".

[x] done: http://preview.tinyurl.com/3unmha

--
Jorge.

Dr J R Stockton

unread,
Sep 24, 2008, 11:02:58 AM9/24/08
to
On Sep 23, 9:01 pm, Thomas 'PointedEars' Lahn <PointedE...@web.de>
wrote:

> Oltmans wrote:
> >> You will not become what you aspire to be by solving trivial puzzles.  Find
> >> a *real-world problem* that you want to solve.

NO. Real-world problems are generally either trivial or complex, and
neither is appropriate for practice. OP, choose instead problems
which, at your current state of knowledge, are on the verge of
difficulty. When you approach the ability to do a real-world non-
trivial problem that you want to solve, set it aside; the risks of
including someting bad and not realising it or not bothering to fix it
are too great. Instead, choose a problem of sufficient fifficulty
which you do not need to solve, so that you can throw away the
solution. Don't assume premature competence.

Tackle problems that you really need to solve only when you know
enough to be reasonably sure of making a good job of them.

> Please shorten, but do not remove attribution lines for quotations you leave in.

Ignore that : people give attributions for a purpose, and full
attributions are useful in various ways that Thomas Lahn does not
understand. Remember, be is not psychologically normal, as is obvious
from reading a selection of his replies. Perhaps he is the Kaiser
reincarnated; perhaps something worse.

--
(c) John Stockton, near London, UK. Posting with Google.
Mail: J.R.""""""""@physics.org or (better) via Home Page at
Web: <URL:http://www.merlyn.demon.co.uk/>
FAQish topics, acronyms, links, etc.; Date, Delphi, JavaScript, ....|

showell...@gmail.com

unread,
Sep 24, 2008, 11:04:09 AM9/24/08
to
On Sep 23, 8:50 am, Oltmans <rolf.oltm...@gmail.com> wrote:
> Hi guys,
> I'm learning JavaScript and I need some puzzles that can make me a
> better JavaScript programmer. [...]
>
> [...] please recommend programs

> that you wish you had done earlier to understand internals in a better
> way. Thanks in advance.

One of the first Javascript programs that I wrote lives here:

http://webstervanrobot.com/ (only tested on Firefox)

The program implements a small programming language on top of
Javascript that allows a robot to move around a grid of streets and
avenues.

It got me acquainted with the following concepts:

creating objects
manipulating DOM
parsing strings
implementing data structures
responding to events
setting up callbacks and responding to them
variable scoping (this, var, etc.)
cross-browser pain (which I have punted on so far)

If you're learning Javascript, this might be a fun program to hack on,
because it's all self-contained and not tied to any domain, and I'm
hoping to make it a useful program. It really is a "Javascript
program," as opposed to code that lives within a larger system, for
better or worse.

Some challenges:

1) Make it work on a browser other than Firefox.
2) Change the world to be rendered on a canvas instead of tables.
3) Add scrolling to the world.
4) Add new capabilities for the robot.
5) Add new syntax to the programming language.
6) Simply play around with the code, try to restructure it to your
liking.
7) Get the program to have a mode where you can click on it to see
the internal data structures that define the world.

Yes, I'm subversively asking for help with my program, but the program
was written with the intention of helping people learn Javascript (and
programming in general). It's free software.

Cheers,

Steve
http://webstervanrobot.com/

Jorge

unread,
Sep 25, 2008, 1:32:03 PM9/25/08
to
On Sep 23, 5:50 pm, Oltmans <rolf.oltm...@gmail.com> wrote:

>
> Please recommend anything.

Have you seen Douglas Crockford's videos already ?

http://developer.yahoo.com/yui/theater/

--
Jorge.

Douglas Crockford

unread,
Sep 26, 2008, 9:08:13 PM9/26/08
to
Oltmans wrote:
> Hi guys,
> I'm learning JavaScript and I need some puzzles that can make me a
> better JavaScript programmer.

Dmitri showed me this one:

Define function add such that

add(3)(4)

returns 7.

Jorge

unread,
Sep 26, 2008, 9:18:11 PM9/26/08
to

javascript:alert((function add (p) { var a=p; return function (p)
{ return a+p } })(3)(4))

--
Jorge

Conrad Lender

unread,
Sep 26, 2008, 10:07:16 PM9/26/08
to
On 2008-09-27 03:18, Jorge wrote:
>> Define function add such that>
>> add(3)(4)
>> returns 7.
>
> javascript:alert((function add (p) { var a=p; return function (p)
> { return a+p } })(3)(4))

You don't need to create an extra variable.

function add (first) {
return function (second) {
return first + second;
}
}

But hey!
Don't spoil the fun for the OP by posting the solution!

@Douglas:
I'd also appreciate more puzzles if you know any. This kind of (simple
but interesting) problem is a godsend when you're teaching kids.

The only thing I've seen recently that comes close to a puzzle is this
website:

http://parentnode.org/static/challange2.html

You need to enter the correct password, that's all. No rewards :-) It's
not pretty, rather the opposite, but if you like obfuscation, it might
be interesting. Syntax highlighting helps.


- Conrad

Jorge

unread,
Sep 26, 2008, 10:15:11 PM9/26/08
to
On Sep 27, 4:07 am, Conrad Lender <crlen...@yahoo.com> wrote:
> On 2008-09-27 03:18, Jorge wrote:
>
> >> Define function add such that>
> >>      add(3)(4)
> >> returns 7.
>
> > javascript:alert((function add (p) { var a=p; return function (p)
> > { return a+p } })(3)(4))
>
> You don't need to create an extra variable.
>
> function add (first) {
>     return function (second) {
>         return first + second;
>     }
>
> }

Damn it!
(but that took you an hour hehe)

--
Jorge.

Oltmans

unread,
Sep 27, 2008, 8:08:27 PM9/27/08
to
On Sep 27, 7:07 am, Conrad Lender <crlen...@yahoo.com> wrote:
> On 2008-09-27 03:18, Jorge wrote:
>
> >> Define function add such that>
> >>      add(3)(4)
> >> returns 7.
>
> > javascript:alert((function add (p) { var a=p; return function (p)
> > { return a+p } })(3)(4))
>
> You don't need to create an extra variable.
>
> function add (first) {
>     return function (second) {
>         return first + second;
>     }
>
> }
>
> But hey!
> Don't spoil the fun for the OP by posting the solution!
>
> @Douglas:
> I'd also appreciate more puzzles if you know any. This kind of (simple
> but interesting) problem is a godsend when you're teaching kids.

I absolutely agree with you. We need some puzzles like that. I really
liked that puzzle. This is exactly the kind of puzzle that I wanted to
solve. I mean a puzzle that would force me hard to think about the
language constructs and this one just did that.

Also, I thank others who posted their invaluable comments.

Oltmans

unread,
Sep 27, 2008, 8:14:56 PM9/27/08
to


Douglas,
I really appreciate you jumping in the discussion. I really was
looking for such a puzzle that can force me think hard about language
constructs and that one just did that. There are many puzzles that you
can solve to improve your algorithmic skills but I was not looking for
those. And I guess your puzzle was dead on. I agree with other people
i.e. if you know more such puzzles like that then please let us know.
Any puzzles that will make me think hard about how to use the
JavaScript constructs. Please post more such puzzles. It will be a lot
of fun. Thanks again.

P.S: You're my JavaScript hero :) I'm even on the verge of finishing
"Little Schemer" just because you recommended it.

Conrad Lender

unread,
Sep 27, 2008, 9:11:52 PM9/27/08
to
On 2008-09-28 02:08, Oltmans wrote:
> I absolutely agree with you. We need some puzzles like that. I really
> liked that puzzle. This is exactly the kind of puzzle that I wanted to
> solve. I mean a puzzle that would force me hard to think about the
> language constructs and this one just did that.

This page has a number of short brain teasers:
http://dow.ngra.de/2008/02/28/javascript-puzzlers/

A few caveats:
- The examples assume that a print() function has been defined, which
is usually not the case in a browser environment (Rhino does have a
print() function though).
- The later examples build on the results of the previous ones, meaning
that they are not self-contained.

IIRC that page has even been posted here before.


- Conrad

Karl Tikjøb Krukow

unread,
Sep 28, 2008, 7:03:50 AM9/28/08
to
Oltmans wrote:
> Hi guys,
> I'm learning JavaScript and I need some puzzles that can make me a
> better JavaScript programmer.

I think the best way for you to learn JavaScript depends on your
background. What other programming languages do you already know well?

dhtml

unread,
Sep 28, 2008, 3:04:04 PM9/28/08
to
Jorge wrote:
> On Sep 24, 3:14 am, dhtml <dhtmlkitc...@gmail.com> wrote:
>> 1. write a function return the binary representation of a given number
>> in "ON" and "OFF". For example, if the input is 47 (101111 in binary),
>> it should return "ON OFF ON ON ON ON".
>
> http://preview.tinyurl.com/3unmha
>

You could have used toString(radix).

var n = 101111;

n.toString(2).replace(/1/g, "ON ").
replace(/0/g,"OFF ").replace(/ $/,'');


Garrett

> --
> Jorge.

Peter Michaux

unread,
Sep 28, 2008, 3:58:00 PM9/28/08
to

Jorge

unread,
Sep 29, 2008, 4:02:58 PM9/29/08
to
On Sep 28, 9:04 pm, dhtml <dhtmlkitc...@gmail.com> wrote:
> Jorge wrote:
> > On Sep 24, 3:14 am, dhtml <dhtmlkitc...@gmail.com> wrote:
> >> 1. write a function return the binary representation of a given number
> >> in "ON" and "OFF". For example, if the input is 47 (101111 in binary),
> >> it should return "ON OFF ON ON ON ON".
>
> >http://jorgechamorro.com/cljs/016/

>
> You could have used toString(radix).
>
> var n = 101111;
>
> n.toString(2).replace(/1/g, "ON ").
> replace(/0/g,"OFF ").replace(/ $/,'');
>

Now that you say it... yes. I completely forgot its existence :-)

Thanks for posting that because I have played with it a little and I
have learnt that it converts reals as well:

(3.1416).toString(2) ->
11.001001000011111111100101110010010001110100010100111

and that it will fail as miserably as mine and without warning (for
those numbers that a 'number' primitive value can't represent
accurately):

javascript:alert((9007199254740991).toString(2)) ->
11111111111111111111111111111111111111111111111111111
javascript:alert((9007199254740991.4).toString(2))->
11111111111111111111111111111111111111111111111111111
javascript:alert((9007199254740991.5).toString(2))->
100000000000000000000000000000000000000000000000000000
javascript:alert((9007199254740992).toString(2)) ->
100000000000000000000000000000000000000000000000000000
javascript:alert((9007199254740993).toString(2)) ->
100000000000000000000000000000000000000000000000000000


While writing 'my version', I was going to 'logically' test the bits
with an '&', but I have discovered that the & operator operates on
just 32 bits, not on the 53 available in the mantissa of a 'number'
primitive value:

javascript:alert(9007199254740991 & Math.pow(2,31)) ===
-10000000000000000000000000000000
javascript:alert(9007199254740991 & Math.pow(2,32)) === 0

--
Jorge.

Dr J R Stockton

unread,
Sep 29, 2008, 5:49:57 PM9/29/08
to
On Sep 29, 9:02 pm, Jorge <jo...@jorgechamorro.com> wrote:

> While writing 'my version', I was going to 'logically' test the bits
> with an '&', but I have discovered that the & operator operates on
> just 32 bits, not on the 53 available in the mantissa of a 'number'
> primitive value:

Agreed, but one can access all bits of a Double for logical operations
by using arithmetic. Working example :
<URL:http://www.merlyn.demon.co.uk/js-misc0.htm#TC>

Jorge

unread,
Sep 30, 2008, 3:39:30 PM9/30/08
to
On Sep 29, 11:49 pm, Dr J R Stockton <J.R.Stock...@physics.org> wrote:
> On Sep 29, 9:02 pm, Jorge <jo...@jorgechamorro.com> wrote:
>
> > While writing 'my version', I was going to 'logically' test the bits
> > with an '&', but I have discovered that the & operator operates on
> > just 32 bits, not on the 53 available in the mantissa of a 'number'
> > primitive value:
>
> Agreed, but one can access all bits of a Double for logical operations
> by using arithmetic.  Working example :
> <URL:http://www.merlyn.demon.co.uk/js-misc0.htm#TC>

Yes, that's what I did, see:

function toBinaryString (number) {
var weight= Math.pow(2, 52), binStr= '', decimalPoint;
do {
if (number >= weight) {
number-= weight;
binStr+= '1';
} else { binStr+= binStr ? '0' : ''; }

if (((weight/= 2) < 1) && !decimalPoint) {
decimalPoint= 1;
if (number) {
binStr+= binStr ? '.' : '0.';
} else { binStr+= binStr ? '' : '0'; }
}
} while (!decimalPoint || (number && weight))
return binStr;
};

--
Jorge.

Jorge

unread,
Oct 9, 2008, 3:37:39 AM10/9/08
to
On Sep 27, 3:08 am, Douglas Crockford <nos...@sbcglobal.net> wrote:
>
> Dmitri showed me this one:
>

http://dmitry.baranovskiy.com/
http://raphaeljs.com/
http://vimeo.com/1815045

--
Jorge.

William James

unread,
Nov 27, 2008, 7:27:59 PM11/27/08
to
Dur Stockton wrote:

> Perhaps he is the Kaiser
> reincarnated; perhaps something worse.

Perhaps something as bad as Swinson Dunghill
(a.k.a. "Winston Churchill")?

preet

unread,
Nov 28, 2008, 12:39:10 AM11/28/08
to
try solving problems faced by people on this newsgroup, this is a real
life situation and helps a lot.

i learnt this way.

eventually someone comes up with a solution if you get stuck

--------------------------
http://www.eecpindia.com/


*** Sent via Developersdex http://www.developersdex.com ***

rf

unread,
Nov 28, 2008, 1:51:56 AM11/28/08
to
"preet" <preetkanwaljit> wrote in message
news:492f83fd$0$89389$815e...@news.qwest.net...

> eventually someone comes up with a solution if you get stuck


Two months later?

> *** Sent via Developersdex http://www.developersdex.com ***

Figures.


David Mark

unread,
Nov 28, 2008, 2:33:47 AM11/28/08
to

Swish! Two points for "Preet", catapulting him to #8 on the November
charts. He's a Guru to watch.

0 new messages