Lista wersji Python

36

Python jest obecnie najszybciej rozwijającym się głównym językiem programowania. Jest to najbardziej poszukiwany język trzeci rok z rzędu, co oznacza, że ​​programiści, którzy jeszcze go nie używają, twierdzą, że chcą się go nauczyć. [1]

Powodem popularności Pythona jest jego wiele wersji. [potrzebne źródło] Istnieje w rzeczywistości 116 wersji Pythona, w tym dwie wersje programistyczne.

Twoim zadaniem jest wydrukowanie / wydrukowanie listy wszystkich wersji Pythona, w dowolnej kolejności i dowolnym formacie. Nie możesz używać żadnych wbudowanych funkcji, które przechowują te informacje.

Jesteś wolny, aby wybrać format wyjściowy, ale każda wersja muszą być identyfikowane w standardowy sposób: 1.1, 2.3.0, 2.7.10i tak dalej.

Pełna lista 2 wersji Pythona, oddzielonych przecinkami, pokazano poniżej:

1.1, 1.2, 1.3, 1.4, 1.5, 1.5.1, 1.5.2, 1.6, 2.0, 2.0.1, 2.1, 2.1.1, 2.1.2, 2.1.3, 2.2, 2.2.1, 2.2.2, 2.2.3, 2.3, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.3.5, 2.4, 2.4.1, 2.4.2, 2.4.3, 2.4.4, 2.5, 2.5.1, 2.5.2, 2.5.3, 2.5.4, 2.6, 2.6.1, 2.6.2, 2.6.3, 2.6.4, 2.6.5, 2.6.6, 2.6.7, 2.6.8, 2.6.9, 2.7, 2.7.1, 2.7.2, 2.7.3, 2.7.4, 2.7.5, 2.7.6, 2.7.7, 2.7.8, 2.7.9, 2.7.10, 2.7.11, 2.7.12, 2.7.13, 2.7.14, 2.7.15, 2.7.16, 3.0, 3.0.1, 3.1, 3.1.1, 3.1.2, 3.1.3, 3.1.4, 3.1.5, 3.2 , 3.2.1, 3.2.2, 3.2.3, 3.2.4, 3.2.5, 3.2.6, 3.3.0, 3.3.1, 3.3.2, 3.3.3, 3.3.4, 3.3.5, 3.3.6, 3.3.7, 3.4.0, 3.4.1, 3.4.2, 3.4.3, 3.4.4, 3.4.5, 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, 3.5.3, 3.5.4, 3.5.5, 3.5.6, 3.5.7, 3.6.0, 3.6.1, 3.6.2, 3.6.3, 3.6.4, 3.6.5, 3.6.6, 3.6.7, 3.6.8, 3.7.0, 3.7.1, 3.7.2, 3.7.3

lub według głównych wersji:

1.1
1.2
1.3
1.4
1.5, 1.5.1, 1.5.2
1.6
2.0, 2.0.1
2.1, 2.1.1, 2.1.2, 2.1.3
2.2, 2.2.1, 2.2.2, 2.2.3
2.3, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.3.5
2.4, 2.4.1, 2.4.2, 2.4.3, 2.4.4
2.5, 2.5.1, 2.5.2, 2.5.3, 2.5.4
2.6, 2.6.1, 2.6.2, 2.6.3, 2.6.4, 2.6.5, 2.6.6, 2.6.7, 2.6.8, 2.6.9
2.7, 2.7.1, 2.7.2, 2.7.3, 2.7.4, 2.7.5, 2.7.6, 2.7.7, 2.7.8, 2.7.9, 2.7.10, 2.7.11, 2.7.12, 2.7.13, 2.7.14, 2.7.15, 2.7.16
3.0, 3.0.1
3.1, 3.1.1, 3.1.2, 3.1.3, 3.1.4, 3.1.5
3.2, 3.2.1, 3.2.2, 3.2.3, 3.2.4, 3.2.5, 3.2.6
3.3.0, 3.3.1, 3.3.2, 3.3.3, 3.3.4, 3.3.5, 3.3.6, 3.3.7
3.4.0, 3.4.1, 3.4.2, 3.4.3, 3.4.4, 3.4.5, 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10 
3.5.0, 3.5.1, 3.5.2, 3.5.3, 3.5.4, 3.5.5, 3.5.6, 3.5.7
3.6.0, 3.6.1, 3.6.2, 3.6.3, 3.6.4, 3.6.5, 3.6.6, 3.6.7, 3.6.8
3.7.0, 3.7.1, 3.7.2, 3.7.3

