রক, বহুবৃত্ত, কাঁচি


68

এমন একটি প্রোগ্রাম লিখুন যা তিনটি ভাষায় একটি বহুভুজ যা রক – কাগজ – কাঁচি খেলে ।

কর্মসূচির কোনো সংস্করণ জন্য ইনপুট সবসময় স্ট্রিং এক rockবা paperবা scissors

প্রথম ভাষায় প্রোগ্রামটি অবশ্যই রক – কাগজ – কাঁচি পছন্দটিকে আউটপুট দেয় যা ইনপুটটিকে মারবে:

Input     Output
rock      paper
paper     scissors
scissors  rock

দ্বিতীয় ভাষায় প্রোগ্রামটি অবশ্যই রক – কাগজ – কাঁচি পছন্দটিকে আউটপুট দেয় যা ইনপুটটিকে যুক্ত করে:

Input     Output
rock      rock
paper     paper
scissors  scissors

তৃতীয় ভাষায় প্রোগ্রামটি অবশ্যই ইনপুটটিতে হারানো রক – কাগজ output কাঁচি পছন্দটিকে আউটপুট দেয়:

Input     Output
rock      scissors
paper     rock
scissors  paper

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী। টাইব্রেকার হ'ল উচ্চ-ভোটযুক্ত উত্তর।

ইনপুট এবং / অথবা আউটপুটগুলি optionচ্ছিকভাবে একটি পেছনের নতুন লাইন থাকতে পারে তবে অন্যথায় কেবল প্লে rock/ paper/ scissorsস্ট্রিং হওয়া উচিত । আপনি বড় হাতের ব্যবহার করতে পারেন ROCK, PAPER, SCISSORSআকাঙ্ক্ষিত পারেন।

আপনি একই ভাষার বিভিন্ন সংস্করণ ব্যবহার করতে পারবেন না (যেমন পাইথন 2 এবং 3)।


কোন ভাষার ত্রুটি বেরিয়ে আসতে পারে?
ক্রিটসি লিথোস

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

2
পলিগ্লটসের সাথে কখনই পুরোপুরি নিশ্চিত নয়, বিভিন্ন ভাষা কি বিভিন্ন উপায়ে ইনপুট নিতে পারে?
জোনাথন অ্যালান

3
@ জোনাথান অ্যালান কিছু ভাষার সেটের জন্য যেগুলি কেবলমাত্র ইনপুটের নির্দিষ্ট ফর্মগুলি রয়েছে এটির প্রয়োজন হবে।
ক্যালভিনের শখ

কি ঘটে টিকটিকি, স্পক? bigbangtheory.wikia.com/wiki/Rock_Paper_Scissors_Lizard_Spock
ওলে

উত্তর:


60

পাইথন, ব্রেনফাক এবং জাভাস্ক্রিপ্ট, 103 99 বাইট ইয়ে 100 বাইটের নিচে!

0,[.5,];p=["rock","scissors","paper"]
1//1;lambda x:p[p.index(x)-1];"""
x=>p[-~p.indexOf(x)%3]//"""

পাইথনে, এটি এমন একটি ফাংশন সংজ্ঞায়িত করে যা ইনপুটটিকে মারধর করে, মস্তিষ্কে এটি কেবল একটি সাধারণ বিড়াল প্রোগ্রাম, এবং জাভাস্ক্রিপ্টে এটি হেরে যায়। এখানে একটি সংস্করণ যা ফাংশনগুলিকে একটি নাম দেয় fএবং জাভাস্ক্রিপ্ট এবং পাইথন 3 এ ইনপুট দেওয়ার অনুরোধ জানায়:

0,[.5,];p=["rock","scissors","paper"]
1//1;f=lambda x:p[p.index(x)-1];"""
f=x=>p[-~p.indexOf(x)%3]//"""

1//1;"""
console.log(f(prompt())) // JavaScript
1//1"""; print(f(input())) # Python

এটি অনলাইনে চেষ্টা করুন (পুরানো সংস্করণ): পাইথন , ব্রেনফাক , জাভাস্ক্রিপ্ট

ব্যাখ্যা:

