Elenco delle versioni di Python


36

Python è oggi il principale linguaggio di programmazione in più rapida crescita. È la lingua più ricercata per il terzo anno consecutivo, il che significa che gli sviluppatori che non la usano ancora dicono di volerlo imparare. [1]

Il motivo della popolarità di Python sono le sue numerose versioni. [citazione necessaria] Esistono infatti 116 versioni di Python, incluse due versioni di sviluppo.

Il tuo compito è produrre / stampare un elenco di tutte le versioni di Python, nell'ordine che preferisci e in qualunque formato ti piaccia. Non è possibile utilizzare alcuna funzione integrata che abbia queste informazioni memorizzate.

Siete liberi di scegliere il formato di output, ma ogni versione deve essere identificata in modo standard: 1.1, 2.3.0, 2.7.10e così via.

L'elenco completo 2 delle versioni di Python, separato da virgole è mostrato di seguito:

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 dalle versioni principali:

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

La sfida è una sfida di output fissa e molto simile a una , tranne per il fatto che il formato di output è facoltativo.

2 L'elenco è tratto dal sito Web ufficiale di Python, qui e qui . Esistono alcune versioni non incluse, come 0.9.0.. 0.9.9e 1.5.1p1. Devi usare l'elenco sopra, anche se trovi versioni che non sono incluse. Ho deciso di attenermi agli elenchi ufficiali, poiché altrimenti qualcuno avrebbe probabilmente trovato una 2.1.0.1.2versione o qualcosa del genere.


2
Suppongo che non ci sia permesso di produrre 1.1.0(per rendere tutte le versioni 3 numeri) invece di 1.1?
Kevin Cruijssen,

2
Indovina correttamente @Kevin. Ho pensato di permetterlo, ma invece ho scelto i nomi ufficiali.
Stewie Griffin,

Risposte:


17

JavaScript (ES6),  128 125  124 byte

Salvato 1 byte grazie a @ OlivierGrégoire

Emette ciascuna versione su una riga separata. Ordinato dalla versione principale dalla più alta alla più bassa e dalla revisione dalla più bassa alla più 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--):''

Provalo online!

Come?

Le versioni principali e secondarie sono contenute nella variabile v[0..27] :

  • major = v/10+1
  • minore = vmod10

La revisione è mantenuta nella variabile r0 . Il valore massimo di r dipende da v ed è memorizzato in una tabella di ricerca codificata in Base-36. Qualsiasi 0 in questa tabella indica che questa versione non è stata rilasciata affatto.

Inoltre, usiamo il test v>22 per sapere se la revisione dovrebbe essere inclusa anche quando è 0 (a partire da Python 3.3.0).


5

C # (compilatore interattivo Visual C #) , 109 byte

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

Contiene molti non stampabili, i cui codici sono indicati tra parentesi. Questo è un programma completo. I byte null sono sostituiti da \0s nel collegamento TIO, poiché il mio dispositivo non è in grado di copiarli e incollarli.

Salvato un byte grazie a @OlivierGregoire.

Provalo online! (Grazie a @OlivierGregoire per aver impiantato i byte null)

Spiegazione

Ogni carattere nella stringa rappresenta il numero di versioni minori nella posizione principale. Ad esempio, il carattere all'indice 5 ( ETX) ha un valore ASCII di tre e corrisponde alla versione principale1.5.x che ha tre versioni secondarie. Il programma prende il valore ASCII del personaggio attuale e lo fa ripetutamente, stampando le versioni minori prima di passare alla versione principale successiva.

Per alcune versioni, ci sono lacune nelle versioni successive. Per risolvere il problema, la stringa contiene byte nulli, in modo che il programma esegua un ciclo zero volte quando incontra quelli.

La stringa non stampabile contiene questi valori di carattere:

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

Può essere abbreviato j="..."[k];j-->0;, soprattutto perché l'ordine non ha importanza. Inoltre, puoi spiegare la differenza di dimensioni tra il TIO (115 byte) e la voce (110 byte)?
Olivier Grégoire,

@ OlivierGrégoire Probabilmente i cinque byte null che tio rappresentano come \ 0
Sefa

@Sefa sì, probabilmente ... Ma sto chiedendo certezza.
Olivier Grégoire,

@ OlivierGrégoire Esattamente quello che ha detto Sefa, non posso davvero copiare e incollare i byte null. Se le \0s fossero sostituite da byte nulli, sarebbero 110 byte
Incarnazione dell'ignoranza il

1
Quindi, eccoti qui, con un TIO nul-byte
Olivier Grégoire il

4

Pyth, 52 byte

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

Provalo online qui .

L'output è un elenco nidificato, con elementi raggruppati per versione principale e secondaria. C'è un elenco vuoto all'inizio dell'output e un altro dopo 1.6. L'output completo è il seguente:

[[], ['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 questo non è accettabile, anteponi .nal codice per avere un output come un elenco appiattito, al costo di 2 byte.


4

Java (JDK) , 134 byte

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

Provalo online!

Le versioni sono stampate dal più alto al più basso.

Crediti


1
(a>1|b>0)&c<a.valueOf(y,36)può essere a>1|b>0&&c<a.valueOf(y,36)e c<1&(a<3|b<3)?può essere c<1&&a<3|b<3?per salvare 2 byte. Suggerimento Java pertinente - sezione Combinazione di controlli logici e bit-bit invece di utilizzare la parentesi
Kevin Cruijssen,

@KevinCruijssen Grazie, ma ho apportato così tante modifiche che i tuoi suggerimenti sono ora irrilevanti ... Non so come accreditarti poiché non uso più nemmeno il tuo suggerimento :(
Olivier Grégoire

1
Np, invece suggerirò un nuovo golf;) /10dpuò essere*.1
Kevin Cruijssen il

1
int a=28-> int a=1e rimuovere la condizione nel ciclo for, quindi aggiungere un a++per salvare 3 byte. TIO
Incarnazione dell'ignoranza il


3

Retina , 105 byte


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

Provalo online! Liberamente basato sulla soluzione di @ Arnauld. Spiegazione:


11* 111131   244655TS  2678E894

Inserisci la stringa composta da 11 spazi seguiti dai caratteri indicati.

L$`.
$&_$.`

Per ogni carattere, elencalo con il suffisso a _e il suo numero di colonna.

T
10
E
11
S
17

Converti le tre lettere in valori numerici.

.+_
*

Converti i valori numerici in unari.

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

Per ogni valore fino al valore dato, utilizzalo come suffisso per il numero di versione, estraendo il maggiore e il minore dal numero di colonna.

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

Elimina il suffisso zero per le prime 16 versioni che ne hanno una.


2

Gelatina , 51 byte

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

Provalo online!

Un collegamento niladico che genera un elenco di elenchi di .numeri interi separati, raggruppati per versione principale. Su TIO, c'è un po 'di codice a piè di pagina per stampare questi graziosamente.


0

33 , 484 byte

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

Volevo provarlo nel mio linguaggio in stile cervello * ck.

Stampa ogni versione di Python richiesta per la sfida, delimitata da nuove righe.

Ecco una piccola spiegazione

[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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.