चार्ल्स एफ. विल्सन की खींची इस फोटो में श्रीनिवास रामानुजन बीच में और उनके गुरू जी. एच. हार्डी तस्वीर में सबसे दायीं तरफ हैं।
बात 1919 की है जब श्रीनिवास रामानुजन लंदन में थे। उनके मित्र और गुरू, जी. एच. हार्डी उनसे मिलने एक टैक्सी से गये। उस टैक्सी का नंबर था 1729। बातों बातों में उन्होंने रामानुजन को बताया, “मेरी टैक्सी का नंबर बड़ा साधारण था। यह किसी बुरे वक्त का संकेत तो नहीं”। “नहीं बिल्कुल नहीं”, रामानुजन बोले, “यह कोई साधारण संख्या नहीं। यह सबसे छोटी संख्या है, जो बनती है दो संख्याओं के घनों को जोड़कर, दो अलग-अलग तरीकों से।”
आइये, हम भी कंप्यूटर के साथ बातों-बातों में ऐसी ही खास संख्याएं ढूंढें।
कंप्यूटर पर फायरफॉक्स ब्राउज़र खोलें, Ctrl Shift K एक साथ दबाएं, और गणित का कोई सवाल टाईप करें।
>> 9 * 9 * 9;
729
>> 10 * 10 * 10;
1000
>> 9 * 9 * 9 + 10 * 10 * 10;
1729
कंप्यूटर के साथ हम अपनी खोज और भी आसान कर सकते हैं। हम संख्याओं को नाम दे सकते हैं और फिर उन संख्याओं को याद करने के बजाय उनका नाम ले सकते हैं। यह नाम चर कहलाते हैं।
>> let cube9 = 729;
>> cube9;
729
>> let cube10 = 1000;
>> cube10;
1000
>> cube9 + cube10;
1729
>> cube10 - cube9
271
हम संख्याओं को नाम देने के साथ-साथ उन्हें बनाने के तरीके को भी नाम दे सकते हैं। और फिर कंप्यूटर को काम का पूरा तरीका बार-बार बताने के बजाय, बस तरीके का नाम ही ले सकते हैं। तरीकों को दिये गये नाम फलन कहलाते हैं।
>> let cube = function (n) {
return n * n * n;
}
>> cube(9);
729
>> cube(10);
1000
>> cube(9) + cube(10);
1729
>> cube(8) + cube(11);
1843
>> cube(cube(10))
1000000
>> cube(7) + cube(12)
let sumCubes = function(a, b) {
?
}
>> sumCubes(2, 3)
35
कोई संख्या खास है कि नहीं यह पता करने का काम अभी भी हमें ही करना पड़ रहा है। इसके बजाय हम कंप्यूटर को बता सकते हैं कि कैसे पता लगाएं कि कोई संख्या खास है कि नहीं। जिससे वो खुद पता लगा कर अलग-अलग स्थिति में अलग-अलग काम कर सकें।
>> if (cube(12) + cube(1) == 1729) {
console.log('sum of 12 cubed and 1 cubed is 1729');
}
>> if (cube(13) + cube(0) != 1729) {
console.log('13 cubed is not 1729');
} else {
console.log('13 cubed is 1729');
}
>> let checkSumOfCubes = function(a, b) {
if (cube(a) + cube(b) == 1729) {
return ?;
} else {
return ?;
}
}
>> checkSumOfCubes(1, 11)
true
>> checkSumOfCubes(2, 10)
false
किसी काम को बार-बार कराने के लिये हम उस काम को बार-बार बता सकते हैं।
>> console.log('जय हो!');
जय हो!
>> console.log('जय हो!');
जय हो!
>> console.log('जय हो!');
जय हो!
या कंप्यूटर को कह सकते हैं कि उस एक काम को बार-बार करते रहें।
>> while (true) {
console.log('जय हो!');
}
>> let n = 0;
>> n = n+1;
>> console.log(n);
>> n = n+1;
>> console.log(n)
...
>> let n = 0;
>> while (true) {
?
}
>> let n = 0;
>> let product = 1;
>> n = n+1;
>> product = product * 10;
>> console.log(n);
>> n = n+1;
>> product = product * 10
>> console.log(n)
किसी काम को हमेशा के लिये करते रहने के बजाय हम कंप्यूटर को कह सकते हैं कि काम को वापस करने से पहले जांच कर लें कि काम को आगे करना भी है या नहीं।
>> let n = 0;
>> while (n < 10) {
console.log(n);
n = n+1;
}
एक जैसी बहुत सारी चीज़ों पर कुछ काम करना हो तो सबके अलग-अलग नाम रखने के बजाय हम उन चीज़ों की एक सूची बना सकते हैं। o
>> let greetings = ['सलाम', 'नमस्ते', 'हैलो'];
>> let fib = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89];
>> console.log(names[0]);
सलाम
>> console.log(names[1]);
नमस्ते
>> console.log(names.length);
3
console.log(names[names.length-1]);
हैलो
>> greetings.push('सत् श्री अकाल');
>> greetings.push('सत् श्री अकाल');
>> console.log(greetings.length);
5
>> console.log(greetings[3]);
सत् श्री अकाल
>> console.log(greetings[4]);
सत् श्री अकाल
>> greetings.forEach(function(item, index, array) {
console.log(item, index);
});
>> console.log(greetings.indexOf('सलाम'));
0
>> console.log(greetings.indexOf('अलविदा'));
-1
>> let numbersUpto = function(start, end) {
let numbers = [];
while (start <= end) {
?
}
}
>> console.log(numbersUpto(10));
>> greetings.forEach(function(item1, index1, array1) {
greetings.forEach(function(item2, index2, array2) {
console.log(item1, item2);
});
});
>> greetings.forEach(function(item1, index1, array1) {
greetings.forEach(function(item2, index2, array2) {
if (?) {
console.log(item1, item2);
}
});
});
>> let listOfNos = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
>> let listOfCubes = [];
>> listOfNos.forEach(function(item, index, array) {
listOfCubes.push(?);
});
>> let getListOfCubes = function(n) {
?
}
>> let list = getListOfCubes(11);
>> console.log(list[list.length-1]);
1729
यह एक फलन है जो हमें 9999 तक की सभी ऐसी संख्याएं बता देता है जो 2 संख्याओं के घनों से बनती हैं।
>> let taxiNos = function(list) {
let nos = [];
list.forEach(function(item1, index1, array1) {
list.forEach(function(item2, index2, array2) {
let sum = cube(item1) + cube(item2);
// यदि sum चार अंकों तक का ही है और अभी तक नहीं मिला है
if (sum <= 9999 && nos.indexOf(sum) == -1) {
nos.push(sum);
}
});
});
return nos;
}
>> taxiNos(numbersUpto(1, 21))
>> let Taxicab = function(n) {
?
}
>> Taxicab(2)
1729
श्रीनिवास रामानुजन ऐसी संख्याऐं बिना कंप्यूटर के आसानी से ढूंढ लेते थे और उनके लिये शायद हर संख्या खास थी। आज वो हमारे बीच तो नहीं, पर हमारे साथ बात करने के लिये कंप्यूटर तो है।
और जानने के लिये हम ये वेबसाईट देख सकते हैं।
Structure and Interpretation of Computer Programs - https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book.html
Javascript MDN - https://developer.mozilla.org/en-US/docs/Web/JavaScript
Taxicab number - https://en.wikipedia.org/wiki/Taxicab_number