Taş kağıt makas


21

Klasik taş kağıt makasını uygulayın.

Koşullar:

  • kullanıcı 'r', 'p' veya 's' girecek
  • program 'r', 'p' veya 's' çıktısını alır ve sonuç
  • program seçimi ('r', 'p' veya 's') sahte rastgele olmak zorunda ( sana bakıyorum Howard )
  • Sonuç, yazdırılabilir herhangi bir karakterle gösterilebilir, kullanıcının girdiği şey için her zaman üç olası sonuç olmalıdır (kullanıcı kazanır, kaybeder veya beraberlik olur).
  • kullanıcı hiçbir şey girmezse ne olur, yoksa 'r', 'p' veya 's' gibi farklı bir şey önemli olmamalıdır.

Gerek:

  • Golf kodunu girin.
  • Ungolfed kodu
  • Programı nasıl çağırırsın
  • Bir örnek çalışma

Daha az karakter içeren cevabı seçeceğim, en çok oylanan cevabı bir kravat verecekse seçilecektir.

İyi golf oynamalar ve şansınız sizin lehinize olabilir.

Java'da kendime bir cevap yazacağım.

Bir kayanın altındaki bir dağda yaşayanlar için:

r = kaya

p = kağıt

s = makas

taş: makasla kazanır, kağıtla kaybeder, taşla bağlanır.

kağıt: sallamak için kazanır, makasla kaybeder, kâğıtla bağlar.

makas: kağıt kazanır, taşla kaybeder, makasla bağlanır.

Mevcut Pozisyonlar:

  • BM: Kullanıcı Adı
  • PL: Programlama Dili
  • CC: Karakter Sayısı
  • UV: Oylar yükseldi
╔══════════════════╦════════════╦══════╦════╗
║        UN        ║     PL     ║  CC  ║ UV ║
╠══════════════════╬════════════╬══════╬════╣
║ Howard           ║ GolfScript ║    6 ║ 15 ║
║ primo            ║ Perl       ║   27 ║  7 ║
║ TwiNight         ║ APL        ║   31 ║  4 ║
║ primo            ║ Perl       ║   33 ║  7 ║
║ marinus          ║ APL        ║   36 ║  5 ║
║ primo            ║ Perl       ║   38 ║  7 ║
║ primo            ║ Perl       ║   48 ║  7 ║
║ manatwork        ║ Ruby       ║   54 ║ 13 ║
║ w0lf             ║ GolfScript ║   62 ║  4 ║
║ tmartin          ║ K          ║   67 ║  2 ║
║ Abhijit          ║ Python 3   ║   74 ║  5 ║
║ beary605         ║ Python 3   ║   76 ║  4 ║
║ rlemon           ║ javascript ║   85 ║  4 ║
║ ugoren           ║ C          ║   86 ║  3 ║
║ Egor Skriptunoff ║ LUA        ║   87 ║  4 ║
║ Shmiddty         ║ javascript ║   87 ║  3 ║
║ Fors             ║ Befunge    ║  107 ║  3 ║
║ Briguy37         ║ javascript ║  117 ║  2 ║
║ Vi.              ║ Clojure    ║  129 ║  1 ║
║ Henrik           ║ C#         ║  167 ║  4 ║
║ dystroy          ║ Go         ║  169 ║  1 ║
║ Praveen          ║ javascript ║  250 ║  0 ║
║ ryan             ║ javascript ║  256 ║  1 ║
║ primo            ║ ferNANDo   ║  259 ║  5 ║
║ anakata          ║ Java       ║  259 ║  1 ║
║ epoch            ║ Java       ║  387 ║  1 ║
║ jdstankosky      ║ LOLCODE    ║ 1397 ║ 15 ║
╚══════════════════╩════════════╩══════╩════╝

Kuralları yanıtlamayı seçemiyorum, çünkü kurallara uyma (başarılı) bir girişimdi, ancak onları daha açık hale getirmek için değiştirdim.

primo 27 karakter cevabı seçilemez çünkü kendi başına sahte rastgele değildir

primo -p cevabı, ben gidiyorum "-p 3 bayt olarak sayılır: biri için - biri için, diğeri gerekli boşluk için."

Tüm cevap verenlere teşekkürler, umarım iyi zaman geçirmişsinizdir!

NOT: Her hafta bunu düzenlemeye çalışacağım, masayı ayarlayacağım ve eğer biri mevcut olanı geçerse seçilen cevabımı değiştirmeye çalışacağım.


2
Tüm sonuçların (Win, Lose, Draw) mümkün olması gereken bir fıkra eklemeyi düşünebilirsiniz.
primo

Bu popülerlik olduğu için, LOLZ
jdstankosky

Cevabınızı göndermeden önce kuralları değiştirdim . Popülerlik sadece kravat kırıcı olacak.
jsedano

1
Pfft, artık popülerlik değil mi? Sıkıcı.
jdstankosky

1
@anakata Geleneksel Perlgolf kurallarına göre (Ton Hospel'in kendisi dışında hiçbiri tarafından derlenmeyen) -p3 bayt olarak sayılır: biri için -diğeri pdiğeri gerekli boşluk için. Ancak, CG.SE ile ilgili diğer birçok yarışma, her seçeneği tek bir bayt olarak saymıştır. Hangi sistemin onurlandırılacağına karar vermek genellikle sorunun yazara kalmasına bağlıdır.
primo

Yanıtlar:


9

APL, 31

'TWL'[1+3|-/x⍳⎕←⍞,(?3)⌷x←'rps']

x←'rps'Ata dize 'rps'kadarx

(?3)⌷ 1 ~ 3 rasgele tamsayıyı seçin, bu dizini seçin x

⍞, Makine seçimine bağlı kullanıcı girişi

⎕← Çıktıyla sonuçlanan dize

x⍳ Sayısal diziye indexOf ile dönüştür x

-/ İki sayının farkı

1+|3 Modül 3 ve artı 1

'TWL'[...] endeksleme 'TWL'

Numune

r
rp
L

Kullanıcı rock'ı seç, program kağıdı seç: Kaybet


42

LOLKOD, 1397

Not: Kazanan şartın, popülerlikle beraberlikle beraberlikle popülerlikle beraberlikle değiştiğini fark etmeden önce gönderdim.

Kesin bir sözdizimi yoktur, ancak bunun kabul edilebilir olduğundan eminim.

HAI
    I HAS A CRAZY, LUCKY, CHALLENGE, TREAT
    I HAS YUMMY ITZ "LOL U LOZED"
    I HAS MEH ITZ "NOWAI TIED"
    I HAS GROSS ITZ "OMG U WONNED"
    I HAS BURNT ITZ "LAME"
    GIMMEH CHALLENGE
    BTW I HOPE I R TEH WINZ
    LOL CRAZY IZ BETWEEN 1 AN 3
    I HAS A SUPA ITZ A BUKKIT
    LOL SUPA'Z 1 R "ROCK"
    LOL SUPA'Z 2 R "PAPER"
    LOL SUPA'Z 3 R "SCIZZORS"
    LOL LUCKY R SUPA'Z CRAZY
    GOT CHALLENGE, WTF?
        OMG "Rock"
            GOT LUCKY, WTF?
                OMG ROCK, LOL TREAT R MEH, GTFO
                OMG PAPER, LOL TREAT R YUMMY, GTFO
                OMG SCIZZORS, LOL TREAT R GROSS, GTFO
            OIC
        OMG "Paper"
            GOT LUCKY, WTF?
                OMG ROCK, LOL TREAT R GROSS, GTFO
                OMG PAPER, LOL TREAT R MEH, GTFO
                OMG SCIZZORS, LOL TREAT R YUMMY, GTFO
            OIC
        OMG "Scissors"
            GOT LUCKY, WTF?
                OMG ROCK, LOL TREAT R YUMMY, GTFO
                OMG PAPER, LOL TREAT R GROSS, GTFO
                OMG SCIZZORS, LOL TREAT R MEH, GTFO
            OIC
        OMGWTF
            VISIBLE "WHAT U SAYZ?", LOL TREAT R BURNT
            GTFO
    OIC
        BOTH SAEM TREAT AN BURNT, O RLY?
            YARLY
                VISIBLE "YOU BURNTED MAH TREAT!"
            NOWAI
                VISIBLE SMOOSH "I GUESSED " AN LUCKY
                VISIBLE TREAT
        KTHX
KTHXBAI

Eğer bu şekilde başarılı bir şekilde yürütülecek RockPaperScissors.LOLolsaydı, işte bazı olası rasgele sonuçlar şunlar olabilirdi:

  • Giriş: Rock- Çıkış:I GUESSED SCIZZORS U WONNED
  • Giriş: Paper- Çıkış:I GUESSED PAPER NOWAI TIED
  • Giriş: Scissors- Çıkış:I GUESSED ROCK LOL U LOZED
  • Giriş: Tuna- Çıkış:WHAT U SAYZ? YOU BURNTED MAH TREAT!

6
Sadece LOLCODE olduğu için +1. Bir süre öğrenmem gereken bir şeye benziyor, sadece LOLz için.
Iszi

23

GolfScript

n"Draw"

Yukarıdaki kod gerekli işlevselliği uygular. Ek olarak, oyuncunun bilgisayar stratejisinin (algılanan) adaletsizliği nedeniyle asla sinirlenmemesini sağlar.

Ungolfed versiyonu

n"Draw"

Program nasıl çağırılır

Girdi ('r', 'p', 's' nin tek bir karakteri) muhtemelen newline ile sonlandırılan STDIN'de sağlanmalıdır.

Bir örnek çalışma

> echo r | ruby golfscript.rb rockpaperscissors.gsc
r
Draw

Kodun açıklaması

GolfScript ile aşina olmayan herkes için bu kodun nasıl çalıştığına dair ayrıntılı bir açıklama ekleyeceğim. Kod esas olarak üç bölümden oluşmaktadır.

### Computer's strategy ###
# The strategy used to play r/p/s. 
# The computer is so fast, it can really guess in an instance 
# what the player has played. Since the computer should 
# not play unfair, the best strategy is to always go for a 
# draw and choose the same move.
        # on the stack is player's move
        # choose to play the same -> now the computer's move is on the stack

### Fiddle with input ###
# The input may of may not be delimited by newline.
# In order to make the output readable, we'll give
# a newline here.
n       # Push a newline onto the stack

### Give the result ###
# We can skip a complicated calculation of the result
# since we chose to play draw anyways.
"Draw"  # Push the result onto the stack

# Output is printed automatically when GolfScript code terminates.

notlar

Bu kod golf değil ama popülerlik yarışması olmadığı için en kısa sürümü seçmedim. Belki beraberlik durumunda daha kısa bir kod çözümümü mahveder. Bununla birlikte, golf oynamak isteyenler için aşağıdaki olanaklar verilmiştir:

  • Yalnızca uygun girdiyle uğraşın ve kullanıcıyı yeni bir satır sağlamaya zorlayın. Bu bir karakter kazandıracak.
  • Kuralların, kuralları bükerek başka bir karakter kaydetmeyi sağlayan küçük bir yetersizliği vardır. Sonuç her zaman "Kazan" olarak basılabilir - doğru sonucun yazdırılması gerektiği belirtilmedi. Ancak, hile programı uygulamayı seçerseniz, oyuncuların yakında kızacağını unutmayın.
  • Çıkış formatı tam olarak belirtilmemiş. 0Çizim için çıktı olarak seçebiliriz . Dolayısıyla geçerli olan en kısa program tek karakterli koddur 0.

1
Tamam, kurallara daha fazla ayrıntı verdim! İki çaylak hatası yaptığımı itiraf ediyorum.
jsedano

“Kazanan tek hamle oynamak değildir.” : P
Viezevingertjes

1
Eski sürüm ve gerçekten iyi bir açıklama için +1
izlin

n"d"Sorunun çıktının yazdırılabilir herhangi bir karakter olması gerektiğini söylediği gibi, tam sözcük kullanma hakkında hiçbir şey söylemediğini öne sürüyorum .
ender_scythe

20

Yakut: 61 54 karakter

o="rps";p o[c=rand(3)],%w{Draw Win Lose}[c.-o.index$_]

Her nasılsa açıkladı:

Sorunun tamamı, aşağıdaki sonuçların hesaplanmasında azaltılmıştır:

  ╲ machine
h  ╲| 0 1 2
u ──┼──────
m 0 │ 0 1 2 
a 1 │ 2 0 1
n 2 │ 1 2 0

Sayıların anlamı:

  • seçim: 0 rock, 1 kağıt, 2 makas
  • sonuç: 0 beraberlik, 1 galibiyet, 2 mağlubiyet

Bunun için formülü kullandım: machine_choice - human_choice. Bu, zaman zaman negatif değere neden olur, ancak yalnızca dizin olarak kullanıldığından ve negatif dizin geriye doğru sayıldığında doğru dizi öğesini seçer.

# ┌── choosable object type
# │           ┌── machine's choice numeric code
# │           │                  ┌── result type
# │           │                  │                   ┌── human's choice
# │           │          ┌───────┴───────┐           │
  o="rps";p o[c=rand(3)],%w{Draw Win Lose}[c.-o.index$_]
#           └─────┬────┘                   └─────┬────┘  
#                 └── machine's choice letter    │
#                                                └── result numeric code

Kullanılan yöntemler (diğerleri Fixnumaçık olanları):

Ungolfed:

object_type = "rps";
result_type = %w{Draw Win Lose}

machine_choice = rand(3)
human_choice = $_

p object_type[machine_choice]

result_code = machine_choice - object_type.index(human_choice)
p result_type[result_code]

Örnek çalışma:

bash-4.2$ ruby -nle 'o="rps";p o[c=rand(3)],%w{Draw Win Lose}[c.-o.index$_]'
r
"p"
"Win"
p
"p"
"Draw"
s
"p"
"Lose"

1
Benimkine çok benzer. 7 bayt [(c-o.index($_)+3)%3]ile değiştirilebilir [c.-o.index$_]. Ayrıca, puanınıza -nlen az iki tane eklemelisiniz .
primo,

1
Doh! Negatif endekslerden yararlanmak için ilk niyetim buydu. Bir işlenen siparişi sorununu çözdükten sonra bu yaklaşımı yeniden denemeyi unuttum. Teşekkürler, @primo. Bir c.ipucu için bir teşekkür daha .
Manatwork

Bu cevabı sevdiğimi söylemeliyim !!
jsedano

2
@ manatwork hile aslında .-. Noktalı operatörler, noktalı olmayan meslektaşlarından çok daha düşük önceliğe sahiptir. Örneğin, a/(b+c)ile değiştirilebilir a./b+c.
primo

9

C # (167 karakter)

Benim ilk golf oynamayı deniyorum.

golfed

using System;class P{static void Main(string[] i){var m="rspr";var a=m[Environment.TickCount%3];Console.WriteLine(a+" "+(i[0][0]==a?"T":m.Contains(i[0]+a)?"W":"L"));}}

Un-golfed

using System;

class P
{
    static void Main(string[] i)
    {
        var m = "rspr";
        var a = m[Environment.TickCount % 3];
        Console.WriteLine(a + " " + (i[0][0] == a ? "T" : m.Contains(i[0] + a) ? "W" : "L"));
    }
}

Numune Partisi App uygulamasına argüman 1 olarak, ya tek bir karakter girişi gerektiren r, sya da p.

cmd > app.exe r

Tüm olası sonuçlar

  • cmd > app.exe rçıktı verir r T(rock, tie)
  • cmd > app.exe rçıktı verir p L(kağıt, kayıp)
  • cmd > app.exe rçıktı verir s W(makas, kazan)
  • cmd > app.exe pçıktı verir r W(rock, win)
  • cmd > app.exe pçıktı verir p T(kağıt, kravat)
  • cmd > app.exe pçıktı verir s L(makas, kayıp)
  • cmd > app.exe s çıktı verir r L (kaya, kayıp)
  • cmd > app.exe s çıktı verir p W (kağıt, kazan)
  • cmd > app.exe sçıktı verir s T(makas, kravat)

9

Perl 48 bayt

$%=rand 3;print"$%
"^B,(Draw,Lose,Win)[$%-=<>^B]

Betik sonucu bilgisayarın bakış açısıyla yazdırır, örneğin müzikçalar seçerse rve bilgisayar seçerse s, sonuç şöyledir Lose. $%(sayfa numarasını biçimlendir) bilgisayarın hareketini saklamak için kullanılır, çünkü yalnızca bir intger kurtaran bir tamsayı değeri içerebilir.

Ungolfed:

# choose a random move index 0, 1, or 2
$cindex = int(rand 3);
# convert this index to a move
# 0 => r, 1 => s, 2 => p
$cmove = "$cindex" ^ B;

# read the player's move
$pmove = <>;
# convert this move to its index
$pindex = $pmove ^ B;

# print computer's move
print $cmove, $/;
# compare indices, and output result
@result = (Draw, Lose, Win);
print $result[$cindex - $pindex];

Örnek kullanım:

$ echo p | perl rps.pl
s
Win

$ echo r | perl rps.pl
r
Draw

$ echo s | perl rps.pl
p
Lose

Senaryo ayrıca hamlenizi yazıp ardından yazarak etkileşimli olarak da çalıştırılabilir Enter:

$ perl rps.pl
r
s
Lose

Kural Germe

Perl 35 +3 bayt

$_=($%=rand 3).(D,L,W)[$%-($_^B)]^B

-pKomut satırı anahtarını gerektirir (3 bayt olarak sayılır). Sonuçların her biri Win, Loseve Draweşleştirilmiş olanW ,L ,D . Bilgisayarın seçimi ile sonuç arasındaki yeni çizgi hariç tutulmuştur.

Örnek kullanım:

$ echo r | perl -p rps.pl
sL

Perl 30 +3 bayt

$_=($%=rand 3).($%-($_^B))%3^B

Bir kez daha gerektirir -p. Burada Win, Loseve Draweşlenmiş olması 2,1 ve0 sırasıyla. Bu, teknik olarak uyumlu, çünkü basılabilir karakterlerdir.

Örnek kullanım:

$ echo r | perl -p rps.pl
s1

Perl 24 +3 bayt

$_=$^T%3 .($^T-($_^B))%3^B

Gerektirir -p, WLO eşleştirilmiş 2, 1, 0daha önce olduğu gibi. Her^T değişmez bir ascii karakter 20 ile değiştirilmelidir. Bu, kuşkusuz biraz gergindir;$^Tbetiğin başlatıldığı andan beri geçen saniye sayısını döndürür. Tüm sonuçlar mümkündür, ancak sözde rastgele olarak nitelendirilemez.

Örnek kullanım:

$ echo r | perl -p rps.pl
s1

7

APL ( 38 36)

c[i],(⌽↑⌽∘'TWL'¨⍳3)[⍞⍳⍨c←'rps';i←?3]

Beraberlik, kazanma ve kaybetme için 'T', 'W' ve 'L' çıkışlarını verir.

Örnek çalışma:

      c[i],(⌽↑⌽∘'TWL'¨⍳3)[⍞⍳⍨c←'rps';i←?3]
p    
rW

(Kağıt için kullanıcı 'p' tipleri. Bilgisayar 'r' yi seçer (rock), kullanıcı kazanır)

Açıklama:

  • ⌽↑⌽∘'TWL'¨⍳3: aşağıdaki matrisi oluşturur:
TLW
WTL
Hafif Sıklet
  • ⍞⍳⍨c←'rps': cdizeye ayarlayın 'rps', kullanıcı girişini okuyun ve dizedeki kullanıcı girişinin dizinini alın (bu 1 ile 3 arasında bir değer olacaktır). Bu dizin matris içine Y koordinatı olarak kullanılır.
  • i←?3: 1'den 3'e kadar rasgele bir sayı alın ve saklayın i, bu bilgisayarın seçimi. Bu matris içine X koordinatı olarak kullanılır.
  • c[i]: bilgisayarın seçimini 'r', 'p' veya 's' olarak gösteren ibir dizin olarak kullanın c.

6

Fernando 1184 (259 golf) bayt

Python ile yazılmış bir tercüman bağlantılı sayfanın altında bulunabilir.

ferNANDo, yalnızca bir değişken tipi olan Boole ve yalnızca bir işlemi NAND destekleyen bir ezoterik dildir. Tahmin edebileceğiniz gibi, bu görünüşte basit görevleri yerine getirmek için oldukça uzun bir mantık yol açabilir. Stdin'den (bir defada bir bayt) okuma, stdout'a (aynı zamanda bir bayt) yazma, koşullu döngüler ve ayrıca rastgele bir boolean üreteci desteği vardır.

Hiçbir anahtar kelime yoktur; her şey bir değişkendir. Bir ifadenin işlevi yalnızca içerdiği değişken sayısına göre belirlenir. Ayrıca yorum yok, bu yüzden kodu kendin yorumlamak için elimden geleni yaptım. Son dört satır biraz kafa karıştırıcı olabilir, ama muhtemelen o yazdırır söylemek yeterli olacaktır Win!, Loseya da Drawsonucuna bağlı olarak.

not sure, but right now i'm guessing you're_not_paper you're_scissors
you're_paper not you're_not_paper
you're_not_scissors not you're_scissors
you're_rock you're_not_paper you're_not_scissors
you're_rock you're_rock

o_shi-
i'm_not_paper right ?
i'm_scissors right ?
i'm_paper not i'm_not_paper
i'm_not_scissors not i'm_scissors
o_shi- i'm_paper i'm_scissors
o_shi- o_shi-
o_shi-
i'm_rock i'm_not_paper i'm_not_scissors
i'm_rock i'm_rock

print right now but only if i'm_not_paper i'm_scissors
print a newline here, not more, not less

i_win_if i'm_scissors you're_paper
or_if i'm_rock you're_scissors
or_even_if i'm_paper you're_rock

i_win i_win_if or_if
i_win i_win
i_win or_even_if

i_lose_if i'm_paper you're_scissors
or_if i'm_scissors you're_rock
or_even_if i'm_rock you're_paper

i_lose i_lose_if or_if
i_lose i_lose
i_lose or_even_if

i_don't_win not i_win
i_don't_lose not i_lose
we_tie i_don't_win i_don't_lose
we_tie we_tie
we_don't_tie not we_tie

print now if i_win i_lose not i_win i_win
print but not we_tie we_don't_tie i_lose i_don't_win we_don't_tie
print right now i_lose i_win i_win we_don't_tie i_don't_win
print i_don't_win but we_tie or i_don't_win we_tie now

Senaryo etkileşimli olarak çalıştırılabilir, ardından hareketinizi yazıp ardından Enter .

Örnek kullanım (tercümanı adlandırdığınız varsayılarak nand.py):

$ python nand.py rps.nand
p
s
Win!

$ python nand.py rps.nand
r
r
Draw

$ python nand.py rps.nand
s
p
Lose

Düzenleme: Sadece ferNANDo'nun Java ile rekabet edebildiğini kanıtlamak için, işte 259 baytlık bir 'golf' versiyonu . Mantık çok farklıdır; denetler not winve not tiebirkaç NAND kapısından tasarruf eder (çünkü o zaman sadece notoyuncunun hamlelerinin sürümlerine ihtiyacım var ve çünkü not loseçıktı için gerekli değildi). Olsa da, neredeyse okumak için ilginç değil.

1 _ _ _ _ _ _ A b
B 1 b
C A B
o
P 1 ?
s 1 ?
p 1 P
S 1 s
o p s
o o
o
r P S
r r
0 1 1 1 0 0 P s
0 0 0 0 1 0 1 0
t s A
u r B
v p C
W t u
W W
W v
t p A
u s B
v r C
D t u
D D
D v
w 1 W
d 1 D
l W D
l l
0 1 0 w l 1 w w
0 1 1 d D l W D
0 1 1 l w w D W
0 W 1 d 0 W d 1

2
HAHAHA o_shi- o_shi- o_shi-Bu çok komik bir yorum yaptı.
jdstankosky

1
@jdstankosky belki biraz yuvarlanmaya aşırı tepki gösterir q, ancak mantıklı bir şey yapar ve yeniden yapar.
primo

5

Python 3.x: 74 Karakterler

import time
A,f="psr",time.gmtime()[5]%3
print(A[(A.find(input())+f)%3],f)

Nasıl çalışır

Before Machine Proceeds it determines the outcome of the game and based 
on the outcome, it determines the choice which would result in the outcome
viz Human's choice


\     Outcome
 \    0  1  2
  \_____________
H  | 
U 0|  0  1  2
M 1|  1  2  0
A 2|  2  0  1
N  |

Where Choices are represented as 
0 --> Paper
1 --> Scissor
2 --> Rock

Outcome (From Computer's Perspective)
0 --> Draw
1 --> Win
2 --> Fail

Given the sequence of choices as a string
"psr"
So its easy to see, if computer needs to win, it needs to choose the character
next to what human chooses. 
If computer needs to loose, it needs to choose the previous character to what
human chooses


MACHINE's|      CHOICES    |  Formulation
FATE     |-----------------|  For Machine's
         |  P     S      R |  Choice
---------|-----------------|-----------------------------
WIN(1)   |        H ---> M | (CHOICE+1) % 3 = (CHOICE+WIN)%3 
---------|-----------------|-----------------------------
LOSS(2)  |  M     H -----\ | (CHOICE+2)%3   = (CHOICE+LOSS)%3 
         |  ^            | |
         |  |____________| |
---------|-----------------|------------------------------       
DRAW(0)  |        H        | (CHOICE+0)%3   = (CHOICE+DRAW)%3
         |        M        |  
---------|-----------------|         

Combining all the above we have

MACHINE's CHOICE = (HUMAN CHOICE + MACHINE's FATE) % 3

Kadere dayanarak, seçimine göre formülün ne olması gerektiğini belirler.

result = (User_choice + machines_fate) % no_of_choices

machine_choice = "psr"[result]

Golfsüz Versiyon

import time
choices = "psr"
#time.gmtime() returns the time structure in gmt
#time.gmtime()[5] is the current second tick
fate = time.gmtime()[5]%3
user_choice = input()
result = (choices.find(user_choice)+fate)%len(choices)
machine_choice = choices[result]
print(machine_choice, fate)

Örnek çalışma

D:\temp\rivalry>rps.py
r
r 0

D:\temp\rivalry>rps.py
r
p 1

D:\temp\rivalry>rps.py
p
r 2

D:\temp\rivalry>rps.py
p
r 2

D:\temp\rivalry>rps.py
p
s 1

D:\temp\rivalry>rps.py
p
s 1

D:\temp\rivalry>rps.py
p
p 0

2
ilginç, sonucu önceden kararlaştırın, sonra sonucu almak için ne
yazıyorsa

1
Saniyede saniyeler "program seçimi ('r', 'p' veya 's') sahte rastgele olmak zorunda kaldığından emin değilim . Milisaniye muhtemelen olsa da.
primo

4

Lua, 87

c,n=os.time()%3+1,'rps'print(n:sub(c,c),({'Draw','Win','Defeat'})[(n:find(...)-c)%3+1])

Kullanımı:

$ lua rps.lua p
s   Defeat

Ungolfed:

names = 'rps'
comp_idx = os.time()%3 + 1                -- 1, 2 or 3 (depends on timer)
comp_move = names:sub(comp_idx, comp_idx) -- 'r', 'p' or 's'
user_move = ...                           -- input parameter: 'r', 'p' or 's'
user_idx = names:find(user_move)          -- 1, 2 or 3
delta_idx = (user_idx - comp_idx) % 3     -- 0, 1 or 2
all_results = {'Draw', 'Win', 'Defeat'}   -- [1]=='Draw', [2]=='Win', [3]=='Defeat'
game_result = all_results[delta_idx + 1]
print(comp_move, game_result)

'Yenmek' yerine 'Lose' ve 'Çiz' yerine 'Kravat' kullanarak 3 karakter kaydedebilirsiniz. ;)
Dondurulmuş Bezelye

