첫번째 문제는 ROT 13으로
def rot13(message): dd=[] for i in message: a = ord(i) if 97<=a<=109 or 65<=a<=77: dd.append(chr(ord(i)+13)) elif 110<=a<=122 or 78<=a<=90: dd.append(chr(ord(i)-13)) else: dd.append(i) return "".join(dd)
아스키 코드를 이용해서 만약 i가 a~e 사이라면 13을 더해주고 e~z라면 13을 빼주었다. 그리고 그 안에 들어있지 않은 경우는 그대로 출력시켜 줬다.
두번째 문제는 6kyu 난이도 문제로
[] --> "no one likes this"
["Peter"] --> "Peter likes this"
["Jacob", "Alex"] --> "Jacob and Alex like this"
["Max", "John", "Mark"] --> "Max, John and Mark like this"
["Alex", "Jacob", "Mark", "Max"] --> "Alex, Jacob and 2 others like this"
사람 숫자에 따라 출력을 다르게 해야한다.
def likes(names): if len(names) ==0: return "no one likes this" elif len(names) == 1: return f'{names[0]} likes this' elif len(names) == 2: return f'{names[0]} and {names[1]} like this' elif len(names) == 3: return f'{names[0]}, {names[1]} and {names[2]} like this' else: return f'{names[0]}, {names[1]} and {len(names)-2} others like this'
세번째 문제는 5kyu 난이도 문제로
add(1)(2)(3); // 6
add(1)(2)(3)(4); // 10
add(1)(2)(3)(4)(5); // 15
class Sum(int): def __call__(self,i): return Sum(self+i) def add(v): return Sum(v)
call을 사용해서 문제를 해결했다. call함수는 클래스 객체 자체를 호출하면 call함수의 값이 리턴된다.
이 함수는 클래스의 인스턴스를 함수로 취급 후 다른 함수의 파라미터로 사용할 수 있다.