Daftar versi Python

36

Python adalah bahasa pemrograman utama yang paling cepat berkembang saat ini. Ini adalah bahasa yang paling dicari untuk tahun ketiga berturut-turut, artinya pengembang yang belum menggunakannya mengatakan bahwa mereka ingin mempelajarinya. [1]

Alasan popularitas Python adalah banyak versinya. [Rujukan?] Sebenarnya ada 116 versi Python, termasuk dua versi pengembangan.

Tugas Anda adalah menampilkan / mencetak daftar semua versi Python, dalam urutan apa pun yang Anda suka, dan pada format apa pun yang Anda suka. Anda tidak boleh menggunakan fungsi bawaan yang menyimpan informasi ini.

Anda bebas untuk memilih format output, tetapi setiap versi harus diidentifikasi pada cara standar: 1.1, 2.3.0, 2.7.10dan sebagainya.

Daftar lengkap 2 versi Python, yang dipisahkan koma ditunjukkan di bawah ini:

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

atau menurut versi utama:

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

Tantangannya adalah tantangan keluaran tetap, dan sangat dekat dengan , kecuali bahwa format keluaran adalah opsional.

2 Daftar ini diambil dari situs web resmi Python, di sini dan di sini . Ada beberapa versi yang tidak termasuk, seperti 0.9.0.. 0.9.9dan 1.5.1p1. Anda harus menggunakan daftar di atas, bahkan jika Anda menemukan versi yang tidak termasuk. Saya telah memutuskan untuk tetap dengan daftar resmi, karena jika tidak, seseorang mungkin akan menemukan 2.1.0.1.2versi atau sesuatu seperti itu.

Stewie Griffin
sumber
2
Saya kira kita tidak diizinkan untuk menghasilkan 1.1.0(membuat semua versi 3 angka), bukan 1.1?
Kevin Cruijssen
2
Anda menebak dengan benar @Kevin. Saya mempertimbangkan untuk mengizinkannya, tetapi pergi dengan nama resmi sebagai gantinya.
Stewie Griffin

Jawaban:

17

JavaScript (ES6),  128 125  124 byte

Disimpan 1 byte berkat @ OlivierGrégoire

Output setiap versi pada baris terpisah. Dipesan dari versi utama tertinggi ke terendah, dan dari terendah ke revisi tertinggi.

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

Cobalah online!

Bagaimana?

Versi mayor dan minor disimpan dalam variabel v[0..27] :

  • mayor = v/10+1
  • minor = vmod10

Revisi dilakukan dalam variabel . Nilai maksimum r tergantung pada v dan disimpan dalam tabel pencarian yang dikodekan dalam Basis-36. Setiap 0 dalam tabel ini berarti bahwa versi ini tidak dirilis sama sekali.r0rv0

Selain itu, kami menggunakan tes v>22 untuk mengetahui apakah revisi harus disertakan bahkan ketika itu 0 (dimulai dengan Python 3.3.0).

Arnauld
sumber
5

C # (Visual C # Interactive Compiler) , 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));

Berisi banyak unsintables, yang kodenya ditampilkan di dalam tanda kurung. Ini adalah program lengkap. Bytes nol digantikan oleh \0s di tautan TIO, karena perangkat saya tidak dapat menyalin dan menempelkannya.

Disimpan satu byte berkat @OlivierGregoire.

Cobalah online! (Terima kasih kepada @OlivierGregoire karena menanamkan byte nol)

Penjelasan

Setiap karakter dalam string mewakili berapa banyak versi minor di posisi utama. Misalnya, karakter pada indeks 5 ( ETX) memiliki nilai ASCII tiga, dan sesuai dengan versi utama 1.5.xyang memiliki tiga versi minor. Program ini mengambil nilai ascii dari karakter saat ini dan mengulanginya berkali-kali, mencetak versi minor sebelum pindah ke versi utama berikutnya.

Untuk beberapa versi, ada celah untuk versi berikutnya. Untuk memperbaikinya, string berisi null bytes, sehingga program loop nol kali ketika bertemu dengan itu.