Wyzwanie jest stałym wyzwaniem wyjściowym i bardzo zbliżonym do , z wyjątkiem tego, że format wyjściowy jest opcjonalny.

2 Lista pochodzi z oficjalnej strony Python, tu i tutaj . Niektóre wersje nie są uwzględnione, takie jak 0.9.0.. 0.9.9i 1.5.1p1. Musisz użyć powyższej listy, nawet jeśli znajdziesz wersje, które nie zostały uwzględnione. Postanowiłem trzymać się oficjalnych list, ponieważ w przeciwnym razie ktoś prawdopodobnie znalazłby 2.1.0.1.2wersję lub coś takiego.

Stewie Griffin
źródło
2
Wydaje mi się, że nie wolno nam wypisywać danych 1.1.0(aby wszystkie wersje miały 3 liczby) zamiast 1.1?
Kevin Cruijssen
2
Zgadujesz poprawnie @Kevin. Rozważałem na to pozwolenie, ale zamiast tego poszedłem z oficjalnymi nazwami.
Stewie Griffin

Odpowiedzi:

17

JavaScript (ES6),  128 125  124 bajtów

Zaoszczędzono 1 bajt dzięki @ OlivierGrégoire

Wyświetla każdą wersję w osobnym wierszu. Zamówienie od najwyższej do najniższej wersji głównej i od najniższej do najwyższej wersji.

f=(r=v=28)=>v?r<parseInt('0111131000244655ah002678b8940'[v],36)?(1+v/10).toFixed(1)+(r|v>22?'.'+r:'')+`
`+f(r+1):f(+!v--):''

Wypróbuj online!

W jaki sposób?

przeciwko[0..27]

  • przeciwko/10+1
  • przeciwkomod10

r0rprzeciwko0

przeciwko>220

Arnauld
źródło
5

C # (interaktywny kompilator Visual C #) , 109 bajtów

