Найти - Пользователи
Полная версия: Краткость кода - Цезарь
Начало » Python для новичков » Краткость кода - Цезарь
1
DamMercul
Забились на завтра с друзьями сверить наши коды, реализующие шифр Цезаря. Выиграет тот, у кого функция получилась короче(по кол. символов и строкам). Она должна уметь и шифровать, и расшифровывать. Обязательные аргументы функции: text и key. Их дефултные значения должны быть hello world и 1. Вот моя версия:
 def caesar_cipher(text="Hello, world!", key=1, task=True): return "".join([chr(((ord(a) + key) if task else (ord(a) - key)) % 0x0FFFF) for a in text])

Но я думаю, что этого недостаточно. Мне надо еще короче. Как мог бы я сократить код?
FishHook
В лоб
Обязательные аргументы функции: text и key.
1. Про таск ничего не говорится
2. В join можно передать генератор
3. 0x0FFFF = 2**16 - минус два знака
4. True == 1
 def caesar_cipher(text="Hello, world!", key=1, t=1): return "".join(chr(((ord(a) + key) if t else (ord(a) - key)) % 2**16) for a in text)
Это без изменения алгоритма
FishHook
Лишние скобки
 def caesar_cipher(text="Hello, world!", key=1, t=1): return "".join(chr((ord(a) + key if t else (ord(a) - key)) % 2**16) for a in text)
FishHook
Добавим магии
 ["a", "b"][1] == ["a", "b"][True]
["a", "b"][0] == ["a", "b"][False]

 def caesar_cipher(text="Hello, world!", key=1, t=1): return "".join(chr([(ord(a) - key) % 2**16, ord(a) + key][t]) for a in text)
DamMercul
Спасибо, через 3 часа покажу код
papuas
FishHook
1. Про таск ничего не говорится
+1

шифр цезаря
str. maketrans() же самый короткий, не?
 a=''.join([chr(i) for i in range(0,257)]);s=lambda x:x[1:]+x[0];print("Hello, world!".translate(str.maketrans(a,s(a))))
хотя конечн дичь.
JOHN_16
DamMercul
Выиграет тот, у кого функция получилась короче(по кол. символов и строкам)
DamMercul
(по кол. символов и строкам)
не теми письками меряетесь.
Давайте посерьезней, все таки такой мощный алгоритм взяли для реализации. Считайте количество команд виртуальной машины. Ну или время выполнения если алгоритму загнать хотя бы первый том “Война и мир” Толстого.
papuas
JOHN_16
Давайте посерьезней
Дак мы школьники
у нас ещё не отросло, чтобы меряться.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB