Sebagai penggemar tim sepak bola BE paling sukses , menjelang akhir musim saya sering bertanya-tanya apakah tim favorit saya masih memiliki peluang teoretis yang tersisa untuk menjadi juara. Tugas Anda dalam tantangan ini adalah menjawab pertanyaan itu untuk saya.
Memasukkan
Anda akan menerima tiga input: tabel saat ini, daftar pertandingan yang tersisa, dan posisi tim saat ini yang kami minati.
Input 1: The meja saat ini , urutan nomor adalah saya nomor -th adalah poin yang diperoleh oleh tim saya sejauh ini. Misalnya, input
[93, 86, 78, 76, 75]
menyandikan tabel berikut (hanya kolom terakhir yang penting):
Input 2 : Pertandingan yang tersisa , urutan tuple di mana masing-masing tuple ( i , j ) mewakili pertandingan yang tersisa antara tim i dan j . Dalam contoh di atas, input kedua [(1,2), (4,3), (2,3), (3,2), (1,2)]
berarti bahwa kecocokan yang tersisa adalah:
Chelsea vs Tottenham, Liverpool vs Man. City, Tottenham vs Man. City, Man. City vs Tottenham, Chelsea vs Tottenham
Input 3: The posisi saat ini . Dari tim kami tertarik Misalnya, masukan dari 2
untuk contoh di atas berarti bahwa kami ingin tahu apakah Tottenham masih bisa menjadi juara.
Keluaran
Untuk setiap pertandingan yang tersisa dari formulir ( i , j ), ada tiga hasil yang mungkin:
- Tim saya menang: Tim saya mendapat 3 poin , tim j mendapat 0 poin
- Tim j menang: Tim i mendapat 0 poin , tim j mendapat 3 poin
- Draw: Tim i dan j keduanya mendapatkan 1 poin
Anda harus menampilkan nilai kebenaran jika ada beberapa hasil untuk semua game yang tersisa sehingga pada akhirnya, tidak ada tim lain yang memiliki poin lebih banyak dari tim yang ditentukan dalam input ke-3. Jika tidak, hasilkan nilai palsu.
Contoh : Pertimbangkan input contoh dari bagian di atas:
Input 1 = [93, 86, 78, 76, 75]
, Input 2 = [(1,2), (4,3), (2,3), (3,2), (1,2)]
, Input 3 =2
Jika tim 2
memenangkan semua pertandingan yang tersisa (yaitu (1,2), (2,3), (3,2), (1,2)
), ia mendapat 4 * 3 = 12 poin tambahan; tidak ada tim lain yang mendapat poin dari pertandingan ini. Katakanlah sisa pertandingan lainnya (yaitu (4,3)
) seri. Maka skor akhir adalah:
Team 1: 93, Team 2: 86 + 12 = 98, Team 3: 78 + 1 = 79, Team 4: 76 + 1 = 77, Team 5: 75
Ini berarti bahwa kami telah menemukan beberapa hasil untuk pertandingan yang tersisa sehingga tidak ada tim lain yang memiliki poin lebih dari tim 2
, sehingga output untuk input ini harus benar.
Detail
- Anda dapat menganggap input pertama sebagai urutan yang diurutkan, yaitu untuk i < j , entri ke- i sama dengan atau lebih besar dari entri ke- j . Input pertama dapat diambil sebagai daftar, string atau sejenisnya.
- Anda dapat mengambil input kedua sebagai string, daftar tupel atau sejenisnya. Atau, Anda dapat menganggapnya sebagai array dua dimensi di
a
manaa[i][j]
jumlah entri formulir(i,j)
dalam daftar kecocokan yang tersisa. Misalnya,a[1][2] = 2, a[2][3] = 1, a[3][2] = 1, a[4][3] = 1
berkorespondensi dengan[(1,2), (4,3), (2,3), (3,2), (1,2)]
. - Untuk input kedua dan ketiga, Anda dapat mengasumsikan pengindeksan 0 bukannya pengindeksan 1.
- Anda dapat mengambil tiga input dalam urutan apa pun.
Silakan tentukan format input persis yang Anda pilih dalam jawaban Anda.
Node samping : Masalah yang mendasari tantangan ini terbukti NP-lengkap dalam " Eliminasi Sepakbola Sulit Diputuskan di Bawah Aturan 3-Poin ". Menariknya, jika hanya dua poin yang diberikan untuk menang, masalahnya menjadi terpecahkan dalam waktu polinomial.
Uji Kasus
Semua kasus uji dalam format Input1
, Input2
, Input3
.
Benar:
[93, 86, 78, 76, 75]
,[(1,2), (4,3), (2,3), (3,2), (1,2)]
,2
[50]
,[]
,1
[10, 10, 10]
,[]
,3
[15, 10, 8]
,[(2,3), (1,3), (1,3), (3,1), (2,1)]
,2
Falsy:
[10, 9, 8]
,[]
,2
[10, 9, 9]
,[(2,3), (3,2)]
,1
[21, 12, 11]
,[(2,1), (1,2), (2,3), (1,3), (1,3), (3,1), (3,1)]
,2
Pemenang
Ini adalah kode-golf , sehingga jawaban terpendek yang benar (dalam byte) menang. Pemenang akan dipilih satu minggu setelah jawaban pertama yang benar diposting.
sumber
Jawaban:
Haskell (Lambdabot) , 84 byte
Terima kasih kepada @bartavelle karena telah menyelamatkan saya satu byte.
Tanpa Lambdabot, tambahkan 20 byte untuk
import Control.Lens
ditambah baris baru.Fungsi mengambil argumennya dalam urutan yang sama seperti yang dijelaskan dalam OP, 0-diindeks. Argumen keduanya (daftar pasangan yang tersisa) adalah daftar indeks yang datar (mis.
[1,2,4,1]
Sesuai dengan[(Team 1 vs Team 2), (Team 4 vs Team 1)]
).Aturannya agak kabur, apakah ini diizinkan atau tidak. Jika tidak diizinkan, fungsi dapat mengambil input dalam format yang disediakan oleh contoh - daftar tupel. Dalam hal ini, tambahkan 2 byte ke skor solusi ini, karena diganti
a:b:r
dengan(a,b):r
.Penjelasan:
Baris pertama mendefinisikan fungsi infiks
!
dari tiga variabel, tipe(!) :: Int -> Int -> [Int] -> [Int]
, yang menambah nilai pada indeks yang diberikan dalam daftar. Karena, seringkali, kode lebih mudah dipahami daripada kata-kata (dan karena sintaksis Haskell bisa aneh), inilah terjemahan Python:Baris kedua mendefinisikan fungsi infiks lain
?
, juga dari tiga variabel (input tantangan). Saya akan menulis ulang lebih mudah di sini:Ini adalah implementasi rekursif pencarian lengkap. Itu berulang atas daftar permainan yang tersisa, bercabang pada tiga hasil yang mungkin, dan kemudian, setelah daftar kosong, memeriksa apakah tim kami memiliki jumlah poin maksimum atau tidak. Sekali lagi dalam Python (non-idiomatis), ini adalah:
Cobalah online!
* Sayangnya, TiO tidak mendukung Lens, jadi tautan ini tidak akan benar-benar berjalan.
sumber
[]
dengan_
.Microsoft SQL Server, 792 byte
Fungsi mengembalikan 0 untuk hasil yang salah dan lebih dari 0 untuk yang benar.
Seluruh cuplikan:
Periksa secara Online!
sumber
Python 2,
242221 byteCobalah online!
Setelah lulus pertama dengan pemikiran golf dasar. Mengambil input dengan pengindeksan berbasis 0 ; uji kasus di TIO menyesuaikan untuk ini melalui fungsi
F
.The
product([0,1,2],repeat=len(m))
iterasi mengevaluasi hasil yang mungkin lebih dasi / menang / kerugian untuk setiap pertandingan kecuali tim-of-interest (TOI) adalah bagian dari pertandingan (di mana, TOI selalu diasumsikan untuk menang).sumber
JavaScript (ES6), 145 byte
Mengambil input skor sebagai array (
[93,86,78,76,75]
), game yang akan datang sebagai array dari array 2-nilai ([[0,1],[3,2],[1,2],[2,1],[0,1]]
), dan indeks tim sebagai integer (1
). Semuanya terindeks 0.Cuplikan Tes
Tampilkan cuplikan kode
sumber