Latihan Pyth 2

21

Saatnya untuk latihan Pyth yang lain. Saya sajikan di sini 8 pernyataan masalah dengan masing-masing solusi Pyth. Solusi ini ditulis oleh pemula Pyth. Dia cukup senang dengan solusi ini, karena mereka jauh lebih pendek daripada jawaban Python-nya. Namun tugas Anda adalah untuk menunjukkan kepadanya lebih baik. Buat program yang setara tetapi lebih pendek.

Ini adalah tantangan tentang trik dan optimisasi yang dapat digunakan saat bermain golf di Pyth. Pegolf Pyth mungkin mengenali banyak trik yang terlibat, yang mengarah pada solusi yang lebih pendek. Namun beberapa masalah akan memerlukan beberapa pendekatan yang tidak biasa yang jarang digunakan. Beberapa trik yang sebenarnya tidak pernah saya lihat di alam liar. Tapi tidak ada solusi yang membutuhkan bug atau perilaku aneh, yang tidak disengaja oleh desainer Pyth. Semua jawaban harus valid untuk komit Pyth terbaru ( 2b1562b ) pada posting pertanyaan ini. Anda dapat menggunakan juru bahasa Pythuntuk pengujian. Ini mutakhir sekarang dan saya tidak mengharapkan perubahan besar dalam Pyth, yang akan membatalkan solusi optimal atau membuat solusi lebih pendek mungkin. Penerjemah online juga memiliki fitur Referensi Karakter baru. Karena ini cukup baru, Anda dapat (harus) juga menggunakan dokumen lama , jika ada sesuatu yang salah atau hilang.

Sasaran: Solusi referensi total 81 byte. Tujuan Anda adalah untuk mengalahkan itu sebanyak mungkin. Kiriman yang menyelesaikan semua 8 masalah dengan jumlah total byte terkecil akan menang. Tiebreaker adalah tanggal pengiriman.

Tentu saja hanya pengiriman yang valid, yang berisi solusi untuk semua 8 masalah. Anda dapat menggunakan implementasi referensi, jika Anda tidak dapat meningkatkan skor satu (atau lebih) masalah tertentu.

Solusi Anda harus mencetak output yang sama persis dengan solusi referensi. Kecuali untuk trailing newline opsional.

Karena ini adalah latihan Pyth, hanya program yang ditulis dalam bahasa Pyth yang diizinkan.

Menjawab: Silakan spoiler seluruh jawaban Anda, kecuali untuk skor total Anda. Ini dimaksudkan agar Anda tidak melihat jawaban orang lain sebelum mengirimkan jawaban Anda. Anda dapat membuat spoiler dengan meletakkan>! di depan setiap baris, seperti:

>! Problem 1: V9m?>dNd0S9 (11 bytes)
>! Problem 2: VTN)VGN (7 bytes)
>! ...

Saya harap saya tidak memilih masalah yang terlalu sulit atau terlalu sepele. Berharap banyak partisipan dan bagi semua orang untuk mendapatkan beberapa wawasan baru tentang Pyth. Selamat bermain golf!

Masalah 1:

Buat matriks 9x9 berikut dan cetak:

[1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 0, 3, 4, 5, 6, 7, 8, 9]
[0, 0, 0, 4, 5, 6, 7, 8, 9]
[0, 0, 0, 0, 5, 6, 7, 8, 9]
[0, 0, 0, 0, 0, 6, 7, 8, 9]
[0, 0, 0, 0, 0, 0, 7, 8, 9]
[0, 0, 0, 0, 0, 0, 0, 8, 9]
[0, 0, 0, 0, 0, 0, 0, 0, 9]

Solusi referensi ( Tautan ):

V9m?>dNd0S9 (11 bytes)

Masalah 2:

Cetak semua digit dan semua huruf pada baris yang berbeda:

0
...
9
a
...
z

Solusi referensi ( Tautan ):

VTN)VGN (7 bytes)

Masalah 3:

Temukan palindrom terkecil secara leksikografis, yang secara leksikografis lebih besar atau sama dengan string input yang mengandung huruf kecil dan sama dengan string input.

a -> a
abc -> aca
adcb -> adda

Solusi referensi ( Tautan ):

hf&gTzqT_T^Glz (14 bytes)

Masalah 4:

Periksa, apakah ada angka dalam kisaran [0, masukkan angka). Ini juga bisa digunakan untuk pelampung.

4, 6 -> True
5.5, 6 -> True
6, 6 -> False
6, 6.1 -> True

Solusi referensi ( Tautan ):

&gQ0<QE (7 bytes)

Format referensi adalah to be tested value<newline>end value. Anda dapat memilih format input yang berbeda. Hanya penting, bahwa Anda menyelesaikan pernyataan masalah dan menghasilkan hasil yang benar.

Masalah 5:

Parsing string input dari format "\ d + [a-zA-Z] +". Perhatikan bahwa nomor tersebut benar-benar harus berupa angka, bukan string yang mengandung digit.

'123Test' -> [123, 'Test']

Solusi referensi ( Tautan ):

A.ggk\Az,sGH (12 bytes)

Masalah 6:

Hitung jumlah angka, yang dipisahkan oleh satu atau beberapa koma. Anda dapat mengasumsikan bahwa setidaknya ada satu angka dalam string.

11,2,,,3,5,,8 -> 29

Solusi referensi ( Tautan ):

svM:z",+"3 (10 bytes)