4

GolfScript 62

Howard'ınkinden çok daha sıkıcı, alternatif bir GolfScript çözümü :).

Program rastgele bir hareket seçer ve sonucu kullanıcı açısından görüntüler.

Kod

'rssppr'.[6rand=]''+:§@+..&,({?)§\'Lose''Win'if}{;;§'Draw'}if`

Örnek çalışma

> yankı s | yakut golfscript.rb rps.gs

r "kaybetmek"

Çevrimiçi test

Programı çalıştırabilir ve farklı girişleri burada deneyebilirsiniz: http://golfscript.apphb.com/?c=OydzJwoKJ3Jzc3BwcicuWzZyYW5kPV0nJys6wqdAKy4uJiwoez8pwqdcJ0xvc2UpJ1Fdpy2

Bununla birlikte, genellikle komut satırında geçen parametrenin (kullanıcı taşıma) kodun kendisindeki yığına eklendiğini unutmayın (bu çevrimiçi araçta "gerçek" komut satırı parametreleri sağlama yolu yoktur).

"Ungolfed" versiyonu

Unlocked'in GolfScript için ne anlama geldiği hakkında hiçbir fikrim yok , bu yüzden yorum eklemeye çalıştım. Umarım bu kodun nasıl çalıştığını açıklar ve biraz daha okunaklı hale getirir:

# initially, the input (user's move) is on the stack

'rssppr'                # push the string 'rsspr' on the stack...
.                       # ...twice.

[
    6rand               # get a pseudo-random integer in the [0-5] range
    =                   # use the random index to get 
                        # a letter from the string above

]''+                    # workaroud to get the actual letter instead of the
                        # ASCII code

:§                      # assign the randomly chosen letter (computer's move)
                        # to a nice variable called "§"

@                       # rotates last 3 elements on the stack, bringing
                        # the user input in the uppermost position
                        # So, now we have: "rssppr" <computer_move> <user_move>
                        # on the stack

+                       # concatenate the two moves, so now we have a string
                        # that contains both (ex: "rs")

..                      # copy the move string twice
&                       # do a setwise AND to get the DISTINCT elements
,(                      # get the length of the resulting string and subtract 1
                        # (now we have 0 if the letters were equal and non-zero otherwise)

{                       # beginning of block to execute when the moves are different:

                        # now we have on the stack two strings:
                        #     - the string 'rssppr'
                        #     - the string containing the moves (ex: 'rs')

    ?                   # find the second string inside the first one,
                        # and get the index at which it occurs
                        # (or -1 if it does not)

    )                   # increment that number (we now get 0 if no occurrence, 1 otherwise)

    §                   # recall the § variable (so we display the computermove)
    \                   # rotate the uppermost two stack entries

    'Lose''Win'if       # if the move pair is found in the 'rssppr' string, 
                        # then print 'Lose', otherwise print 'Win'
}

{                       # beginning of block to execute when the moves are identical:

    ;;                  # discard the latest two stack items (not needed in this case)
    §                   # display computer's move
    'Draw'              # display the text 'Draw'
}
if                      # if computer's and user's moves were NOT equal, 
                        # execute the first block.
                        # if they were, execute the second block

`                       # put the last word in quotes to separate it from computer's move

