Latihan Golf: Pyth [ditutup]

10

Ini adalah tantangan tentang trik dan optimalisasi yang dapat digunakan saat bermain golf di Pyth. Pegolf Pyth mungkin mengenali banyak trik yang terlibat. Namun, pendekatan dan konstruksi yang tidak dikenal mungkin terlibat, jadi lihatlah Tips Pyth serta Referensi Karakter Pyth jika Anda mengalami kesulitan. Solusi dapat diuji di sini .

Sasaran: Ada 8 masalah, masing-masing dengan cuplikan Pyth untuk Anda optimalkan. Tujuan Anda adalah menciptakan sesuatu yang setara tetapi lebih pendek. Solusi referensi total 80 byte. Tujuan Anda adalah untuk mengalahkan itu sebanyak mungkin.

Pemenang akan pergi ke kiriman yang menyelesaikan semua 8 masalah dengan jumlah total byte terkecil. Tiebreaker adalah posting sebelumnya.

Menjawab: Silakan spoiler seluruh jawaban Anda, kecuali untuk skor total Anda. Ini dimaksudkan agar Anda tidak melihat jawaban orang lain sebelum mengirimkan jawaban Anda.

Setiap pengiriman harus menjawab setiap masalah dan memberikan jumlah byte yang sesuai, tetapi jangan ragu untuk menggunakan implementasi referensi jika Anda tidak dapat memperbaikinya.

Detail: Jika pertanyaan meminta nilai atau output tertentu, qpersamaan diinginkan, jadi 1dan !0setara. Jika pertanyaan meminta pengujian apakah suatu kondisi benar, output harus benar jika kondisi itu benar dan salah jika kondisi itu salah, tetapi tidak dibatasi di luar itu. Anda tidak boleh menukar true dengan false dan false dengan true. Jika pertanyaan meminta sesuatu untuk dicetak, tidak ada yang lain yang dapat dicetak kecuali baris baru.

Semua jawaban harus valid untuk Pyth commit terbaru pada posting pertanyaan ini.

Masalah 1: Diberikan satu set dalam Q, output daftar yang mengandung elemen Q dalam urutan apa pun.

; 3 bytes
f1Q

Masalah 2: Keluarkan daftarnya [1, 1, 0, 0, 1, 1, 0].

; 9 bytes
[J1JZZJJZ

Masalah 3: Diberikan bilangan bulat positif di Q, uji apakah semua digit Q positif (bukan nol).

; 7 bytes
!f!TjQT

Masalah 4: Diberikan string dalam z, uji apakah z berisi tanda kutip - "atau '.

; 9 bytes
|}\'z}\"z

Masalah 5: Peta Q = 1 ke 'Menang', Q = 0 ke 'Dasi' dan Q = -1 ke 'Kalah'.

; 20 bytes
@["Tie""Win""Lose")Q

Masalah 6: Cetak 0123456789.

; 6 bytes
sm`dUT

Masalah 7: Diberikan string dalam z, hitung jumlah inversi.

(Indeks idan jbentuk inversi jika i < jtetapi z[i] > z[j]).

; 17 bytes
ssmm>@zd@zkrdlzUz

Masalah 8: Diberikan daftar dalam z, hitung jumlah elemen yang berdekatan berulang.

; 9 bytes
lfqFT.:z2
isaacg
sumber
@ user1737909 Jawaban itu benar. f1Qmemfilter Qpada fungsi yang selalu benar, sehingga selalu menampilkan setiap elemen set. fmengeluarkan daftar, yang memenuhi tujuan dalam pertanyaan itu.
isaacg
Saya menutup pertanyaan ini sebagai di luar topik karena tantangan multi-bagian tanpa interaksi antara bagian tidak diizinkan. meta.codegolf.stackexchange.com/a/8464/45941
Martin Ender

Jawaban:

9

52 byte

Masalah 1: 2 byte

    SQ

Masalah 2: 5 byte
    jC\f2

Masalah 3: 4 byte
    -0`Q
Masalah 4: 6 byte
    @z+N\'
Masalah 5: 17 byte
    %3>"LTWoiisene"hQ
atau
    @c3"LoseTieWin"hQ
Masalah 6: 3 byte
    pMT
Masalah 7: 9 byte
    s>R_d.cz2
Masalah 8: 6 byte
    sqVztz
Menggabungkan solusi @ xnor untuk masalah 4 dengan milik saya (keduanya 6 byte) memberikan solusi 4 byte yang bagus . Jadi 48 byte dimungkinkan.