for(int j,k=1;;k++)for(j=@" [SOH][SOH][SOH][SOH][ETX][SOH][NUL][NUL][NUL][STX][EOT][EOT][ACK][ENQ][ENQ]
[DC1][NUL][NUL][STX][ACK][BEL][BS][VT][BS][TAB][EOT]"[k];j-->0;)Print($"{k*.1+1:N1}"+(j<1&k<17?"":"."+j));

Zawiera wiele niedrukowalnych, których kody są pokazane w nawiasach. To jest pełny program. Puste bajty są zastępowane przez \0s w łączu TIO, ponieważ moje urządzenie nie może ich skopiować i wkleić.

Oszczędność jednego bajtu dzięki @OlivierGregoire.

Wypróbuj online! (Podziękowania dla @OlivierGregoire za wszczepienie bajtów zerowych)

Wyjaśnienie

Każdy znak w ciągu reprezentuje liczbę mniejszych wersji na głównej pozycji. Na przykład znak o indeksie 5 ( ETX) ma wartość ASCII równą trzy i odpowiada głównej wersji, 1.5.xktóra ma trzy mniejsze wersje. Program pobiera wartość ascii bieżącego znaku i zapętla ją wiele razy, drukując wersje pomniejsze przed przejściem do następnej wersji głównej.

W niektórych wersjach istnieją luki w następnych wersjach. Aby to naprawić, ciąg zawiera puste bajty, dzięki czemu program zapętla zero razy, gdy je napotka.

Niedrukowalny ciąg zawiera następujące wartości znaków:

1,1,1,1,3,1,0,0,0,2,4,4,6,5,5,10,17,0,0,2,6,7,8,11,8,9,4
Wcielenie ignorancji
źródło
Można go skrócić j="..."[k];j-->0;, zwłaszcza, że ​​zamówienie nie ma znaczenia. Czy potrafisz także wyjaśnić różnicę wielkości między TIO (115 bajtów) a wpisem (110 bajtów)?
Olivier Grégoire
@ OlivierGrégoire Prawdopodobnie pięć pustych bajtów, które tio reprezentują jako \ 0
Sefa
@Sefa tak, prawdopodobnie ... Ale proszę o pewność.
Olivier Grégoire
@ OlivierGrégoire Dokładnie to, co powiedziała Sefa, tak naprawdę nie mogę skopiować-wkleić pustych bajtów. Gdyby \0s zostały zastąpione bajtami zerowymi, byłoby to 110 bajtów
Embodiment of Ignorance
1
A więc oto jesteś, z nieokreślonym TIO
Olivier Grégoire
4

Pyth, 52 bajty

.emj\.+W|d>k18,h/k8%k8dbxLG"abbbbdbaceegffkrcghilije

Wypróbuj online tutaj .

Dane wyjściowe to zagnieżdżona lista z elementami pogrupowanymi według wersji głównej i podrzędnej. Na początku danych wyjściowych jest pusta lista, a po niej następna 1.6. Pełna wydajność jest następująca:

[[], ['1.1'], ['1.2'], ['1.3'], ['1.4'], ['1.5', '1.5.1', '1.5.2'], ['1.6'], [], ['2.0', '2.0.1'], ['2.1', '2.1.1', '2.1.2', '2.1.3'], ['2.2', '2.2.1', '2.2.2', '2.2.3'], ['2.3', '2.3.1', '2.3.2', '2.3.3', '2.3.4', '2.3.5'], ['2.4', '2.4.1', '2.4.2', '2.4.3', '2.4.4'], ['2.5', '2.5.1', '2.5.2', '2.5.3', '2.5.4'], ['2.6', '2.6.1', '2.6.2', '2.6.3', '2.6.4', '2.6.5', '2.6.6', '2.6.7', '2.6.8', '2.6.9'], ['2.7', '2.7.1', '2.7.2', '2.7.3', '2.7.4', '2.7.5', '2.7.6', '2.7.7', '2.7.8', '2.7.9', '2.7.10', '2.7.11', '2.7.12', '2.7.13', '2.7.14', '2.7.15', '2.7.16'], ['3.0', '3.0.1'], ['3.1', '3.1.1', '3.1.2', '3.1.3', '3.1.4', '3.1.5'], ['3.2', '3.2.1', '3.2.2', '3.2.3', '3.2.4', '3.2.5', '3.2.6'], ['3.3.0', '3.3.1', '3.3.2', '3.3.3', '3.3.4', '3.3.5', '3.3.6', '3.3.7'], ['3.4.0', '3.4.1', '3.4.2', '3.4.3', '3.4.4', '3.4.5', '3.4.6', '3.4.7', '3.4.8', '3.4.9', '3.4.10'], ['3.5.0', '3.5.1', '3.5.2', '3.5.3', '3.5.4', '3.5.5', '3.5.6', '3.5.7'], ['3.6.0', '3.6.1', '3.6.2', '3.6.3', '3.6.4', '3.6.5', '3.6.6', '3.6.7', '3.6.8'], ['3.7.0', '3.7.1', '3.7.2', '3.7.3']]

Jeśli nie jest to do przyjęcia, wstaw .nsię do kodu, aby uzyskać wynik w postaci spłaszczonej listy, kosztem 2 bajtów.

Sok
źródło
4

Java (JDK) , 134 bajty

v->{for(int a=0,b;;)for(b="0111131000244655:A002678;894".charAt(++a)-48;b-->0;)System.out.printf("%.1f%s ",a*.1+1,b<1&a<23?"":"."+b);}

Wypróbuj online!

Wersje są drukowane od najwyższej do najniższej.

Kredyty

Olivier Grégoire
źródło
1
(a>1|b>0)&c<a.valueOf(y,36)można a>1|b>0&&c<a.valueOf(y,36)i c<1&(a<3|b<3)?można c<1&&a<3|b<3?zapisać 2 bajty. Odpowiednia wskazówka Java - sekcja Łączenie bitowych i logicznych kontroli zamiast używania nawiasów
Kevin Cruijssen
@KevinCruijssen Dziękuję, ale wprowadziłem tak wiele zmian, że twoje sugestie są teraz nieistotne ... Nie wiem, jak Ci się przyznać, ponieważ nawet nie używam już Twojej sugestii :(
Olivier Grégoire
1
Np, zamiast tego zasugeruję nowego golfa;) /10dmoże być*.1
Kevin Cruijssen
1
int a=28-> int a=1i usuń warunek z pętli for, a następnie dodaj, a++aby zapisać 3 bajty. TIO
Embodiment of Ignorance
3

Siatkówka , 105 bajtów


11* 111131   244655TS  2678E894
L$`.
$&_$.`
T
10
E
11
S
17
.+_
*
Lv$`_+(.)(.)
$1.$2.$.%`
,16`(...)\.0
$1

Wypróbuj online! Luźno oparty na rozwiązaniu @ Arnauld. Wyjaśnienie:


11* 111131   244655TS  2678E894

Wstaw ciąg składający się z 11 spacji i podanych znaków.

L$`.
$&_$.`

Dla każdego znaku wypisz go z a _oraz numerem kolumny.

T
10
E
11
S
17

Konwertuj trzy litery na wartości liczbowe.

.+_
*

Konwertuj wartości liczbowe na jednoargumentowe.

Lv$`_+(.)(.)
$1.$2.$.%`

Dla każdej wartości do podanej wartości użyj tego jako sufiksu numeru wersji, wyodrębniając major i minor z numeru kolumny.

,16`(...)\.0
$1

Usuń sufiks zero dla pierwszych 16 wersji, które go mają.

Neil
źródło
2

Galaretka , 51 bajtów

+⁵D;ⱮḶ}j€”.
“øṄƇịɱ⁽Ɱj>⁶7,Ẉ¢’b18Ė0ị$Ƈç/€ḣ3$€1¦€17R¤¦

