NPTEL » The Joy of Computing using Python
Please scroll down for latest Programs 👇
1. Programming Assignment | Week 2
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | 5
2 | 1 | 1 | Passed |
Test Case 2 | 5
10 | 5 | 5 | Passed |
Private Test cases used for Evaluation | Status |
Test Case 1 | Passed |
Test Case 2 | Passed |
Test Case 3 | Passed |
Test Case 4 | Passed |
2. Programming Assignment | Week 2
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | 1
2
3 | NO | NO | Passed |
Test Case 2 | 3
4
5 | YES | YES | Passed |
Private Test cases used for Evaluation | Status |
Test Case 1 | Passed |
Test Case 2 | Passed |
Test Case 3 | Passed |
Test Case 4 | Passed |
Test Case 5 | Passed |
3. Programming Assignment | Week 2
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | abcd1234 | True | True | Passed |
Test Case 2 | pass/word | False | False | Passed |
Private Test cases used for Evaluation | Status |
Test Case 1 | Passed |
Test Case 2 | Passed |
Test Case 3 | Passed |
Test Case 4 | Passed |
Test Case 5 | Passed |
1. Programming Assignment | Week 3
. You are given a list marks that has the marks scored by a class of students in a Mathematics test. Find the median marks and store it in a float variable named median. You can assume that marks is a list of float values.
Procedure to find the median
(1) Sort the marks in ascending order. Do not try to use built-in methods.
(2) If the number of students is odd, then the median is the middle value in the sorted sequence. If the number of students is even, then the median is the arithmetic mean of the two middle values in the sorted sequence.
You do not have to accept input from the console as it has already been provided to you. You do not have to print the output to the console. Input-Output is the responsibility of the auto-grader for this problem.
FILL THE MISSING CODE
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | 60,10,30,40,20,50 | 35.0 | 35.0\n
| Passed after ignoring Presentation Error |
Test Case 2 | 30,50,40,10,20 | 30.0 | 30.0\n
| Passed after ignoring Presentation Error |
Private Test cases used for Evaluation | Status |
Test Case 1 | Passed |
Test Case 2 | Passed |
Test Case 3 | Passed |
Test Case 4 | Passed |
Test Case 5 | Passed |
2. Programming Assignment | Week 3
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | Bharatanatyam | aaaaabhmnrtty | aaaaabhmnrtty | Passed |
Test Case 2 | montypython | hmnnoopttyy | hmnnoopttyy | Passed |
Private Test cases used for Evaluation | Status |
Test Case 1 | Passed |
Test Case 2 | Passed |
Test Case 3 | Passed |
Test Case 4 | Passed |
Test Case 5 | Passed |
3. Programming Assignment | Week 3
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | Harsh
10-03-1990
Sparsh
18-12-1987 | Harsh | Harsh | Passed |
Test Case 2 | Harsh
18-01-2000
Sparsh
18-03-2000 | Sparsh | Sparsh | Passed |
Private Test cases used for Evaluation | Status |
Test Case 1 | Passed |
Test Case 2 | Passed |
Test Case 3 | Passed |
Test Case 4 | Passed |
Test Case 5 | Passed |
1. Programming Assignment | Week 4
You are given the names and dates of birth of a group of people. Find all pairs of members who share a common date of birth. Note that this date need not be common across all pairs. It is sufficient if both members in a pair have the same date of birth.
The first line of input is a sequence of comma-separated names. The second line of input is a sequence of comma-separated positive integers. Each integer in the sequence will be in the range [1,365], endpoints inclusive, and stands for someday in the year.
Find all pairs of names that share a common date of birth and store them in a list called common. Each element of this list is itself a list and should be of the form [name1, name2], such that name1 comes before name2 in alphabetical order.
Notes
1) You can assume that each test case will have at least one pair of members who share the same date of birth.
2) You do not have to print the output to the console. This is the responsibility of the autograder. You just have to populate the list common in the required format.
Sample Input/Output
For example, consider the input:
sachin,ramesh,rohit,priya,saina,sandeep,stella
100,50,100,20,30,20,20
Your list common could look like this:
[['rohit', 'sachin'], ['priya', 'sandeep'], ['priya', 'stella'], ['sandeep', 'stella']]
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | sachin,ramesh,kalam,priya,saina,sandeep,stella
100,50,100,20,30,20,20 | kalam,sachin\n
priya,sandeep\n
priya,stella\n
sandeep,stella | kalam,sachin\n
priya,sandeep\n
priya,stella\n
sandeep,stella\n
| Passed after ignoring Presentation Error |
Test Case 2 | newton,euler,gauss,pascal,fourier,leibniz,hardy,erdos
50,189,246,50,189,365,365,246 | newton,pascal\n
euler,fourier\n
hardy,leibniz\n
erdos,gauss | newton,pascal\n
euler,fourier\n
hardy,leibniz\n
erdos,gauss\n
| Passed after ignoring Presentation Error |
Private Test cases used for Evaluation | Status |
Test Case 1 | Passed |
Test Case 2 | Passed |
Test Case 3 | Passed |
Test Case 4 | Passed |
Test Case 5 | Passed |
2. Programming Assignment | Week 4
1. Accept two square matrices A and B of dimensions n×n as input and compute their product AB.
The first line of the input will contain the integer n. This is followed by 2n lines. Out of these, each of the first n lines is a sequence of comma-separated integers that denotes one row of the matrix A. Each of the last n lines is a sequence of comma-separated integers that denotes one row of the matrix B.
Your output should again be a sequence of n lines, where each line is a sequence of comma-separated integers that denote a row of the matrix AB.
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | 2
1,2
3,4
5,6
7,8 | 19,22\n
43,50 | 19,22\n
43,50 | Passed |
Test Case 2 | 3
1,0,0
0,1,0
0,0,1
2,3,4
5,9,1
10,12,13 | 2,3,4\n
5,9,1\n
10,12,13 | 2,3,4\n
5,9,1\n
10,12,13 | Passed |
3. Programming Assignment | Week 4
Accept a square matrix A and an integer s as input and print the matrix s⋅A as output. Multiplying a matrix by an integer s is equivalent to multiplying each element of the matrix by s. For example:
The first line of input is a positive integer, n, that denotes the dimension of the matrix A. Each of the next n lines contains a sequence of space-separated integers. The last line of the input contains the integer s.
Print the matrix s⋅A as output. Each row of the matrix must be printed as a sequence of space-separated integers, one row on each line. There should not be any space after the last number on each line. If the expected output looks exactly like the actual output and still you are getting a wrong answer, it is because of the space at the end.
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | 2
1 2
3 4
2 | 2 4\n
6 8 | 2 4\n
6 8 | Passed |
Test Case 2 | 2
10 20
30 40
5 | 50 100\n
150 200 | 50 100\n
150 200 | Passed |
1. Programming Assignment | Week 5
1. Write a function insert that accepts a sorted list L of integers and an integer x as input. The function should return a sorted list with the element x inserted at the right place in the input list. The original list should not be disturbed in the process.
1) The only built-in methods you are allowed to use are append and remove. You should not use any other method provided for lists.
2) You do not have to accept input from the user or print output to the console. You just have to write the function definition.
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | 1,2,3,5
4 | 1,2,3,4,5 | 1,2,3,4,5\n
| Passed after ignoring Presentation Error |
Test Case 2 | 1,3,7,10,20
8 | 1,3,7,8,10,20 | 1,3,7,8,10,20\n
| Passed after ignoring Presentation Error |
Private Test cases used for Evaluation | Status |
Test Case 1 | Passed |
Test Case 2 | Passed |
Test Case 3 | Passed |
Test Case 4 | Passed |
Test Case 5 | Passed |
2. Programming Assignment | Week 5
Accept a sequence of words as input. Create a dictionary named real_dict whose keys are the letters of the English alphabet. For each key (letter), the corresponding value should be a list of words that begin with this key (letter). For any given key, the words should be appended to the corresponding list in the order in which they appear in the sequence. You can assume that all words of the sequence will be in lower case.
You do not have to print the output to the console.
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | apple,and,oranges,are,only,fruits | a:apple,and,are\n
o:oranges,only\n
f:fruits | a:apple,and,are\n
o:oranges,only\n
f:fruits\n
| Passed after ignoring Presentation Error |
Test Case 2 | no,word,in,this,sentence,has,a,length,greater,than,ten | n:no\n
w:word\n
i:in\n
t:this,than,ten\n
s:sentence\n
h:has\n
a:a\n
l:length\n
g:greater | n:no\n
w:word\n
i:in\n
t:this,than,ten\n
s:sentence\n
h:has\n
a:a\n
l:length\n
g:greater\n
| Passed after ignoring Presentation Error |
Private Test cases used for Evaluation | Status |
Test Case 1 | Passed |
Test Case 2 | Passed |
Test Case 3 | Passed |
Test Case 4 | Passed |
Test Case 5 | Passed |
3. Programming Assignment | Week 5
Consider a grid-world of size n×n. You are at the bottom-left corner, at the cell (1,1), to start with. A sample grid-world for the case of n=5 is given below for your reference:
You can move one step at a time in any one of the four directions: "North", "East", "West", "South". At every cell of the grid, all four moves are possible. The only catch is that if you make a move that will take you out of the grid at a border cell, you will stay put at the same cell. Concretely, if you are at the cell (1,4) and try to move west, you will remain at the same cell. Or if you are at (3,1) and try to move south, you will remain there.
Write a function named final that accepts a positive integer n and a sequence of moves (string) as arguments and returns the final position where you would end up in an n×n grid-world if you start at (1,1). You must return a tuple of size 2, where the first element is the x-coordinate and the second is the y-coordinate.
You do not have to accept input from the user or print output to the console. You just have to write the function definition.
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | 5
NEWS | (1, 1) | (1, 1)\n
| Passed after ignoring Presentation Error |
Test Case 2 | 7
NNNNNNNNNNEE | (3, 7) | (3, 7)\n
| Passed after ignoring Presentation Error |
Test Case 3 | 10
NNNEENSNENESNEWNSWENENSENWNSSSNWENESNESEW | (8, 7) | (8, 7)\n
| Passed after ignoring Presentation Error |
Private Test cases used for Evaluation | Status |
Test Case 1 | Passed |
Test Case 2 | Passed |
Test Case 3 | Passed |
Test Case 4 | Passed |
Test Case 5 | Passed |
Test Case 6 | Passed |
Test Case 7 | Passed |
1. Programming Assignment | Week 6
1. The distance between two letters in the English alphabet is one more than the number of letters between them. Alternatively, it can be defined as the number of steps needed to move from the alphabetically smaller letter to the larger letter. This is always a non-negative integer. For example:
The distance between two words is defined as follows:
- It is -1, if the words are f unequal lengths.
- If the word-lengths are equal, it is the sum of the distances between letters at corresponding positions in the words. For example:
dword(dog,cat)=dletter(d,c)+dletter(o,a)+dletter(g,t)=1+14+13=28
Write a function named distance that accepts two words as arguments and returns the distance between them.
You do not have to accept input from the user or print output to the console. You just have to write the function definition.
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | dog
cat | 28 | 28\n
| Passed after ignoring Presentation Error |
Test Case 2 | greet
great | 4 | 4\n
| Passed after ignoring Presentation Error |
Private Test cases used for Evaluation | Status |
Test Case 1 | Passed |
Test Case 2 | Passed |
Test Case 3 | Passed |
Test Case 4 | Passed |
Test Case 5 | Passed |
2. Programming Assignment | Week 6
1. P is a dictionary of father-son relationships that has the following structure: for any key in the dictionary, its corresponding value is the father of key. As an example:
P = {
'Jahangir': 'Akbar',
'Akbar': 'Humayun',
'Humayun': 'Babur'
}
If 'Jahangir' is the key, then 'Akbar', his father, is the value. This is true of every key in the dictionary.
Write a recursive function named ancestry that accepts the following arguments:
- P: a dictionary of relationships
- present: name of a person, string
- past: name of a person, string
It should return the sequence of ancestors of the person named present, traced back up to the person named past. For example, ancestry(P, 'Jahangir', 'Babur') should return the list:
L = ['Jahangir', 'Akbar', 'Humayun', 'Babur']
In more Pythonic terms, L[i] is the father of L[i - 1], for 1≤ i < len(L), with the condition that L[0] should be present and L[-1] should be past.
(1) You can assume that no two persons in the dictionary have the same name. However, a given person could either appear as a key or as a value in the dictionary.
(2) A given person could appear multiple times as one of the values of the dictionary. For example, in test-case-2, Prasanna has two sons, Mohan and Krishna, and hence appears twice (as a value).
(3) You do not have to accept input from the user or print output to the console. You just have to write the function definition.
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | {'Jahangir': 'Akbar', 'Akbar': 'Humayun', 'Humayun': 'Babur'}
Jahangir
Babur | ['Jahangir', 'Akbar', 'Humayun', 'Babur'] | ['Jahangir', 'Akbar', 'Humayun', 'Babur']\n
| Passed after ignoring Presentation Error |
Test Case 2 | {'Anil': 'Krishna', 'Mohan': 'Prasanna', 'Krishna': 'Prasanna', 'Prasanna': 'Mukesh'}
Anil
Prasanna | ['Anil', 'Krishna', 'Prasanna'] | ['Anil', 'Krishna', 'Prasanna']\n
| Passed after ignoring Presentation Error |
Private Test cases used for Evaluation | Status |
Test Case 1 | Passed |
Test Case 2 | Passed |
Test Case 3 | Passed |
Test Case 4 | Passed |
Test Case 5 | Passed |
3. Programming Assignment | Week 6
1. Fibonacci
Fibonacci is a young resident of the Italian city of Pisa. He spends a lot of time visiting the Leaning Tower of Pisa, one of the iconic buildings in the city, that is situated close to his home. During all his visits to the tower, he plays a strange game while climbing the marble steps of the tower.
The Game
Fibonacci likes to climb the steps either one at a time, two at a time, or three at a time. This adds variety to the otherwise monotonous task of climbing. He wants to find the total number of ways in which he can climb n steps, if the order of his individual steps matters. Your task is to help Fibonacci compute this number.
For example, if he wishes to climb three steps, in the case of n=3, he could do it in four different ways:
- (1,1,1) (1,1,1): do it in three moves, one step at a time
- (1,2) (1,2): do it in two moves, first take a single step, then a double step
- (2,1) (2,1): do it in two moves, first take a double step, then a single step
- (3): do it in just one move, directly leaping to the third step
To take another example, if n=5, then some of the sequences could be:
(1,3,1), (1,1,3), (3,1,1), (2,1,1,1), (1,2,1,1), (2,1,2)
Each sequence is one of the ways of climbing five steps. The point to note here is that each element of a sequence can only be 1, 2, or 3.
Write a recursive function named steps that accepts a positive integer n as the argument. It should return the total number of ways in which Fibonacci can ascend n steps. Note that the order of his steps is important.
You do not have to accept input from the user or print output to the console. You just have to write the function definition.
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | 1 | 1 | 1\n
| Passed after ignoring Presentation Error |
Test Case 2 | 2 | 2 | 2\n
| Passed after ignoring Presentation Error |
Private Test cases used for Evaluation | Status |
Test Case 1 | Passed |
Test Case 2 | Passed |
Test Case 3 | Passed |
Test Case 4 | Passed |
Test Case 5 | Passed |
Test Case 6 | Passed |
1. Programming Assignment | Week 7
In spreadsheets, columns are labelled as follows:
A is the first column, B is the second column, Z is the 26th column, and so on. Using the table given above, deduce the mapping between column labels and their corresponding numbers. Accept the column label as input and print the corresponding column number as output.
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | ABC | 731 | 731 | Passed |
Test Case 2 | ABCD | 19010 | 19010 | Passed |
Test Case 3 | ZYADBQRT | 216563715388 | 216563715388 | Passed |
2. Programming Assignment | Week 7
A queue at a fast-food restaurant operates in the following manner. The queue is a single line with its head at the left-end and tail at the right-end. A person can exit the queue only at the head (left) and join the queue only at the tail (right). At the point of entry, each person is assigned a unique token.
You have been asked to manage the queue. The following operations are permitted on it:
Operation | Meaning |
JOIN,token | Add a person with this token number to the tail of the queue. |
LEAVE | Remove the person from the head of the queue. |
MOVE,token,HEAD | Move the person with this token number to the head of the queue. |
MOVE,token,TAIL | Move the person with this token number to the tail of the queue. |
PRINT | Print the queue as a sequence of comma-separated token numbers. |
The queue is empty to begin with. Keep accepting an operation as input from the user until the string "END" is entered.
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | JOIN,1
PRINT
JOIN,2
JOIN,3
LEAVE
PRINT
END | 1\n
2,3 | 1\n
2,3\n
| Passed after ignoring Presentation Error |
Test Case 2 | JOIN,1
JOIN,2
JOIN,3
PRINT
MOVE,3,HEAD
PRINT
END | 1,2,3\n
3,1,2 | 1,2,3\n
3,1,2\n
| Passed after ignoring Presentation Error |
Test Case 3 | JOIN,1
JOIN,2
JOIN,3
PRINT
MOVE,1,TAIL
PRINT
LEAVE
JOIN,4
PRINT
MOVE,4,HEAD
PRINT
LEAVE
PRINT
END | 1,2,3\n
2,3,1\n
3,1,4\n
4,3,1\n
3,1 | 1,2,3\n
2,3,1\n
3,1,4\n
4,3,1\n
3,1\n
| Passed after ignoring Presentation Error |
3. Programming Assignment | Week 7
Accept a string of lowercase letters from the user and encrypt it using the following image:
Each letter in the string that appears in the upper half should be replaced with the corresponding letter in the lower half and vice versa. Print the encrypted string as output.
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | apply | zkkob | zkkob | Passed |
Test Case 2 | secret | hvxivg | hvxivg | Passed |
Private Test cases used for Evaluation | Status |
Test Case 1 | Passed |
Test Case 2 | Passed |
Test Case 3 | Passed |
Test Case 4 | Passed |
Test Case 5 | Passed |
1. Programming Assignment | Week 8
A round-robin tournament is one in which each team competes with every other team. Consider a version of the IPL tournament in which every team plays exactly one game against every other team. All these games have a definite result and no match ends in a tie. The winning team in each match is awarded one point.
Eight teams participate in this round-robin cricket tournament: CSK, DC, KKR, MI, PK, RR, RCB and SH. You are given the details of the outcome of the matches. Your task is to prepare the IPL points table in descending order of wins. If two teams have the same number of points, the team whose name comes first in alphabetical order must figure higher up in the table.
There are eight lines of input. Each line is a sequence of comma-separated team names. The first team across these eight lines will always be in this order: CSK, DC, KKR, MI, PK, RR, RCB and SH. For a given sequence, all the other terms represent the teams that have lost to the first team. For example, the first line of input could be CSK, MI, DC, PK. This means that CSK has won its matches against the teams MI, DC, and PK and lost its matches against all other teams. If a sequence has just one team, it means that it lost all its matches.
Print the IPL points table in the following format — team: wins — one team on each line. There shouldn't be any spaces in any of the lines.
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | CSK,DC,KKR,MI,PK,RR,RCB,SH
DC,KKR,MI,PK,RR,RCB,SH
KKR,MI,PK,RR,RCB,SH
MI,PK,RR,RCB,SH
PK,RR,RCB,SH
RR,RCB,SH
RCB,SH
SH | CSK:7\n
DC:6\n
KKR:5\n
MI:4\n
PK:3\n
RR:2\n
RCB:1\n
SH:0 | CSK:7\n
DC:6\n
KKR:5\n
MI:4\n
PK:3\n
RR:2\n
RCB:1\n
SH:0\n
| Passed after ignoring Presentation Error |
Test Case 2 | CSK,DC,MI,PK
DC,RR,RCB,SH
KKR,CSK,DC,RR,MI
MI,DC,RCB,RR
PK,DC,KKR,MI,RCB
RR,CSK,PK,SH
RCB,CSK,KKR,RR
SH,CSK,KKR,MI,PK,RCB | SH:5\n
KKR:4\n
PK:4\n
CSK:3\n
DC:3\n
MI:3\n
RCB:3\n
RR:3 | SH:5\n
KKR:4\n
PK:4\n
CSK:3\n
DC:3\n
MI:3\n
RCB:3\n
RR:3\n
| Passed after ignoring Presentation Error |
Test Case 3 | CSK,RCB,MI,KKR
DC,CSK,KKR,MI,SH
KKR,PK,RR,RCB,SH
MI,KKR,PK,RR,SH,RCB
PK,CSK,DC,RCB
RR,CSK,DC,PK,SH
RCB,DC,RR
SH,CSK,PK,RCB | MI:5\n
DC:4\n
KKR:4\n
RR:4\n
CSK:3\n
PK:3\n
SH:3\n
RCB:2 | MI:5\n
DC:4\n
KKR:4\n
RR:4\n
CSK:3\n
PK:3\n
SH:3\n
RCB:2\n
| Passed after ignoring Presentation Error |
2. Programming Assignment | Week 8
1. Given a square matrix M and two indices (i,j), Mij is the matrix obtained by removing the ith row and the jth column of M.
Write a function named minor_matrix that accepts three arguments:
- M: a square matrix
- i: a non-negative integer
- j: a non-negative integer
The function should return the matrix Mij after removing the ith row and the jth column of M. Note that we use zero-based indexing throughout. That is, if the matrix M is of dimensions n×n, then we have 0 ≤ i, j ≤ n−1.
(1) You can assume that the number of rows in M will be at least 3 in each test case.
(2) You do not have to accept input from the user or print the output to the console.
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | 3
1,2,3
4,5,6
7,8,9
0
1 | 4,6\n
7,9 | 4,6\n
7,9\n
| Passed after ignoring Presentation Error |
Test Case 2 | 3
1,2,3
4,5,6
7,8,9
2
0 | 2,3\n
5,6 | 2,3\n
5,6\n
| Passed after ignoring Presentation Error |
3. Programming Assignment | Week 8
Public Test Cases | Input | Expected Output | Actual Output | Status |
---|---|---|---|---|
Test Case 1 | [('Harish', 80), ('Ram', 90), ('Harshita', 80)] | Harish:80\n
Harshita:80\n
Ram:90 | Harish:80\n
Harshita:80\n
Ram:90\n
| Passed after ignoring Presentation Error |
Test Case 2 | [('Sachin', 70), ('Sam', 69), ('Anirudh', 70), ('Anita', 80)] | Sam:69\n
Anirudh:70\n
Sachin:70\n
Anita:80 | Sam:69\n
Anirudh:70\n
Sachin:70\n
Anita:80\n
| Passed after ignoring Presentation Error |
Private Test cases used for Evaluation | Status |
Test Case 1 | Passed |
Test Case 2 | Passed |
Test Case 3 | Passed |
Test Case 4 | Passed |
Test Case 5 | Passed |
No comments:
Post a Comment
Keep your comments reader friendly. Be civil and respectful. No self-promotion or spam. Stick to the topic. Questions welcome.