Najmniejszy skrypt Pythona do drukowania liczb parzystych od 0 do 100


11

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?


4
i=2;exec"print i;i+=2;"*50
— Vectorized

2
Ta wskazówka znajduje się na stronie pythonowych wskazówek golfowych codegolf.stackexchange.com/questions/54/… .
— Vectorized

4
Czy to ma zaczynać się od 0czy 2? Nie pytam dużo, ale wydaje mi się, że twoje dwa przykłady robią różne rzeczy. Proszę mnie poprawić, jeśli nie.
— Geobits,

20
print "0 10 100"(czy binarny jest OK?)
— r3mainer

1
@squeamishossifrage nie zapomnij zagrać w golfa w kosmosie;)
— isaacg

Odpowiedzi:


37

Python 2 - 12 znaków

print 8**999

Reprezentacja dziesiętna wszystkich liczb parzystych od 0 do 100 można znaleźć na wyjściu:

153778990270139647116444851659594064330089236967104214470764753645007350076834118596920008479824182447803706156756475613564110522612279602948135310258168541404369918794480627176627915013920083365328091029969610052054309789461709376676636344651086297099162082351332867728061686056465813162964114500668343488577962834185114919242101638217077550294093097112980059735456387540301162747936045475366317560310988720435512281742591085641505551107966844283901574058972330493685836063965131445246304097593431852972101058022587137885482726523043570690342524474585327775688980689010069001288756281975198668705741000141718184277589376710426738442847382969979234512669279398030637083755270090078676447687796406001053805898105262326290072552249025832780916090265261064205460488458795026145331708830141367124625271312584437671840499845750728447412590406684361326531266896486146862384988911439049971734022314877278748672

Jako bonus, podobnie jak liczby nieparzyste.


Jedyny problem: drukuje nieparzyste liczby i wiele więcej.
— patrz

1
@Sieg, parzysty i nieparzysty ... w pewnym sensie uwzględniono wszystkie bazy, nie jestem pewien, jak znajdziesz w tym „dużo więcej”. ;)
— paqogomez

Nie pierwszy raz mam inne zdanie niż inni użytkownicy. W każdym razie lubię twoją odpowiedź.
— patrz

@ paqogomez liczby parzyste 0-100, liczby nieparzyste i wiele więcej liczb parzystych> 100
— OJFord

Zbyt ciekawy, by nie zadawać głupiego pytania, dlaczego konkretnie 8 * 999?
— 0xc0de

31

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:

print(*range(0,101,2))

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.


1
Czy druga odpowiedź OP w tekście nie sprawi, że pomyślisz, że chciałby, żeby nowy wiersz był oddzielony?
— Moop

10
To całkiem możliwe i dlatego possibly not allowedjest 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.
— isaacg,

22

Python2 26

i=0;exec"print i;i+=2;"*51

niezależne odkrycie rozwiązania @ bitpwner


Dostaję błąd SyntaxError, gdy próbuję go uruchomić. Czy górny wiersz tej odpowiedzi powinien brzmieć „Python 2, 26”?

+1, wydajesz się być 58 sekund szybciej, aby opublikować to rozwiązanie. :)
— Ilmari Karonen,

19

Python 2 - 26

i=0;exec"print i;i+=2;"*51

Oparty na wskazówce na temat exec z mnożeniem łańcuchów, znalezionej w Tips for golfing in Python .


Powinien zawierać 0, patrz rozwiązanie Sparra.
— isaacg,

Dostaję błąd SyntaxError, gdy próbuję go uruchomić. Czy górny wiersz tej odpowiedzi powinien brzmieć „Python 2 - 26”?

13

Python 2, 26 (prawdopodobnie niedozwolone)

i=102
while i:i-=2;print i

Nie było ściśle określone, w jakiej kolejności mają być drukowane liczby.



9

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:

print range(0,101,2)

7

Python 2 w * NIX, 24

os.system('seq 0 2 100')

Jeśli musisz dodać

import os

Zatem łączna liczba to 33 znaki.


Sprytny - w niektórych przypadkach może być lepszy. Czy jest to specyficzne dla systemu operacyjnego?
— isaacg,

4
@isaacg Bardzo, jak os.systemnazywa program systemowy.
— patrz

3
Jeśli to dozwolone, to os.system('a')dlatego, że a
— akurat

5
@OllieFord seq jest częścią GNU Coreutils. Nie masz tyle siły przebicia.
— Sparr

4

Python 3, 29

*a,=map(print,range(0,101,2))

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:

map(print,range(0,101,2))

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.

def p(i):
    if i+2:p(i-2);print i
p(100)

1
Wersję Python 3 można skrócić do *a,=map(print,range(0,101,2))korzystania z rozszerzonego rozpakowywania iteracyjnego .
— trzęsienie ziemi

@flornquake Dzięki, zaktualizowałem to.
— IanH

3

Python 2 - 24

0;exec"_+=2;print _;"*50

(w oparciu o rozwiązanie Bitpwner i Sparr)

W powłoce „_” zawiera wartość wcześniej ocenionego wyrażenia


Należy zauważyć, że działa to tylko, jeśli wklei się w trybie interaktywnym niektórych interpreterów Pythona (np. Nie działa w IPython), a nie jako skrypt.
— Wrzlprmft,

masz rację, zapomniałem o tym wspomnieć. (btw działa w standardowej konsoli Pythona)
— le_vine

1
-1 - Pytanie wyraźnie wspomina o skrypcie python , co oznacza, że ​​kod powinien zostać zapisany w pliku i wykonany. W przeciwnym razie lepszym rozwiązaniem byłoby po prostu: range(0,102,2)ponieważ wyświetliby wszystkie liczby parzyste (plus przecinki i dwa nawiasy) na ekranie.
— Bakuriu

1

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 % 2sprawdzenie końca nawet.

print'\n'.join(`2*x`for x in range(51))

Używając mapy i sugestii @ isaacg, uzyskuje się te same 39 znaków:

print'\n'.join(map(str,range(0,101,2)))

Edycja: Po rozdzieleniu wartości znakiem nowej linii nie jest to wcale najkrótsza.


1
To nie odpowiada na pytanie - mówi OP 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.
— isaacg,

1
@isaacg Zaktualizowano, aby odpowiedzieć na pytanie, teraz znacznie dłużej, potrzeba osadzenia każdej wartości w str () dla złączenia zabija go.
— Ed Griebel,

@Wrzlprmft Dzięki za sugestię, nie wiedziałem, że mogę to zrobić! Zmieniono kod, aby odzwierciedlić tę nową wiedzę.
— Ed Griebel,

1

Python 2 - 20 (wątpliwy)

Jeśli rozwiązanie rozdzielone spacjami isaacg jest w porządku, to prawdopodobnie normalne formatowanie listy również:

print range(0,101,2)

W celu dalszego przekręcania zasad zastosuj sugestię SirBraneDamuj z komentarzy:

print range(101)

a ty masz 16 lat. A co, jeśli oddzielą je dodatkowe śmieci?

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.