Wypróbuj online!

Łącze niladyczne, które wyświetla listę list .oddzielnych liczb całkowitych, pogrupowanych według wersji głównej. W TIO jest trochę stopki, by ładnie je wydrukować.

Nick Kennedy
źródło
0

33 , 484 bajty

"1."es[lz1azpois4m]"1.5"pi"1.5."z1apoiapoi"1.6"pi"2.0"pip".1"pizcz"2.1"''pie"."e''es[lz1azpois3m]"2.2"''pie"."et''es[lz1azpois3m]"2.3"''pie"."et''es[lz1azpois5m]"2.4"''pie"."et''es[lz1azpois4m]"2.5"''pie"."et''es[lz1azpois4m]"2.6"''pie"."et''es[lz1azpois9m]"2.7"''pie"."et''es[lz1azpois16m]"3.0"pip".1"pi"3.1"''pie"."et''es[lz1azpois5m]"3.2"''pie"."et''es[lz1azpois6m]"3.3."''es[lzpoi1azs8m]"3.4."''es[lzpoi1azs11m]"3.5."''es[lzpoi1azs8m]"3.6."''es[lzpoi1azs9m]"3.7."''es[lzpoi1azs4m]

Chciałem to wypróbować w moim języku w stylu brainf * ck.

Drukuje każdą wersję Pythona wymaganą dla wyzwania, oddzieloną znakami nowej linii.

Oto małe wyjaśnienie.

[lz1azpois4m] | Imitates a for loop starting at 1
[  1az    4m] | For i in range 1 through 4
      p       | - Print the string declared previously (1.5., 3.4., etc.)
       o      | - Print the current value of i
        i     | - Print a newline

[lzpoi1azs8m] | Imitates a for loop starting at 0
[     1az 8m] | For i in range 0 through 7
   poi        | Print the version
TheOnlyMrCat
źródło