স্কোর রক-পেপার-কাঁচি


70

"রক", "পেপার" বা "কাঁচি" এর দুটি স্ট্রিং ইনপুট দেওয়া হয়েছে, আরপিএস রাউন্ডের ফলাফল নির্ধারণ করে । প্রথম প্লেয়ার জিতলে আউটপুট 1, দ্বিতীয় খেলোয়াড় জিতলে -1, বা টাইয়ের জন্য 0।

Rock Rock -> 0
Rock Paper -> -1
Rock Scissors -> 1
Paper Rock -> 1
Paper Paper -> 0
Paper Scissors -> -1
Scissors Rock -> -1
Scissors Paper -> 1
Scissors Scissors -> 0

আপনাকে অবশ্যই ইনপুট হিসাবে "রক", "পেপার" এবং "কাঁচি" ব্যবহার করতে হবে। প্রথম খেলোয়াড়ের পছন্দটি (ধারাবাহিকভাবে) প্রথম বা দ্বিতীয় দেওয়া হয় তা আপনি চয়ন করতে পারেন। আপনি বিকল্পভাবে তাদের একক অক্ষর বা খালি বিভাজক সহ একক ইনপুট হিসাবে নিতে পারেন। আপনার ইনপুট ফর্ম্যাটে তিনটি পছন্দের 9 টি সম্ভাব্য জুটিগুলির মধ্যে ইনপুটটি গ্যারান্টিযুক্ত।

আউটপুটটি 1 নম্বর, 0, বা -1, বা এর স্ট্রিং প্রতিনিধিত্ব হওয়া উচিত। ভাসা ভাল আছে। তাই +1, +0,এবং -0

সম্পর্কিত: একটি আরপিএস গেম কোডিং


লিডারবোর্ড:


না খালি বিভাজক সঙ্গে একটি একক ইনপুট উদাহরণ "rockpaper" জন্য মানে?
এমিগিনা

1
@ এমিগনা হ্যাঁ, তবে হিসাবে মূলধনযুক্ত RockPaper
xnor

15
এটি আমার প্রত্যাশার চেয়ে আরও মজাদার ছিল, আমার প্রভু এটি করার কিছু দুর্দান্ত উপায় আছে।
ম্যাজিক অক্টোপাস উরন

ইনপুট কি দুটি স্ট্রিংয়ের অ্যারে হতে পারে?
লুইস মেন্ডো

@ লুইস মেন্ডো হ্যাঁ
xnor

উত্তর:


73

গ্রোভি, 67 56 50 বাইট

{a,b->Math.sin(1.3*((int)b[0]-(int)a[0])).round()}

এটি অনলাইন চেষ্টা করুন!

দেখা যাচ্ছে যে শিলা, কাগজ, কাঁচি গেমের বেশ দুর্দান্ত সম্পত্তি রয়েছে।
স্ট্রিং এ এবং বি দেওয়া, প্রত্যেকের প্রথম চিঠিটি নিন, এটি নিম্নলিখিত দুটি ক্ষেত্রে ফলাফল:R,P,S

সম্ভাব্য মানগুলির সম্পূর্ণ তালিকা (যখন 2 টি পছন্দ একত্রিত হয়):

XX=ASCII=Y=Wanted output
RR=82-82=0=0
PP=80-80=0=0
SS=83-83=0=0
RS=82-83=-1=1
RP=82-80=2=-1
PS=80-83=-3=-1
PR=80-82=-2=1
SR=83-82=1=-1
SP=83-80=3=1

তালিকাটিকে পুনরায় সাজানো:

-3->-1
-2->1
-1->1
0->0
1->-1
2->-1
3->1

আমাদেরকে এমন ক্রম দেয় যা বিপরীত সাইনোসয়েডাল দেখায় এবং আপনি এই সূত্রটি প্রায় আনুমানিক হিসাবে উপস্থাপন করতে পারেন (এবং প্রায় আমার অর্থ কাজ করার পক্ষে যথেষ্ট পরিমাণে, আপনি একটি সমীকরণ পেয়েছিলেন যা মারা গেছে তবে আরও বেশি বাইট খরচ পড়তে পারে):

-sin((4*a[0]-b[0])/PI).roundNearest() = sin(1.3*(b[0]-a[0])).roundNearest()

4 / পাই থেকে 1.3 সরলকরণের পরামর্শ প্রথমে @ ফ্লোয়ার দ্বারা এবং তারপরে @ টাইটাস দ্বারা মোট 6 বাইটের মোট সঞ্চয়ের জন্য পরীক্ষা করা হয়েছিল ।

সমীকরণ ব্যাখ্যা

গ্রোভির দ্বৈত বৃত্তাকার বৈশিষ্ট্যগুলি ব্যবহার করে এটি শিলা-কাগজ-কাঁচিগুলির জন্য সঠিক আউটপুট দেয়।


05 এ বি 1 ই , 10 বাইট (অ-প্রতিযোগিতামূলক)

