Login and get codingAcademic research innovates by publishing

papers, i.e., documents collecting ideas and experimental results. Google Scholar -- powered by Google Search -- enables you to search through academic literature across multiple research fields.Multiple metrics have been proposed to quantify the quality and quantity of a researcher body of work, but they are all based on

citationscount.Basically, when you write your paper, it is likely you need to mention previous work already published. Each of such citations is increasing the importance of the associated paper. As result, each entry found in a Google Scholar search shows you also its citation count: the higher the count, the higher the paper importance according to the research community.

By extension, to judge the body of work of an academic writer you can look at how many times his/her publications have been cited by other researchers: you need a

citation index.If you register in Google Scholar, Google generates (and automatically updates over time) your publications list, and provides you your

h-indexandi10-index, two popular citation indexes.For instance, this is the profile of Charles Darwin (notice the indexes on the top right).

The definitions of those indexes are:

* i10-index is the number of papers with at least 10 citations.

* h-index is the maximum value of

hsuch that the given author/journal has published at leasthpapers that have each been cited at leasthtimes.Your job in this Bite is to code the algorithms to compute such metrics.

Your input is

`citations`

, a`list`

(or`tuple`

) containing positive integers (greater than or equal to zero) each representing the citations accumulated by a different paper.You need to find and return

handi10using such counters and based on the definitions above.We further stress that both

handi10represent a "selection of papers", thus their possible values are in the range`0..len(citations)`

(both edges included).Some examples for i10-index

>>> i10_index([0, 0, 1, 1, 10])

1

>>> i10_index((0, 0, 1, 1))

0In the first example

i10is 1 since only one paper has at least 10 citations, namely the 5th paper. Conversely, in the second examplei10is zero since there are no papers with at least 10 citations.Some examples for h-index

>>> h_index([0, 0, 1, 1, 10, 5, 1, 3])

3

>>> h_index([0, 0, 1, 1])

1In the first example

his 3 since there are 3 papers with at least 3 citations, namely the 5th paper (10 citations), the 6th paper (5 citations) and the 8th paper (3 citations).In the second example

his 1 even if you have 2 papers with 1 citations. In fact, to have an h-index of 2 you would need 2 papers with at least 2 citations each, but here you have 2 papers with only 1 citation each, so the maximum value ofhthat is possible is 1 which you read as "there is at least 1 paper with at least 1 citation".As mentioned,

`citations`

can be a`list`

or`tuple`

, so raise a`TypeError`

otherwise, and specify the message`"Unsupported input type: use either a list or a tuple"`

.Instead, raise a

`ValueError`

if`citations`

is`None`

, empty, or does not contain positive integer, and specify the message`"Unsupported input value: citations cannot be neither empty nor None, and can only have positive integers"`

Hint: if you are stuck and the definition of

h-indexis confusing to you, try having a look at the wikipedia article linked above as it contains also a visual explanation of the logic behind the index.Happy python coding!

Metrics »

16 out of 16 users completed this Bite.

Will you be Pythonista #17 to crack this Bite?

Resolution time: ~55 min. (avg. submissions of 5-240 min.)