4

C, 92 86 karakter

main(y){
    srand(time(0));
    y="rps"[rand()%3];
    printf("%c%c\n",y,"LWWTLLW"[getchar()-y+3]);
}

Bilgisayarın seçimini ve kullanıcının bakış açısından sonucu yazdırır - W = kazanır, L = kaybedersin, T = bağla. Seçimlerin ASCII değerleri göz önüne alındığında,
basit formül x-yberabere 0 verir (açıkçası) ve her diğerinde benzersiz bir değer verir.


4

Python 2 ( 86 84 80) 78), Python 3 - 76 karakter

0 - kravat, 1 - kaybet, 2 - kazan

from random import*
a=raw_input()
b=choice('psr')
print(a!=b)+(b+a in'rpsr'),b

from random import*
a=input()
b=choice('psr')
print((a!=b)+(b+a in'rpsr'),b)

Ungolfed

from random import*
moves = 'psr'
inp   = raw_input()
comp  = choice(moves)
match = comp+inp
is_not_tie = inp!=comp
wins = 'r' + moves         #rpsr; rock beats scissors, scissors beats paper, paper beats rock
print is_not_tie + (match in wins), comp

Nasıl çalıştırılır: python file_name_here.py

Sorunlar:
Bilgisayar AI: 35 karakter


