Periksa nilai handover untuk Mahjong yang cocok untuk satu orang

12

Mahjong adalah gim ubin yang sangat populer di Asia. Biasanya dimainkan dengan empat pemain, dan tujuan permainan ini adalah menjadi orang pertama yang menyelesaikan kartu yang sah menggunakan ubin. Di mahjong ada tiga setelan ubin plus ubin kehormatan - untuk tantangan ini kami hanya akan mempertimbangkan tangan yang dibentuk menggunakan ubin dari satu setelan.

Ubin diberi nomor dari 1hingga 9, dan tepat ada empat salinan dari setiap ubin. Tangan yang valid terdiri dari empat set tiga dan sepasang, dengan total empat belas ubin.

Seperangkat tiga dapat berupa:

  • Triplet, tiga ubin yang sama (misalnya 444), atau
  • Urutan tiga ubin berturut-turut (misalnya 123atau 678tidak 357). Urutan tidak terbungkus (jadi 912tidak valid).

Sepasang hanyalah dua ubin yang identik (misalnya 55).

Tantangan

Diberi kartu empat belas ubin yang valid, tentukan skornya berdasarkan kriteria berikut:

Condition                Description                                 Point/s
-------------------------------------------------------------------------------
Straight                 Contains the sequences 123 456 789          1
Identical sequences      Contains two identical sequences            1
All simples              Only 2-8, no 1s or 9s                       1
All sequences            All sets of three are sequences             1
All triplets             All sets of three are triplets              2
Flush                    Single-suit hand (always applies)           5

(Skor di sini didasarkan pada aturan mahjong Jepang, tetapi sangat disederhanakan untuk membuat spec kurang berantakan.)

Skor satu tangan adalah jumlah poin untuk kondisi yang dipenuhi. Jika sebuah tangan dapat didekomposisi dalam lebih dari satu cara, ambil dekomposisi skor tertinggi.

Input tangan dijamin valid, yaitu empat belas ubin dari 1 hingga 9 dan setiap ubin muncul paling banyak empat kali, dan dapat dianggap sudah disortir. Input adalah daftar digit (sebagai string atau daftar flat tunggal bilangan bulat) melalui STDIN, argumen fungsi atau baris perintah. Output mungkin ke STDOUT atau mengembalikan nilai.

Uji kasus

22233355777888  ->  8  # 222 333 55 777 888, flush + all simp. + all trip.
11112345678999  ->  6  # 111 123 456 789 99, flush + straight
11123456788999  ->  5  # 111 234 567 88 999, flush only (no straight)
23344455566788  ->  7  # 234 345 456 567 88, flush + all simp. + all seq.
33334444555566  ->  8  # 33 345 345 456 456, flush + all simp. + all seq. + identical seq.
11122233377799  ->  7  # 111 222 333 777 99, flush + all trip. (no identical seq.)
12344556678889  ->  8  # 123 456 456 789 88, flush + all seq. + straight + identical seq.
11344556678999  ->  5  # 11 345 456 678 999, flush only (no identical seq.)
22233344455566  ->  8  # 222 333 444 555 66, flush + all simp. + all trip.
11112233344555  ->  5  # 111 123 234 345 55, flush only

Untuk contoh kelima, meskipun memiliki dua pasang urutan yang identik, hanya satu yang perlu hadir untuk mencapai titik tersebut. Dekomposisi 345 345 345 345 66akan menghasilkan skor yang sama, sedangkan 333 345 444 555 66skor lebih buruk.

Mencetak gol

Ini adalah , sehingga solusi dalam byte paling sedikit menang. Celah standar berlaku.


Tantangan terkait: Apa yang Anda tunggu? (Seorang pemecah mahjong)

Sp3000
sumber

Jawaban:

1

J (241 byes)

Anda memerlukan J versi terbaru yang diinstal.

i=:>:@i.9
q=:,/^:4>@:{(i.9);(i.;i.;i.;i.)16
s=:3 :'(>./((5+([:(*./)(3*i.3)&e.)+(-.@:(-:~.))+((*./)@:(6&>:))+2*((*./)@:(6&<)))"1(}."1(y(-:/:~"1)"1((([:{&(i,.i){.),[:,/[:{&(((>:@i.7)+"0 1(i.3)),|:3 9$i)}.)"1 q))#q)))+([:(*./)[:-.((1 9)&e.))y'

Panggil fungsi sdengan daftar bilangan bulat. Misalnya, skrip contoh berikut memverifikasi kasus pengujian di atas:

#!/usr/bin/jconsole
i=:>:@i.9
q=:,/^:4>@:{(i.9);(i.;i.;i.;i.)16
s=:3 :'(>./((5+([:(*./)(3*i.3)&e.)+(-.@:(-:~.))+((*./)@:(6&>:))+2*((*./)@:(6&<)))"1(}."1(y(-:/:~"1)"1((([:{&(i,.i){.),[:,/[:{&(((>:@i.7)+"0 1(i.3)),|:3 9$i)}.)"1 q))#q)))+([:(*./)[:-.((1 9)&e.))y'


echo (s 2 2 2 3 3 3 5 5 7 7 7 8 8 8)=8
echo (s 1 1 1 1 2 3 4 5 6 7 8 9 9 9)=6
echo (s 1 1 1 2 3 4 5 6 7 8 8 9 9 9)=5
echo (s 2 3 3 4 4 4 5 5 5 6 6 7 8 8)=7
echo (s 3 3 3 3 4 4 4 4 5 5 5 5 6 6)=8
echo (s 1 1 1 2 2 2 3 3 3 7 7 7 9 9)=7
echo (s 1 2 3 4 4 5 5 6 6 7 8 8 8 9)=8
echo (s 1 1 3 4 4 5 5 6 6 7 8 9 9 9)=5
echo (s 2 2 2 3 3 3 4 4 4 5 5 5 6 6)=8
echo (s 1 1 1 1 2 2 3 3 3 4 4 5 5 5)=5

exit''
Legendre
sumber