Esse é um desafio de praticar a otimização do golfe em Python - truques e atalhos reutilizáveis para cortar alguns caracteres. Muitos estarão familiarizados com os golfistas de Python e usarão idéias comuns das Dicas do Python . Alguns deles usam recursos específicos do Python que talvez você não saiba que existem, a menos que você os tenha visto, então dê uma olhada nas dicas se estiver preso.
Objetivo: Existem dez problemas, cada um um trecho de referência do código Python para você otimizar e uma descrição do código. Seu objetivo é reescrevê-lo para ser mais curto, mas ainda funcionalmente equivalente.
Sua pontuação, que você está tentando minimizar, é o comprimento total do seu código em todos os trechos. O comprimento dos trechos de referência é 150. O desempatador é a primeira publicação.
Publicando respostas: para cada problema, publique seu código e sua contagem de caracteres. Você pode postar o trecho de referência se não encontrar algo mais curto. Pretende-se que você não veja as respostas dos outros quando publicar as suas. Por favor, adicione spoilers a cada problema individual, incluindo a contagem de caracteres individuais. Você pode deixar a contagem total revelada. Sinta-se à vontade agora para descartar sua solução ou publicar novas soluções não descascadas.
Detalhes sobre legalidade: equivalência funcional significa que o código pode ser substituído em um programa sem afetar seu comportamento (ignorando itens como uso de memória e precedência do operador como parte de uma expressão). Expressões devem produzir valores equivalentes a ==
. Note isso 1.0==1==True
. Seu código não deve ter efeitos colaterais, a menos que indicado de outra forma. Não pretendo que os problemas sejam específicos da versão, mas, no caso, você pode especificar uma versão do Python para cada problema.
Problema 1: Continue iterando enquanto a lista L
tiver pelo menos 7 elementos
# 16 chars
while len(L)>=7:
Problema 2 : Verifique se dois flutuadores x
e y
são positivos.
# 11 chars
x>0 and y>0
Problema 3 : Se Boolean b
for verdadeiro, remova o primeiro elemento de L
. Caso contrário, deixe-o inalterado.
# 12 chars
if b:L=L[1:]
Problema 4 : Verifique se todos os elementos de uma lista L
de números não vazios são iguais. Para esse problema, não há problema em modificar a lista.
# 22 chars
all(x==L[0]for x in L)
Problema 5 : anexe um número n
ao final de uma lista L
apenas se L
já tiver esse número.
# 16 chars
if n in L:L+=[n]
Problema 6 : Expresse o sinal de um flutuador x
: +1
para positivo, 0
para 0, -1
para negativo.
# 20 chars
abs(x)/x if x else 0
Problema 7 Continue um loop enquanto o primeiro elemento de L
, uma lista de booleanos, for True
. Pare também se L
estiver vazio.
# 17 chars
while L and L[0]:
Problema 8 : Continue um loop contanto que n
seja maior que 1. n
É garantido que o número seja um número inteiro positivo.
# 10 chars
while n>1:
Problema 9 : Verifique se um número inteiro representado como uma sequência de caracteres s
é negativo (ou seja, começa com '-').
# 9 chars
s[0]=='-'
Problema 10 : Converta um Booleano b
em "Win"
/ "Lose"
, com True
-> "Win"
e False
-> "Lose"
.
# 17 chars
["Lose","Win"][b]
Aviso: Spoilers abaixo, não role para baixo se você quiser resolvê-los.
Se você quer apenas saber a pontuação ideal para um problema:
Problema 1:
12
Problema 2:
5
Problema 3:
7
Problema 4:
13
Problema 5:
13
Problema 6:
8
Problema 7:
12
Problema 8:
9
Problema 9:
5
Problema 10:
15