1
Güzel! AYine de ihtiyacın olduğunu sanmıyorum ve başka bir karakter kurtarabilirsin from random import*.
grc

@ grc: teşekkürler, denemedim from random, çünkü değiştirmeyeceğini düşündüm ...
beary605

(A == b) * 2 ila (a! = B) değiştirerek ve sonuçları "0-kravat, 1-kazan, 2-kaybet" olarak değiştirerek 2 karakter daha
sorabilirsiniz

Üzgünüz, "" 0-kravat, 1-kaybet, 2-kazan "anlamına geliyordu
Dhara

@Dhara: Teşekkürler, bunu çözemezdim. insan yapımı: Ah! Bunu düzelteceğim.
beary605

4

İlk önce başkalarını incelemeden deneyin.

golf: 107 85 bayt

i=prompt(),c="rps"[new Date%3],w={r:"s",p:"r",s:"p"};alert(c+(i==w[c]?2:w[i]==c?1:3))

çıktı [npc-choice] [1: kazan, 2: kayıp, 3: bağla]

ungolfed:

var input = prompt(),
    choices = ["r","p","s"],
    computer_choice = choices[Math.floor(Math.random() * 3)],
    outcomes = {'r':'s','p':'r','s':'p'},
    winner;

    if( input == outcomes[computer_choice] ) {
        winner = 'NPC';
    } else if ( computer_choice == outcomes[input] ) {
        winner = 'You';
    } else {
        winner = 'No one, it was a Tie!';
    }

    alert('Computer chose: ' + computer_choice + '\n' +
          'The winner is: ' + winner);

