Questa è una sfida per praticare l'ottimizzazione del golf in Python: trucchi e scorciatoie riutilizzabili per radere alcuni personaggi. Molti conosceranno i golfisti di Python e useranno idee comuni dai suggerimenti di Python . Alcuni di questi usano funzionalità specifiche di Python che potresti non sapere se non le hai viste, quindi dai un'occhiata ai suggerimenti se sei bloccato.
Obiettivo: ci sono dieci problemi, ognuno dei quali è uno snippet di riferimento del codice Python che puoi ottimizzare e una descrizione del codice. Il tuo obiettivo è riscriverlo in modo che sia più breve ma funzionalmente equivalente.
Il tuo punteggio, che stai cercando di minimizzare, è la lunghezza totale del tuo codice di tutti i frammenti. La lunghezza degli snippet di riferimento è 150. Tiebreaker è il primo post.
Invio delle risposte: per ogni problema, pubblica il tuo codice e il conteggio dei caratteri. Puoi pubblicare lo snippet di riferimento se non hai trovato qualcosa di più corto. È inteso che non guardi le risposte degli altri quando pubblichi le tue. Si prega di spoiler-tag ogni singolo problema, compresi i conteggi dei singoli personaggi. Puoi lasciare rivelato il conteggio totale. Sentiti libero di rovinare la tua soluzione o pubblicare nuove soluzioni incontaminate.
Dettagli sulla legalità: equivalenza funzionale significa che il codice può essere sostituito in un programma senza influenzarne il comportamento (ignorando cose come l'utilizzo della memoria e la precedenza dell'operatore come parte di un'espressione). Le espressioni dovrebbero produrre valori equivalenti a ==
. Si noti che 1.0==1==True
. Il tuo codice non dovrebbe avere effetti collaterali se non diversamente indicato. Non intendo che i problemi siano specifici della versione, ma per ogni evenienza, puoi specificare una versione di Python per ogni problema.
Problema 1: continua a ripetere finché l'elenco L
contiene almeno 7 elementi
# 16 chars
while len(L)>=7:
Problema 2 : Verificare se due galleggianti x
e y
sono entrambi positivi.
# 11 chars
x>0 and y>0
Problema 3 : se Boolean b
è true, rimuovere il primo elemento di L
. Altrimenti, lascialo invariato.
# 12 chars
if b:L=L[1:]
Problema 4 : verificare se tutti gli elementi di un elenco L
di numeri non vuoto sono uguali. Per questo problema, è OK per modificare l'elenco.
# 22 chars
all(x==L[0]for x in L)
Problema 5 : aggiungere un numero n
alla fine di un elenco L
solo se L
contiene già quel numero.
# 16 chars
if n in L:L+=[n]
Problema 6 : esprimere il segno di un float x
: +1
per positivo, 0
per 0, -1
per negativo.
# 20 chars
abs(x)/x if x else 0
Problema 7 Continua un ciclo fino a quando è il primo elemento di L
, un elenco di booleani True
. Fermati anche se L
è vuoto.
# 17 chars
while L and L[0]:
Problema 8 : continuare un ciclo fino a quando n
è maggiore di 1. Il numero n
è garantito per essere un numero intero positivo.
# 10 chars
while n>1:
Problema 9 : verifica se un numero intero rappresentato come stringa s
è negativo (ovvero, inizia con '-').
# 9 chars
s[0]=='-'
Problema 10 : converti un valore booleano b
in "Win"
/ "Lose"
, con True
-> "Win"
e False
-> "Lose"
.
# 17 chars
["Lose","Win"][b]
Avvertenza: spoiler di seguito, non scorrere verso il basso se si desidera risolverli da soli.
Se vuoi solo sapere il punteggio ottimale per un 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