পাইথনে, """..."""একটি মাল্টলাইন স্ট্রিং, যা কোনও টোকেন হিসাবে ব্যবহার করা যেতে পারে। একা রাখা যখন এটি একদম কিছুই করে না। আমি পাইথন থেকে জাভাস্ক্রিপ্ট কোড "গোপন" করতে এটি ব্যবহার করি। একই জন্য যায় (0,[.5,])বিট, এটি একটি ধারণকারী শুধু একটি tuple এর 0এবং একটি তালিকা 5, এবং এছাড়াও 1//1, অংশ //পাইথন মধ্যে পূর্ণসংখ্যা বিভাজন, কিন্তু জাভাস্ক্রিপ্ট একটি মন্তব্য শুরু হয়। এই টোকেনগুলির কোডটি এখানে ছিনিয়ে নেওয়া হয়েছে:

p=["rock","scissors","paper"]
lambda x:p[p.index(x)-1]

প্রথম লাইনটি বেশ স্ব-বর্ণনামূলক, এটি কেবল pরক-পেপার-কাঁচিগুলিতে বিভিন্ন পছন্দ ধারণ করার জন্য তালিকাটি সংজ্ঞায়িত করে । দ্বিতীয় লাইন একটি নামহীন ফাংশন সংজ্ঞায়িত করে যা একটি যুক্তি গ্রহণ করে x, এবং যে পছন্দটি প্রহার করে তা ফিরিয়ে দেয় x(যেমন পূর্ববর্তী উপাদানটিতে p)


জাভাস্ক্রিপ্টে, //একটি একক লাইন মন্তব্য বোঝায়। পাইথনের অনুরূপ, একক টোকেন উপেক্ষা করা হয়, সুতরাং এই টোকেনগুলির স্ট্রিপড কোডটি হ'ল:

p=["rock","scissors","paper"]
x=>p[-~p.indexOf(x)%3]

এটি পাইথনের অনুরূপ কাজ করে, প্রথমে pপছন্দগুলি অন্তর্ভুক্ত করার জন্য তালিকাটি সেট করে এবং তারপরে একটি বেনামী ফাংশন সংজ্ঞায়িত করে যা হারানো পছন্দ দেয়। উচ্চতর অগ্রাধিকারের সাথে -~xএকই x+1তবে আমি প্যারেন্সগুলি এড়িয়ে যেতে পারি।


ব্রেইনফাক-এ, এগুলি +-,.[]<>রেখে প্রতিটি চরিত্র বাদ দেওয়া হয়:

,[.,][,,]
[.-]
>[-.]

কমান্ডটি ,ইনপুটটির একটি বাইট পড়ে, .এটি মুদ্রণ করে এবং [...]মানটি শূন্যের সময় লুপ হয়। এই প্রোগ্রামটি তখন যা করে তা হ'ল ইনপুট পড়া এবং অক্ষরটি সন্ধান না হওয়া পর্যন্ত এটি একবারে একটি অক্ষর মুদ্রণ করা \0। যেহেতু আমাদের কোডে এটি নেই, তাই আমরা বাকি প্রোগ্রামটিকে উপেক্ষা করতে পারি। বাস্তবে, এটি কার্যকরভাবে ব্যবহারকারীকে টাইপ করে যা ব্যবহার করে তা প্রতিধ্বনি দেয়।


খুব অনুরূপ সমাধানে কাজ করছিল তবে আপনি আমাকে এতে মারধর করেছেন :)। আপনাকে জাভাস্ক্রিপ্ট টিআইও লিঙ্ক বিটিডব্লিকে আপডেট করতে হবে, এটি অন্য দুটি থেকে পৃথক।
DimP

2
x=>p[p.indexOf(x)+1]||"rock"//"""সংক্ষিপ্ত করা যেতে পারেx=>p[(p.indexOf(x)+1)%3]//"""
লুক

13
+1 আমি ব্রেইনফাককে এত ভাল লুকানো কখনও দেখিনি। একটি বহুভুজের মধ্যে বিএফ থাকলে সাধারণত এটি সুস্পষ্ট। এই এক না!
vsz

আমি মনে করি আপনি একটি বা দুটি 1//1,[.5,];
বাট

প্রকৃতপক্ষে, আমি মনে করি আপনি []আরও বাইট সংরক্ষণ করতে দ্বিতীয় লাইনে বিদ্যমানটি ব্যবহার করতে পারেন :1//1,;lambda x:p[p.index(x,0)+-1];"""
ETH প্রোডাকশনগুলি