4

PowerShell: 144 133 117 111 92 73

Orijinalden gelen değişiklikler:

  • Danko Durbic'in üç oyunculu çift ve tek çözümlerini gördükten sonra senaryoyu tamamen yeniden yazdı. .
  • $ S, karakter dizisi yerine tek bir dizeye değiştirildi.
  • .NET sınıfını ve yöntemini hecelemek yerine, $ s'de doğrudan bir yöntem olarak IndexOf kullanıldı.
  • Kaldırılan yedekli %3s.

Hepsi söylendi, neredeyse cevabımın yarısını ikiye böldüm!

Golf kodu:

$p=($s='rps').IndexOf((read-host));$s[($c=Random 3)];"TWLLTWWLT"[$p+$c*3]

Konsoldan doğrudan çalıştırılabilir.

Ungolfed, yorumlarla:

# Variable $p will store the player's selection as a ternary digit by finding its position in a string containing the possible choices.
$p=(
    # Possible choices will be stored in a variable, $s, for later reuse.
    $s='rps'
# Get the position of the player's choice from $s.
).IndexOf((read-host));

# Express the computer's choice by outputting the appropriate character from $s.
$s[(
    # Computer's choice will be stored as a ternary digit in $c.
    $c=Random 3
)];

# Outcome for the player will be chosen from a string of possible outcomes by looking up the decimal repesentation of a two-digit ternary number.
# The threes digit is represented by $c, ones digit by $p.
"TWLLTWWLT"[$p+$c*3]

# Variable cleanup - do not include in golfed code.
rv p,s,c

Bazı örnekler konsolda çalışıyor:

enter image description here


3

JAVA 259 :(

class c {public static void main(String[]a){char y=a[0].charAt(0);char m="rps".charAt(new java.util.Random().nextInt(3));if(y==m)a[0]="T";else if((y=='r'&& m=='s')||(y=='s'&& m=='p')||(y=='p'&& m=='r'))a[0]="1";else a[0]="0";System.out.println(m+":"+a[0]);}}

Çok fazla kodlanmamış kod:

class c {
    public static void main(String[] a) {
        char y = a[0].charAt(0);
        char m = "rps".charAt(new java.util.Random().nextInt(3));
        if (y == m) {
            a[0] = "T";
        } else if ((y == 'r' && m == 's') || (y == 's' && m == 'p') || (y == 'p' && m == 'r')) {
            a[0] = "1";
        } else {
            a[0] = "0";
        }
        System.out.println(m + ":" + a[0]);
    }
}

Örnek çalışır:

C:> java cr

s: 1

C:> Java cp

s: T

C:> Java CS

s: T


3

Befunge: 107 karakter

~v@,"w"<   <   <  <
v?v3.14159265@,"l"<
"""358979323846>3-|
rps26433832>:1+|
"""7950>:2+|
>>>:,-:|
28@,"t"<

Biraz dağınık. Küçültülebilir, soru ne kadar.


3

JavaScript (87)

golfed:

o='LDW'[2*((a=prompt())+(b='prs'[new Date%3])!='ps'&a<b|a+b=='sp')+ +(a==b)];alert(b+o)

Ungolfed:

var player = prompt(), 
    computer = 'prs'[new Date%3], // Date mod 3 "pseudo-random"
    outcome = 'LDW'[2*(player+computer != 'ps' 
                    & player < computer 
                    | player + computer == 'sp') // convert boolean W/L outcome to int (0,2)
              +
              +(player == computer)]; // convert D outcome to int (0,1)
alert(computer + outcome);

Kodu çalıştırmak için tarayıcınızın javascript konsoluna kolayca yapıştırabilirsiniz.

Bilgisayarın seçimini yazdırmadan önce sonucu basabilirsem (83) :

alert('LDW'[2*((a=prompt())+(b='prs'[new Date%3])!='ps'&a<b|a+b=='sp')+ +(a==b)]+b)

2

K, 67

{-1'f:x,*1?"rps";$[f in b:("pr";"rs";"sp");"W";f in|:'b;"L";"D"]}

Kazanmak / kaybetmek / çekmek için W, L, D basar.

Ungolfed:

rps:{[x]
    res:x,*1?"rps";        // join user input to random selection of r,p,s
    -1'f;                  // print the user input and the program selection to stdout
    wins:("pr";"rs";"sp"); // the universe of winning combinations
    losses:|:'wins;        // reverse each win to the get losses

    $[f in wins;    
        "win";
    f in losses;
        "lose";
    "draw"]
    }

Veya daha okunaklı olan Q'da:

rps:{[x]
    res:x,rand["rps"];        // join user input to random selection of r,p,s
    -1 each f;                // print the user input and the program selection to stdout
    wins:("pr";"rs";"sp");    // the universe of winning combinations
    losses:reverse each wins; // reverse each win to the get losses

    $[f in wins;    
        "win";
    f in losses;
        "lose";
    "draw"]
    }

Örnek çalışma:

k){-1'f:x,*1?"rps";$[f in b:("pr";"rs";"sp");"W";f in|:'b;"L";"D"]}"r"
r
s
"W"
k){-1'f:x,*1?"rps";$[f in b:("pr";"rs";"sp");"W";f in|:'b;"L";"D"]}"s"
s
s
"D"
k){-1'f:x,*1?"rps";$[f in b:("pr";"rs";"sp");"W";f in|:'b;"L";"D"]}"p"
p
s
"L"

2

Javascript, 117 karakter

İşte soruna veri odaklı bir yaklaşım. Bu muhtemelen el ile haritalamak yerine kazan / kaybet / çiz verilerinin üretilmesiyle optimize edilebilir, ancak bu bir başlangıçtır :)

golfed:

alert((r=[{v:"r",r:d="D",p:w="W",s:l="L"},{v:"p",r:l,p:d,s:w},{v:"s",r:w,p:l,s:d}][Math.random()*3|0]).v+r[prompt()])

