1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
#!/usr/bin/env python3
###########################################################################
# script name: ch-2.py #
# #
# https://github.com/user-person #
# #
# https://perlweeklychallenge.org/blog/perl-weekly-challenge-050/ #
# #
# Noble Integer #
# You are given a list, @L, of three or more random integers between 1 #
# and 50. A Noble Integer is an integer N in @L, such that there are #
# exactly N integers greater than N in @L. Output any Noble Integer #
# found in @L, or an empty list if none were found. #
# #
# An interesting question is whether or not there can be multiple Noble #
# Integers in a list. #
# #
# For example, #
# #
# Suppose we have list of 4 integers [2, 6, 1, 3]. #
# #
# Here we have 2 in the above list, known as Noble Integer, since there #
# are exactly 2 integers in the list i.e.3 and 6, which are greater than #
# 2. #
# #
# Therefore the script would print 2. #
# #
###########################################################################
import re
import sys
def nobleInt(ints):
seen = dict()
ints.sort(key=int)
for i in ints:
count = 0
for j in ints:
if int(i) < int(j):
count += 1
if int(count) == int(i):
if i in seen:
seen[i] += 1
else:
seen.update({i:1})
return seen.keys()
input = "[2, 6, 1, 3]"
if len(sys.argv) > 1:
input = ' '.join(sys.argv[1:])
else:
print('default input:',input)
input = re.sub(r'[][, ]+', ' ', input)
input = re.sub(r'\A\s+|\s+\Z', '', input)
L = re.split(r' ', input)
nobleInteger = nobleInt(L)
if nobleInteger:
for kys in nobleInteger:
print('noble integer:',kys)
else:
print('No noble integer.')
|