Pracuję nad problemem, który sobie postawiłem dla zabawy, a mianowicie stworzeniu skryptu w języku Python, który drukuje liczby parzyste od 0 do 100. Wyzwaniem jest, aby skrypt był jak najmniejszy. Oto co mam do tej pory:
for x in range(0, 101):
if (x % 2 == 0):
print x
Obecnie jest to 60 bajtów. Czy ktoś może wymyślić sposób, aby go zmniejszyć?
Edycja: print(*range(2,101,2),sep='\n')
30 bajtów. Jakieś mniejsze?
i=2;exec"print i;i+=2;"*50
0
czy2
? Nie pytam dużo, ale wydaje mi się, że twoje dwa przykłady robią różne rzeczy. Proszę mnie poprawić, jeśli nie.print "0 10 100"
(czy binarny jest OK?)Odpowiedzi:
Python 2 - 12 znaków
Reprezentacja dziesiętna wszystkich liczb parzystych od 0 do 100 można znaleźć na wyjściu:
Jako bonus, podobnie jak liczby nieparzyste.
źródło
Python 3, 22 (prawdopodobnie niedozwolone)
Jeśli wyzwaniem jest „utworzenie skryptu w języku Python, który drukuje liczby parzyste od 0 do 100”, a nie „w celu utworzenia skryptu w języku Python, który drukuje liczby parzyste od 0 do 100, oddzielone znakiem nowej linii ”, wówczas najkrótszym rozwiązaniem jest:
Pamiętaj, że w golfie kodu bardzo ważne jest, aby nie nakładać na siebie żadnych ograniczeń, których nie musisz - rób to, o co prosi problem i nie więcej.
źródło
possibly not allowed
jest w tytule. Z drugiej strony możliwe jest również, że przyłapał się na dopasowaniu wyników swojego początkowego programu i zapomniał o specyfikacji problemu początkowego. Ponieważ nie wiem, co się dzieje, udzieliłem tej odpowiedzi.Python2 26
niezależne odkrycie rozwiązania @ bitpwner
źródło
Python 2 - 26
Oparty na wskazówce na temat exec z mnożeniem łańcuchów, znalezionej w Tips for golfing in Python .
źródło
Python 2, 26 (prawdopodobnie niedozwolone)
Nie było ściśle określone, w jakiej kolejności mają być drukowane liczby.
źródło
Python 2, 28
źródło
Python 2 - 20 (prawdopodobnie niedozwolone)
Jest to specyficzne dla Pythona 2 i prawdopodobnie oszustwo, ponieważ drukuje listę, ale ponieważ wszystkie liczby kończą się na ekranie:
źródło
Python 2 w * NIX, 24
Jeśli musisz dodać
Zatem łączna liczba to 33 znaki.
źródło
os.system
nazywa program systemowy.os.system('a')
dlatego, żea
Python 3, 29
Jeśli korzystasz z języka Python 2 i zdarzyło Ci się już zaimportować funkcję drukowania, nie musisz przekształcać obiektu iteratora w listę, który ma 25 znaków:
Nie wiem jednak, czy to całkiem uczciwe.
Oto kolejny zabawny pomysł, który działa w Pythonie 2 lub 3. To trochę dłużej.
źródło
*a,=map(print,range(0,101,2))
korzystania z rozszerzonego rozpakowywania iteracyjnego .Python 2 - 24
(w oparciu o rozwiązanie Bitpwner i Sparr)
W powłoce „_” zawiera wartość wcześniej ocenionego wyrażenia
źródło
range(0,102,2)
ponieważ wyświetliby wszystkie liczby parzyste (plus przecinki i dwa nawiasy) na ekranie.Zrozumienie listy Python - 39
Wykorzystuje to rozumienie listy, jedną sztuczką, aby ją skrócić, jest pomnożenie indeksu przez 2 zamiast przejścia od 0 do 100 i
if x % 2
sprawdzenie końca nawet.Używając mapy i sugestii @ isaacg, uzyskuje się te same 39 znaków:
Edycja: Po rozdzieleniu wartości znakiem nowej linii nie jest to wcale najkrótsza.
źródło
prints the even numbers from 0 to 100
, a nie tylko je generuje. Ponadto, jeśli chcesz tylko listę,range(0,101,2)
jest krótsza.Python 2 - 20 (wątpliwy)
Jeśli rozwiązanie rozdzielone spacjami isaacg jest w porządku, to prawdopodobnie normalne formatowanie listy również:
W celu dalszego przekręcania zasad zastosuj sugestię SirBraneDamuj z komentarzy:
a ty masz 16 lat. A co, jeśli oddzielą je dodatkowe śmieci?
źródło