Jakube
sumber
Anda tidak dapat menggabungkan solusi Anda dengan xnor's, karena xnor's tidak valid (lihat komentar saya pada jawabannya).
orlp
@orlp * menggabungkan semuanya kecuali hal-hal yang tidak valid ;-) Menambahkan solusi dalam posting saya.
Jakube
Ah, saya mengerti sekarang :) Tebak saya 6 byte (dan terus bertambah) lebih buruk daripada optimal.
orlp
aaah! Terima kasih! belum menyadari :). Saya akan menghapus itu.
Ven
7

54 byte

Tugas 1, 2 byte : SQ
Tugas 2, 6 byte : j102 2
Tugas 3, 5 byte : *FjQT
Tugas 4, 6 byte : @z"'\"
Tugas 5, 17 byte : @c3"LoseTieWin"hQ
Tugas 6, 4 byte : jkUT
Tugas 7, 7 byte : s>M.cz2
Tugas 8, 7 byte :sqM.:z2

orlp
sumber
Baik
golf
apakah Anda menjawab untuk tugas 4 yang valid karena pada falsey itu hanya mencetak garis kosong?
Maltysen
@Maltysen Ya, karena nilai kebenaran ""False karena not ""Benar.
orlp
3

58 byte

Tugas 1, 2 byte : SQ
Tugas 2, 5 byte : jC\f2
Tugas 3, 6 byte : !}Z Q
Tugas 4, 8 byte : |}\'z}Nz
Tugas 5, 18 byte : @c"Tie\nWin\nLose"bQ
Tugas 6, 4 byte : jkUT
Tugas 7, 9 byte : lf>FT.cz2
Tugas 8, 6 byte :sqVtzz

Maltysen
sumber
Saya tidak tahu tentang V(walaupun saya masih belum sepenuhnya memahaminya, karena Anda melakukan operasi vektor pada operan panjang yang tidak sama), jadi saya permisi untuk yang itu, tapi saya benar-benar harus memikirkan C\f= /
orlp
@ orlp Vsecara otomatis memotong input yang tidak sama
Maltysen
3

Posting ini adalah untuk akumulasi solusi terbaik di semua jawaban. Harap edit dalam solusi dan penjawab yang pertama kali menemukan solusi jika ada peningkatan.

48 byte

1. SQ- 2 byte, pertama diposting oleh @orlp
2. jC\f2- 5 byte, pertama diposting oleh @Maltysen
3. -0`Q- 4 byte, pertama diposting oleh @ Jakube
4. @z`N- 4 byte, campuran @xnor dan @Jakube, tetapi tidak di jawaban apa pun.
(Saya juga tidak melihatnya saat menulis pertanyaan)
5. @c3"LoseTieWin"hQ- 17 byte, pertama kali diposting oleh @orlp
6. pMT- 3 byte, pertama diposting oleh @Jakube
7. s>M.cz2- 7 byte, pertama diposting oleh @orlp
8. sqVtzz- 6 byte, pertama diposting oleh @Maltysen

isaacg
sumber
Apakah kita membatasi versi Pyth dari sebelum pertanyaan?
Pengoptimal
1
"Semua jawaban harus valid untuk Pyth commit terbaru pada posting pertanyaan ini." Saya akan tertarik mendengar apa yang Anda pikirkan. @Optimizer
isaacg
Pyth terus berkembang, bukan? (Pada kecepatan yang jauh lebih cepat daripada bahasa golf lainnya). Jadi sangat mungkin bahwa nomor ini (48) akan dengan mudah masuk sub 40 dalam waktu dekat. Dan karena ini adalah tantangan latihan, idealnya Anda ingin berlatih menggunakan versi Pyth terbaru untuk tantangan yang lebih baru.
Pengoptimal
2

57 byte

1. (2) SQSortir.
2. (5) jC\f2 Konversikan fke ASCII val lalu pangkalan 2.
3. (5) /`Q`0Hitung '0'dalam string angka.
4. (5) @z`\'Mengambil persimpangan set string dengan "'".
5. (18) @c"Tie Win Lose"dQMembuat daftar dengan split. Saya tidak mendapatkan irisan untuk bekerja.
6. (4) jkUTBergabunglah range(10). Rupanya dikonversi ke string secara otomatis.
7. (9) sm>d_d.:zMenghitung substring yang lebih besar dari kebalikannya.
8. (9) l@C,zz.:zPanjang perpotongan sub daftar dan pasangan elemen dalam daftar. Panjang yang sama dengan solusi referensi.

Tidak
sumber
Solusi Anda untuk # 4 tidak valid. Misalnya string te\\stadalah false positive.
orlp
@ orlp Diganti dengan solusi berbeda yang lebih pendek.
xnor