String yang tidak dapat dicetak berisi nilai karakter ini:

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
Perwujudan Ketidaktahuan
sumber
Dapat dipersingkat j="..."[k];j-->0;, terutama karena urutannya tidak penting. Juga, dapatkah Anda menjelaskan perbedaan ukuran antara TIO (115 byte) dan entri (110 byte)?
Olivier Grégoire
@ OlivierGrégoire Mungkin lima byte nol yang tio wakili sebagai \ 0
Sefa
@Efa ya, mungkin ... Tapi saya meminta kepastian.
Olivier Grégoire
@ OlivierGrégoire Persis seperti yang Sefa katakan, saya tidak bisa benar-benar menyalin-paste byte nol. Jika \0s digantikan oleh byte nol, itu akan menjadi 110 byte
Perwujudan Ketidaktahuan
1
Lalu, inilah Anda, dengan TIO nul byte
Olivier Grégoire
4

Pyth, 52 byte

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

Cobalah online di sini .

Output adalah daftar bersarang, dengan elemen dikelompokkan berdasarkan versi mayor dan minor. Ada daftar kosong di awal output, dan satu lagi setelah 1.6. Output penuh adalah sebagai berikut:

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

Jika ini tidak dapat diterima, tambahkan dulu .nkode untuk menghasilkan output sebagai daftar yang diratakan, dengan biaya 2 byte.

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

Cobalah online!

Versi dicetak dari yang tertinggi ke yang terendah.

Kredit

Olivier Grégoire
sumber
1
(a>1|b>0)&c<a.valueOf(y,36)bisa a>1|b>0&&c<a.valueOf(y,36)dan c<1&(a<3|b<3)?bisa c<1&&a<3|b<3?menghemat 2 byte. Tip Java yang relevan - bagian Menggabungkan pemeriksaan bit-bijaksana dan logis alih-alih menggunakan tanda kurung
Kevin Cruijssen
@KevinCruijssen Terima kasih, tapi saya telah melakukan begitu banyak perubahan sehingga saran Anda sekarang tidak relevan ... Tidak tahu bagaimana cara menghargai Anda karena saya bahkan tidak lagi menggunakan saran Anda :(
Olivier Grégoire
1
Np, sebagai gantinya saya akan menyarankan golf baru;) /10ddapat*.1
Kevin Cruijssen
1
int a=28-> int a=1, dan hapus kondisi pada for loop, lalu tambahkan a++untuk menyimpan 3 byte. TIO
Perwujudan Ketidaktahuan
@EmbodimentofIgnorance Karena REPL tampaknya diterima dalam tantangan ini, itu memang bisa diterima. Terima kasih!
Olivier Grégoire
3

Retina , 105 byte


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

Cobalah online! Secara longgar didasarkan pada solusi @ Arnauld. Penjelasan:


11* 111131   244655TS  2678E894

Masukkan string yang terdiri dari 11 spasi diikuti oleh karakter yang diberikan.

L$`.
$&_$.`

Untuk setiap karakter, buatlah daftar dengan akhiran _dan nomor kolomnya.

T
10
E
11
S
17

Ubah ketiga huruf menjadi nilai numerik.

.+_
*

Konversikan nilai numerik menjadi unary.

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

Untuk setiap nilai hingga nilai yang diberikan, gunakan itu sebagai akhiran untuk nomor versi, mengekstraksi nilai mayor dan minor dari nomor kolom.

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

Hapus akhiran nol untuk 16 versi pertama yang memilikinya.

Neil
sumber
2

Jelly , 51 byte

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

Cobalah online!

Tautan niladik yang menampilkan daftar daftar .bilangan bulat terpisahkan, dikelompokkan berdasarkan versi utama. Di TIO, ada beberapa kode footer untuk mencetak ini dengan cantik.

Nick Kennedy
sumber
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]

Saya ingin mencobanya dalam bahasa gaya otak saya.

Ini mencetak setiap versi python yang diperlukan untuk tantangan, dibatasi oleh baris baru.

Inilah sedikit penjelasan.

[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
sumber