2012-07-07 15 views
5

तो मैं एक रॉक कागज कैंची खेल लिख रहा था जब मैं इस समारोह लिखने के लिए आया था:रॉक, पेपर, कैंची। गणित का उपयोग कर जीत/हानि/टाई निर्धारित करें?

a खिलाड़ी एक कदम है, b खिलाड़ी दो के इस कदम है। मुझे यह समझने की ज़रूरत है कि अगर खिलाड़ी जीता, खो गया, या बंधे।

//rock=0, paper=1, scissors=2 
processMove(a, b) { 
    if(a == b) ties++; 
    else { 
      if(a==0 && b==2) wins++; 
     else if(a==0 && b==1) losses++; 
     else if(a==1 && b==2) losses++; 
     else if(a==1 && b==0) wins++; 
     else if(a==2 && b==1) wins++; 
     else if(a==2 && b==0) losses++; 
    } 
} 

मेरा प्रश्न है: इस समारोह को सबसे सुंदर तरीका क्या लिखा जा सकता है?

संपादित करें: मैं एक-लाइनर की तलाश में हूं।

+1

पठनीय सही कोड की तलाश एक-लाइनर की तलाश करने से कहीं बेहतर है। –

+1

इसी तरह के प्रश्न के उत्तर पर एक नज़र डालें: http://stackoverflow.com/a/9553712/1207152 – sch

उत्तर

12
if (a == b) ties++; 
else if ((a - b) % 3 == 1) wins++; 
else losses++; 

मैं करने की जरूरत है पता है कि आप किस भाषा का उपयोग सख्ती से एक लाइनर में बदलने के लिए कर रहे हैं ...

जावास्क्रिप्ट (या अजीब मापांक के साथ अन्य भाषाओं) के लिए उपयोग करें:

if (a == b) ties++; 
else if ((a - b + 3) % 3 == 1) wins++; 
else losses++; 
+0

रॉक बनाम कैंची काम नहीं करते: '(0 - 2% 3) = -2'। 'जावास्क्रिप्ट' –

+3

का उपयोग करना ऐसा लगता है कि इसमें ब्रांड्स की एक जोड़ी गुम है: ((ए-बी)% 3 == 1)। सी ऑपरेटर मॉड्यूलो घटाव की तुलना में संचालन के क्रम में उच्च है। – Tim

7

एक 3x3 मैट्रिक्स "अधिक सुरुचिपूर्ण" होगा, मुझे लगता है।

char result = "TWLLTWWLT".charAt(a * 3 + b); 

(संपादित: भूल कि a और b पहले से ही शून्य मूल के थे।)

2

मैं तुम्हें इस तरह terniary ऑपरेटर इस्तेमाल कर सकते हैं लगता है -

if (b==0) a==1? wins++ : loss++; 

if (b==1) a==1? loss++ : wins++; 

if (b==2) a==1? loss++ : wins++; 
2

आप एक सरल गणितीय सूत्र के साथ यह कर सकते हैं परिणाम प्राप्त करने के लिए और फिर if इस तरह के साथ तुलना करें:

var moves = { 
    'rock': 0, 
    'paper': 1, 
    'scissors': 2 
}; 
var result = { 
    'wins': 0, 
    'losses': 0, 
    'ties': 0 
}; 
var processMove = function (a, b) { 
    var processResult = (3 + b - a) % 3; 
    if (!processResult) { 
    ++result['ties']; 
    } else if(1 == processResult) { 
    ++result['losses']; 
    } else { 
    ++result['wins']; 
    } 
    return result; 
}; 

jsFiddle Demo


एक पंक्ति processMove वापसी के बिना समारोह:

var processMove = function (a, b) { 
    ((3 + b - a) % 3) ? 1 == ((3 + b - a) % 3) ? ++result.losses : ++result.wins : ++result.ties; 
}; 
1

जावा में आप इसे कैसे करते हैं?

परिणाम = (कंप - एक्स)% 3;

System.out.println (result); 
if (result == 0)// if the game is tie 
{ 
    System.out.println ("A Tie!") ; 
} 

else if (result == 1 || result == 2) 
{ 
    //System.out.println (user + " " + "beats" + " " + computer_choice + " you win"); 
    System.out.println ("comp win"); 
} 

else 
{ 
    System.out.println ("you win"); 
    //System.out.println (computer_choice + " " + "beats" + " " + user + "you lose"); 
} 
संबंधित मुद्दे