40

পাইথন 2, রুবি, রেটিনা, 90 83 বাইট

-7 বাইট মান কালি ধন্যবাদ

s=['rock','paper','scissors']
print s[s.index((0and gets or input()))+(0and-2or-1)]

অনলাইনে চেষ্টা করুন: পাইথন , রুবি , রেটিনা

রুবির জিতেছে, পাইথনে হেরে গেছে এবং রেটিনার সাথে সম্পর্ক রয়েছে। এই সমাধানটি 0রুবিতে সত্যবাদী তবে পাইথনের ক্ষেত্রে মিথ্যা the এটি পাইথন এবং রুবি উভয় ক্ষেত্রে নেতিবাচক সূচকের ব্যবহার করে।


andঅপারেটর অগ্রাধিকার আছে or, তাই s.index(0and STDIN.gets or input())কাজ করে। এছাড়াও, রুবির getsএকটি উপনাম STDIN.gets
মূল্য কালি

10
কোডটি বিভিন্ন উপায়ে কেবল মন্তব্য করার জন্যই +1!
লিও

@ ভ্যালিউইঙ্ক আপনাকে ধন্যবাদ! আমি বুঝতে পেরেছিলাম যে রুবিতে ইনপুট পাওয়ার জন্য আরও সংক্ষিপ্ত উপায় থাকতে হয়েছিল এবং এটি দেখা গেছে যে
গণিত জাঙ্কি

21

ভি, ব্রেন-ফ্লাক এবং পাইথন 2, 97, 86, 81, 77 , 75 বাইট

o='rock paper scissors'.split()
lambda s:o[o.index(s)-1]#ddt.C rHd*wywVp

দুটি বাইট সংরক্ষিত হয়েছে @ nmjcman101 এর জন্য ধন্যবাদ!

এই ছিল দুর্দান্ত মজা! আমি এই উত্তরটি অনেক পছন্দ করি কারণ এটি আমার পছন্দ মতো ভাষাগুলির একটি দুর্দান্ত ওভারভিউ: আমার প্রিয় সম্পাদক, আমার প্রিয় অ-রহস্যময় ভাষা এবং আমি যে ভাষাটি লিখেছি। (টেকনিক্যালি পাইথন 3 আরও ভাল তবে পাইথন 2 গল্ফিয়ার তাই ¯\_(ツ)_/¯)

এটি অনলাইন চেষ্টা করুন! পাইথনে (সামান্য সংশোধিত যাতে আপনি আউটপুটটি দেখতে পারেন) যা ইনপুটটিতে কী হারায় তা মুদ্রণ করে।

এটি অনলাইন চেষ্টা করুন! মস্তিষ্ক-ফ্ল্যাক এ, যা ইনপুটটির সাথে কী সম্পর্ক তা মুদ্রণ করে।

এটি অনলাইন চেষ্টা করুন! ভি তে, যা ইনপুটটিকে প্রিন্ট করে।

যেহেতু ভি অপ্রিন্টযোগ্য ASCII অক্ষরগুলির উপর নির্ভর করে, তাই এখানে একটি হ্যাক্সডাম্প রয়েছে:

00000000: 6f3d 2772 6f63 6b20 7061 7065 7220 7363  o='rock paper sc
00000010: 6973 736f 7273 272e 7370 6c69 7428 290a  issors'.split().
00000020: 6c61 6d62 6461 2073 3a6f 5b6f 2e69 6e64  lambda s:o[o.ind
00000030: 6578 2873 292d 315d 231b 6464 742e 4320  ex(s)-1]#.ddt.C 
00000040: 720e 1b48 642a 7779 7756 70              r..Hd*wywVp

ব্যাখ্যা:

পাইথন

অজগর ক্ষেত্রে, এটি খুব সোজা। আমরা তিনটি উপাদানের একটি তালিকা সংজ্ঞায়িত করি এবং ইনপুটটির ঠিক আগে উপাদানটি ফিরিয়ে দেব। যেহেতু -1পিছনের উপাদানটি ফেরত দেয়, এটি চক্রাকারে কাজ করে, এবং এটি সমস্ত খুব সোজা এবং সহজ। তারপরে, সব কিছু পরে #একটি মন্তব্য।

