diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..520de46
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,197 @@
+
+# Created by https://www.gitignore.io/api/osx,pycharm,python
+
+### OSX ###
+*.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+### PyCharm ###
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff:
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/dictionaries
+
+# Sensitive or high-churn files:
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.xml
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+
+# Gradle:
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# CMake
+cmake-build-debug/
+
+# Mongo Explorer plugin:
+.idea/**/mongoSettings.xml
+
+## File-based project format:
+*.iws
+
+## Plugin-specific files:
+
+# IntelliJ
+/out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# Ruby plugin and RubyMine
+/.rakeTasks
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
+### PyCharm Patch ###
+# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
+
+# *.iml
+# modules.xml
+# .idea/misc.xml
+# *.ipr
+
+# Sonarlint plugin
+.idea/sonarlint
+
+### Python ###
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.coverage.*
+.cache
+.pytest_cache/
+nosetests.xml
+coverage.xml
+*.cover
+.hypothesis/
+
+# Translations
+*.mo
+*.pot
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# pyenv
+.python-version
+
+# celery beat schedule file
+celerybeat-schedule.*
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+
+
+# End of https://www.gitignore.io/api/osx,pycharm,python
diff --git a/.idea/Checkio.iml b/.idea/Checkio.iml
new file mode 100644
index 0000000..6711606
--- /dev/null
+++ b/.idea/Checkio.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..c23ecac
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..517284e
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..f0ad1f7
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/absolute-sorting.py b/absolute-sorting.py
new file mode 100644
index 0000000..6e97d20
--- /dev/null
+++ b/absolute-sorting.py
@@ -0,0 +1,17 @@
+def checkio(numbers_array):
+
+ numbers_array = sorted(numbers_array, key=abs)
+
+ return numbers_array
+
+#These "asserts" using only for self-checking and not necessary for auto-testing
+if __name__ == '__main__':
+ def check_it(array):
+ if not isinstance(array, (list, tuple)):
+ raise TypeError("The result should be a list or tuple.")
+ return list(array)
+
+ assert check_it(checkio((-20, -5, 10, 15))) == [-5, 10, 15, -20], "Example" # or (-5, 10, 15, -20)
+ assert check_it(checkio((1, 2, 3, 0))) == [0, 1, 2, 3], "Positive numbers"
+ assert check_it(checkio((-1, -2, -3, 0))) == [0, -1, -2, -3], "Negative numbers"
+ print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
diff --git a/all-the-same.py b/all-the-same.py
new file mode 100644
index 0000000..cc22adc
--- /dev/null
+++ b/all-the-same.py
@@ -0,0 +1,19 @@
+from typing import List, Any
+
+
+def all_the_same(elements: List[Any]) -> bool:
+
+ return all(i == elements[0] for i in elements)
+
+
+if __name__ == '__main__':
+ print("Example:")
+ print(all_the_same([1, 1, 1]))
+
+ # These "asserts" are used for self-checking and not for an auto-testing
+ assert all_the_same([1, 1, 1]) == True
+ assert all_the_same([1, 2, 1]) == False
+ assert all_the_same(['a', 'a', 'a']) == True
+ assert all_the_same([]) == True
+ assert all_the_same([1]) == True
+ print("Coding complete? Click 'Check' to earn cool rewards!")
diff --git a/best-stock.py b/best-stock.py
new file mode 100644
index 0000000..daee931
--- /dev/null
+++ b/best-stock.py
@@ -0,0 +1,25 @@
+def best_stock(data):
+
+ return max(data, key=data.get)
+
+
+if __name__ == '__main__':
+ print("Example:")
+ print(best_stock({
+ 'CAC': 10.0,
+ 'ATX': 390.2,
+ 'WIG': 1.2
+ }))
+
+ # These "asserts" are used for self-checking and not for an auto-testing
+ assert best_stock({
+ 'CAC': 10.0,
+ 'ATX': 390.2,
+ 'WIG': 1.2
+ }) == 'ATX', "First"
+ assert best_stock({
+ 'CAC': 91.1,
+ 'ATX': 1.01,
+ 'TASI': 120.9
+ }) == 'TASI', "Second"
+ print("Coding complete? Click 'Check' to earn cool rewards!")
diff --git a/between-markers.py b/between-markers.py
new file mode 100644
index 0000000..53fc64c
--- /dev/null
+++ b/between-markers.py
@@ -0,0 +1,42 @@
+def between_markers(text: str, begin: str, end: str) -> str:
+ """
+ returns substring between two given markers
+ """
+ try:
+ idb = text.index(begin) + len(begin)
+ except ValueError:
+ idb = None
+ try:
+ ide = text.index(end)
+ except ValueError:
+ ide = None
+
+
+ if idb is None and ide is None:
+ return text
+
+ if idb == None and ide:
+ return text[:ide]
+ elif ide == None and idb:
+ return text[idb:]
+ elif ide > idb:
+ return text[idb:ide]
+ else:
+ return ''
+
+
+
+
+if __name__ == '__main__':
+ print('Example:')
+ print(between_markers('What is >apple<', '>', '<'))
+
+ # These "asserts" are used for self-checking and not for testing
+ assert between_markers('What is >apple<', '>', '<') == "apple", "One sym"
+ assert between_markers("
My new site",
+ "", "") == "My new site", "HTML"
+ assert between_markers('No[/b] hi', '[b]', '[/b]') == 'No', 'No opened'
+ assert between_markers('No [b]hi', '[b]', '[/b]') == 'hi', 'No close'
+ assert between_markers('No hi', '[b]', '[/b]') == 'No hi', 'No markers at all'
+ assert between_markers('No ', '>', '<') == '', 'Wrong direction'
+ print('Wow, you are doing pretty good. Time to check it!')
diff --git a/bigger-price.py b/bigger-price.py
new file mode 100644
index 0000000..e416aaf
--- /dev/null
+++ b/bigger-price.py
@@ -0,0 +1,37 @@
+def bigger_price(limit, data):
+ """
+ TOP most expensive goods
+ """
+ l = (sorted(data, key=lambda x: x['price'], reverse=True))
+
+ return l[:limit]
+
+
+
+if __name__ == '__main__':
+ from pprint import pprint
+ print('Example:')
+ pprint(bigger_price(2, [
+ {"name": "bread", "price": 100},
+ {"name": "wine", "price": 138},
+ {"name": "meat", "price": 15},
+ {"name": "water", "price": 1}
+ ]))
+
+ # These "asserts" using for self-checking and not for auto-testing
+ assert bigger_price(2, [
+ {"name": "bread", "price": 100},
+ {"name": "wine", "price": 138},
+ {"name": "meat", "price": 15},
+ {"name": "water", "price": 1}
+ ]) == [
+ {"name": "wine", "price": 138},
+ {"name": "bread", "price": 100}
+ ], "First"
+
+ assert bigger_price(1, [
+ {"name": "pen", "price": 5},
+ {"name": "whiteboard", "price": 170}
+ ]) == [{"name": "whiteboard", "price": 170}], "Second"
+
+ print('Done! Looks like it is fine. Go and check it')
diff --git a/black-holes.py b/black-holes.py
new file mode 100644
index 0000000..7892cb9
--- /dev/null
+++ b/black-holes.py
@@ -0,0 +1,54 @@
+from math import acos, pi, hypot
+from itertools import combinations
+
+def distance(a, b):
+
+ x1, y1, _ = a
+ x2, y2, _ = b
+
+ return hypot(x1 - x2, y1 - y2)
+
+
+def area(r):
+ return pi*r**2
+
+
+def intersection_area(a, b, d):
+ r1, r2 = a[-1], b[-1]
+ if r1 + r2 <= d:
+ return 0
+ if r1 > d + r2:
+ return area(r2)
+
+ s = (2*d*r1)**2 - (d**2 + r1**2 - r2**2)**2
+ d1 = (d**2 + r1**2 - r2**2)/(2*d*r1)
+ d2 = (d**2 + r2**2 - r1**2)/(2*d*r2)
+
+ return r1**2*acos(d1) + r2**2*acos(d2) - 0.5*s**0.5
+
+
+def checkio(data):
+
+ holes = [list(hole) for hole in data]
+
+ while True:
+ pairs = sorted((distance(a, b), a, b) for a, b in combinations(holes, 2))
+ for d, a, b in pairs:
+ pair = sorted((a, b), key=lambda x: x[-1])
+ inter = intersection_area(pair[1], pair[0], distance(*pair))
+ if inter >= area(pair[0][-1]) * 0.55 and area(pair[1][-1]) > area(pair[0][-1]) * 1.2:
+ pair[1][2] = round(((area(pair[1][-1]) + area(pair[0][-1]))/pi)**0.5, 2)
+ holes.remove(pair[0])
+ break
+ else:
+ break
+
+ return [(x, y, r) for (x, y, r) in holes]
+
+
+if __name__ == '__main__':
+ # These "asserts" using only for self-checking and not necessary for auto-testing
+ assert checkio([(2, 4, 2), (3, 9, 3)]) == [(2, 4, 2), (3, 9, 3)]
+ assert checkio([(0, 0, 2), (-1, 0, 2)]) == [(0, 0, 2), (-1, 0, 2)]
+ assert checkio([(4, 3, 2), (2.5, 3.5, 1.4)]) == [(4, 3, 2.44)]
+ assert checkio([(3, 3, 3), (2, 2, 1), (3, 5, 1.5)]) == [(3, 3, 3.5)]
diff --git a/brackets.py b/brackets.py
new file mode 100644
index 0000000..ae28c58
--- /dev/null
+++ b/brackets.py
@@ -0,0 +1,34 @@
+def checkio(expression):
+ d = {'(': ')', '{': '}', '[': ']'}
+ stack = []
+
+ for i in expression:
+ if i in "({[":
+ stack.append(i)
+ elif i in ")}]":
+ if len(stack) > 0:
+ if i != d[stack.pop()]:
+ return False
+ else:
+ return False
+ if len(stack) > 0:
+ return False
+ return True
+
+
+
+
+
+
+
+
+#These "asserts" using only for self-checking and not necessary for auto-testing
+if __name__ == '__main__':
+ assert checkio("(((1+(1+1))))]") == False, 'idk'
+ assert checkio("((5+3)*2+1)") == True, "Simple"
+ assert checkio("{[(3+1)+2]+}") == True, "Different types"
+ assert checkio("(3+{1-1)}") == False, ") is alone inside {}"
+ assert checkio("[1+1]+(2*2)-{3/3}") == True, "Different operators"
+ assert checkio("(({[(((1)-2)+3)-3]/3}-3)") == False, "One is redundant"
+ assert checkio("2+3") == True, "No brackets, no problem"
+
diff --git a/building-base.py b/building-base.py
new file mode 100644
index 0000000..13465b1
--- /dev/null
+++ b/building-base.py
@@ -0,0 +1,37 @@
+class Building:
+ def __init__(self, south, west, width_WE, width_NS, height=10):
+ self.south = south
+ self.west = west
+ self.widthWE = width_WE
+ self.widthNS = width_NS
+ self.height = height
+
+ def corners(self):
+ return {'north-west': [self.south + self.widthNS, self.west],
+ 'north-east': [self.south + self.widthNS, self.west + self.widthWE],
+ 'south-west': [self.south, self.west],
+ 'south-east': [self.south, self.west + self.widthWE]}
+
+ def area(self):
+ return round(self.widthWE*self.widthNS, 2)
+
+ def volume(self):
+ return round(self.area()*self.height, 2)
+
+ def __repr__(self):
+ return "Building({}, {}, {}, {}, {})".format(self.south, self.west, self.widthWE, self.widthNS, self.height)
+
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ def json_dict(d):
+ return dict((k, list(v)) for k, v in d.items())
+
+ b = Building(1, 2, 2, 3)
+ b2 = Building(1, 2, 2, 3, 5)
+ assert json_dict(b.corners()) == {'north-east': [4, 4], 'south-east': [1, 4],
+ 'south-west': [1, 2], 'north-west': [4, 2]}, "Corners"
+ assert b.area() == 6, "Area"
+ assert b.volume() == 60, "Volume"
+ assert b2.volume() == 30, "Volume2"
+ assert str(b) == "Building(1, 2, 2, 3, 10)", "String"
diff --git a/cipher-map2.py b/cipher-map2.py
new file mode 100644
index 0000000..3d06cc4
--- /dev/null
+++ b/cipher-map2.py
@@ -0,0 +1,38 @@
+def rotate_matrix(matrix):
+ return list(zip(*matrix[::-1]))
+
+
+def recall_password(cipher_grille, ciphered_password):
+ result = ''
+
+ for n in range(4):
+ for g, p in zip(cipher_grille, ciphered_password):
+ for i, j in zip(g, p):
+ if i =='X':
+ result += j
+
+ cipher_grille = rotate_matrix(cipher_grille)
+
+ return result
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert recall_password(
+ ('X...',
+ '..X.',
+ 'X..X',
+ '....'),
+ ('itdf',
+ 'gdce',
+ 'aton',
+ 'qrdi')) == 'icantforgetiddqd', 'First example'
+
+ assert recall_password(
+ ('....',
+ 'X..X',
+ '.X..',
+ '...X'),
+ ('xhwc',
+ 'rsqx',
+ 'xqzz',
+ 'fyzr')) == 'rxqrwsfzxqxzhczy', 'Second example'
diff --git a/correct-sentence.py b/correct-sentence.py
new file mode 100644
index 0000000..389f607
--- /dev/null
+++ b/correct-sentence.py
@@ -0,0 +1,18 @@
+def correct_sentence(text: str) -> str:
+ """
+ returns a corrected sentence which starts with a capital letter
+ and ends with a dot.
+ """
+ return f"{text[0].upper()}{text[1:].replace('.', '')}."
+
+
+if __name__ == '__main__':
+ print("Example:")
+ print(correct_sentence("greetings, friends"))
+
+ # These "asserts" are used for self-checking and not for an auto-testing
+ assert correct_sentence("greetings, friends") == "Greetings, friends."
+ assert correct_sentence("Greetings, friends") == "Greetings, friends."
+ assert correct_sentence("Greetings, friends.") == "Greetings, friends."
+ assert correct_sentence("hi") == "Hi."
+ print("Coding complete? Click 'Check' to earn cool rewards!")
diff --git a/currency-style.py b/currency-style.py
new file mode 100644
index 0000000..58d31ca
--- /dev/null
+++ b/currency-style.py
@@ -0,0 +1,35 @@
+def checkio(text):
+
+ words = text.split(' ')
+
+ result = []
+
+ for word in words:
+ if word.startswith('$'):
+ if word.endswith('.') or word.endswith(','):
+ front = word[:-4].replace('.', ',')
+ back = word[-4:-1].replace(',', '.', 1)
+ rest = word[-1]
+ new_word = front + back + rest
+ else:
+ front = word[:-3].replace('.', ',')
+ back = word[-3:].replace(',', '.', 1)
+ new_word = front + back
+ # print(new_word)
+ result.append(new_word)
+ else:
+ result.append(word)
+
+ return ' '.join(result)
+
+if __name__ == '__main__':
+
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert checkio("$1.234.567,89") == "$1,234,567.89", "1st Example"
+ assert checkio("$0,89") == "$0.89", "2nd Example"
+ assert checkio("Euro Style = $12.345,67, US Style = $12,345.67") == \
+ "Euro Style = $12,345.67, US Style = $12,345.67" , "European and US"
+ assert checkio("Us Style = $12,345.67, Euro Style = $12.345,67") == \
+ "Us Style = $12,345.67, Euro Style = $12,345.67" , "US and European"
+ assert checkio("$1.234, $5.678 and $9") == \
+ "$1,234, $5,678 and $9", "Dollars without cents"
diff --git a/days-diff.py b/days-diff.py
new file mode 100644
index 0000000..4e2f0c7
--- /dev/null
+++ b/days-diff.py
@@ -0,0 +1,13 @@
+from datetime import datetime
+
+def days_diff(date1, date2):
+ """
+ Find absolute diff in days between dates
+ """
+ return abs((datetime(*date1)-datetime(*date2)).days)
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert days_diff((1982, 4, 19), (1982, 4, 22)) == 3
+ assert days_diff((2014, 1, 1), (2014, 8, 27)) == 238
+ assert days_diff((2014, 8, 27), (2014, 1, 1)) == 238
diff --git a/determine-the-order.py b/determine-the-order.py
new file mode 100644
index 0000000..257e77c
--- /dev/null
+++ b/determine-the-order.py
@@ -0,0 +1,36 @@
+from collections import defaultdict
+
+def checkio(data):
+
+ graphs = defaultdict(set)
+ elements = set([char for i in data for char in i])
+ result = []
+
+ # make topology
+ for s in data:
+ chars = [c for c in s]
+ for i in range(len(chars)):
+ [graphs[c].add(chars[i]) for c in s[i+1:] if c != chars[i]]
+
+ while elements:
+ roots = sorted([c for c in elements if len(graphs[c]) == 0])
+ root = roots[0]
+
+ result.extend(root)
+ elements.difference_update(root)
+ [graphs[c].discard(root) for c in elements]
+
+ return ''.join(result)
+
+#These "asserts" using only for self-checking and not necessary for auto-testing
+if __name__ == '__main__':
+ assert checkio(["acb", "bd", "zwa"]) == "zwacbd", \
+ "Just concatenate it"
+ assert checkio(["klm", "kadl", "lsm"]) == "kadlsm", \
+ "Paste in"
+ assert checkio(["a", "b", "c"]) == "abc", \
+ "Cant determine the order - use english alphabet"
+ assert checkio(["aazzss"]) == "azs", \
+ "Each symbol only once"
+ assert checkio(["dfg", "frt", "tyg"]) == "dfrtyg", \
+ "Concatenate and paste in"
diff --git a/digits-multiplication.py b/digits-multiplication.py
new file mode 100644
index 0000000..9df3114
--- /dev/null
+++ b/digits-multiplication.py
@@ -0,0 +1,12 @@
+from functools import reduce
+
+def checkio(number):
+ return reduce((lambda prev, curr: prev * curr), [int(num) for num in str(number) if num != '0'], 1)
+
+#These "asserts" using only for self-checking and not necessary for auto-testing
+if __name__ == '__main__':
+ assert checkio(123405) == 120
+ assert checkio(999) == 729
+ assert checkio(1000) == 1
+ assert checkio(1111) == 1
+ print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
diff --git a/easy-unpack.py b/easy-unpack.py
new file mode 100644
index 0000000..5592244
--- /dev/null
+++ b/easy-unpack.py
@@ -0,0 +1,12 @@
+def easy_unpack(elements):
+ """
+ returns a tuple with 3 elements - first, third and second to the last
+ """
+ return elements[0], elements[2], elements[-2]
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert easy_unpack((1, 2, 3, 4, 5, 6, 7, 9)) == (1, 3, 7)
+ assert easy_unpack((1, 1, 1, 1)) == (1, 1, 1)
+ assert easy_unpack((6, 3, 7)) == (6, 7, 3)
+ print('Done! Go Check!')
diff --git a/even-last.py b/even-last.py
new file mode 100644
index 0000000..fa2fe9f
--- /dev/null
+++ b/even-last.py
@@ -0,0 +1,13 @@
+def checkio(array):
+ """
+ sums even-indexes elements and multiply at the last
+ """
+ return sum([item for item in array[::2]]) * array[-1] if len(array) > 0 else 0
+
+#These "asserts" using only for self-checking and not necessary for auto-testing
+if __name__ == '__main__':
+ assert checkio([0, 1, 2, 3, 4, 5]) == 30, "(0+2+4)*5=30"
+ assert checkio([1, 3, 5]) == 30, "(1+5)*5=30"
+ assert checkio([6]) == 36, "(6)*6=36"
+ assert checkio([]) == 0, "An empty array = 0"
+ print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
diff --git a/find-sequence.py b/find-sequence.py
new file mode 100644
index 0000000..a825052
--- /dev/null
+++ b/find-sequence.py
@@ -0,0 +1,57 @@
+def iterate_submatrix(matrix):
+ submat = [row for row in matrix]
+ for r in submat:
+ yield tuple(r)
+ for c in range(0, len(matrix[0])):
+ yield tuple(r[c] for r in submat)
+ yield tuple(submat[rc][rc] for rc in range(0, len(matrix[0])))
+ yield tuple(submat[rc][len(matrix[0])-1-rc] for rc in range(0, len(matrix[0])))
+ for r in range(1, len(matrix)-3):
+ yield tuple(submat[rc+r][rc] for rc in range(0, len(matrix[0])-r))
+ for c in range(1, len(matrix)-3):
+ yield tuple(submat[rc][rc+c] for rc in range(0, len(matrix[0])-c))
+ for r in range(1, len(matrix) - 3):
+ yield tuple(submat[rc+r][len(matrix[0])-1-rc] for rc in range(0, len(matrix[0])-r))
+ for c in range(1, len(matrix) - 3):
+ yield tuple(submat[rc][len(matrix[0])-1-rc-c] for rc in range(0, len(matrix[0])-c))
+
+
+def checkio(matrix):
+
+ for item in iterate_submatrix(matrix):
+ # print(item)
+ for i in range(len(item)-3):
+ if item[i] == item[i+1] == item[i+2] == item[i+3]:
+ return True
+ return False
+
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert checkio([
+ [1, 2, 1, 1],
+ [1, 1, 4, 1],
+ [1, 3, 1, 6],
+ [1, 7, 2, 5]
+ ]) == True, "Vertical"
+ assert checkio([
+ [7, 1, 4, 1],
+ [1, 2, 5, 2],
+ [3, 4, 1, 3],
+ [1, 1, 8, 1]
+ ]) == False, "Nothing here"
+ assert checkio([
+ [2, 1, 1, 6, 1],
+ [1, 3, 2, 1, 1],
+ [4, 1, 1, 3, 1],
+ [5, 5, 5, 5, 5],
+ [1, 1, 3, 1, 1]
+ ]) == True, "Long Horizontal"
+ assert checkio([
+ [7, 1, 1, 8, 1, 1],
+ [1, 1, 7, 3, 1, 5],
+ [2, 3, 1, 2, 5, 1],
+ [1, 1, 1, 5, 1, 4],
+ [4, 6, 5, 1, 3, 1],
+ [1, 1, 9, 1, 2, 1]
+ ]) == True, "Diagonal"
diff --git a/first-word.py b/first-word.py
new file mode 100644
index 0000000..ec3b808
--- /dev/null
+++ b/first-word.py
@@ -0,0 +1,21 @@
+def first_word(text: str) -> str:
+ """
+ returns the first word in a given text.
+ """
+
+
+ return text.replace(',', '').replace('.', '').split()[0]
+
+
+if __name__ == '__main__':
+ print("Example:")
+ print(first_word("Hello world"))
+
+ # These "asserts" are used for self-checking and not for an auto-testing
+ assert first_word("Hello world") == "Hello"
+ assert first_word(" a word ") == "a"
+ assert first_word("don't touch it") == "don't"
+ assert first_word("greetings, friends") == "greetings"
+ assert first_word("... and so on ...") == "and"
+ assert first_word("hi") == "hi"
+ print("Coding complete? Click 'Check' to earn cool rewards!")
diff --git a/fizz-buzz.py b/fizz-buzz.py
new file mode 100644
index 0000000..5eb6bd9
--- /dev/null
+++ b/fizz-buzz.py
@@ -0,0 +1,26 @@
+#Your optional code here
+#You can import some modules or create additional functions
+
+
+def checkio(number):
+ if number%3 == 0:
+ result = 'Fizz'
+ if number%5 == 0:
+ result += ' Buzz'
+ elif number%5 == 0:
+ result = 'Buzz'
+ else:
+ result = str(number)
+
+ return result
+
+#Some hints:
+#Convert a number in the string with str(n)
+
+#These "asserts" using only for self-checking and not necessary for auto-testing
+if __name__ == '__main__':
+ assert checkio(15) == "Fizz Buzz", "15 is divisible by 3 and 5"
+ assert checkio(6) == "Fizz", "6 is divisible by 3"
+ assert checkio(5) == "Buzz", "5 is divisible by 5"
+ assert checkio(7) == "7", "7 is not divisible by 3 or 5"
+ print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
diff --git a/flatten-dict.py b/flatten-dict.py
new file mode 100644
index 0000000..108daf8
--- /dev/null
+++ b/flatten-dict.py
@@ -0,0 +1,47 @@
+def flatten(dictionary):
+ stack = [((), dictionary)]
+
+ result = {}
+
+ while stack:
+ path, current = stack.pop()
+ for k, v in current.items():
+ if v == {}:
+ result["/".join((path + (k,)))] = " "
+ elif isinstance(v, dict):
+ stack.append((path + (k,), v))
+ else:
+ result["/".join((path + (k,)))] = v
+
+ print(result)
+
+if __name__ == '__main__':
+ test_input = {"key": {"deeper": {"more": {"enough": "value"}}}}
+ print(' Input: {}'.format(test_input))
+ print('Output: {}'.format(flatten(test_input)))
+
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert flatten({"key": "value"}) == {"key": "value"}, "Simple"
+ assert flatten(
+ {"key": {
+ "deeper": {
+ "more": {
+ "enough": "value"}}}}
+ ) == {"key/deeper/more/enough": "value"}, "Nested"
+ assert flatten({"empty": {}}) == {"empty": ""}, "Empty value"
+ assert flatten({"name": {
+ "first": "One",
+ "last": "Drone"},
+ "job": "scout",
+ "recent": {},
+ "additional": {
+ "place": {
+ "zone": "1",
+ "cell": "2"}}}
+ ) == {"name/first": "One",
+ "name/last": "Drone",
+ "job": "scout",
+ "recent": "",
+ "additional/place/zone": "1",
+ "additional/place/cell": "2"}
+ print('You all set. Click "Check" now!')
diff --git a/hamming-distance2.py b/hamming-distance2.py
new file mode 100644
index 0000000..ce374ae
--- /dev/null
+++ b/hamming-distance2.py
@@ -0,0 +1,8 @@
+def checkio(n, m):
+ return bin(n ^ m).count('1')
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert checkio(117, 17) == 3, "First example"
+ assert checkio(1, 2) == 2, "Second example"
+ assert checkio(16, 15) == 5, "Third example"
diff --git a/house-password.py b/house-password.py
new file mode 100644
index 0000000..064619c
--- /dev/null
+++ b/house-password.py
@@ -0,0 +1,21 @@
+def checkio(data):
+ if len(data) >= 10:
+ if any(i.isupper() for i in data) and any(i.islower() for i in data) and any(i.isnumeric() for i in data):
+ return True
+ else:
+ return False
+ else:
+ return False
+#Some hints
+#Just check all conditions
+
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert checkio('A1213pokl') == False, "1st example"
+ assert checkio('bAse730onE4') == True, "2nd example"
+ assert checkio('asasasasasasasaas') == False, "3rd example"
+ assert checkio('QWERTYqwerty') == False, "4th example"
+ assert checkio('123456123456') == False, "5th example"
+ assert checkio('QwErTy911poqqqq') == True, "6th example"
+ print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
diff --git a/index-power.py b/index-power.py
new file mode 100644
index 0000000..20559e1
--- /dev/null
+++ b/index-power.py
@@ -0,0 +1,13 @@
+def index_power(array, n):
+ """
+ Find Nth power of the element with index N.
+ """
+ return array[n] ** n if n < len(array) else -1
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert index_power([1, 2, 3, 4], 2) == 9, "Square"
+ assert index_power([1, 3, 10, 100], 3) == 1000000, "Cube"
+ assert index_power([0, 1], 0) == 1, "Zero power"
+ assert index_power([1, 2], 3) == -1, "IndexError"
+ print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
diff --git a/loading-cargo.py b/loading-cargo.py
new file mode 100644
index 0000000..528175f
--- /dev/null
+++ b/loading-cargo.py
@@ -0,0 +1,23 @@
+from itertools import combinations
+
+def checkio(data):
+
+ if len(data) == 1:
+ return data[0]
+
+ bal = sum(data)/2
+ half_range = range(len(data)//2+1)
+ sums = [sum(val) for n in half_range for val in combinations(data, n)]
+ closet = min(sums, key=lambda x: abs(bal - x))
+
+ return 2 * abs(bal - closet)
+
+
+#These "asserts" using only for self-checking and not necessary for auto-testing
+if __name__ == '__main__':
+ assert checkio([10, 10]) == 0, "1st example"
+ assert checkio([10]) == 10, "2nd example"
+ assert checkio([5, 8, 13, 27, 14]) == 3, "3rd example"
+ assert checkio([5, 5, 6, 5]) == 1, "4th example"
+ assert checkio([12, 30, 30, 32, 42, 49]) == 9, "5th example"
+ assert checkio([1, 1, 1, 3]) == 0, "6th example"
diff --git a/long-repeat.py b/long-repeat.py
new file mode 100644
index 0000000..de54023
--- /dev/null
+++ b/long-repeat.py
@@ -0,0 +1,26 @@
+def long_repeat(line):
+ """
+ length the longest substring that consists of the same char
+ """
+
+ if len(line) == 0:
+ return 0
+
+ cnt = 1
+ tempCnt = 1
+ char = line[0]
+ for item in line[1:]:
+ if char == item:
+ tempCnt += 1
+ else:
+ char = item
+ tempCnt = 1
+ if cnt < tempCnt:
+ cnt = tempCnt
+ return cnt
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert long_repeat('sdsffffse') == 4, "First"
+ assert long_repeat('ddvvrwwwrggg') == 3, "Second"
+ print('"Run" is good. How is "Check"?')
diff --git a/median.py b/median.py
new file mode 100644
index 0000000..4ceb1ec
--- /dev/null
+++ b/median.py
@@ -0,0 +1,17 @@
+def checkio(data):
+ data = sorted(data)
+
+ if len(data)%2 != 0:
+ return data[len(data)//2]
+ else:
+ return (data[len(data)//2] + data[len(data)//2 - 1])/2
+
+#These "asserts" using only for self-checking and not necessary for auto-testing
+if __name__ == '__main__':
+ assert checkio([1, 2, 3, 4, 5]) == 3, "Sorted list"
+ assert checkio([3, 1, 2, 5, 3]) == 3, "Not sorted list"
+ assert checkio([1, 300, 2, 200, 1]) == 2, "It's not an average"
+ assert checkio([3, 6, 20, 99, 10, 15]) == 12.5, "Even length"
+ print("Start the long test")
+ assert checkio(list(range(1000000))) == 499999.5, "Long."
+ print("The local tests are done.")
\ No newline at end of file
diff --git a/merge-intervals.py b/merge-intervals.py
new file mode 100644
index 0000000..0effb82
--- /dev/null
+++ b/merge-intervals.py
@@ -0,0 +1,29 @@
+def merge_intervals(intervals):
+ """
+ Merge overlapped intervals.
+ """
+ result = []
+
+ for interval in intervals:
+ if not result:
+ result.append(interval)
+ else:
+ low = result[-1]
+ if interval[0] <= low[1] + 1:
+ result[-1] = (low[0], max(low[1], interval[1]))
+ else:
+ result.append(interval)
+
+ # print(result)
+
+ return result
+
+
+
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert merge_intervals([(1, 4), (2, 6), (8, 10), (12, 19)]) == [(1, 6), (8, 10), (12, 19)], "First"
+ assert merge_intervals([(1, 12), (2, 3), (4, 7)]) == [(1, 12)], "Second"
+ assert merge_intervals([(1, 5), (6, 10), (10, 15), (17, 20)]) == [(1, 15), (17, 20)], "Third"
+ print('Done! Go ahead and Check IT')
diff --git a/min-max.py b/min-max.py
new file mode 100644
index 0000000..1ba3949
--- /dev/null
+++ b/min-max.py
@@ -0,0 +1,23 @@
+def min(*args, key=None):
+ if len(args) == 1:
+ return sorted(iter(args[0]), key=key, reverse=False)[0]
+ elif len(args) > 1:
+ return sorted(args, key=key, reverse=False)[0]
+
+def max(*args, key=None):
+ if len(args) == 1:
+ return sorted(iter(args[0]), key=key, reverse=True)[0]
+ elif len(args) > 1:
+ return sorted(args, key=key, reverse=True)[0]
+
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert min((9,)) == 9, 'idk'
+ assert max(3, 2) == 3, "Simple case max"
+ assert min(3, 2) == 2, "Simple case min"
+ assert max([1, 2, 0, 3, 4]) == 4, "From a list"
+ assert min("hello") == "e", "From string"
+ assert max(2.2, 5.6, 5.9, key=int) == 5.6, "Two maximal items"
+ assert min([[1, 2], [3, 4], [9, 0]], key=lambda x: x[1]) == [9, 0], "lambda key"
+ print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
diff --git a/monkey-typing.py b/monkey-typing.py
new file mode 100644
index 0000000..88b3cb6
--- /dev/null
+++ b/monkey-typing.py
@@ -0,0 +1,11 @@
+def count_words(text, words):
+ return [i in text.lower() for i in words].count(True)
+
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert count_words("How aresjfhdskfhskd you?", {"how", "are", "you", "hello"}) == 3, "Example"
+ assert count_words("Bananas, give me bananas!!!", {"banana", "bananas"}) == 2, "BANANAS!"
+ assert count_words("Lorem ipsum dolor sit amet, consectetuer adipiscing elit.",
+ {"sum", "hamlet", "infinity", "anything"}) == 1, "Weird text"
+ print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
diff --git a/most-numbers.py b/most-numbers.py
new file mode 100644
index 0000000..4b3b45a
--- /dev/null
+++ b/most-numbers.py
@@ -0,0 +1,14 @@
+def checkio(*args):
+ return 0 if len(args) == 0 else round(max(args) - min(args), 3)
+
+#These "asserts" using only for self-checking and not necessary for auto-testing
+if __name__ == '__main__':
+ def almost_equal(checked, correct, significant_digits):
+ precision = 0.1 ** significant_digits
+ return correct - precision < checked < correct + precision
+
+ assert almost_equal(checkio(1, 2, 3), 2, 3), "3-1=2"
+ assert almost_equal(checkio(5, -5), 10, 3), "5-(-5)=10"
+ assert almost_equal(checkio(10.2, -2.2, 0, 1.1, 0.5), 12.4, 3), "10.2-(-2.2)=12.4"
+ assert almost_equal(checkio(), 0, 3), "Empty"
+ print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
diff --git a/most-wanted-letter.py b/most-wanted-letter.py
new file mode 100644
index 0000000..4bb3154
--- /dev/null
+++ b/most-wanted-letter.py
@@ -0,0 +1,43 @@
+from string import ascii_lowercase
+
+def checkio(text):
+
+ text = text.lower()
+ tempText = ''
+ for i in text:
+ if i in ascii_lowercase:
+ tempText += i
+
+ text = tempText
+
+ l = list(map(lambda x: [x, text.count(x)], set(text)))
+
+ temp = [1, 0]
+
+ for i in l:
+ if temp[1] < i[1]:
+ temp = i
+
+ tempL = []
+ for i in l:
+ if i[1] == temp[1]:
+ tempL += [i]
+
+ if len(tempL) == 0:
+ return temp[0]
+ else:
+ temp = sorted(tempL)[0]
+ return temp[0]
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert checkio("Lorem ipsum dolor sit amet") == "m"
+ assert checkio("Hello World!") == "l", "Hello test"
+ assert checkio("How do you do?") == "o", "O is most wanted"
+ assert checkio("One") == "e", "All letter only once."
+ assert checkio("Oops!") == "o", "Don't forget about lower case."
+ assert checkio("AAaooo!!!!") == "a", "Only letters."
+ assert checkio("abe") == "a", "The First."
+ print("Start the long test")
+ assert checkio("a" * 9000 + "b" * 1000) == "a", "Long."
+ print("The local tests are done.")
diff --git a/non-unique-elements.py b/non-unique-elements.py
new file mode 100644
index 0000000..af5d6b9
--- /dev/null
+++ b/non-unique-elements.py
@@ -0,0 +1,20 @@
+#Your optional code here
+#You can import some modules or create additional functions
+
+
+def checkio(data):
+ return [i for i in data if data.count(i) > 1]
+
+#Some hints
+#You can use list.count(element) method for counting.
+#Create new list with non-unique elements
+#Loop over original list
+
+
+if __name__ == "__main__":
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert list(checkio([1, 2, 3, 1, 3])) == [1, 3, 1, 3], "1st example"
+ assert list(checkio([1, 2, 3, 4, 5])) == [], "2nd example"
+ assert list(checkio([5, 5, 5, 5, 5])) == [5, 5, 5, 5, 5], "3rd example"
+ assert list(checkio([10, 9, 10, 10, 9, 8])) == [10, 9, 10, 10, 9], "4th example"
+ print("It is all good. Let's check it now")
\ No newline at end of file
diff --git a/number-factory.py b/number-factory.py
new file mode 100644
index 0000000..0adc9bc
--- /dev/null
+++ b/number-factory.py
@@ -0,0 +1,32 @@
+def checkio(number):
+
+ nums = []
+
+ while number > 9:
+ found = False
+ for i in range(9, 1, -1):
+ if number % i == 0:
+ found = True
+ nums.append(i)
+ number = number // i
+ break
+
+ if found is False:
+ return 0
+
+ nums.append(number)
+
+ rt = ""
+ for num in sorted(nums):
+ rt += str(num)
+
+ return int(rt)
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert checkio(20) == 45, "1st example"
+ assert checkio(21) == 37, "2nd example"
+ assert checkio(17) == 0, "3rd example"
+ assert checkio(33) == 0, "4th example"
+ assert checkio(3125) == 55555, "5th example"
+ assert checkio(9973) == 0, "6th example"
diff --git a/number-radix.py b/number-radix.py
new file mode 100644
index 0000000..23e5539
--- /dev/null
+++ b/number-radix.py
@@ -0,0 +1,16 @@
+def checkio(str_number, radix):
+
+ try:
+ return int(str_number, radix)
+ except ValueError:
+ return -1
+
+
+#These "asserts" using only for self-checking and not necessary for auto-testing
+if __name__ == '__main__':
+ assert checkio("AF", 16) == 175, "Hex"
+ assert checkio("101", 2) == 5, "Bin"
+ assert checkio("101", 5) == 26, "5 base"
+ assert checkio("Z", 36) == 35, "Z base"
+ assert checkio("AB", 10) == -1, "B > A = 10"
+ print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
diff --git a/pawn-brotherhood.py b/pawn-brotherhood.py
new file mode 100644
index 0000000..417b43e
--- /dev/null
+++ b/pawn-brotherhood.py
@@ -0,0 +1,17 @@
+def safe_pawns(pawns):
+ cnt = 0
+ for i in pawns:
+ left = chr(ord(i[0]) - 1) + str(int(i[1]) - 1)
+ right = chr(ord(i[0]) + 1) + str(int(i[1]) - 1)
+
+ # print(left, right)
+
+ if left in pawns or right in pawns:
+ cnt += 1
+ return cnt
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert safe_pawns({"b4", "d4", "f4", "c3", "e3", "g5", "d2"}) == 6
+ assert safe_pawns({"b4", "c4", "d4", "e4", "f4", "g4", "e5"}) == 1
+ print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
diff --git a/popular-words.py b/popular-words.py
new file mode 100644
index 0000000..ad53463
--- /dev/null
+++ b/popular-words.py
@@ -0,0 +1,25 @@
+def popular_words(text, words):
+ return dict(map(lambda x: [x, text.lower().count(x)], words))
+
+
+if __name__ == '__main__':
+ print("Example:")
+ print(popular_words('''
+When I was One,
+I had just begun.
+When I was Two,
+I was nearly new.
+''', ['i', 'was', 'three']))
+
+ # These "asserts" are used for self-checking and not for an auto-testing
+ assert popular_words('''
+When I was One,
+I had just begun.
+When I was Two,
+I was nearly new.
+''', ['i', 'was', 'three']) == {
+ 'i': 4,
+ 'was': 3,
+ 'three': 0
+ }
+ print("Coding complete? Click 'Check' to earn cool rewards!")
diff --git a/right-to-left.py b/right-to-left.py
new file mode 100644
index 0000000..76d2497
--- /dev/null
+++ b/right-to-left.py
@@ -0,0 +1,13 @@
+def left_join(phrases):
+ """
+ Join strings and replace "right" to "left"
+ """
+ return ','.join(phrases).replace('right', 'left')
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert left_join(("left", "right", "left", "stop")) == "left,left,left,stop", "All to left"
+ assert left_join(("bright aright", "ok")) == "bleft aleft,ok", "Bright Left"
+ assert left_join(("brightness wright",)) == "bleftness wleft", "One phrase"
+ assert left_join(("enough", "jokes")) == "enough,jokes", "Nothing to replace"
+ print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
diff --git a/roman-numerals.py b/roman-numerals.py
new file mode 100644
index 0000000..5eb2df1
--- /dev/null
+++ b/roman-numerals.py
@@ -0,0 +1,33 @@
+def checkio(data):
+
+ romanNumbers = {
+ 'M': 1000,
+ 'CM': 900,
+ 'D': 500,
+ 'CD': 400,
+ 'C': 100,
+ 'XC': 90,
+ 'L': 50,
+ 'XL': 40,
+ 'X': 10,
+ 'IX': 9,
+ 'V': 5,
+ 'IV': 4,
+ 'I': 1
+ }
+
+ result = ''
+
+ for i, j in romanNumbers.items():
+ while data >= j:
+ result += i
+ data -= j
+
+ return ''.join(result)
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert checkio(6) == 'VI', '6'
+ assert checkio(76) == 'LXXVI', '76'
+ assert checkio(499) == 'CDXCIX', '499'
+ assert checkio(3888) == 'MMMDCCCLXXXVIII', '3888'
diff --git a/say-history.py b/say-history.py
new file mode 100644
index 0000000..698fbe5
--- /dev/null
+++ b/say-history.py
@@ -0,0 +1,15 @@
+# 1. on CheckiO your solution should be a function
+# 2. the function should return the right answer, not print it.
+
+def say_hi(name, age):
+ """
+ Hi!
+ """
+ # your code here
+ return f"Hi. My name is {str(name)} and I'm {str(age)} years old"
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert say_hi("Alex", 32) == "Hi. My name is Alex and I'm 32 years old", "First"
+ assert say_hi("Frank", 68) == "Hi. My name is Frank and I'm 68 years old", "Second"
+ print('Done. Time to Check.')
diff --git a/second-index.py b/second-index.py
new file mode 100644
index 0000000..c7acd79
--- /dev/null
+++ b/second-index.py
@@ -0,0 +1,26 @@
+def second_index(text: str, symbol: str):
+ """
+ returns the second index of a symbol in a given text
+ """
+ cnt = 0
+ for i in range(len(text)):
+ if text[i] == symbol:
+ cnt += 1
+ if cnt == 2:
+ return i
+
+ if cnt == 0:
+ return None
+
+
+if __name__ == '__main__':
+ print('Example:')
+ print(second_index("sims", "s"))
+
+ # These "asserts" are used for self-checking and not for an auto-testing
+ assert second_index("sims", "s") == 3, "First"
+ assert second_index("find the river", "e") == 12, "Second"
+ assert second_index("hi", " ") is None, "Third"
+ assert second_index("hi mayor", " ") is None, "Fourth"
+ assert second_index("hi mr Mayor", " ") == 5, "Fifth"
+ print('You are awesome! All tests are done! Go Check it!')
diff --git a/secret-message.py b/secret-message.py
new file mode 100644
index 0000000..6170ae6
--- /dev/null
+++ b/secret-message.py
@@ -0,0 +1,11 @@
+def find_message(text):
+ """Find a secret message"""
+ result = ''.join([i for i in text if i.isupper()])
+ return result
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert find_message("How are you? Eh, ok. Low or Lower? Ohhh.") == "HELLO", "hello"
+ assert find_message("hello world!") == "", "Nothing"
+ assert find_message("HELLO WORLD!!!") == "HELLOWORLD", "Capitals"
+ print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
diff --git a/striped-words.py b/striped-words.py
new file mode 100644
index 0000000..b70d391
--- /dev/null
+++ b/striped-words.py
@@ -0,0 +1,47 @@
+VOWELS = "AEIOUY"
+CONSONANTS = "BCDFGHJKLMNPQRSTVWXZ"
+
+from re import split
+
+def checkio(text):
+
+ text = split('[ ,.?!]', text)
+ text = [i for i in text if len(i) > 1]
+
+ print(text)
+
+ result = 0
+ for i in text:
+ try:
+ if i[0].upper() in VOWELS:
+ cnt = 0
+ elif i[0].upper() in CONSONANTS:
+ cnt = 1
+ else:
+ raise ValueError
+
+ for j in i[1:]:
+ if cnt % 2 == 0:
+ if j.upper() not in CONSONANTS:
+ raise ValueError
+ elif cnt % 2 == 1:
+ if j.upper() not in VOWELS:
+ raise ValueError
+ cnt += 1
+ except ValueError:
+ pass
+ else:
+ result += 1
+
+ # print(result)
+ return result
+
+
+
+#These "asserts" using only for self-checking and not necessary for auto-testing
+if __name__ == '__main__':
+ assert checkio("1st 2a ab3er root rate") == 1, "nalesnik"
+ assert checkio("My name is ...") == 3, "All words are striped"
+ assert checkio("Hello world") == 0, "No one"
+ assert checkio("A quantity of striped words.") == 1, "Only of"
+ assert checkio("Dog,cat,mouse,bird.Human.") == 3, "Dog, cat and human"
diff --git a/the-longest-palindromic.py b/the-longest-palindromic.py
new file mode 100644
index 0000000..4a1656c
--- /dev/null
+++ b/the-longest-palindromic.py
@@ -0,0 +1,38 @@
+def longest_palindromic(text):
+ maxLength = 1
+
+ begin = 0
+ end = len(text)
+
+ low = 0
+ high = 0
+
+ for i in range(1, end):
+
+ low = i-1
+ high = i
+ while low >= 0 and high < end and text[low] == text[high]:
+ if high - low + 1 > maxLength:
+ begin = low
+ maxLength = high - low + 1
+ low -= 1
+ high += 1
+
+ low = i - 1
+ high = i + 1
+ while low >= 0 and high < end and text[low] == text[high]:
+ if high - low + 1 > maxLength:
+ begin = low
+ maxLength = high - low + 1
+ low -= 1
+ high += 1
+
+
+ return text[begin:begin+maxLength]
+
+
+
+if __name__ == '__main__':
+ assert longest_palindromic("artrartrt") == "rtrartr", "The Longest"
+ assert longest_palindromic("abacada") == "aba", "The First"
+ assert longest_palindromic("aaaa") == "aaaa", "The A"
diff --git a/the-most-frequent.py b/the-most-frequent.py
new file mode 100644
index 0000000..c3705e2
--- /dev/null
+++ b/the-most-frequent.py
@@ -0,0 +1,24 @@
+def most_frequent(data):
+ """
+ determines the most frequently occurring string in the sequence.
+ """
+ result = []
+
+
+ for i in set(data):
+ result.append([i, data.count(i)])
+
+
+
+ return sorted(result, key=lambda x: x[1], reverse=True)[0][0]
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert most_frequent([
+ 'a', 'b', 'c',
+ 'a', 'b',
+ 'a'
+ ]) == 'a'
+
+ assert most_frequent(['a', 'a', 'bi', 'bi', 'bi']) == 'bi'
+ print('Done')
diff --git a/three-words.py b/three-words.py
new file mode 100644
index 0000000..5b9808c
--- /dev/null
+++ b/three-words.py
@@ -0,0 +1,29 @@
+def checkio(words):
+
+ words = words.split()
+ print(words)
+
+ cnt = 0
+ tempCnt = 0
+ for i in words:
+ try:
+ int(i)
+ tempCnt = 0
+ except ValueError:
+ tempCnt += 1
+
+ if tempCnt > cnt:
+ cnt = tempCnt
+
+ return True if cnt > 2 else False
+
+
+#These "asserts" using only for self-checking and not necessary for auto-testing
+if __name__ == '__main__':
+ assert checkio("one two 3 four five six 7 eight 9 ten eleven 12") == True
+ assert checkio("Hello World hello") == True, "Hello"
+ assert checkio("He is 123 man") == False, "123 man"
+ assert checkio("1 2 3 4") == False, "Digits"
+ assert checkio("bla bla bla bla") == True, "Bla Bla"
+ assert checkio("Hi") == False, "Hi"
+ print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
diff --git a/x-o-referee.py b/x-o-referee.py
new file mode 100644
index 0000000..9990510
--- /dev/null
+++ b/x-o-referee.py
@@ -0,0 +1,45 @@
+def checkio(game_result):
+ if "XXX" in game_result:
+ return "X"
+ elif "OOO" in game_result:
+ return "O"
+
+ for i in range(3):
+ temp = game_result[0][i] + game_result[1][i] + game_result[2][i]
+ if temp in "XXX/OOO":
+ return temp[0]
+
+ temp = game_result[0][0] + game_result[1][1] + game_result[2][2]
+ if temp in "XXX/OOO":
+ return temp[0]
+
+ temp = game_result[0][2] + game_result[1][1] + game_result[2][0]
+ if temp in "XXX/OOO":
+ return temp[0]
+
+ return "D"
+
+
+
+
+
+if __name__ == '__main__':
+ #These "asserts" using only for self-checking and not necessary for auto-testing
+ assert checkio([
+ "X.O",
+ "XX.",
+ "XOO"]) == "X", "Xs wins"
+ assert checkio([
+ "OO.",
+ "XOX",
+ "XOX"]) == "O", "Os wins"
+ assert checkio([
+ "OOX",
+ "XXO",
+ "OXX"]) == "D", "Draw"
+ assert checkio([
+ "O.X",
+ "XX.",
+ "XOO"]) == "X", "Xs wins again"
+ print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
+