Rod memoderasi permainan kartu antara dua pemain: George dan Tim. Saat ini, Tim sedang mengocok kartunya. Rod mencurigai Tim sedang mencoba menipu, jadi dia membutuhkan bantuanmu untuk memeriksa apakah shuffle itu adil.
Tim melakukan shuffle overhanded: ia memotong tumpukan kartu dari bagian bawah geladak, kemudian memotong berbagai bagian dari bagian atas tumpukan ke atas geladak, dan mengulangi prosesnya beberapa kali.
Rod bermata elang dan dapat melihat dengan tepat berapa banyak kartu yang dipotong Tim setiap kali, namun ia tidak dapat menghitung dan melacak kartu secepat Tim mengocok. Di sinilah Anda masuk: Rod ingin Anda menulis sebuah program atau fungsi yang mendapatkan informasi pengocokan yang terperinci dan menentukan apakah pengocokan tersebut adil, lemah atau tipuan.
- Jika setelah mengocok, kurang dari 25 pasang kartu yang berdekatan tetap bersebelahan (dalam urutan yang sama), maka pengocokan tersebut adil dan permainan dapat berlanjut.
- Jika setidaknya 25 (tetapi tidak semua) pasangan kartu yang berdekatan tetap berdekatan, maka shuffle tersebut lemah dan Rod akan menindik Tim di atas kepala dan memintanya untuk mengocok lagi.
- Jika semua kartu tetap pada posisi yang sama di akhir, maka Tim jelas curang dan Rod akan memukulnya dengan trout besar.
Ini kode golf, jadi kode terpendek menang.
Memasukkan:
Anda akan mendapatkan serangkaian angka antara 0 dan 52 (keduanya eksklusif) yang dipisahkan oleh spasi, pada beberapa baris, di mana setiap baris mewakili putaran pengocokan yang dimulai dan diakhiri dengan semua kartu bertumpuk menjadi satu.
Pada setiap baris, angka pertama adalah jumlah kartu yang dipotong Tim dari bagian bawah geladak, dan setiap nomor berikutnya adalah sejumlah kartu yang dijatuhkannya dari tangannya ke atas geladak. Jika ada kartu yang tersisa setelah nomor terakhir pada satu baris, Anda harus mengasumsikan bahwa Tim meletakkannya di atas tumpukan kartu.
Masukan dijamin valid. Setidaknya ada satu baris angka, dan setiap baris mengandung setidaknya 2 angka. Angka pertama pada setiap baris tidak lebih kecil dari jumlah semua angka lainnya pada baris yang sama. Sebuah trailing newline adalah opsional, Anda dapat mengasumsikan bahwa input tersebut memiliki atau tidak memilikinya.
Keluaran:
Program Anda harus mencetak / mengembalikan "fair" jika shuffle itu adil, "lemah" jika shuffle lemah dan "trick" jika Tim menyimpan semua kartu dalam urutan yang sama. Baris baru tambahan adalah opsional.
Contoh:
Dek diasumsikan memiliki 52 kartu, tetapi untuk tujuan demonstrasi, saya akan menggunakan setumpuk yang lebih kecil dari 10 kartu.
Memasukkan:
5 3 1
4 2 2
Dek awal, dilihat dari atas: 0 1 2 3 4 5 6 7 8 9
5
➜ 0 1 2 3 4
( 5 6 7 8 9
di tangan)
3
➜ 5 6 7 0 1 2 3 4
( 8 9
di tangan)
1
➜ 8 5 6 7 0 1 2 3 4
( 9
di tangan)
ujung garis ➜ 9 8 5 6 7 0 1 2 3 4
4
➜ 9 8 5 6 7 0
( 1 2 3 4
di tangan)
2
➜ 1 2 9 8 5 6 7 0
( 3 4
di tangan)
2
➜ 3 4 1 2 9 8 5 6 7 0
4 pasang tetap berdekatan:(3 4) (1 2) (5 6) (6 7)
Kasus uji:
43 5 5 5 5 5 5 5 5
43 5 5 5 5 5 5 5 5
43 5 5 5 5 5 5 5 5
Keluaran: fair
43 5 5 5 5 5 5 5 5
43 5 5 5 5 5 5 5 5
43 5 5 5 5 5 5 5
Keluaran: weak
29 24
19 18
38 2 1 8 13 6 4
47 15 16 5 2 1 7
34 22 9 3
44 9 10 11 3 1 7
33 18 4 2 3 3
Keluaran: fair
24 6 12 4
25 3 19
36 4 25 2
19 11 1 3
15 9 3
37 5 27
Keluaran: weak
26 13
26 13
26 13
26 13
Keluaran: trick
50 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
Keluaran: weak
50 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
50 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
Keluaran: trick
50 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
49 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
Keluaran: fair
Persyaratan:
- Jika Anda menulis suatu fungsi, ia dapat membaca dari input standar atau menerima input sebagai parameter string tunggal. Juga, fungsi dapat mencetak output atau mengembalikannya.
- Program harus dapat dijalankan di Linux menggunakan perangkat lunak yang tersedia secara bebas.
- Kode sumber harus menggunakan hanya karakter ASCII.
- Tidak ada celah standar.