মস্তিষ্ক-বিমানবিধ্বংসী কামান

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

একবার আমরা সমস্ত অপ্রাসঙ্গিক অক্ষরগুলি সরিয়ে ফেলি, কোডটি মস্তিষ্কে-ফ্ল্যাক দেখায়

()[()]

যা কেবল 1 + -1এটিকে মূল্যায়ন করে , তবে যেহেতু এই মানটি মোটেই ব্যবহৃত হয় না, এটি একটি নিওপ।

ভী

এটি এখানে কিছুটা অদ্ভুত হয়ে যায়। অজগর তালিকার নামকরণকে oস্বেচ্ছাসেবী মনে হতে পারে, তবে তা অবশ্যই তা নয়। ভি তে, oএকটি নতুন লাইন খোলে এবং সন্নিবেশ মোডে রাখে। তারপর,

='rock paper scissors'.split()
lambda s:o[o.index(s)-1]#

বাফারে inোকানো হয়। এর পরে, সম্পর্কিত কোডটি হ'ল:

<esc>ddxxf'C r<C-n><esc>Hd*wywVp

ব্যাখ্যা:

<esc>                          " Return to normal mode
     dd                        " Delete this line. Now the cursor is on '='
       t.                      " Move the cursor forward to the "'"
         C                     " Delete everything after the "'", and enter insert mode
           r                   " From insert mode, enter '<space>r'
            <C-n>              " Autocomplete the current word based on what is currently in the buffer
                               " Since only one word starts with 'r', this will insert 'rock'
                 <esc>         " Leave back to normal mode
                      H        " Go to the first line (where the input is)
                       d*      " Delete everything up until the next occurence of the input
                         w     " Move forward one word
                          yw   " Yank the word under the cursor
                            Vp " And paste that word over the current line, delete everything else

পাইথনে @ ওয়েট উইজার্ড, খুব বেশি কারণ নেই (এটি একই দৈর্ঘ্যের ব্যতীত)। তবে এটি ভি এর সবকিছু নষ্ট করে দেয়
ডিজেএমসিএমহেম

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

নাবালক নাবালক, তবে আপনি কমান্ডটি তৈরি করতে xxএবং এটির সাথে প্রতিস্থাপন করতে পারেন যেহেতু পরবর্তীতে যে কোনওভাবে মুছে ফেলা হবে । সম্পাদনা: আপনি এটি করতে সক্ষম হতে পারে ? 22f'='d*t.
nmjcman101

@ nmjcman101 ওহ, মিষ্টি, দুর্দান্ত ধারণা। ভকভগক!
ডিজেএমসিএমহেম

16

সিজেএম , রেটিনা , পিএইচপি, 92 86 85 বাইট

ECHO["rock",0,"scissors","paper"][ORD(READLINE())%4];
#];"scissors  paper rock"S/rci=

-rপতাকা ব্যবহার করে পিএইচপি চালানো উচিত ।

সিজেমে চেষ্টা করে দেখুন

এটি রেটিনায় চেষ্টা করুন

এটি পিএইচপি-তে চেষ্টা করুন

CJam

সিজেমে, সমস্ত মূল অক্ষর পূর্বনির্ধারিত পরিবর্তনশীল হয়। প্রথম লাইনে, এই মানগুলির কয়েকটি স্ট্রিং এবং কিছু অ্যারে লিটারাল সহ ধাক্কা। কিছু বৃদ্ধি, হ্রাস এবং অন্যান্য ক্রিয়াকলাপ সম্পাদন করা হয়।

এত কিছুর পরেও, স্ট্যাকটি একটি অ্যারে ( ]) এবং মুছে ফেলা হয়েছে ( ;), তাই অন্য স্টাফগুলির কোনওোটাই মোটেই গুরুত্বপূর্ণ নয়। মূল সিজেএম প্রোগ্রামটি হ'ল:

"scissors  paper rock"S/rci=

"scissors  paper rock"        e# Push this string
                      S/      e# Split it on spaces
                        r     e# Read the input
                         c    e# Cast to char (returns the first character in the string)
                          i   e# Cast to int (its codepoint)
                           =  e# Get the index of the split array (CJam has modular arrays)

অক্ষিপট

এটি প্রায় প্রতারণার মতো অনুভব করে ...