Ç¥13T/*.½ò

এটি অনলাইন চেষ্টা করুন!

নতুন কমান্ডগুলি ব্যবহার করে 05AB1E এ একই উত্তর যুক্ত করা হয়েছে 10/26/2017 যোগ করা হয়েছে।


3
আপনি ব্যবহার করে এটি খাটো করা যায়নি যে -sin(x) = sin(-x), যে শুধু ক্রম reversing মানে aএবং bএবং নেতৃস্থানীয় ড্রপ -? অন্য যে, একটি সন্নিকর্ষ hardcoding 4/Piমত 1.273যথেষ্ট হতে পারে, অথবা 1.3বা 9/7বা 5/4
flawr

2
পিএস: আমি এটিকে অনলাইনে চেষ্টা করার জন্য একটি লিঙ্ক তৈরি করার পরামর্শ দিচ্ছি যাতে আমার মতো লোকেরা আপনার জমা দিয়ে প্রায় খেলতে পারে =)
flawr

3
এর sin(b-a)পরিবর্তে আপনি 1 বাইট সংরক্ষণ করতে পারেন -sin(a-b)। দুর্দান্ত খুঁজে!
তিতাস

2
1.3পরিবর্তে আরও গুণ করে আরও 7 বাইট সংরক্ষণ করুন 4/Math.PI; এটি যথেষ্ট সঠিক।
তিতাস

1
@ কারাসোকম্পিউটিংXX=ASCII=Y=Wanted output RR=82-82=0=0 PP=83-83=0=0 SS=80-80=0=0
ক্রেগআর 8806

44

সি, 50 35 বাইট

#define f(i)*(short*)(i+7)%51%4%3-1

fউভয় খেলোয়াড়কে বিভাজন ছাড়া স্ট্রিং সহ কল করুন এবং প্রথমটি জিতবে কিনা তা ফিরে আসবে।

ব্যাখ্যা:

নয়টি সম্ভাব্য স্ট্রিং দেখে, দেখা যাচ্ছে যে 7 এবং 8 কলামে বর্ণের জোড়গুলি অনন্য:

       vv
RockPaper
PaperScissors
ScissorsRock
RockRock         // Sneakily taking advantage of the terminating zero
PaperPaper
ScissorsScissors
RockScissors
PaperRock
ScissorsPaper
       ^^

short*এই চিঠি জোড়া পুনরুদ্ধার করতে অফসেট এবং বর্বরতা castালাই , এবং তাদের সংখ্যা হিসাবে ব্যাখ্যা করুন:

29285
29545
21107
107
25968
21363
29555
27491
20595

তারপর এটি খুঁজে পেতে বলপূর্বক একটি ব্যাপার ছিল 51এবং 4remainders প্রয়োগ যা ধারাবাহিকভাবে এইসব সংখ্যা কমাতে:

3 0 0 1 1 1 2 2 2

যা শেষে আরও একটি অবশিষ্ট অংশ মোকাবেলার জন্য উপযুক্ত, এবং ফলাফলটি অফসেট করছে।

কলিরুতে এটি সরাসরি দেখুন


-f(i)অন্য খেলোয়াড়ের স্কোর গণনা করার মতো কিছু করবেন না - অপ্রত্যাশিত ফলাফলের ফলাফল হবে!
nneonneo

4
@neonneo ভাল -(f(i))কাজ করা উচিত। ম্যাক্রো মজা!
nwp

18

ম্যাটল্যাব / অষ্টাভে , 63 54 52 বাইট

এটি খুব সুবিধাজনক যে প্রথম অক্ষরের ASCII- কোডগুলি Rock,Paper,Scissorsরয়েছে R=82,P=80,S=83। যদি আমরা বিয়োগফলটি 79পাই তবে আমরা সহজেই 3,1,4মেট্রিক্স সূচক হিসাবে ব্যবহার করব: এখানে একটি 4x4-ম্যাট্রিক্স হার্ডকোডযুক্ত রয়েছে, যেখানে i,jআপনি আগে থেকে মানগুলি প্লাগ করে যদি -th প্রবেশটি ফলাফলের সাথে মিলে যায়:

     1   2   3   4
  +---------------
1 |  0   0   1  -1
2 |  0   0   0   0
3 | -1   0   0   1
4 |  1   0  -1   0
A(5,5)=0;A(4:7:18)=1;A=A-A';@(x,y)A(x(1)-79,y(1)-79)

এটি অনলাইন চেষ্টা করুন!


16

খাঁটি বাশ, 31

@ ডেনিসের সূত্রটি ধার করা :

a=$1$1$2
echo $[(${#a}^67)%3-1]

এটি অনলাইনে চেষ্টা করুন


পূর্ববর্তী উত্তর:

খাঁটি বাশ, 43 35

echo $[(7+(${#2}^3)-(${#1}^3))%3-1]
  • প্রতিটি ARG এর স্ট্রিং দৈর্ঘ্য পান ( 4, 5, 8যথাক্রমে রক, পেপার জন্য, কাঁচি)
  • XOR যাও 3 সঙ্গে প্রতিটি দিতে 7, 6, 11(যা নিয়ে যাওয়া যখন গেলিক ভাষার 3 দিতে 1, 0, 2)

  • তারপরে কাঙ্ক্ষিত ফলাফল পেতে মডেল 3 দিয়ে বিয়োগ করুন এবং ফিডল।

এটি অনলাইনে চেষ্টা করুন


15

পাইথন , 40 30 বাইট

lambda x,y:(len(2*x+y)^67)%3-1

এটি অনলাইন চেষ্টা করুন!

পটভূমি

আমি ফাংশন টেম্পলেট দিয়ে শুরু করেছি

lambda x,y:(len(a*x+b*y)^c)%d-e

এবং নিম্নলিখিত প্রোগ্রামটি ব্যবহার করে উপযুক্ত পরামিতিগুলির জন্য একটি নিষ্ঠুর-শক্তি অনুসন্ধান চালিয়েছিলেন, তারপরে একটি ন্যূনতম দৈর্ঘ্যের বাস্তবায়ন সহ একটি বেছে নিয়েছিলেন।

RPS = 'Rock Paper Scissors'.split()
g = lambda x,y:2-(94>>len(6*x+y)%7)%4
r = range(1,10)
R = range(100)

def f(a, b, c, d, e):
    h = lambda x,y:(len(a*x+b*y)^c)%d-e
    return all(g(x, y) == h(x, y) for x in RPS for y in RPS)

[
    print('%2d ' * 5 % (a, b, c, d, e))
    for e in r
    for d in r
    for c in R
    for b in r
    for a in r
    if f(a, b, c, d, e)
]

এটি অনলাইন চেষ্টা করুন!


14

গণিত, 32 বাইট

Mod[{1,-1}.(Length/@#-3)!,3,-1]&

অক্ষর তালিকা যেমন একটি আদেশযুক্ত জোড় নেওয়া {{"R","o","c","k"},{"P","a","p","e","r"}}এবং ফিরে আসার জন্য নামহীন ফাংশন -1|0|1

আমি চেয়েছিলাম কোডটি কেবলমাত্র তিনটি ইনপুট শব্দ এড়িয়ে চলতে পারে না, তবে খুব দীর্ঘ ফাংশনটির নামও ToCharacterCode; সুতরাং আমি 4,5,8পরিবর্তে ইনপুট শব্দের দৈর্ঘ্যের সাথে কাজ করেছি , এবং সেই দৈর্ঘ্যের একটি সংক্ষিপ্ত ফাংশন সন্ধান করেছি যা পৃথক উত্তর মডিউল ৩ দিয়েছিল (

এটি প্রমাণিত হয়েছে যে (দৈর্ঘ্য - 3) এর ফ্যাক্টরিয়ালটি গ্রহণ করলে উত্তরগুলি পাওয়া যায় 1,2,120, যা 1,-1,0মডিউল 3 Then তারপরে আমরা কেবল গণনা করি, মডিউল 3, দুটি মানের পার্থক্য (বিন্দু পণ্য দ্বারা {1,-1}.{x,y} = x-y, যা একটি ভাল উপায় যখন দুটি মান একটি তালিকায় রয়েছে)।


1
"এটা দেখা যাচ্ছে ..." আপনি এই জিনিসের জন্য একটি চোখ আছে
ngenisis

12

রুবি, 36 35 30 বাইট

a=->a,b{(a+b)[12]?a<=>b:b<=>a}

আইডোন.কম এ চেষ্টা করুন

পরীক্ষার আউটপুট:

a=->a,b{(a+b)[12]?a<=>b:b<=>a}

puts a.call("Rock", "Rock")
puts a.call("Rock", "Paper")
puts a.call("Rock", "Scissors")
puts a.call("Paper", "Rock")
puts a.call("Paper", "Paper")
puts a.call("Paper", "Scissors")
puts a.call("Scissors", "Rock")
puts a.call("Scissors", "Paper")
puts a.call("Scissors", "Scissors")

0
-1
1
1
0
-1
-1
1
0

এই স্পেসশিপ অপারেটরটি ব্যবহার করে একটি ডিক্সিকোগ্রাফিক তুলনা করে 9 টি 9 টির সঠিক ফলাফল উত্থাপিত হয়েছে এই সত্যটি গ্রহণ করে <=>(a+b)[12]শুধু তুলনা করা ইনপুট reverses যদি ইনপুট হয় Paperএবং Scissors(এবং Scissors Scissors- কিন্তু যে 0উভয় ক্ষেত্রেই বৃত্তাকার)।

আমাকে একটি চরিত্র বাঁচানোর জন্য হরভাথ ডেভিডকে ধন্যবাদ, এবং আমাকে আরও 5 টি বাঁচানোর জন্য জিবিকে ধন্যবাদ।


আপনি একটি বেনামে ল্যাম্বদা ব্যবহার করতে পারেন এবং 2 টি অক্ষর সংরক্ষণ করতে পারেন।
জিবি

@ জিবি যদি আমি ফাংশনটিকে একটি নাম না দিয়ে বলি তবে কীভাবে এটি কল করার কথা? আমার সাথে প্রতারণার স্মৃতি। তবে অন্যান্য টিপটির জন্য ধন্যবাদ - আমি এটি দেখেছিলাম কিন্তু এটি প্রত্যাখ্যান করেছি কারণ স্কিজারসিসার্স 16 বছর, তবে আমি দেখতে পাচ্ছি যা আসলে কোনও বিষয় নয়। :-)
গ্যারেথ


@ ডেনিস আপনি এটি বরাদ্দ না করে কল করতে পারবেন না। এটি আমার কাছে প্রতারণা করার মতো, এবং কোনও নাম নির্ধারণ করতে হবে এমন বেনামী ফাংশন ছাড়াই ভাষাগুলির উপর অন্যায় করা অনুভব করে।
গ্যারেথ

অবশ্যই আপনি পারেন। tio.run/nexus/…
ডেনিস

10

পাইথন , 39 36 34 33 বাইট

lambda x,y:2-(94>>len(6*x+y)%7)%4

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

আসুন দেখে নেওয়া যাক এক্সের ছয় কপি দৈর্ঘ্যের কয়েকটি মান এবং y মডুলোর 7 এর একটি অনুলিপি ।

                                l(x,y) =:
x        y        len(x) len(y) len(6*x+y)%7
--------------------------------------------
Rock     Rock          4      4            0
Rock     Paper         4      5            1
Rock     Scissors      4      8            4
Paper    Rock          5      4            6
Paper    Paper         5      5            0
Paper    Scissors      5      8            3
Scissors Rock          8      4            3
Scissors Paper         8      5            4
Scissors Scissors      8      8            0

আমরা ফলাফল (এনকোড করতে {-1, 0, 1} তাদের সেটের দিকে ম্যাপিং দ্বারা) {0, 1 2 3} । উদাহরণস্বরূপ, ম্যাপিং টি ↦ 2 - টি এটি অর্জন করে এবং এটি তার নিজস্ব বিপরীত।

এর পরিণতি বোঝাতে যাক এক্স এবং ওয়াই দ্বারা O (X, Y) । তারপর:

x        y        l(x,y) o(x,y) 2-o(x,y) (2-o(x,y))<<l(x,y)
-----------------------------------------------------------
Rock     Rock          0      0        2                10₂
Rock     Paper         1     -1        3               110₂
Rock     Scissors      4      1        1            010000₂
Paper    Rock          6      1        1          01000000₂
Paper    Paper         0      0        2                10₂
Paper    Scissors      3     -1        3             11000₂
Scissors Rock          3     -1        3             11000₂
Scissors Paper         4      1        1            010000₂
Scissors Scissors      0      0        2                10₂

ভাগ্যক্রমে, শেষ কলামগুলির বিটগুলি সমস্ত একে অপরের সাথে একমত, তাই আমরা বা তাদের একটি একক পূর্ণসংখ্যা এন গঠন করতে এবং ও (x, y) 2 - ((n ≫ o (x, y))% 4 হিসাবে পুনরুদ্ধার করতে পারি ) । মান এন হয় 94


9

রেটিনা , 35 31 বাইট

G`k P|r S|s R
*\)`.+
-
D`\w+
 .

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

এটি দুটি ধাপে কাজ করে। প্রথমত, আমরা সম্পর্কিত ইনপুটগুলির জন্য বিয়োগ চিহ্নগুলি মুদ্রণ করি। তারপরে আমরা 0বন্ধনগুলির জন্য একটি এবং 1অন্যথায় মুদ্রণ করি ।

G`k P|r S|s R
*\)`.+
-

এটি দুটি পর্যায়। )একসঙ্গে দ্বিতীয় পর্যায়ের গ্রুপ তাদের মধ্যে, *তাদের একটি শুষ্ক রান তোলে (পরে যা তারা প্রক্রিয়াজাত করা হয় ইনপুট স্ট্রিং পুনরুদ্ধার করা হবে মানে, কিন্তু এর ফলে প্রিন্ট করা হবে) এবং \একটি trailing লাইনফীড ছাপার শুষে নেবে। দুটি স্তর একসাথে -প্রযোজ্য হলে মুদ্রণ করবে ।

প্রথম পর্যায়ের একটি হল Gপ্রতিনিধির পর্যায় যা শুধুমাত্র লাইন রাখে এটা রয়েছে পারেন k P, r Sঅথবা s R। এগুলি আমাদের কে আউটপুট করার প্রয়োজনগুলির সাথে সামঞ্জস্য করে -1। যদি এটি এর মধ্যে একটিও না হয় তবে ইনপুটটি খালি স্ট্রিংয়ের সাথে প্রতিস্থাপন করা হবে।

দ্বিতীয় পর্যায়ে প্রতিস্থাপন করে .+(পুরো স্ট্রিং, তবে কেবল এতে অন্তত একটি অক্ষর থাকে) -। সুতরাং এই -তিনটি ক্ষেত্রে একটি প্রিন্ট করে এবং অন্যথায় কিছুই না।

D`\w+
 .

এটি আরও দুটি পর্যায়। প্রথম পর্যায়ে একটি Dপ্রতিলিপি। এটি শব্দের সাথে মেলে এবং নকলগুলি সরিয়ে দেয়। সুতরাং যদি এবং কেবল যদি ইনপুটটি টাই হয় তবে এটি দ্বিতীয় শব্দটি ড্রপ করে।

দ্বিতীয় পর্যায়ে ম্যাচের সংখ্যা গণনা করা হয় .যা কোনও চরিত্রের পরে একটি স্থান। যদি ইনপুট টাই ছিল, এবং দ্বিতীয় শব্দ সরানো হয়েছে, এই ফলাফল 0। অন্যথায়, দ্বিতীয় শব্দটি এখনও রয়েছে এবং এটির একটি মিল আছে, সুতরাং এটি 1পরিবর্তে মুদ্রণ করে।


ইনপুট স্ট্রিং দৈর্ঘ্যের উপর ভিত্তি করে এখানে একটি পৃথক পদ্ধতি রয়েছে । এটি আপনার চেয়ে দীর্ঘ, তবে আমি অবাক হয়েছি যদি এটি আরও কমে যেতে পারে?
ডিজিটাল ট্রমা

@ ডিজিটালট্রামা এটি সত্যই ঝরঝরে ধারণা, তবে এটিকে ছোট করার মতো কিছুই দেখছি না seeing আমি মনে করি আপনার যাইহোক এটি পোস্ট করা উচিত (এবং যদি আপনি প্রথম লাইনটি শিরোনামে স্থানান্তর করেন তবে টিআইও এটি বাইট গণনায় অন্তর্ভুক্ত করবে না)।
মার্টিন এেন্ডার

8

05 এ বি 1 , 18 17 15 10 9 বাইট

ডিজিটাল ট্রমার ইনপুট দৈর্ঘ্যের ট্রিকের সাহায্যে 6 বাইট সংরক্ষণ করা হয়েছে

€g3^Æ>3%<

হিসাবে ইনপুট লাগে [SecondPlayersChoice,FirstPlayersChoice]

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার ক্ষেত্রে বৈধতা দিন

বিকল্প 9 বাইট সমাধান: íø¬ÇÆ>3%<

ব্যাখ্যা

€g          # length of each in input
  3^        # xor 3
    Æ       # reduce by subtraction
     >      # increment
      3%    # modulus 3
        <   # decrement

পূর্ববর্তী 15 বাইট সমাধান

A-D{„PSÊiR}Ç`.S

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার ক্ষেত্রে বৈধতা দিন

ব্যাখ্যা

 A-               # remove the lowercase alphabet from the input (leaves a 2 char string)
   D{             # sort a copy of the leftover
     „PSÊ         # check if the copy isn't "PS" (our special case)
         iR}      # if true, reverse the string to get the correct sign
            Ç`    # convert the two letters to their character codes
              .S  # compare their values

আপনি আমার মজাদার একটিকে পরাজিত করেছেন :( এটি Ç¥13T/*.½òকেন কাজ করে? কোন জানে না
ম্যাজিক অক্টোপাস উরান

@ ম্যাজিক অ্যাক্টোপাস ইউরন: উউউহ, নিশ্চিত যে এটি একটি অদ্ভুত। আউটপুট হিসাবে কোনও পূর্বে ফিরে আসার জন্য ইনপুট ফর্ম্যাটটি কী হবে?
Emigna


@ ম্যাজিক অ্যাক্টোপাস উর্ন: ওহ হ্যাঁ, আমি সেটার কথা ভুলে গেছি। এই চ্যালেঞ্জের জন্য আমার প্রিয় উত্তর :)
এমিগিনা

6

জেলি , 8 বাইট

L€Iµ-*×Ṡ

এটি অনলাইন চেষ্টা করুন! (পরীক্ষার স্যুট, স্বচ্ছতার জন্য পূর্ণসংখ্যায় ক্যাসেট)

কিভাবে এটা কাজ করে

L€Iµ-*×Ṡ  Main link. Argument: A (string array)

L€        Take the length of each string.
  I       Increments; compute the forward difference of the length.
   µ      Begin a new chain with the difference d as argument.
    -*    Compute (-1)**d.
      ×Ṡ  Multiply the result with the sign of d.

6

পাইথন 2 , 46 40 বাইট

lambda x,y:+(x!=y,-1)[x[0]+y[0]in'RPSR']

এটি অনলাইন চেষ্টা করুন!

আমাকে অনলাইন testণ দেওয়ার জন্য এটি অনলাইন পরীক্ষা কোডটি ব্যবহার করার জন্য এবং আমাকে 6 বাইট সংরক্ষণ করার জন্য @ ডেনিসকে অনেক ধন্যবাদ With

সম্পাদন করা

@ হ্যাশকোড 55 - আপনার বর্ণনা অনুসারে সুন্দর। (x! = y, -1) একটি দুটি উপাদান ক্রম এবং [x [0] + y [0] ইন 'আরপিএসআর'] কোন উপাদানটি গ্রহণ করবে তা গণনা করছে। যদি x এর প্রথম বর্ণটি y এর প্রথম বর্ণটি অক্ষর তালিকায় থাকে তবে এটি সত্য বা 1 তে মূল্যায়ন করবে (x! = Y, -1) [1] ফিরে আসবে। যদি তা না হয় তবে (x! = Y, -1) [0]। এটি এখানে কিছুটা জটিল হয়ে ওঠে। প্রথম উপাদান নিজেই কার্যকরভাবে অন্য যদি হয়। যদি x! = Y হয় তবে প্রথম উপাদানটি সত্য হবে অন্যথায় এটি মিথ্যা হবে সুতরাং x [0] + y [0] ইন'আরপিএসআর 'মিথ্যা হলে x == y এর উপর নির্ভর করে সত্য বা মিথ্যা প্রত্যাবর্তিত হবে। এটি + কিছুটা ছদ্মবেশী এবং এটির জন্য @ ডেনিসকে আবার ধন্যবাদ। X! = Y একটি আক্ষরিক সত্য বা মিথ্যা ফিরিয়ে দেবে। আমাদের 1 বা একটি 0 প্রয়োজন। আমি এখনও পুরোপুরি জানি না তবে কীভাবে + এই রূপান্তরটি করে। আমি কেবল ধরে নিতে পারি যে ট্রু / ফ্যালসের গাণিতিক অপারেটর ব্যবহার করে এটি একে পূর্ণসংখ্যার সমতুল্য হিসাবে দেখাতে বাধ্য করছে। স্পষ্টতই -1 এর সামনে +1 এখনও ফিরে আসবে -1।

আশাকরি এটা সাহায্য করবে!


ওহে! আপনি দয়া করে আমাকে বলতে পারেন যে এই সিনট্যাক্সটি কীভাবে কাজ করছে? যৌক্তিকরূপে অনুমান করা, (x!=y,-1)এটি যদি কাজ করে থাকে তবে যদি তালিকাটি অন্য কোনও -1 তৈরি করে x!=y। এই চিহ্নটির ব্যবহার +কী? এই জাতীয় সিনট্যাক্সের নথিভুক্ত কোনও উত্স সত্যই সহায়ক হবে!
হ্যাশকোডে 55

@ হ্যাশকোড 55 - আমি আমার উত্তরে একটি ব্যাখ্যা যুক্ত করেছি।
এলপেড্রো 15'17

সম্পর্কে আপনার অনিশ্চয়তার জবাব দিতে +- এই ক্ষেত্রে এটি একটি অবিচ্ছিন্ন প্লাস, মত +10এবং মূলত পূর্ণসংখ্যায় রূপান্তরিত করার একটি ছোট উপায়।
ফ্লিপট্যাক

ধন্যবাদ @ ফ্লিপট্যাক কিন্ডা অনুমান করেছিলেন যে এটি কী করছে তবে সঠিক ব্যাখ্যার জন্য ধন্যবাদ।
এলপেড্রো

@ এলপিড্রো অনেক ধন্যবাদ! এটা সত্যিই আমাকে সাহায্য করেছে।
হ্যাশকোডে 55

5

জাভাস্ক্রিপ্ট (ES6), 46 38 বাইট

(a,b)=>(4+!b[4]+!b[5]-!a[4]-!a[5])%3-1

রক-পেপার-কাঁচিটি চক্রযুক্ত তা ব্যবহার করে। জাভাস্ক্রিপ্টের স্পেসশিপ বা ভারসাম্যযুক্ত টেরিনারি অপারেটর নেই, অন্যথায় উত্তরটি হবে (a,b)=>((b<=>'Rock')-(a<=>'Rock'))%%3

সম্পাদনা: 8 ওয়াটিংটনগুয়েডসকে ধন্যবাদ 8 বাইট সংরক্ষিত


1
@ ওয়াশিংটনগুয়েডস আমি এর থেকে আরও ভাল করতে পারি!
নিল

আপনি 1 বাইট সংরক্ষণের জন্য কারি করতে পারেন
মেয়রমন্টি

আমি এটি চালানোর চেষ্টা করেছি এবং সর্বদা 0
ভিটিম.ওস

5

এমএটিএল , 14 13 বাইট

TTt_0vic1Z)d)

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

প্রথম স্ট্রিংয়ের প্রাথমিক বর্ণের ASCII কোডটি যদি দ্বিতীয় স্ট্রিংয়ের থেকে বিয়োগ করা হয় তবে আমরা নীচের ডি কলামে মান পাই । মডুলো 5 গ্রহণ করা মানকে এম দেয় । বন্ধনীতে চূড়ান্ত মান হ'ল কাঙ্ক্ষিত ফলাফল, আর

                        D        M     R
                       ---      ---   ---
Rock Rock          ->   0   ->   0   ( 0) 
Rock Paper         ->  −2   ->   3   (−1)
Rock Scissors      ->   1   ->   1   ( 1)
Paper Rock         ->   2   ->   2   ( 1)
Paper Paper        ->   0   ->   0   ( 0)
Paper Scissors     ->   3   ->   3   (−1)
Scissors Rock      ->  −1   ->   4   (−1)
Scissors Paper     ->  −3   ->   2   ( 1)
Scissors Scissors  ->   0   ->   0   ( 0)

এভাবে যদি আমরা গনা ডি এবং তারপর এম , প্রাপ্ত করার আর আমরা কেবল 0 0 ম্যাপ প্রয়োজন; 1 এবং 2 থেকে 1; 3 এবং 4 থেকে −1। এটি 0, 1 বা −1 এর সমান পাঁচটি এন্ট্রিগুলির একটি অ্যারেতে সূচি দিয়ে তৈরি করা যেতে পারে। যেহেতু এমএটিএল ইনডেক্সিংটি 1-ভিত্তিক এবং মডিউলার, অ্যারেরটি হওয়া উচিত [1, 1, −1, −1, 0](প্রথম এন্ট্রিটিতে সূচক 1 থাকে, শেষেরটি সূচক 5 বা সমমান 0 থাকে) 0 পরিশেষে, মডুলো 5 অপারেশন ভাগ্যক্রমে এড়ানো যেতে পারে, কারণ এটি মডিউলার সূচক দ্বারা সুস্পষ্টভাবে সম্পন্ন হয়।

TT     % Push [1 1]
t_     % Duplicate, negate: pushes [−1 −1]
0      % Push 0
v      % Concatenate vertically into the 5×1 array [1; 1; −1; −1; 0]
i      % Input cell array of strings
c      % Convert to 2D char array, right-padding with zeros if necessary
1Z)    % Take the first column. Gives a 2×1 array of the initial letters
d      % Difference
)      % Index into array. Implicit display

5

সিজেম , 12 বাইট

0XXWW]rcrc-=

দুটি ইনপুট স্থান-বিচ্ছিন্ন। তাদের আদেশ চ্যালেঞ্জ পাঠ্যে সেই সম্মানের সাথে বিপরীত।

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

আমার এমএটিএল উত্তরের অনুবাদ । এটি সিজোমে c(চর রূপান্তরিত) স্ট্রিংয়ের ক্ষেত্রে প্রয়োগ করে এটির প্রথম অক্ষরটি ব্যবহার করে। এছাড়াও, ম্যাপিংয়ের জন্য অ্যারে আলাদা কারণ সিজেমে ইনডেক্সিং 0-ভিত্তিক।

0XXWW    e# Push 0, 1, 1, -1, -1
]        e# Pack into an array
rc       e# Read whitespace-separated token as a string, and take its first char
rc       e# Again
-        e# Subtract code points of characters
=        e# Index into array. Implicitly display

5

সিজেম, 15 14 12 বাইট

rW=rW=-J+3%(

প্রতিটি স্ট্রিংয়ের শেষ চরিত্রের এসকি কোড নিন, তারপরে ফিরে আসুন:

(a1 - a2 + 19) % 3 - 1

এটি পরীক্ষা এখানে !



4

জাভা 7, 82 বাইট

int c(String...a){int x=(a[0].charAt(1)-a[1].charAt(1))%5/2;return x%2==x?x:x/-2;}

Ungolfed:

int c(String... a){
   int x = (a[0].charAt(1) - a[1].charAt(1)) % 5 / 2;
   return x%2 == x
           ? x
           : x / -2;
}

ব্যাখ্যা:

  • দ্বিতীয় চিঠি o, aএবং c, হওয়া ASCII দশমিক সঙ্গে 111, 97এবং 99
  • পরীক্ষার ক্ষেত্রে যদি আমরা একে অপরের থেকে বিয়োগ করি তবে আমাদের নিম্নলিখিত ফলাফল রয়েছে:
    • 0 (রক, রক)
    • 14 (শিলা, কাগজ)
    • 12 (কাগজ, কাঁচি)
    • -14 (কাগজ, রক)
    • 0 (কাগজ, কাগজ)
    • -2 (কাগজ, কাঁচি)
    • -2 (কাঁচি, রক)
    • 2 (কাঁচি, কাগজ)
    • 0 (কাঁচি, কাঁচি)
  • আমরা একে জন্য মডিউল 5 গ্রহণ কর তবে আমরা পেতে 4, 2, -4, -2, -2, 2
  • 2 দ্বারা বিভক্ত xএখন পরীক্ষার ক্ষেত্রে নিম্নলিখিত:
    • x = 0 (শিলা, শিলা)
    • x = 2 (শিলা, কাগজ)
    • x = 1 (কাগজ, কাঁচি)
    • x = -2 (কাগজ, শিলা)
    • x = 0 (কাগজ, কাগজ)
    • x = -1 (কাগজ, কাঁচি)
    • x = -1 (কাঁচি, রক)
    • x = 1 (কাঁচি, কাগজ)
    • x = 0 (কাঁচি, কাঁচি)
  • কেবলমাত্র 2এবং -2ভুল -1এবং এর 1পরিবর্তে হওয়া উচিত ছিল । সুতরাং যদি x%2 != x(উপরে 1বা নীচের সমস্ত কিছু -1) আমরা -2এই দুটি 'এজ-কেস' ঠিক করতে ভাগ করে নিই ।

পরীক্ষার কোড:

এখানে চেষ্টা করুন।

class M{
  static int c(String...a){int x=(a[0].charAt(1)-a[1].charAt(1))%5/2;return x%2==x?x:x/-2;}

  public static void main(String[] a){
    String R = "Rock",
           P = "Paper",
           S = "Scissors";
    System.out.println(c(R, R)); // 0
    System.out.println(c(R, P)); // -1
    System.out.println(c(R, S)); // 1
    System.out.println(c(P, R)); // 1
    System.out.println(c(P, P)); // 0
    System.out.println(c(P, S)); // -1
    System.out.println(c(S, R)); // -1
    System.out.println(c(S, P)); // 1
    System.out.println(c(S, S)); // 0
  }
}

আউটপুট:

0
-1
1
1
0
-1
-1
1
0

দ্বিতীয় চিঠিটি কেন কৌতূহলের বাইরে? আমার একই পদ্ধতি ছিল (কিন্ডা) তবে প্রথম চিঠিটি ব্যবহার করেছি।
ম্যাজিক অক্টোপাস উরান

@ কারুসোকম্পিউটিং ওয়েল, আমি লক্ষ্য করেছি যে অন্যান্য বেশিরভাগ লোক প্রথম অক্ষর বা দৈর্ঘ্যটি ব্যবহার করছে এবং অন্য কিছু চেষ্টা করতে চেয়েছিল। আমি প্রথম তৃতীয় বর্ণ (ব্যবহৃত c, p, iASCII মান সঙ্গে) 99, 112এবং 105, তারা সবচেয়ে দরকারী বলে মনে হল, খেয়াল এটা হয়ে যাবে 4, 2, 0 যদি আমি শুধুমাত্র তারপর মডিউল 5. করেনি আমি মূর্ত আমি উভয় বিয়োগ করতে ছিল, তাই 4, 2 এবং 0 খুব বেশি ব্যবহারের ছিল না। কিছুটা ট্র্যাডিং / ট্রায়াল-এন্ড-ত্রুটির পরে আমি দ্বিতীয় চিঠিটি চেষ্টা করেছিলাম এবং একই মডুলো 5 এখনও উপস্থিত থাকায় আরও কার্যকর ফলাফল পাচ্ছি। তারপরে আমি দ্রুত উপস্থাপিত সমাধানটিতে উপস্থিত হয়েছি। :)
কেভিন ক্রুইজসেন

@ কারাসোকম্পিউটিং একটি অনন্য পদ্ধতির চেষ্টা করতে চেয়েছিলেন এবং আমি এই ধরণের সমাধানগুলিতে খুব খারাপ বলে বিবেচনা করে, এটি অন্যান্য কয়েকটি সমাধানের মতো ছোট নয়, তবে এখনও অনন্য (যা আমার প্রাথমিক লক্ষ্য ছিল)। :)
কেভিন ক্রুইজসেন 12'17 এ 14

4

ডিসি, 18

1?Z9+2/rZ1+2/-3%-p

এটি অনলাইনে চেষ্টা করুন

নোট করুন যে দুটি আরগগুলি এক লাইনে STDIN এ পাস (স্পেস-বিভাজিত) হয়েছে। আরগগুলি বর্গাকার বন্ধনীতে অন্তর্ভুক্ত রয়েছে [ ]কারণ dcএর স্ট্রিংগুলি এটি পছন্দ করে।

dcহয়েছে খুব সীমিত স্ট্রিং হ্যান্ডলিং, কিন্তু এটি সক্রিয় আউট কিছু আপনি কি করতে পারেন একটি ব্যবহার হয় Zকমান্ড একটি স্ট্রিং দৈর্ঘ্য, যা সৌভাগ্য যে "রক" জন্য স্বতন্ত্র পেতে, "কাগজ" এবং "কাঁচি", এবং কেবল arithmetically মোটামুটি হতে পারে কাঙ্ক্ষিত ফলাফল দিতে হেরফের



3

পাইথ, 16

t%+7h.+mx3ldQ3

সম্ভবত কম হতে পারে।

        x3ld      # lambda to get string length then XOR with 3
       m    Q     # map over the input (array of 2 strings)
     .+           # difference of the two results
    h             # flatten one-element array
  +7              # add 7
 %           3    # mod 3
t                 # subtract 1 and implicit print

অনলাইন


3

সি #, 85 84 বাইট

1 বাইট সংরক্ষণ করা হয়েছে, থেলথেলকোডারকে ধন্যবাদ

a=>b=>a==b?0:(a[0]=='R'&b[0]=='S')|(a[0]=='P'&b[0]=='R')|(a[0]=='S'&b[0]=='P')?1:-1;

এটি একটি ইনপুট হিসাবে দুটি স্ট্রিং গ্রহণ করে এবং একটি পূর্ণসংখ্যা আউটপুট করে। একটি টাই আছে, যদি দুটি স্ট্রিং সমান হয়, অন্যথায় এটি স্ট্রিংগুলির প্রথম চর্যাচটারের জন্য এটি পরীক্ষা করে, কোন খেলোয়াড় জিতেছে তা নির্ধারণ করে।



3

জাভাস্ক্রিপ্ট, 37 , 32 , 31 বাইট

a=>b=>a==b?0:!(a+b)[12]^a>b||-1

যদি সমান খ হয়, আউটপুট শূন্য।

অন্যথায়, খ এর চেয়ে বড়ের তুলনায় 12 (দৈর্ঘ্যের কাঁচি এবং কাগজের তুলনা) বেশি নয় কিনা তা পরীক্ষার ফলাফলটি সোর করুন।
যদি এটি 1 ফেরত দেয় তবে এটি ফেরত দিন।

যদি এটি 0 প্রদান করে তবে -1 দিয়ে প্রতিস্থাপন করতে OR অপারেটরটি ব্যবহার করুন।


a=>b=>বাইট সংরক্ষণের জন্য আপনি কি এটি ত্রিযুক্ত ফাংশন হিসাবে লিখতে পারেন?
ফ্লিপট্যাক

হ্যাঁ. ধন্যবাদ @ ফ্লিপট্যাক
গ্রাক্স 32

2

ব্যাচ, 116 বাইট

@if %1==%2 echo 0&exit/b
@for %%a in (RockScissors PaperRock ScissorsPaper)do @if %%a==%1%2 echo 1&exit/b
@echo -1

2

পার্ল, 33 বাইট

32 বাইট কোড + -pপতাকা।

$_=/(.+) \1/?0:-/k P|r S|s R/||1

এটি চালানোর জন্য:

perl -pe '$_=/(.+) \1/?0:-/k P|r S|s R/||1' <<< "Rock Paper"

মার্টিন ইন্ডারের রেটিনা উত্তরের রেজেেক্স ব্যবহার করে 3 বাইট সংরক্ষণ করা হয়েছে । (আমার পূর্ববর্তী রেজেক্সটি ছিল /R.*P|P.*S|S.*R/)

ব্যাখ্যা:

প্রথমে, /(.+) \1/ইনপুটটিতে একই শব্দটির দ্বিগুণ রয়েছে কিনা তা পরীক্ষা করে দেখি, যদি হয় তবে ফলাফল হয় 0। অন্যথায়, /k P|r S|s R/উত্তর যেখানে আছে তার সাথে ডিল করে -1। যদি এই শেষ রেজেক্সটি মিথ্যা হয়, তবে -/k P|r S|s R/এটি মিথ্যা, তাই আমরা ফিরে আসি 1


2

জেলি , 9 বাইট

L€^3Iæ%1.

এটি @ ডিজিটালট্রামার বাশ উত্তর থেকে অ্যালগরিদম ব্যবহার করে ।

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

L€^3Iæ%1.  Main link. Argument: A (string array)

L€         Take the length of each string.
  ^3       XOR the lengths bitwise with 3.
    I      Increments; compute the forward difference of both results.
     æ%1.  Balanced modulo 1.5; map the results into the interval (-1.5, 1.5].

দাম্মিট, আমি জেলি পড়তে শুরু করতে চলেছিলাম। ওহ ভাল, এখানে এটি অজস্র হয় । +1 টি।
ডিজিটাল ট্রমা

2

জাপট , 19 বাইট

-Ms(4*(Uc -Vc)/MP¹r

এখানে চেষ্টা করুন!

কারুসোমপুটিংয়ের সমাধান দ্বারা অনুপ্রাণিত

পুরানো 53-বাইট সমাধান

W=Ug c X=Vg c W¥X?0:W¥82©X¥83?1:W¥80©X¥82?1:W¥83©X¥80?1:J

এটি অনলাইন চেষ্টা করুন!

আবারও ধন্যবাদ, ইটিএইচ প্রোডাকশনস!


1
আপনি ব্যবহার করে শুরু করতে পারে ©পরিবর্তে &&পরিবর্তন Ug0 cকরতে Ug c(সঙ্গে একই V) এবং প্রতিস্থাপন -1সঙ্গে J। এটি এখনও জেএস উত্তরের তুলনায় বেশ খানিকটা দীর্ঘ , যদিও আপনি সম্ভবত এর থেকে কিছু ধারণা নিতে পারেন
ইটিএইচ প্রডাকশনগুলি

@ ইথ প্রডাকশন ধন্যবাদ! আমি কীভাবে ভুলে যাই তা জানি না©
অলিভার

1
আসলে আপনি ঠিক করতে পারেন W=Uc। আমি জানি না কেন আমি যে cকোনও স্ট্রিংয়ে কাজ করে তা ভুলে যাচ্ছি : পি
ইটিএইচ প্রডাকশনগুলি 12:38

2

পিএইচপি, 55 53 বাইট

<?=(3-(ord($argv[2])%6%4-ord($argv[1])%6%4+3)%3*2)%3;
  • প্রথম বর্ণগুলির (কমান্ড লাইন আর্গুমেন্ট থেকে) ascii মান গ্রহণ করে: 82,80,83
  • % 6: 4,2,5
  • % 4: 0,2,1
  • পার্থক্য (বা):
    • পিএস: 1-2, এসআর: 2-0, আরপি: 2-0 -> -1 বা 2; + 3,% 3 -> 2
    • এসপি: 2-1, আরএস: 0-2, পিআর: 0-2 -> -2 বা 1; + 3,% 3 -> 1
    • Cybo ইয়েলো পেজ ও পিপি, এস এস: 0; + 3,% 3: 0
  • (3-2 * x): -1,1,3
  • % 3: -1,1,0

সাইন সংস্করণ, 49 46 বাইট

<?=2*sin(1.3*(ord($argv[2])-ord($argv[1])))|0;

কারসোকম্পিউটিংয়ের উত্তরের একটি গল্ফ বন্দর :

3 বাইট @ ইউজার59178 দ্বারা সংরক্ষিত


1
সাইন সংস্করণের জন্য প্রতিস্থাপন 3 বাইট সংরক্ষণ করতে round(x)সঙ্গে2*x^0
user59178

2

পার্ল, 25 বাইট

$_=/kS|rR|sP/-/kP|rS|sR/

-pবিকল্পের জন্য কোড 24 বাইট +1 বাইট ।

ইনপুটটি স্টিডিনে বিভাজক ছাড়া হওয়া উচিত, যেমন:

echo PaperRock | perl -pe'$_=/kS|rR|sP/-/kP|rS|sR/'

প্রথম রেজিএক্সপ্রেস প্রথম প্লেয়ারের জয়ের সন্ধান করে, দ্বিতীয়টি তার ক্ষতির জন্য। পার্থক্য মুদ্রিত হয়।


1

স্কালা, 148 বাইট

object R extends App{val t=Seq('R','P','S')
val(a,b)=(args(0)(0),args(1)(0))
print(if(a==b)0 else if(t.indexOf(a)%3==(t.indexOf(b)-1)%3)-1 else 1)}

ধন্যবাদ, যেহেতু সেমিকোলনগুলিকে একই লাইনে একাধিক কমান্ড পৃথক করা প্রয়োজন, তাই স্কালাল বিন্যাসযোগ্য গল্ফ কোডটি পেয়ে সুবিধা!

এই গল্ফিং প্রয়াসে আমি শিখেছি যে আপনি প্রতিস্থাপন করতে পারেন

"somestring".charAt(index) 

সঙ্গে

"somestring"(index) 

কারণ স্কালা আপনাকে অক্ষর পাওয়ার উদ্দেশ্যে স্ট্রিংগুলিকে অ্যারে হিসাবে আচরণ করতে দেয়।


এটি প্রচুর গল্ফ করা যেতে পারে। শুরুর জন্য, আপনাকে এখানে বেশিরভাগ চ্যালেঞ্জগুলির মধ্যে একটি সম্পূর্ণ প্রোগ্রামের পরিবর্তে কোনও ফাংশন করার অনুমতি দেওয়া হয়েছে, সুতরাং পুরো বস্তুর পরিবর্তে অ্যাপ্লিকেশন জিনিসটি প্রসারিত করা এবং আরোগুলি থেকে টানুন, ডিফ জি (এ: সিক, বি: সিক) এর মতো কিছু চেষ্টা করুন = ...
এথান

অতিরিক্তভাবে, আপনার মান প্রিন্ট করার দরকার নেই। এটি ফিরিয়ে দেওয়া যথেষ্ট, যা স্ক্যালাকে গল্ফ করার সময় দুর্দান্ত, যেহেতু রিটার্নটি বিনামূল্যে। এবং আপনি গ্রোভির উত্তরে পোস্ট করা ট্রিকটি ব্যবহার করে এটি আরও উন্নত করতে পারেন, যা স্কালায় প্রায় অভিন্নভাবে কাজ করে।
ইথান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.