Buat fungsi yang akan mengambil dua string sebagai input dan mengembalikan satu output untuk hasilnya. Jawaban yang paling populer menang.
Aturan-aturan Rock-paper-scissors-lizard-Spock adalah:
- Gunting memotong kertas
- Kertas menutupi batu
- Kadal menghancurkan batu
- Kadal meracuni Spock
- Spock menghancurkan gunting
- Gunting memenggal kadal
- Kadal makan kertas
- Kertas membuktikan Spock
- Spock menguapkan batu
- Pemecah batu gunting
Output untuk setiap kasus input yang mungkin adalah:
winner('Scissors', 'Paper') -> 'Scissors cut Paper'
winner('Scissors', 'Rock') -> 'Rock breaks Scissors'
winner('Scissors', 'Spock') -> 'Spock smashes Scissors'
winner('Scissors', 'Lizard') -> 'Scissors decapitate Lizard'
winner('Scissors', 'Scissors') -> 'Scissors tie Scissors'
winner('Paper', 'Rock') -> 'Paper covers Rock'
winner('Paper', 'Spock') -> 'Paper disproves Spock'
winner('Paper', 'Lizard') -> 'Lizard eats Paper'
winner('Paper', 'Scissors') -> 'Scissors cut Paper'
winner('Paper', 'Paper') -> 'Paper ties Paper'
winner('Rock', 'Spock') -> 'Spock vaporizes Rock'
winner('Rock', 'Lizard') -> 'Rock crushes Lizard'
winner('Rock', 'Scissors') -> 'Rock breaks Scissors'
winner('Rock', 'Paper') -> 'Paper covers Rock'
winner('Rock', 'Rock') -> 'Rock ties Rock'
winner('Lizard', 'Rock') -> 'Rock crushes Lizard'
winner('Lizard', 'Spock') -> 'Lizard poisons Spock'
winner('Lizard', 'Scissors') -> 'Scissors decapitate Lizard'
winner('Lizard', 'Paper') -> 'Lizard eats Paper'
winner('Lizard', 'Lizard') -> 'Lizard ties Lizard'
winner('Spock', 'Rock') -> 'Spock vaporizes Rock'
winner('Spock', 'Lizard') -> 'Lizard poisons Spock'
winner('Spock', 'Scissors') -> 'Spock smashes Scissors'
winner('Spock', 'Paper') -> 'Paper disproves Spock'
winner('Spock', 'Spock') -> 'Spock ties Spock'
Tantangan ekstra yang disarankan oleh @Sean Cheshire: Izinkan daftar khusus, seperti yang dari situs ini. Dengan daftar n-item, item kehilangan ke (n-1) / 2 sebelumnya, dan menang atas (n-1) / 2 berikut
popularity-contest
dansalmo
sumber
sumber
Jawaban:
APL
Keluaran persis seperti yang disyaratkan dalam semua kasus, termasuk dasi / dasi. Tidak ada tabel pencarian, kecuali kata-kata yang sebenarnya.
Anda dapat mencobanya di http://ngn.github.io/apl/web/
APL hanya tahu!
sumber
SED
sumber
Berikut adalah solusi umum berdasarkan string aturan ukuran berapa pun. Ini melakukan huruf besar yang benar untuk nama yang tepat "Spock" dan juga memungkinkan aturan untuk menentukan 'dasi' bukan 'ikatan' untuk objek jamak.
Hasil:
sumber
rules
Anda dapat menggunakan string multiline alih-alih penggabungan literal. Ini memungkinkan Anda untuk menghapus tanda kurung yang berlebihan.Python
sumber
Python
sumber
Ruby, pendekatan aritmatika
Para aktor dapat diatur dalam susunan sedemikian rupa sehingga masing-masing aktor
a[i]
menang melawan para aktora[i+1]
dana[i+2]
, modulo 5, misalnya:Kemudian, untuk seorang aktor
A
dengan indeksi
kita dapat melihat bagaimana dia cocokB
dengan aktor dengan indeksj
dengan melakukanresult = (j-i)%5
: Hasil1
dan2
berarti bahwa aktor A menang melawan aktor 1 atau 2 tempat di depannya masing-masing;3
dan4
juga berarti dia kalah melawan aktor di belakangnya dalam array.0
berarti dasi. (Perhatikan bahwa ini mungkin tergantung pada bahasa; di Ruby(j-i)%5 == (5+j-i)%5
juga kapanj>i
.)Bagian paling menarik dari kode saya adalah penggunaan properti ini untuk menemukan fungsi penyortiran indeks dua aktor. Nilai kembali akan -1, 0 atau 1 sebagaimana mestinya :
Ini semuanya:
sumber
Python
Menggunakan kamus yang rumit.
sumber
return(' '.join([p,'tie' + 's'*(p[1]!='c'),q]))
akan mendapatkan kata kerja yang benar.C #
Asumsi
Lawan disusun dalam array n-item di mana pemain mengalahkan (n-1) / 2 pemain di depan mereka dan kalah dari (n-1) / 2 pemain di belakang mereka. (Dengan daftar panjang genap, pemain kalah dari ((n-1) / 2 + 1) pemain di belakang mereka)
Tindakan pemain diatur dalam larik di mana tindakan dalam kisaran [(indexOfPlayer * (n-1) / 2)] hingga [(indexOfPlayer * (n-1) / 2)) + (n-2) / 2 - 1 ]
Informasi tambahan
CircularBuffer<T>
adalah pembungkus array untuk membuat array addressable "tak terbatas". TheIndexOf
mengembalikan fungsi indeks item dalam batas-batas yang sebenarnya dari array.Kelas
Contoh
sumber
Python, satu garis
sumber
.split(', ')
dan tidak harus macet, aturan, bersama.Hanya hal kecil yang saya dapatkan:
Di sini, aturan adalah file yang berisi semua aturan yang diberikan.
sumber
Python
Terinspirasi oleh kode APL @ Tobia.
Hasil:
sumber
C ++
Sedikit ujian
sumber
Javascript
sumber
Javascript
Saya melihat ini bukan kontes golf, tapi saya sudah mengotak-atik puzzle ini untuk sementara waktu sebelum menemukan utas ini, jadi begini.
Berikut ini adalah versi (standar) js dalam 278 karakter:
Atau yang menggunakan fitur E6 (kemungkinan hanya berfungsi di Firefox) dalam 259 karakter:
sumber