অক্ষিপট Regex কোন ম্যাচ প্রতিস্থাপন করে দেবে ECHO["rock",0,"scissors","paper"][ORD(READLINE())%4];সঙ্গে ইনপুটে #];"scissors paper rock"S/rci=। যাই হোক না কেন এই Regex সাথে মিলে যায়, এটা অবশ্যই কিছু মেলে না rock, paperঅথবা scissors, তাই কোনও প্রতিকল্পন তৈরি করা হয়। আনমিশনিত ইনপুটটি তখন স্পষ্টভাবে আউটপুট।

পিএইচপি

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

প্রথম লাইনটি সিজেএম অংশ হিসাবে একই অ্যালগরিদম ব্যবহার করে তবে ফলাফলের বিভিন্ন ক্রম সহ।


1
টিআইএল পিএইচপি ফাংশনগুলি সংবেদনশীল নয়।
gcampbell

14

সি, সি ++, পাইথন; 227 226 216 বাইট

@ ম্যাটকে একটি বাইট সংরক্ষণ করে!

#include<stdio.h>/*
f=lambda a:"rock"if a[0]=="r"else"paper"if a[0]=="p"else"scissors"
"""*/
int f(char*b){puts(sizeof'b'-1?*b=='r'?"paper":*b=='s'?"rock":"scissors":*b=='r'?"scissors":*b=='s'?"paper":"rock");}
//"""

fসমস্ত ভাষায় একটি ফাংশন সংজ্ঞায়িত করে। সিটিতে জিতল, পাইথনের সাথে সম্পর্ক, সি ++ এ হেরেছে। সি ++ এর মতো সর্বদা / গুলি করে

পাইথনের ল্যাম্বদা ফাংশন ঘোষণার সময় /*এবং এর মধ্যবর্তী অংশটি */সি এবং সি ++ এর একটি মন্তব্য ব্লক। এটি মূলত ফাংশন আর্গুমেন্টের প্রথম চরিত্রের সাথে তুলনা করে এবং সেই চিঠিটি দিয়ে শুরু হওয়া পদক্ষেপটি দেয়।

