Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 20, 2018 23:55:48

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

Краткость кода - Цезарь

Забились на завтра с друзьями сверить наши коды, реализующие шифр Цезаря. Выиграет тот, у кого функция получилась короче(по кол. символов и строкам). Она должна уметь и шифровать, и расшифровывать. Обязательные аргументы функции: 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])

Но я думаю, что этого недостаточно. Мне надо еще короче. Как мог бы я сократить код?



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

#2 Янв. 21, 2018 08:13:52

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Краткость кода - Цезарь

В лоб

Обязательные аргументы функции: 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)
Это без изменения алгоритма



Офлайн

#3 Янв. 21, 2018 08:20:10

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Краткость кода - Цезарь

Лишние скобки

 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)



Офлайн

#4 Янв. 21, 2018 08:24:17

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Краткость кода - Цезарь

Добавим магии

 ["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)



Офлайн

#5 Янв. 21, 2018 12:26:59

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

Краткость кода - Цезарь

Спасибо, через 3 часа покажу код



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

#6 Янв. 23, 2018 01:41:56

papuas
Зарегистрирован: 2015-06-19
Сообщения: 159
Репутация: +  6  -
Профиль   Отправить e-mail  

Краткость кода - Цезарь

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))))
хотя конечн дичь.

Отредактировано papuas (Янв. 23, 2018 16:40:59)

Офлайн

#7 Янв. 23, 2018 16:44:07

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Краткость кода - Цезарь

DamMercul
Выиграет тот, у кого функция получилась короче(по кол. символов и строкам)
DamMercul
(по кол. символов и строкам)
не теми письками меряетесь.
Давайте посерьезней, все таки такой мощный алгоритм взяли для реализации. Считайте количество команд виртуальной машины. Ну или время выполнения если алгоритму загнать хотя бы первый том “Война и мир” Толстого.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#8 Янв. 23, 2018 22:52:47

papuas
Зарегистрирован: 2015-06-19
Сообщения: 159
Репутация: +  6  -
Профиль   Отправить e-mail  

Краткость кода - Цезарь

JOHN_16
Давайте посерьезней
Дак мы школьники
у нас ещё не отросло, чтобы меряться.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version