Lista de versões do Python


36

Atualmente, o Python é a principal linguagem de programação que mais cresce. É o idioma mais procurado pelo terceiro ano consecutivo, o que significa que os desenvolvedores que ainda não o utilizam dizem querer aprender. [1]

A razão para a popularidade do Python são suas muitas versões. [citação necessário] Na verdade, existem 116 versões do Python, incluindo duas versões de desenvolvimento.

Sua tarefa é produzir / imprimir uma lista de todas as versões do Python, na ordem que você desejar e no formato que você desejar. Você não pode usar nenhuma função interna que tenha essas informações armazenadas.

Você é livre para escolher o formato de saída, mas cada versão devem ser identificadas na medida padrão: 1.1, 2.3.0, 2.7.10e assim por diante.

A lista completa 2 de versões do Python, separadas por vírgula, é mostrada abaixo:

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

ou pelas principais versões:

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

O desafio é um desafio de saída fixo e muito próximo de um , exceto que o formato de saída é opcional.

2 A lista é retirada do site oficial do Python, aqui e aqui . Existem algumas versões que não estão incluídas, como 0.9.0.. 0.9.9e 1.5.1p1. Você deve usar a lista acima, mesmo se encontrar versões que não estão incluídas. Eu decidi ficar com as listas oficiais, pois caso contrário alguém provavelmente encontraria uma 2.1.0.1.2versão ou algo assim.


2
Eu acho que não temos permissão para produzir 1.1.0(para fazer todas as versões 3 números) em vez de 1.1?
Kevin Cruijssen 16/04

2
Você adivinha corretamente @ Kevin. Eu considerei permitir, mas fui com os nomes oficiais.
Stewie Griffin

Respostas:


17

JavaScript (ES6),  128 125  124 bytes

Guardado 1 bytes graças a @ OlivierGrégoire

Produz cada versão em uma linha separada. Ordenado da versão principal mais alta para a mais baixa e da revisão mais baixa para a mais alta.

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

Experimente online!

Quão?

As versões principal e secundária são mantidas na variável :v[0..27]

  • maior = v/10+1
  • vmod10

A revisão é realizada na variável . O valor máximo de depende de é armazenado em uma tabela de pesquisa codificada na Base-36. Qualquer nesta tabela significa que esta versão não foi lançada.r0 0rv0 0

Além disso, usamos o teste para saber se a revisão deve ser incluída mesmo quando é (iniciando no Python 3.3.0).v>220 0


5

C # (compilador interativo do Visual C #) , 109 bytes

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

Contém muitos não imprimíveis, cujos códigos são mostrados entre colchetes. Este é um programa completo. Os bytes nulos são substituídos por \0s no link TIO, pois meu dispositivo não pode copiá-los e colá-los.

Guardou um byte graças a @OlivierGregoire.

Experimente online! (Obrigado a @OlivierGregoire por implantar os bytes nulos)

Explicação

Cada caractere na sequência representa quantas versões secundárias na posição principal. Por exemplo, o caractere no índice 5 ( ETX) tem um valor ASCII de três e corresponde à versão principal 1.5.xque possui três versões secundárias. O programa pega o valor ascii do caractere atual e faz o loop várias vezes, imprimindo as versões secundárias antes de passar para a próxima versão principal.

Para algumas versões, existem lacunas nas próximas versões. Para corrigir isso, a cadeia contém bytes nulos, para que o programa faça um loop zero vezes quando os encontrar.

A sequência não imprimível contém estes valores de caracteres:

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

Pode ser encurtado j="..."[k];j-->0;, principalmente porque o pedido não tem importância. Além disso, você pode explicar a diferença de tamanho entre o TIO (115 bytes) e a entrada (110 bytes)?
Olivier Grégoire

@ OlivierGrégoire Provavelmente os cinco bytes nulos que tio representam como \ 0
Sefa 17/04

@ Sefa sim, provavelmente ... Mas estou pedindo certeza.
Olivier Grégoire

@ OlivierGrégoire Exatamente o que Sefa disse, não consigo copiar e colar os bytes nulos. Se os \0s fossem substituídos por bytes nulos, seriam 110 bytes
Modalidade de ignorância

1
Então, aqui está você, com um TIO de nul byte
Olivier Grégoire

4

Pitão, 52 bytes

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

Experimente online aqui .

Saída é uma lista aninhada, com elementos agrupados por versão principal e secundária. Há uma lista vazia no início da saída e outra depois 1.6. A saída total é a seguinte:

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

Se isso não for aceitável, acrescente .nao código a saída como uma lista nivelada, a um custo de 2 bytes.


4

Java (JDK) , 134 bytes

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

Experimente online!

As versões são impressas da mais alta para a mais baixa.

Créditos


1
(a>1|b>0)&c<a.valueOf(y,36)pode ser a>1|b>0&&c<a.valueOf(y,36)e c<1&(a<3|b<3)?pode ser c<1&&a<3|b<3?para salvar 2 bytes. Dica Java relevante - seção Combinando verificações bit a bit e lógicas em vez de usar parênteses
Kevin Cruijssen 17/04

@KevinCruijssen Obrigado, mas fiz tantas alterações que suas sugestões agora são irrelevantes ... Não sei como creditar você, pois eu nem uso mais sua sugestão :(
Olivier Grégoire

1
Np, em vez disso, vou sugerir um novo golfe;) /10dpode ser*.1
Kevin Cruijssen 17/04

1
int a=28-> int a=1e remova a condição no loop for e adicione um a++para salvar 3 bytes. TIO
Modalidade de Ignorância


3

Retina , 105 bytes


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

Experimente online! Basicamente baseado na solução da @ Arnauld. Explicação:


11* 111131   244655TS  2678E894

Insira a sequência que consiste em 11 espaços seguidos pelos caracteres fornecidos.

L$`.
$&_$.`

Para cada caractere, liste o sufixo com a _e seu número da coluna.

T
10
E
11
S
17

Converta as três letras em valores numéricos.

.+_
*

Converta os valores numéricos em unário.

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

Para cada valor até o valor especificado, use-o como sufixo para o número da versão, extraindo o maior e o menor do número da coluna.

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

Exclua o sufixo zero para as 16 primeiras versões que possuem um.


2

Geléia , 51 bytes

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

Experimente online!

Um link niládico que gera uma lista de listas de .números inteiros separados, agrupados por versão principal. No TIO, há algum código de rodapé para imprimi-las lindamente.


0

33 , 484 bytes

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

Eu queria experimentar isso na minha linguagem cerebral.

Ele imprime cada versão python necessária para o desafio, delimitada por novas linhas.

Aqui está uma pequena explicação.

[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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.