"""এস এর মধ্যবর্তী অংশটি পাইথনের একাধিক স্ট্রিং, যখন এটি সি এবং সি ++ উভয়ই ফাংশন ডিক্লারেশন। sizeof'b'-1বর্তমান ভাষা সি ++ এর সি কিনা তা নির্ধারণ করুন। যদি আকারটি 1 এর চেয়ে আলাদা হয় তবে এটির সত্যবাদী মান থাকে অন্যথায় মিথ্যা মান। সি অক্ষরে অক্ষরগুলি 4-বাইট দীর্ঘ টাইপ হয় যখন সি ++ এ সেগুলি একক বাইট প্রকার। তারপরে ভাষাটি বের করার পরে এটি কেবল ইনপুটটির প্রথম বর্ণটি দেখে এবং সেই অনুযায়ী আউটপুট দেয়।

সি

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

সি ++

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

পাইথন

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


4
"" "এর মধ্যবর্তী অংশটি পাইথনের একটি মন্তব্য ব্লক" এটি আসলে একটি বহুমাত্রিক স্ট্রিং
ivzem

10

সি ++, আর, সি; 252 240 226 220 209 বাইট

#define b/*
M=function()cat(readline())
#*/
#import<stdio.h>
#define M()main(){int i=0;char t[9];char*u;char*s[]={"rock","paper","scissors"};scanf("%s",t);for(;*t-*s[i++];);puts(s[(i+=sizeof('a')==1)%3]);}
M()

সি এবং সি ++ এর মধ্যে পার্থক্যটি ব্যবহার করে যে কোনও অক্ষরের আক্ষরিক আকার সি-তে 4 বাইট এবং সি ++ এ 1 বাইট হয়।

সি ++:

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

আর:

ফলাফল:

> #define b/*
> M=function()cat(readline())
> #*/
> #import<stdio.h>
> #define M()main(){int i=0;char t[9];char*u;char*s[]={"rock","paper","scissors"};scanf("%s",t);for(;*t-*s[i++];);puts(s[(i+=sizeof('a')==1)%3]);}
> M()
rock
rock

সি:

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


8

গাওক, রেটিনা, পার্ল; 68 বাইট

{eval"\$_=uc<>"}{$_=/[Sk]/?"paper":/[Pc]/?"rock":"scissors"}{print}

(শেষে একটি নতুন লাইন সহ)

গাওক (বিজয়ী)

পারেলের পক্ষে কিছুটা আবর্জনা, তারপরে লাইন সামগ্রীটি পরিবর্তন করুন ( $_যা $0ভেরিয়েবল _অপরিজ্ঞাত হিসাবে একই ) এটিতে একটি kবা একটি রয়েছে কিনা তার উপর নির্ভর করে cফলাফল মুদ্রণ করুন। পালানোর ক্রম সম্পর্কে কোনও সতর্কতা উপেক্ষা করুন, আমি এটি করতে চাইছিলাম do

{a_string_that_is_ignored}
{$_ = /[Sk]/ ? "paper" : /[Pc]/ ? "rock" : "scissors"}
{print}

রেটিনা (টাই)

বেসিক সানসেট এবং অন্যান্য হিসাবে একই কৌশল : প্রথম লাইনে কিছু লম্পট রিজেক্সের ম্যাচগুলিকে দ্বিতীয় লাইনের বিষয়বস্তু দ্বারা প্রতিস্থাপন করুন, সুতরাং ইনপুটটি পাস করুন।

পার্ল (হারানো)

একটি লাইন পড়ুন এবং এটিকে বড়হাতে রূপান্তর করুন, তারপরে একটি বর্ণযুক্ত একটি শব্দ চয়ন করুন এবং ফলাফলটি মুদ্রণ করুন। প্রথম এবং শেষ পদক্ষেপটি evalএওকে থেকে লুকানোর জন্য ব্যবহার করে মোড়ানো হয়।

$_ = uc <>;
$_ = /[Sk]/ ? "paper" : /[Pc]/ ? "rock" : "scissors";
print $_

গাওক, রেটিনা perl -p,; 57 বাইট

আমি এটি বোনাস হিসাবে প্রবেশ করছি কারণ কমান্ড লাইন স্যুইচ ইন perl -pএই সাইটের স্বাভাবিক নিয়মাবলী দ্বারা প্রোগ্রামের অংশ বলে মনে করা হচ্ছে, যা এটি বহুবিবাহ নয়।

{eval"\$_=uc"}$_=/[Sk]/?"paper":/[Pc]/?"rock":"scissors"

আবার একটি চূড়ান্ত রাখুন NEWLINE অক্ষিপট । এবার perl -pআউটপুটটি স্বয়ংক্রিয়ভাবে মুদ্রণ করতে পার্ল ওভারহেড উল্লেখযোগ্যভাবে হ্রাস পেয়েছে। আমি অ্যাসাইনমেন্টটিকে এজেডের$_ মধ্যে অন্তর্ভুক্ত মুদ্রণের ট্রিগার করতে দিতে পারি ।


আপনি কি তাদের প্রত্যেকটির জন্য সম্ভবত একটি টিআইও লিঙ্ক (বা পরীক্ষার জন্য একটি অনুরূপ অনলাইন-সংকলক) যুক্ত করতে পারেন?
কেভিন ক্রুইজসেন

পছন্দ করেছেন এর জন্য টিআইও-তে আউটপুট perl -pখালি, এটি টিআইও-তে একটি বাগ থাকতে হবে।
গিলস

7

> <>, রেটিনা, পাইথন 2: 144 127 123 বাইট

1 লাইট একটি জায়গা অপসারণ করে @ লুভজোকে ধন্যবাদ 1 টি বাইট সংরক্ষিত হয়েছে

4 বাইট inputপরিবর্তে ব্যবহার করে @ mbomb007 এর জন্য ধন্যবাদ সংরক্ষণ করেছেraw_input

#v"PAPER"v?%4-2{"SCISSORS"v?%2:i
#>ooooo; >oooooooo<"ROCK"~<
a="KRS".index(input()[-1])
print["SCISSORS","ROCK","PAPER"][a]

চ্যালেঞ্জ হিসাবে টিএনবিতে পোস্ট হয়েছে , আমি ভাষাগুলির এই সংমিশ্রণটি চেষ্টা করার সিদ্ধান্ত নিয়েছি।

> <>

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

আইপি ডানদিকে চলতে শুরু করে।

#                      Reflect the IP so that it now moves left and it wraps around the grid
i:                     Take one character as input and duplicate it

ইনপুটতে নেওয়া সম্ভব অক্ষরগুলি হ'ল PRS(যেহেতু প্রোগ্রামটি কেবল প্রথম অক্ষর নেয়) takes তাদের ASCII- মানগুলি হয় 80, 81এবং 82

2%                     Take the modulo 2 of the character. Yields 0, 1, 0 for P, R, S respectively
?v                     If this value is non-zero (ie the input was ROCK), go down, otherwise skip this instruction

যদি ইনপুটটি শিলা হত তবে এটিই ঘটবে:

<                      Start moving to the left
~                      Pop the top most value on the stack (which is the original value of R and not the duplicate)
"KCOR"                 Push these characters onto the stack
<                      Move left
oooo                   Output "ROCK" as characters (in turn these characters are popped)
o                      Pop the top value on the stack and output it; but since the stack is empty, the program errors out and exits promptly.

অন্যথায়, যদি ইনপুটটি ছিল SCISSORSবা PAPER, এই আইপি মুখোমুখি হবে:

"SROSSICS"             Push these characters onto the stack
{                      Shift the stack, so the the original value of the first char of the input would come to the top
2-4%                   Subtract 2 and take modulo 4 of the ASCII-value (yields 2, 0 for P, S respectively)
?v                     If it is non-zero, go down, otherwise skip this instruction

যদি ইনপুটটি ছিল PAPER, তবে:

>ooooooooo             Output all characters on the stack (ie "SCISSORS")
<                      Start moving left
o                      Pop a value on the stack and output it; since the stack is empty, this gives an error and the program exits.

অন্যথায় (যদি ইনপুটটি ছিল SCISSORS):

"REPAP"                Push these characters onto the stack
v>ooooo;               Output them and exit the program (without any errors).

অক্ষিপট

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

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

পাইথন 2

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

পাইথন প্রোগ্রামটির জন্য এস ইনপুট রাখতে হবে "

প্রথম দুটি লাইন পাইথনের মন্তব্য comments

a="KRS".index(input()[-1])             # Get the index of the last character of the input in "KRS"
print["SCISSORS","ROCK","PAPER"][a]    # Print the ath index of that array

আমি মনে করি না printশেষ লাইনের পরে স্থানটি প্রয়োজনীয়।
লুভজো

আপনি input()পরিবর্তে ব্যবহার করতে পারেন raw_input()
mbomb007

@ লভজো টিপটির জন্য ধন্যবাদ :)
ক্রিটসি লিথোস

@ mbomb007 এটি কাজ করছে বলে মনে হচ্ছে না
ক্রিটসি লিথোস

@ ক্রিটিক্সিলিথোস এটি কাজ করে যদি অজগর অংশটি উদ্ধৃতি সহ ইনপুট নেয়
আন্ডারগ্রাউন্ডোমোনাইল

0

রুবি, ক্লোজার, কমন লিস্প - 251 বাইট

(print(eval '(if()({(quote SCISSORS)(quote PAPER)(quote PAPER)(quote ROCK)(quote ROCK)(quote SCISSORS)}(read))(eval(quote(nth(position(read)(quote("SCISSORS""PAPER""ROCK")):test(quote string-equal))(quote(ROCK SCISSORS PAPER))))))))
;'['"'+gets+'"']))

হোয়াইটস্পেস সহ আরও পঠনযোগ্য সংস্করণ:

(print(eval '(if() ; distinguish between CLojure and Common Lisp
    ({(quote SCISSORS)(quote PAPER)(quote PAPER)
       (quote ROCK)(quote ROCK)(quote SCISSORS)}(read)) ; use hash-map as a function
    (eval(quote(nth ; find index of the input arg in the list
       (position(read)(quote("SCISSORS""PAPER""ROCK")):test(quote string-equal))  
    (quote(ROCK SCISSORS PAPER))))))))
 ;'['"'+gets+'"'])) ; ruby indexation

ক্লোজার সবসময় জিততে থাকে, রুবি সর্বদা ড্র করে, কমন লিপ সবসময় হেরে যায়।

রুবির জন্য 'এস এর ভিতরে থাকা সমস্ত কিছুই একটি স্ট্রিং। এটি দুটি লাইন জুড়ে বিস্তৃত। তারপরে এটি []স্ট্রিং আর্গুমেন্ট সহ অপারেটর ব্যবহার করে যা স্ট্রিংটিতে উপস্থিত থাকলে স্ট্রিংটি নিজেই ফিরে আসে। ফলাফল মুদ্রিত হয়েছে, রুবি কেবল ইনপুটটি আয়না করে।

দ্বিতীয় লাইন ক্লোজার এবং কমন লিস্পের জন্য একটি মন্তব্য। একগুচ্ছ evalএবং quoteব্যবহার করতে হবে কারণ ক্লোজুরকে নিশ্চিত করতে হবে যে সমস্ত চিহ্নগুলি বৈধ কিনা। কোডটি আবার ব্যবহার করতে ভাল লাগবে তবে nthএই ভাষায় ফাংশনেরও আলাদা স্বাক্ষর রয়েছে। মূলত ক্লোজারের if()জন্য সত্যকে মূল্যায়ন করা হয় এবং এটি যখন প্রথম শাখায় যায় তখন সম্ভাব্য রূপগুলির একটি হ্যাশ-ম্যাপ স্টিডিনের থেকে পড়া যুক্তির সাহায্যে বলা হয়। কমন লিস্প দ্বিতীয় শাখায় যায়, এটি স্ট্যান্ডিনের থেকে তালিকার অবস্থানটির অবস্থান আবিষ্কার করে এবং ফলাফলের তালিকা থেকে সংশ্লিষ্ট আইটেমটি ফেরত দেয়।

আমার ধারণা কমন লিস্প অংশটি আরও গল্ফ করা যায়।

এটি অনলাইনে দেখুন: রুবি , কমন লিস্প , ক্লোজার


0

স্কালা, জাভাস্ক্রিপ্ট এবং ওওক, 167 বাইট

s=>{var a="paper,scissors,rock".split(",")/*/**/a[-1]="rock"
return a[a.indexOf(s)-1];`*/a((a.indexOf(s)+1)%3)//`//Ook. Ook. Ook! Ook? Ook. Ook! Ook! Ook. Ook? Ook!
}

স্কেলে এটি ব্যবহার করে জাভাস্ক্রিপ্টে চেষ্টা করে দেখুন ওকের ব্রেনফাক সংস্করণটি চেষ্টা করুন

স্কেলা - জয়

s=>{                                                      //define an anonymous function
  var a="paper,scissors,rock".split(",")                  //generate the array
  /* /* */ a[-1]="rock"                                   //scala supports nested comments,
  return a[a.indexOf(s)-1];`                              //so this comment...
  */                                                      //...ends here
  a((a.indexOf(s)+1)%3)                                   //return the winning string
  //`//Ook. Ook. Ook! Ook? Ook. Ook! Ook! Ook. Ook? Ook!  //another comment
}

জাভাস্ক্রিপ্ট - হারান

s=>{                                                   //define an anonymous function
  var a="paper,scissors,rock".split(",")               //generate the array
  /*/**/                                               //a comment
  a[-1]="rock"                                         //put "rock" at index -1
  return a[a.indexOf(s)-1];                            //return the string that loses
  `*/a((a.indexOf(s)+1)%3)//`                          //a string
  //Ook. Ook. Ook! Ook? Ook. Ook! Ook! Ook. Ook? Ook!  //a comment
}

ওক্! - টাই

ওক অংশটি হ'ল সহজ ব্রেনফাক বিড়াল প্রোগ্রাম যা ,[.,]ওকের কাছে ট্রান্সলেট করা হয়।

s=>{var a="paper,scissors,rock".split(",")/*/**/a[-1]="rock"   //random stuff
return a[a.indexOf(s)-1];`*/a((a.indexOf(s)+1)%3)//`//         //more random stuff
Ook. Ook. Ook! Ook? Ook. Ook! Ook! Ook. Ook? Ook!              //the program
}                                                              //random stuff

আপনি যদি ব্যবহার করেন a[(a.indexOf(s)+2)%3]তবে আপনাকে সেট করার দরকার নেই a[-1]="rock"। এছাড়াও, আপনি কি জাভাস্ক্রিপ্ট স্ট্রিংয়ের মধ্যেও ওক কোডটি রাখতে পারবেন না?
নীল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.