Список версий Python

36

Python является самым быстрорастущим основным языком программирования сегодня. Это самый востребованный язык третий год подряд, и это означает, что разработчики, которые еще не используют его, говорят, что хотят изучать его. [1]

Причиной популярности Python являются его многочисленные версии. [править] Есть на самом деле 116 версии Python, в том числе две версии развития.

Ваша задача - вывести / распечатать список всех версий Python в любом порядке и в любом формате. Вы не можете использовать какие-либо встроенные функции, в которых хранится эта информация.

Вы можете выбрать выходной формат, но каждый вариант должен быть идентифицирован по стандартному пути: 1.1, 2.3.0, 2.7.10и так далее.

Полный список 2 версий Python, разделенных запятыми, показан ниже:

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

или по основным версиям:

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

Задача представляет собой фиксированный выходной вызов и очень близка к , за исключением того, что выходной формат является необязательным.

2 Список взят с официального сайта Python, здесь и здесь . Есть некоторые версии, которые не включены, такие как 0.9.0.. 0.9.9и 1.5.1p1. Вы должны использовать список выше, даже если вы найдете версии, которые не включены. Я решил придерживаться официальных списков, так как в противном случае кто-то, вероятно, найдет2.1.0.1.2 версию или что-то в этом роде.

Стьюи Гриффин
источник
2
Я предполагаю, что нам не разрешено выводить 1.1.0(делать все версии 3 числа) вместо 1.1?
Кевин Круйссен
2
Вы правильно угадываете @Kevin. Я подумывал разрешить это, но вместо этого пошел с официальными именами.
Стьюи Гриффин

Ответы:

17

JavaScript (ES6),  128 125  124 байтов

Сохранено 1 байт благодаря @ OlivierGrégoire

Выводит каждую версию в отдельной строке. Заказывается от старшей к младшей основной версии и от самой низкой до самой высокой версии.

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

Попробуйте онлайн!

Как?

Основные и второстепенные версии хранятся в переменной v[0..27] :

  • мажор = v/10+1
  • несовершеннолетний = vмодификация10

Ревизия проводится в переменной r0 . Максимальное значение r зависит от v и сохраняется в справочной таблице, закодированной в Base-36. Любой 0 в этой таблице означает, что эта версия не была выпущена вообще.

Кроме того, мы используем тест v>22 чтобы узнать, следует ли включать ревизию, даже когда она равна 0 (начиная с Python 3.3.0).

Arnauld
источник
5

C # (интерактивный компилятор Visual C #) , 109 байт

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));

Содержит множество непечатных документов, коды которых указаны в скобках. Это полная программа. Нулевые байты заменяются на \0s в ссылке TIO, так как мое устройство не может скопировать и вставить их.

Сохранено один байт благодаря @OlivierGregoire.

Попробуйте онлайн! (Спасибо @OlivierGregoire за внедрение нулевых байтов)

объяснение

Каждый символ в строке представляет количество второстепенных версий в основной позиции. Например, символ в индексе 5 ( ETX) имеет значение ASCII, равное трем, и соответствует основной версии1.5.x которая имеет три второстепенных версии. Программа принимает значение ascii текущего символа и повторяет его много раз, печатая второстепенные версии перед тем, как перейти к следующей основной версии.

Для некоторых версий есть пробелы в следующих версиях. Чтобы исправить это, строка содержит нулевые байты, так что программа встречает цикл ноль раз, когда встречает их.

Непечатаемая строка содержит следующие символьные значения:

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
Воплощение невежества
источник
Можно сократить j="..."[k];j-->0;, тем более что порядок не имеет значения. Также, вы можете объяснить разницу в размерах между TIO (115 байт) и записью (110 байт)?
Оливье Грегуар
@ OlivierGrégoire Вероятно, пять нулевых байтов, которые tio представляют как \ 0
Sefa
@ Да, наверное ... Но я спрашиваю об определенности.
Оливье Грегуар
@ OlivierGrégoire Точно так, как сказал Сефа, я не могу скопировать и вставить нулевые байты. Если бы \0s были заменены нулевыми байтами, это было бы 110 байтов
Embodiment of Ignorance
1
Тогда вот вам, с нулевым байтом TIO
Оливье Грегуар
4

Pyth, 52 байта

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

Попробуйте это онлайн здесь .

Вывод представляет собой вложенный список с элементами, сгруппированными по основной и вспомогательной версиям. В начале вывода есть пустой список, а после - еще один 1.6. Полный вывод выглядит следующим образом:

[[], ['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']]

Если это неприемлемо, добавьте .nкод, чтобы получить вывод в виде сплющенного списка, стоимостью 2 байта.

Sok
источник
4

Java (JDK) , 134 байта

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);}

Попробуйте онлайн!

Версии печатаются от самого высокого до самого низкого.

кредиты

Оливье Грегуар
источник
1
(a>1|b>0)&c<a.valueOf(y,36)можно a>1|b>0&&c<a.valueOf(y,36)и c<1&(a<3|b<3)?можно c<1&&a<3|b<3?сохранить 2 байта. Соответствующий совет по Java - раздел Объединение
побитовых
@KevinCruijssen Спасибо, но я сделал так много изменений, что ваши предложения теперь неактуальны ... Не знаю, как вам кредитовать, так как я даже больше не использую ваше предложение :(
Оливье Грегуар
1
Np, вместо этого я предложу новый гольф;) /10dможет быть*.1
Кевин Круйссен
1
int a=28-> int a=1и удалите условие в цикле for, затем добавьте a++для сохранения 3 байта. TIO
воплощение невежества
3

Сетчатка , 105 байт


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

Попробуйте онлайн! Слабо основано на решении @ Арно. Объяснение:


11* 111131   244655TS  2678E894

Вставьте строку, состоящую из 11 пробелов, за которыми следуют заданные символы.

L$`.
$&_$.`

Для каждого символа укажите его суффикс с _номером столбца.

T
10
E
11
S
17

Преобразуйте три буквы в числовые значения.

.+_
*

Преобразовать числовые значения в унарные.

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

Для каждого значения до заданного значения используйте его в качестве суффикса для номера версии, извлекая основной и вспомогательный из номера столбца.

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

Удалите нулевой суффикс для первых 16 версий, в которых он есть.

Нил
источник
2

Желе , 51 байт

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

Попробуйте онлайн!

Ссылка niladic, которая выводит список списков .-разделенных целых чисел, сгруппированных по основной версии. На TIO есть некоторый код нижнего колонтитула, чтобы красиво их распечатать.

Ник Кеннеди
источник
0

33 , 484 байта

"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]

Я хотел попробовать это на своем языке brainf * ck-style.

Он печатает каждую версию Python, необходимую для вызова, разделенную символами новой строки.

Вот небольшое объяснение.

[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
источник