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
Respostas:
Total:
10410199 caracteresProblema 1
Problema 2
Problema 3
Problema 4
Problema 5
Problema 6
Problema 7
Problema 8
Problema 9
Problema 10
fonte
Tamanho total:
128122120117116115111107104Problema 1
Continue iterando enquanto a lista
L
tiver pelo menos 7 elementos.Problema 2
Verifique se dois carros alegóricos
x
ey
ambos são positivos.Problema 3
Se Boolean
b
for true, remova o primeiro elemento deL
. Caso contrário, deixe-o inalterado.Problema 4
Verifique se todos os elementos de uma lista não vazia
L
de números são iguais. Para esse problema, não há problema em modificar a lista.Problema 5
Anexe um número
n
ao final de uma listaL
apenas seL
já tiver esse número.Problema 6
Expresse o sinal de um ponto flutuante
x
:+1
para positivo,0
para 0,-1
para negativo.Problema 7
Continue um loop enquanto o primeiro elemento de
L
, uma lista de booleanos, forTrue
. Pare também seL
estiver vazio.Problema 8
Continue um loop contanto que
n
seja maior que 1.n
É garantido que o número seja um número inteiro positivo.Problema 9
Verifique se um número inteiro representado como uma sequência
s
é negativo (ou seja, começa com '-').Problema 10
Converta um booleano
b
em"Win"
/"Lose"
, comTrue
->"Win"
eFalse
->"Lose"
.fonte
Total:
106104102 caracteresProblema 1
Problema 2
Problema 3
Problema 4
Problema 5
Problema 6
Problema 7
Problema 8
Problema 9
Problema 10
fonte
b
é 0, 1 ou 2, e tudo que você pode fazer é(b-1)*"Hello"or b*"Goodbye"or"Good Afternoon"
)~b*"Hello"
.["Good Afternoon","Goodbye","Hello"][b]
venceria: PTotal: 99 bytes
Problema 1
Problema 2
Problema 3
Problema 4
Problema 5
Problema 6
Problema 7
Problema 8
Problema 9
Problema 10
fonte
Total: 106
fonte
[L[0]]
?Tamanho total:
# 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 9 # 10123 121 120116fonte
Total: 121
Primeiras tentativas:
Problema 1
Problema 2
Problema 3
Problema 4
Problema 5
Problema 6
Problema 7
Problema 8
Problema 9
Problema 10
fonte