Masalah 7:

Baca bilangan bulat positif dari input sampai Anda mendapatkan angka 0. Cetak jumlah semua angka.

Solusi referensi ( Tautan ):

WJE=+ZJ)Z (9 bytes)

Masalah 8:

Ringkas semua elemen dari matriks persegi, kecuali yang ada diagonal utama (sudut kiri atas ke sudut kanan bawah).

Solusi referensi ( Tautan ):

-ssQs.e@bkQ (11 bytes)
Jakube
sumber
Saya benar-benar menyukai gagasan pertanyaan khusus bahasa (dan saya telah memilih yang satu ini). Tapi saya pikir pertanyaan khusus bahasa disukai di PPCG?
Luis Mendo
3
@LuisMendo Saya pikir pertanyaan khusus bahasa hanya disukai, jika alasan di balik pertanyaan adalah ketidaksukaan umum terhadap bahasa golf seperti CJam, Pyth, ..., atau karena OP hanya mengerti bahasa tertentu. Ini di sini sedikit berbeda. Pertanyaan ini terutama dirancang untuk menunjukkan beberapa fitur yang lebih tersembunyi dari bahasa populer (pada PPCG). Di satu sisi itu seperti kumpulan trik. Tidak masuk akal untuk mengizinkannya untuk setiap bahasa. Berikut adalah Meta-post tentang topik ini: tautan
Jakube
Dalam 6, apakah bilangan bulat positif satu digit?
xnor
@ xnor Anda dapat mengasumsikan bahwa mereka positif, tetapi mereka mungkin terdiri dari lebih dari satu digit. Saya akan mengubah test case.
Jakube
1
Saya memberikan suara untuk menutup pertanyaan ini sebagai di luar topik karena ini adalah tantangan multi-bagian tanpa interaksi antara bagian-bagian
pppery

Jawaban:

9

59 58 56 byte

Masalah 1:

j.tmLdS9Z (9 byte)

Masalah 2:

MTjG (5 byte) (Karakter pertama adalah baris baru)

Masalah 3:

h.f_IZ1z (8 byte)

Masalah 4:

%IQE (4 byte)

Masalah 5:

,J.vz-zJ (8 byte)

Masalah 6:

srXz\,d7 (8 byte)

Masalah 7:

u+GE0 (5 byte)

Masalah 8:

ss.DR~hZQ (9 byte)

isaacg
sumber
2

66 byte

1. 10 byte: V9+mZN}hN9
2. 6 byte: jUT)jG
3. 8 byte: h.f_IZ1z
4. (implementasi referensi) 7 byte: &gQ0<QE
5. 11 byte: ,sK-rzZG-zK
6. 7 byte: ssMcz\,
7. 8 byte: s<.Qx.QZ
8. 9 byte:ss.eXbkZQ

Maltysen
sumber
2

68 67 66 65 byte

Tugas 1

10 byte: V9m*d>dNS9

Tugas 2

5 byte:, di \nMTjGmana \nbaris baru

Tugas 3

9 byte: h.fqZ_Z1z

Tugas 4

5 byte: qQ%QE

Tugas 5

Solusi referensi, 12 byte: A.ggk\Az,sGH

Tugas 6

7 byte: ssMcz\,

Tugas 7

8 byte: s<.Qx.Q0

Tugas 8

9 byte: ss.DVQUlQ

lirtosiast
sumber
1

54 byte

Inilah solusi yang dimaksud. Kecuali untuk tugas 8 semua solusi ditemukan.

1. j.tmLdS9Z (9 byte) menggunakan peta untuk peta kiri, transpos dan isi dengan angka nol
2. \ nMTjG (5 byte) menggunakan baris baru untuk peta
3. h.f_IZ1z (8 byte) menghasilkan string yang mungkin dengan .f
4 .% IQE (4 byte) menemukan sebuah usecase, di mana operator invarian membutuhkan 2 parameter
5., J.vz-zJ (8 byte) .v hanya mengevaluasi pernyataan pertama dari sebuah string dan mengabaikan sisanya
6. ssMcz \, ( 7 byte) s "" = 0
7. u + GE0 (5 byte) berkurang hingga mencapai angka yang diketahui
8. ss.DVQUQ (8 byte) menghapus diagonal menggunakan vektorisasi

Jakube
sumber
Sial, aku lupa Umelakukannya ldi daftar!
lirtosiast
1
Senang mengalahkan isaacg dalam bahasanya sendiri.
Stan Strum
1

 60 59  57 byte

1. 9 byte :j.tmRdS9Z


2. 6 byte :jbUTjG


3. 8 byte :h.f_IZ1z


4. 4 byte :}sEU


5. 8 byte :,K.vz-zK


6. 7 byte :ssMcz\,


7. 8 byte :s<FxB.Q0


8. 11 10 7 byte : ss.DVQU Versi sebelumnya:ss.e+<bk>bh

Perhatikan bahwa saya mengembangkan solusi ini sepenuhnya terlepas dari jawaban lain, meskipun saya cukup terlambat ke pesta.

Tuan Xcoder
sumber
Usaha yang bagus. Masalah ke-3 adalah 8 byte.
Jakube
Dan saya cukup yakin, bahwa solusi untuk masalah 8 tidak dikompilasi pada saat itu. Tapi saya belum mengujinya.
Jakube
@ Jakube Oh terima kasih telah memperhatikan!
Tn. Xcoder