Ungolfed:

//Output the result to the user
alert(
    (
        //Store the random computer outcome data
        randomRPSData =
            //Create the data for if the computer chooses r, p, or s
            [
                {
                    value: "r",
                    r: (d = "Draw"),
                    p: (w = "Win"),
                    s: (l = "Lose")},
                {
                    value: "p",
                    r: l,
                    p: d,
                    s: w},
                {
                    value: "s",
                    r: w,
                    p: l,
                    s: d}
            ]
            //Have the computer pick a random variable
            [Math.random() * 3 | 0]

    //Output the value the computer chose
    ).value

    //Output whether the user won or not
    + r[prompt()]
);

Sonunda, işte ikisi ile bir keman .


1

JavaScript: 256

golfed:

i=prompt(),a=['p','r','s'];a=a[Math.floor(Math.random()*(3-1+1))+1];if(i==a){alert('d');}else if(i=='p'){if(a=='s'){alert('l');}else{alert('w');}}else if(i=='r'){if(a=='s'){alert('w');}else{alert('l');}}else if(i=='s'){if(a=='r'){alert('l');}else{alert('w')}}

ungolfed:

i=prompt(),a=['p','r','s'];
a=a[Math.floor(Math.random()*(3-1+1))+1];
if(i==a){
    alert('d');
}
else if(i=='p'){
    if(a=='s'){
        alert('l');
    }else{alert('w');}
}else if(i=='r'){
    if(a=='s'){
        alert('w');
    }else{alert('l');}
}else if(i=='s'){
    if(a=='r'){
        alert('l');
    }else{alert('w')}
} 

1

Clojure:

(def r 0) (def s 1) (def p 2)
(def object-name #(get {'p "Paper", 's "Scissors", 'r "Rock"} %))
(def result-name #(get {\d "Draw", \w "Win", \l "Lose"} %))
(defn computer-choice [] (nth ['r 's 'p] (int (rand 3))))
(defn game [a b] (get "dwlldwwld" (+ (* 3 a) b) ))
(defn print-game [user comp result] (print (format
  "User: %s\nComputer: %s\nResult: %s\n" 
  (object-name user) (object-name comp) (result-name result))))
(println "Enter 'p', 's' or 'r' and press return")
(let [comp (computer-choice),  user (read)]  (print-game user comp (game (eval user) (eval comp))))

Mini versiyon (129 kod karakter):

java -jar clojure.jar -e \
"(def r 0)(def s 1)(def p 2)(let[u(read),c(nth['r 's 'p](int(rand 3)))](print c)(print (get \"dwlldwwld\"(+(* 3(eval u))(eval c)))))"

1

JAVA (387) birinci kod golf!

import java.util.HashMap;public class _ {public static void main(String i[]){HashMap l = new HashMap(){{put('r',0);put('p',1);put('s',2);put(0,'T');put(1,'L');put(2,'W');}};char u =i[0].charAt(0);char c ="rps".charAt((int)(Math.random()*3)%3);int[][] m =new int[][]{{0,1,2},{2,0,1},{1,2,0}};System.out.println("U"+u+"C"+c+"R"+(Character)l.get(m[(Integer)l.get(u)][(Integer)l.get(c)]));}}

Ungolfed

import java.util.HashMap;
public class _ {
    public static void main(String[] input) {
       input = new String[] {"s"};
       HashMap lookup = new HashMap(){{
           put('r', 0);
           put('p', 1);
           put('s', 2);
           put(0, 'T');
           put(1, 'L');
           put(2, 'W');
       }};
       char user = input[0].charAt(0);
       char computer = new char[] {'r', 'p', 's'}[(int)(Math.random()*3)%3];
       int[][] matrix = new int[][] {{0,1,2}, {2,0,1}, {1,2,0}};

       Integer userChoice = (Integer) lookup.get(user);
       Integer computerChoice = (Integer) lookup.get(computer);
       Character result = (Character) lookup.get(matrix[userChoice][computerChoice]);

       System.out.println("u:" + user + ",c:" + computer + ",r:" + result);
    }
    /*
     t = 0, l = 1, w = 2
     *
        +---------------+
        | * | r | p | s |
        +---------------+
        | r | 0 | 1 | 2 |
        +---------------+
        | p | 2 | 0 | 1 |
        +---------------+
        | s | 1 | 2 | 0 |
        +---------------+
     */
}

Golf (Aralık / Girinti)

import java.util.HashMap;
public class _ {
public static void main(String i[]) {
    HashMap l = new HashMap(){{
        put('r',0);put('p',1);put('s',2);put(0,'T');put(1,'L');put(2,'W');
    }};

    char u =i[0].charAt(0);char c = "rps".charAt((int)(Math.random()*3)%3);
    int[][] m =new int[][]{{0,1,2},{2,0,1},{1,2,0}};

    System.out.println("U"+u+"C"+c+"R:"+(Character)l.get(m[(Integer)l.get(u)][(Integer)l.get(c)]));
}}

En kısa kod değil ama ilk denemem


1
Uygulayabileceğiniz bazı iyileştirmeler: 1) import java.util.*2) HashMap l-> Map l3) (int)yerine (Integer)4) new Random().nextInt(3)5) atla new int[][]6) atı kaldır (Character)7) yerine karakterleri kullanın.
Howard

1

Git (169)

Golf:

package main
import("fmt";"os")
func main(){v:=map[uint8]int{114:0,112:1,115:2}
u:=os.Args[1][0]
c:="rps"[os.Getpid()%3]
fmt.Printf("%c\n%c\n",c,"TWL"[(3+v[c]-v[u])%3])}

Ungolfed (tarafından biçimlendirildiği gibi go fmt):

package main

import (
    "fmt"
    "os"
)

func main() {
    v := map[uint8]int{114: 0, 112: 1, 115: 2}
    u := os.Args[1][0]
    c := "rps"[os.Getpid()%3]
    fmt.Printf("%c\n%c\n", c, "TWL"[(3+v[c]-v[u])%3])
}

Koşmak :

git main.go p koş

s

W


1

Pyth , 23

J"rps"K+wOJK%-XJ'KXJtK3

Çıktı biçiminde:

Kravat: 0 Kazanma: 1 Kayıp: 2

Açıklama:

J"rps"             J="rps"
K+wOJ              K=input()+random_choice(J)
K                  print K
  XJ'K             index of K[0] in J
      XJtK         index of K[1] in J
 -XJ'KXJtK         difference of above indexes
%-XJ'KXJtK3        above difference mod 3

Aşağıdaki gibi çalıştırın:

$ cat rps
J"rps"K+wOJK%-XJ'KXJtK3
s
$ cat rps | python3 pyth.py
< Extraneous debug output removed>
sp
1

Yalnızca 4 karakter daha, kravat için T, kazanmak için W ve zarar için L kullanabilirsiniz:

J"rps"K+wOJKr@"TWL"-XJ'KXJtK

Her şey endeks farkına kadar aynı, bu noktada farkı dizenin indeksi olarak kullanıyoruz "TWL".


Not: Görev gönderildikten sonra bu dili geliştirirken, bugüne kadar mücadeleyi görmedim. Bu zorluk dilin hiçbir yönünü etkilemedi.


0

Harika, 89

v='rps'
r=new Random().nextInt(3)
print"${v[r]}${'TLW'[((r-v.indexOf(this.args[0]))%3)]}"

Kullanıcı seçimini argüman olarak alır. Örnek:

groovy rps.groovy p
sL

0

C # ve LinqPad 133

golfed:

char i,c,r;i=Console.ReadLine()[0];var a="prsp";c="prs"[new Random().Next(3)];r=i==c?'T':a.Contains(""+i+c)?'W':'L';(c+">"+r).Dump();

ungolfed:

        char i, c, r; // i for input / c for choosen by computer / r for result
        i = Console.ReadLine()[0]; //getting input in LinqPad
        var a = "prsp"; 
        c = "prs"[new Random().Next(3)]; // Computer choose a random string
        r = i == c ? 'T' : a.Contains("" + i + c) ? 'W' : 'L'; (c + ">" + r).Dump(); //check for win - dump for output in LinqPad

örnek çıktı (giriş s): r> L // Bilgisayar rock'ı seçer (r) -> bu yüzden kaybettik


0

JavaScript (79)

Eski bir tane çarpmak, ama işte başlıyoruz ...

Pegnatit, piroksenit, scoria, sovit, kimberlit, trondjemit, tüf veya benzeri herhangi bir kayayı kullanabileceğiniz ilave bonusu kullanarak. Tek sınırlama kullanamazsınız pya da s ;-)


Giriş:

r = rock      (Or , ...)
p = paper
s = scissors

Çıktı:

[computers choice][0=Loss, 1=Win, 2=Draw]

Örnek:

User  Computer  Result
r     r         r2
r     p         p0
r     s         s1

Golf kodu:

u=~~{p:1,s:2}[prompt()],c=new Date%3;alert('rps'[c]+(u==c?2:!u&c>1|u&!c|u>1&c))

Kullanılan temel numaralar:

1. u = ~~{}[prompt()]

       Nesnenin kullanılması {}ve kullanıcı girişi ile değer alınması prompt(). Çok uzak çok iyi. Daha sonra NOT operatörünü kullanarak r : 0onu dönüştürmeye zorlayabiliriz . Sık sık zemin numaralara kullanılan, aynı zamanda sahiptir (avantajını) iade etme , diğer operatörler olur, örneğin şöyle: .0~~NaN+{a:1, b:2}['c']

2. c = new Date%3

       Tarih, örneğin +new Datedoğrudan zaman damgasına dönüştürmek için kullanıldığında sık sık kandırılır , aksi halde dize temsili elde edilir. Burada mod one kullanarak aynı etkiyi elde edersiniz .

3. 'rps'[c]

       Bilgisayarlara seçenek sunan dizgide dizinlenmiş erişim 0 = r, 1 = pveya 2 = s.

4. (u==c ? 2 : !u&c>1 | u&!c | u>1&c )

   IF  u == c
       Draw                    (aka 2)
   ELSE IF !u&c>1|u&!c|u>1&c 
       Win                     (aka 1)
   ELSE
       Loss                    (aka 0)
   ENDIF


...

Ungolfed kodu şöyle olabilir:

function rock_paper_scissors() {
    var choices = {
            r : 0,
            p : 1,
            s : 2,
        },
        tr_table = ['Rock','Paper','Scissors'],
        user, pc, result
    ;

    function get_input() {
        var input = prompt("Enter your choice `r', `p' or `s':")
                    .toLowerCase();

        if (!/^[rps]/.test(input)) {
            console.warn("Bad input. Please choose `r', `p' or `s'.");
            // return get_input();
            return null;
        }
        return input[0];
    }
    function report(c1, c2) {
        if (c1 === pc) {
            return 'Draw';
        } else if (
            (c1 === 0 && c2  >  1) ||
            (c2 === 0 && c1 === 1) ||
            (c1  >  1 && c2  >  0)
        ) {
            return 'Win';
        } else {
            return 'Loss';
        }
    }

    if ((user = get_input())) {
        user = choices[user];
        pc = Math.floor(Math.random() * 3);
        result  = 
            'Computers choice: ' + tr_table[pc] + ', ' +
            'Your choice: ' + tr_table[user] + ', ' +
            'Result=' +  report(user, pc);
        console.log(result);
    }
    return result;
}

rock_paper_scissors();

0

Golf Betiği - 29

Bu, bu seferki gerçek bir cevaptır (size bakarken n"Draw": P).

'rps'.@\?3rand.@- 3%@@[=]''+\

Ungolfed:

'rps'3rand[=]''+.2$={\;'
T'}{.@'rspr'.@?@@(;\?='
L''
W'if=}if

İle çalıştırabilirsiniz ruby golfscript.rb MyCode.txtMyCode.txt , program kodu nerede .

Örnek çalışır (tümü "r" girişiyle, ancak her şeyle çalışır) (beraberlik 0, kazanç 2, kayıp 1'dir):

ruby golfscript.rb MyCode.txt
r0
ruby golfscript.rb MyCode.txt
p2
ruby golfscript.rb MyCode.txt
s1

Herhangi bir versiyonun açıklaması ve / veya potansiyel bir gelişme görmek istiyorsanız, bana söyleyin.


0

Javascript, 65 71 70

Bilgisayarsız çıktı seçimi: 65

alert('-+0+0+0'['rppssrr'.indexOf('rps'[new Date%3]+prompt())+1])

Sadece bu çözümü test etmek doğru:

for(x in {r:0,p:0,s:0})
  for(y in {r:0,p:0,s:0})
    console.log("%s %s %s", x, y, '-+0+0+0'['rppssrr'.indexOf(x+y)+1])

Bilgisayar seçimi çıkışı ile: 71

alert((c='rps'[new Date%3])+'-+0+0+0'['rppssrr'.indexOf(c+prompt())+1])

70

alert((g='rps'[new Date%3]+prompt())+-('srps'.match(g)?-1:g[0]!=g[1]))

ve test:

for(x in {r:0,p:0,s:0})
  for(y in {r:0,p:0,s:0})
    console.log((g=x+y)+-('srps'.match(g)?-1:g[0]!=g[1]))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.