
Mark Six is a lottery in Hong Kong. You can select 6 numbers from a pool of 49 numbers on the lottery ticket. There are numerous single-line commands that can be used to generate 6 numbers randomly from 1 to 49.
python 2 {% codeblock lang
%} python -c ‘import random; print [ random.randint(1,49) for _ in xrange(6)]’ {% endcodeblock %}awk {% codeblock lang
%} awk -v min=1 -v max=49 ‘BEGIN{ srand(); for (i = 0; i < 6; i++) print int(min+rand()*(max-min+1))}’ {% endcodeblock %}bash {% codeblock lang
%} for i in {1..6}; do echo $(( ( RANDOM % 49 ) + 1)); done {% endcodeblock %}jot on Mac macOS 10.13 High Sierra no longer provides jot
{% codeblock lang
However, you will soon find repeated numbers are generated from the above solutions. The trick to have non-repeated generated numbers is using random sort from an array with 49 numbers,
python 2 {% codeblock lang
%} python -c ‘import random; a = range(1, 49); random.shuffle(a); print a[:6:]’ {% endcodeblock %}jot on Mac macOS 10.13 High Sierra no longer provides jot
{% codeblock lang
Using AI to write python script
Using AI to generate Python scripts is extremely straightforward. Let’s write a prompt and compare it with what we wrote in 2017. The prompt is: Write a Python script that pick six random unique numbers from 1 to 49, inclusive. Write it simple and testable.
{% codeblock lang
def get_random_numbers(): return random.sample(range(1, 50), 6)
print(get_random_numbers()) {% endcodeblock %}
The result is great! We can add AI to unit test as well.
{% codeblock lang
%} import unittest from your_script import get_random_numbersclass TestGetRandomNumbers(unittest.TestCase): def test_length(self): self.assertEqual(len(get_random_numbers()), 6)
def test_values(self):
numbers = get_random_numbers()
self.assertTrue(all(1 <= x <= 49 for x in numbers))
def test_uniqueness(self):
numbers = get_random_numbers()
self.assertTrue(len(set(numbers)) == len(numbers))
if name == ‘main’: unittest.main() {% endcodeblock %}
The unit test is better than many developers!