By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
434,793 Members | 1,269 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 434,793 IT Pros & Developers. It's quick & easy.

Need some JavaScript puzzles

P: n/a
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.
Sep 23 '08 #1
Share this Question
Share on Google+
25 Replies


P: n/a
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, <f8*******************@news.demon.co.uk>
Sep 23 '08 #2

P: n/a

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.
Sep 23 '08 #3

P: n/a
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
Sep 23 '08 #4

P: n/a
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. 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.
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
Sep 23 '08 #5

P: n/a

"Oltmans" <ro**********@gmail.comwrote in message
news:8c**********************************@l64g2000 hse.googlegroups.com...
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.
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)
Sep 24 '08 #6

P: n/a
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".
Sep 24 '08 #7

P: n/a
On Sep 24, 3:14*am, dhtml <dhtmlkitc...@gmail.comwrote:
>
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

--
Jorge.
Sep 24 '08 #8

P: n/a
On Sep 24, 3:14*am, dhtml <dhtmlkitc...@gmail.comwrote:
>
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.
Sep 24 '08 #9

P: n/a
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, ....|
Sep 24 '08 #10

P: n/a
On Sep 23, 8:50*am, Oltmans <rolf.oltm...@gmail.comwrote:
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/

Sep 24 '08 #11

P: n/a
On Sep 23, 5:50*pm, Oltmans <rolf.oltm...@gmail.comwrote:
>
Please recommend anything.
Have you seen Douglas Crockford's videos already ?

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

--
Jorge.
Sep 25 '08 #12

P: n/a
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.
Sep 27 '08 #13

P: n/a
On Sep 27, 3:08*am, Douglas Crockford <nos...@sbcglobal.netwrote:
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.
javascript:alert((function add (p) { var a=p; return function (p)
{ return a+p } })(3)(4))

--
Jorge
Sep 27 '08 #14

P: n/a
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
Sep 27 '08 #15

P: n/a
On Sep 27, 4:07*am, Conrad Lender <crlen...@yahoo.comwrote:
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.
Sep 27 '08 #16

P: n/a
On Sep 27, 7:07*am, Conrad Lender <crlen...@yahoo.comwrote:
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.
>
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
Sep 28 '08 #17

P: n/a
On Sep 27, 6:08*am, Douglas Crockford <nos...@sbcglobal.netwrote:
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.

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.
Sep 28 '08 #18

P: n/a
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
Sep 28 '08 #19

P: n/a
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?
Sep 28 '08 #20

P: n/a
Jorge wrote:
On Sep 24, 3:14 am, dhtml <dhtmlkitc...@gmail.comwrote:
>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.
Sep 28 '08 #21

P: n/a
On Sep 23, 8:50*am, Oltmans <rolf.oltm...@gmail.comwrote:
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.
I highly recommend the following thread starting with this post:

http://groups.google.com/group/comp....559592272d4e54

The whole thread is

http://groups.google.com/group/comp....559592272d4e54

Peter
Sep 28 '08 #22

P: n/a
On Sep 28, 9:04 pm, dhtml <dhtmlkitc...@gmail.comwrote:
Jorge wrote:
On Sep 24, 3:14 am, dhtml <dhtmlkitc...@gmail.comwrote:
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.00100100001111111110010111001001000111010001010 0111

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)) ->
11111111111111111111111111111111111111111111111111 111
javascript:alert((9007199254740991.4).toString(2))->
11111111111111111111111111111111111111111111111111 111
javascript:alert((9007199254740991.5).toString(2))->
10000000000000000000000000000000000000000000000000 0000
javascript:alert((9007199254740992).toString(2)) ->
10000000000000000000000000000000000000000000000000 0000
javascript:alert((9007199254740993).toString(2)) ->
10000000000000000000000000000000000000000000000000 0000
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.
Sep 29 '08 #23

P: n/a
On Sep 29, 9:02*pm, Jorge <jo...@jorgechamorro.comwrote:
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>

--
(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, ....|
Sep 29 '08 #24

P: n/a
On Sep 29, 11:49*pm, Dr J R Stockton <J.R.Stock...@physics.orgwrote:
On Sep 29, 9:02*pm, Jorge <jo...@jorgechamorro.comwrote:
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.
Sep 30 '08 #25

P: n/a
On Sep 27, 3:08*am, Douglas Crockford <nos...@sbcglobal.netwrote:
>
Dmitri showed me this one:
http://dmitry.baranovskiy.com/
http://raphaeljs.com/
http://vimeo.com/1815045

--
Jorge.
Oct 9 '08 #26

This discussion thread is closed

Replies have been disabled for this discussion.