আমার শব্দ আপনার শব্দকে পরাজিত করতে পারে


26

সমস্যা

দুটি শব্দ দেওয়া, একটি ডিজিটাল মূল যুদ্ধে বিজয়ী খুঁজুন ।

কোনও শব্দের ডিজিটাল রুটকে এভাবে परिभाषित করুন :

  1. বর্ণমালার প্রতিটি বর্ণকে একটি নম্বর দেওয়া হয়েছে: এ = 1, বি = 2, সি = 3, ..., জেড = 26
  2. প্রতিটি শব্দটির জন্য প্রতিটি অক্ষরের মান যুক্ত করুন। উদাহরণস্বরূপ, "ক্যাট" নিন। সি + এ + টি = 3 + 1 + 20 = 24
  3. ফলাফলটি তৈরি করে এমন একক সংখ্যক যুক্ত করুন: 24 => 2 + 4 = 6
  4. আপনি একক অঙ্কে না পৌঁছা পর্যন্ত পদক্ষেপ # 3 পুনরাবৃত্তি করুন। সেই একক অঙ্কটি হ'ল শব্দের ডিজিটাল মূল

নিয়মাবলী:

  1. এর ডিজিটাল রুট অন্যের চেয়ে বড় হলে বিজয়ী ঘোষিত হয়।
  2. যদি ডিজিটাল মূল মানগুলি সমান হয় তবে উভয় শব্দ থেকে সর্বোচ্চ মানের বর্ণের প্রতিটি উদাহরণ সরিয়ে এবং পুনরায় গণনা করে শব্দগুলি ছোট করুন।
  3. বিজয়ী না থাকলে বা শব্দের একটিতে কেবল একটি অক্ষর (বা কোনও অক্ষর নেই) অবধি অবধি # 1 এবং # 2 পদক্ষেপটি পুনরাবৃত্তি করুন ।
  4. সংক্ষিপ্তকরণ প্রক্রিয়াটি অতিক্রম করার পরে যদি ডিজিটাল মূল মানগুলি সমান হয় তবে দীর্ঘতর শব্দটি বিজয়ী হিসাবে ঘোষিত হয়।
  5. শব্দগুলি যদি সমান দৈর্ঘ্যের হয় এবং সংক্ষিপ্তকরণ প্রক্রিয়াটি অনুসরণ করার পরে কোনও বিজয়ী পাওয়া যায় না, তবে কোনও বিজয়ী ঘোষণা করা হয় না।

বিশেষ নিয়ম:

  1. ডিজিটাল মূলের গণনায় নিজেই কোনও মডুলাস ব্যবহারের অনুমতি নেই । এটি অন্য কোথাও ব্যবহার করা যেতে পারে।
  2. ধরুন শব্দগুলিতে কেবলমাত্র বড় হাতের অক্ষর থাকবে - কোনও বিরামচিহ্ন, কোনও স্থান নেই etc.

ইনপুট

স্টিডিনের মাধ্যমে শব্দগুলি টানুন (কমা-বিচ্ছিন্ন)। পদ্ধতির পরামিতি, বা তবে আপনি চান। আপনার সমাধানে বা কোডটি কীভাবে শব্দগুলি বিশ্লেষণ করা বা প্রস্তুত করা হয়েছে তা এটিকে পরিষ্কার করুন।

আউটপুট

বিজয়ী শব্দটি প্রদর্শন করুন। যদি বিজয়ী না থাকে তবে "স্ট্যামলেট" প্রদর্শন করুন।

উদাহরণ:

ইনপুট: ক্যান, বিএটি

CAN = 18 = 9
BAT = 23 = 5 

আউটপুট: ক্যান

ইনপুট: চিড়িয়াখানা, কোন

ZOO = 56 = 11 = 2
NO = 29 = 11 = 2

OO = 30 = 3
N = 14 = 5

আউটপুট: না

আপডেট : ইনপুটটি কমা-বিচ্ছিন্ন স্ট্রিং হিসাবে শব্দগুলির সাথে স্টিডিন ব্যবহার করে অবশ্যই পড়তে হবে।

আপডেট : এর বিপরীতে পরীক্ষা করার জন্য কয়েকটি উদাহরণ যুক্ত করা হয়েছে।

আপডেট : টাইয়ের ক্ষেত্রে সর্বাধিক মূল্যবান চিঠিটি অপসারণের বিষয়টি স্পষ্ট করে - এটি স্টপ শর্তটিও কিছুটা বদলে দেয় - যদি কোনও শব্দ একটি বর্ণ বা শূন্য বর্ণ দীর্ঘ হয়, তবে সংক্ষিপ্তকরণ প্রক্রিয়াটি বন্ধ হয়ে যাবে


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

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

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

@ এমটিএনভিউমার্ক - ফেয়ার পয়েন্ট। আমি একটি সাধারণ আপডেট করব এবং এটি পরিষ্কার করব। আমার পছন্দের ভাষাটিতে স্টিডিনের পাঠের দীর্ঘ পথ রয়েছে, তাই আমি পক্ষপাতিত্ব করি। :)
স্টিভ

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

উত্তর:


9

জে, 100

z=:"."0@":@(+/)^:9@(64-~a.i.])@(#~' '&i.)"1
f=:*@-/"2@(z@((]#~]i.~{.@\:~)"1^:([:=/z))){'STALEMATE'&,

এইভাবে চালায়:

f 'NO',:'ZOO'
NO       
f 'CAN',:'BAT'
CAN      
f 'FAT',:'BANANA'
FAT      
f 'ONE',:'ONE'
STALEMATE

এটি এখনও ঠিক মতো ইনপুট গ্রহণ করে না ।


9

এপিএল (ডায়ালগ) ( 91 86)

⎕ML←3⋄{Z≡∪Z←{2>⍴⍕⍵:⍵⋄∇+/⍎¨⍕⍵}¨+/¨⎕A∘⍳¨⍵:G[↑⍒Z]⋄1∊↑¨⍴¨⍵:'STALEMATE'⋄∇1∘↓¨⍵}G←Z⊂⍨','≠Z←⍞

ব্যাখ্যা (ফাঁসির আদেশে):

  • ⎕ML←3: এমএল 3 টি সেট করুন (এটি অন্যান্য জিনিসগুলির মধ্যে বিভাজনকে বোঝায়)।
  • G←Z⊂⍨','≠Z←⍞: ইনপুট পড়ুন, কমা দ্বারা পৃথক, জিতে সঞ্চয় করুন এবং ফাংশনে যান।
  • +/¨⎕A∘⍳¨⍵: প্রতিটি শব্দের জন্য স্কোর গণনা করুন। ( ⎕Aবর্ণমালা সম্বলিত একটি তালিকা))
  • Z←{2>⍴⍕⍵:⍵⋄∇+/⍎¨⍕⍵}¨: প্রতিটি স্কোরের জন্য ডিজিটাল মূল গণনা করুন (একাধিক অঙ্কের বেশি থাকা সত্ত্বেও সমস্ত সংখ্যার যোগফল দিয়ে) এবং এগুলি জেডে সংরক্ষণ করুন store
  • Z≡∪Z: যদি সমস্ত স্কোর অনন্য হয় ...
  • :G[↑⍒Z]: ... তারপরে শব্দটিকে সর্বোচ্চ স্কোর দিয়ে আউটপুট করুন (মূল তালিকা থেকে)।
  • ⋄1∊↑¨⍴¨⍵:'STALEMATE': অন্যথায় (যদি টাই থাকে) তবে শব্দের একটির দৈর্ঘ্য 1 হলে আউটপুট স্থির করুন।
  • ⋄∇1∘↓¨⍵: অন্যথায়, প্রতিটি শব্দের প্রথম অক্ষরটি বন্ধ করে ফাংশনটি আবার চালাও।

5

রুবি - 210

d,e=(a,b=$<.read.chop.split(/,/)).map{|w|w.bytes.sort}
r=->w,o=65{n=0;w.map{|c|n+=c-o};n>9?r[n.to_s.bytes,48]:n}
d.pop&e.pop while r[d]==r[e]&&d[1]&&e[1]
$><<[[:STALEMATE,a,b][a.size<=>b.size],a,b][r[d]<=>r[e]]

পরীক্ষা:

$ ruby1.9 1128.rb <<< CAN,BAT
CAN

$ ruby1.9 1128.rb <<< ZOO,NO
NO

$ ruby1.9 1128.rb <<< ZOO,ZOO
STALEMATE

প্রথম লাইন সংক্ষিপ্ত করা যেতে পারে d,e=(a,b=gets.split ?,).map{|w|w.bytes.sort}
ভেন্টোরো

টাই বোঝাতে অন্য কোনও শব্দ ব্যবহার করে কেন এটিকে আরও ছোট করবেন না? যেমন "টিআইই" বনাম "স্ট্যামেট"
গাফি

@ গাফি, কারণ এই অনুমানের জন্য "স্ট্যামলেট" শব্দটি ব্যবহার করা দরকার।
পল প্রেসিডেজ

@ ক্রোন আমার উপর লজ্জা পেয়ে আমি পড়া বন্ধ করেছি"If the words are of equal length and no winner is found after going through the shortening process, no winner is declared."
গাফি

5

হাস্কেল, 205 টি অক্ষর

import List
s b=d.sum.map((-b+).fromEnum)
d q|q<10=q|1<3=s 48$show q
f=map(s 64.concat).tails.group.reverse.sort
w(a,_:b)=f a#f b where x#y|x<y=b|x>y=a|1<3="STALEMATE"
main=getLine>>=putStrLn.w.span(/=',')

নমুনা রান:

> ghc --make WordVsWord.hs 
[1 of 1] Compiling Main             ( WordVsWord.hs, WordVsWord.o )
Linking WordVsWord ...

> ./WordVsWord <<< CAN,BAT
CAN

> ./WordVsWord <<< ZOO,NO
NO

> ./WordVsWord <<< FAT,BANANA
FAT

> ./WordVsWord <<< ONE,ONE
STALEMATE

  • সম্পাদনা করুন: (227 -> 219) বিজয়ীর আরও ভাল বাছাই, সংক্ষিপ্ত প্যাটার্ন ম্যাচ ইন w, পুরানো আমদানিকৃত, খাটো মডিউল
  • সম্পাদনা করুন: (219 -> 208) জেবির পরামর্শগুলি অন্তর্ভুক্ত করুন
  • সম্পাদনা করুন: (208 -> 205) হাইফেন সম্পর্কে হাস্কেলের মধ্যে বিজোড় নিয়মগুলি ব্যবহার করে নেতিবাচক সংখ্যাগুলি পরিচালনা করে

1
সোজা তালিকার তুলনা ব্যবহার করা খুব সুন্দর একটি স্পর্শ। কয়েক প্রস্তাব "এ এক নজরে" উন্নতি: ',':b_:b(-2), আপনি খুব একাধিক লাইন প্রক্রিয়াকরণ সংযুক্ত করছি না যদি interact$unlines.map([...]).linesputStr.[...]=<<getLine(-11), যদি আপনি নিজেকে শিথিল আউটপুট করার অনুমতি দেয় putStrprint(-1)। আমি এতগুলি অক্ষর গ্রহণকারী নেগেটিভ অপারেশনটিকে ঘৃণা করি, তবে এর কাছাকাছি কোনও পথ খুঁজে পাচ্ছি না।
জেবি

ধন্যবাদ, জেবি! আমি বেশিরভাগ পরামর্শ অন্তর্ভুক্ত করেছি। আমি অনুভব করেছি আউটপুটটি অনুমিতভাবে অনুসরণ করা উচিত, বিশেষত একটি নতুন লাইনের সাথে। তবে আমি যদি এই দুটি চরিত্রটি নিকটবর্তী হয় তবে এটি সংরক্ষণ করতে আগ্রহী! :-)
এমটনভিউমার্ক

বিয়োগের সাথে ভাল কাজ!
জেবি

3

পার্ল, 224 225 229

বেসিক গল্ফিং (এখনও স্মার্ট কিছুই নয়):

split",",<>;$_=[sort map-64+ord,/./g]for@a=@_;{for(@b=@a
){while($#$_){$s=0;$s+=$_ for@$_;$_=[$s=~/./g]}}($a,$b)=
map$$_[0],@b;if($a==$b){pop@$_ for@a;@{$a[1]}*@{$a[0]}&&
redo}}say+("STALEMATE",@_)[$a<=>$b||@{$a[0]}<=>@{$a[1]}]

5.10 এবং উপরোক্ত পার্ল, সঙ্গে চালানো perl -M5.010 <file>বাperl -E '<code here>'

$ perl -M5.010 word.pl <<<CAN,BAT
CAN
$ perl -M5.010 word.pl <<<ZOO,NO
NO

$ perl -M5.010 word.pl <<<NO,ON
STALEMATE

2

কে, 106

{a::x;@[{$[(>). m:{+/"I"$'$+/@[;x].Q.A!1+!26}'x;a 0;(<). m;a 1;.z.s 1_'x@'>:'x]};x;"STALEMATE"]}[","\:0:0]

স্ট্যাক ত্রুটিগুলি ধরতে ব্যতিক্রম হ্যান্ডলিং ব্যবহার করে, যার ফলে অচলাবস্থার ঘটনা ঘটে।


2

ভিবিএ ( 242 462)

Function s(q,Optional l=0)
s=-1:t=Split(q,","):r=t:m=t
For j=0 To 1
m(j)=0:w=t(j)
While Len(w)>1 Or Not IsNumeric(w)
b=0
For i=1 To Len(w)
a=Mid(w,i,1):a=IIf(IsNumeric(a),a,Asc(a)-64):b=b+a
If m(j)+0<a+0 Then m(j)=a
Next
w=b
Wend
r(j)=b
Next
s=IIf(r(0)>r(1),0,IIf(r(0)<r(1),1,s))
For j=0 To 1
r(j)=Replace(t(j),Chr(m(j)+64),"",,1)
Next
If s<0 And Len(t(0))+Len(t(1))>2 Then s=s(r(0) & "," & r(1),1)
If l=0 Then If s>=0 Then s=t(s) Else s="STALEMATE"
End Function

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

টাই থাকাকালীন মূল (নীচে) শব্দ থেকে উচ্চ-মূল্যবান চিঠিটি সরিয়ে দেয় না।

Sub s(q)
t=Split(q,",")
r=t
For j=0 To 1
w=t(j):b=0
For i=1 To Len(w)
b=b+Asc(Mid(w,i,1))-64
Next
While Len(b)>1
d=0
For i=1 To Len(b)
d=d+Mid(b,i,1)
Next
b=d
Wend
r(j)=b
Next
MsgBox IIf(r(0)>r(1),t(0),IIf(r(0)<r(1),t(1),"STALEMATE"))
End Sub

2

এটি সত্যই আমার অভিনব লাগে এবং এটি আমার প্রথম পোস্ট। যদিও এটি পুরানো আমি লক্ষ্য করেছি যে কেউ পিএইচপি সংস্করণ করেনি তাই এখানে আমার।

<?php $f='CAN,CBN';$w=explode(',',$f);$a=$ao=$w[0];$b=$bo=$w[1];$c='';
function splice($a,$t){$s=$h=0;$y=array();$x=str_split($a);
foreach($x as $k=>$v){$s=$s+ord($v)-64;if($v>$h){$h=$k;}}
$y[0]=$s;if($t==1){unset($x[$h1]);$y[1]=$x;}return $y;}
while($c==''){$y1=splice($a,0);$y2=splice($b,0);$y3=splice($y1[0],1);
$y4=splice($y2[0],1);if($y3[0]>$y4[0]){$c=$ao;}else if($y3[0]<$y4[0]){$c=$bo;
}else if((strlen($a)<1)OR(strlen($b)<1)){if(strlen($a)<strlen($b)){$c=$ao;}
else if(strlen($b)<strlen($a)){$c=$bo;}else{$c='STALEMATE';}}}
echo $c;
?>

534 অক্ষর।

এখন আরম্ভ করার নিয়ম সম্পর্কে আমি অনিশ্চিত তাই আমি আমার ইনপুট হিসাবে $ f = 'CAN, CBN' দিয়ে শুরু করি। আমি আশা করি যে সঠিক ছিল। আমি সমস্ত পরীক্ষা চালিয়েছি এবং এটি সবগুলিতে পাস করেছে যদিও এটি বিশেষভাবে মার্জিত নয়। আমাকে এখনই অবশ্যই কিছুটা ঘুম পেতে হবে তবে এটির কাজ করে আমি খুব মজা পেয়েছি - দুর্দান্ত ধাঁধার জন্য আপনাকে ধন্যবাদ।

উপর কোডেড http://codepad.org/ZSDuCdin


আপনি $f=trim(fgets(fopen('php://stdin')));ইনপুট নেওয়ার জন্য ব্যবহার করতে পারেন ।
ইলেক্ট্রা

স্ক্র্যাচ যে, $w=fgetcsv(STDIN);আরও ভাল কাজ করে।
ইলেক্ট্রা

1

ডি: 326 অক্ষর

import std.algorithm,std.array,std.conv,std.stdio;void main(string[]a){alias reduce r;auto b=array(splitter(a[1],","));auto s=map!((a){int n=r!"a+b"(map!"cast(int)(a-'A')+1"(a));while(n>9)n=r!"a+b"(map!"cast(int)(a-'0')"(to!string(n)));return n;})(b);int v=r!"a>b?a:b"(s);writeln(count(s,v)>1?"STALEMATE":b[countUntil(s,v)]);}

আরও সুস্পষ্টভাবে:

import std.algorithm, std.array, std.conv, std.stdio;

void main(string[] a)
{
    alias reduce r;

    auto b = array(splitter(a[1], ","));
    auto s = map!((a){int n = r!"a + b"(map!"cast(int)(a - 'A') + 1"(a));

                      while(n > 9)
                          n = r!"a+b"(map!"cast(int)(a - '0')"(to!string(n)));

                      return n;
                     })(b);
    int v = r!"a > b ? a : b"(s);

    writeln(count(s, v) > 1 ? "STALEMATE" : b[countUntil(s, v)]);
}

1

ম্যাথামেটিকাল

কিছু বিশদ এখনও অনুপস্থিত

a = {"ZOO"}; b = {"NO"}
f = FixedPoint[IntegerDigits@Total@# &, #] &

If[(s = f /@ 
        NestWhile[(# /. Max@# -> 0 &) /@ # &, (ToCharacterCode @@ # - 64) & /@ #, 
        f[#[[1]]] == f[#[[2]]] &, 1, 5] &@{a, b})[[1, 1]] > s[[2, 1]], 
   a, b, "STALMATE"]  

{"NO"}

1

গণিত 220 207

এটি লেখার পরে, আমি লক্ষ্য করেছি যে এটি একই যুক্তি অনুসরণ করে যা বেলারিসিয়াস ব্যবহার করেছিল,

h@u_ := ToCharacterCode@u - 64;
m@w_ := FromCharacterCode[Most@Sort@h@w + 64];
f@v_ := FixedPoint[Tr@IntegerDigits@# &, Tr@h@v];
x_~g~y_ := If[f@x == f@y, g[m@x, m@y], If[f@x > f@y, 1, 2]];
x_~z~x_ := "STALEMATE";
x_~z~y_ := {x, y}[[x~g~y]] 

ব্যবহার

z["ZOO", "NO"]
z["CAN", "BAT"]
z["FAT", "BANANA"]
z["ONE", "ONE"]

ফলাফল

প্রতিক্রিয়াটি প্রতিযোগিতামূলক না হওয়ার কারণে (এত দীর্ঘ-বায়ুযুক্ত), তাই আমি ম্যাথমেটিকায় আরও ইনপুট ফর্ম্যাটটি ব্যবহার করার সিদ্ধান্ত নিয়েছি।


1

কফিস্ক্রিপ্ট - 335

z=(a,b,g=a,h=b)->c=y a;d=y b;e=a.length;f=b.length;return g if(c>d);return h if(d>c);return g if(e<2&&f>1);return h if(f<2&&e>1);return "STALEMATE" if(f==e&&f<2);z(x(a),x(b),a,b)
y=(a)->t=0;t+=c.charCodeAt(0)-1 for c in a;t-=9 while 9<t;t
x=(a)->for i in[90..65]
 b=new RegExp(String.fromCharCode(i));return a.replace b, "" if b.test a

আমি যেমনটি হতে পারি তার সাথে এতটা খুশি নই, তবে আমি এটিকে যাইহোক রাখব। প্রকৃত স্কোরিং খুব সংক্ষিপ্ত ( yফাংশন), তবে ifফলাফলগুলি তুলনা করতে (গুলি z) বেশ দীর্ঘ হয়।

এটি ব্যবহার করতে zআপনার দুটি শব্দের সাথে কল করুন (উদাঃ z 'FOO','BAR')। এটি উভয় শব্দ স্কোর করবে এবং উচ্চতর স্কোরিং শব্দটি ফিরিয়ে দেবে। যদি এটি টাই হয় তবে এটি পরিবর্তিত শব্দগুলির সাথে পুনরাবৃত্তি করবে (মূলত শেষ পর্যন্ত ফিরে আসবে, সুতরাং অতিরিক্ত দুটি পরামিতি) যা এটি xফাংশন থেকে পাওয়া যায় ।

আগ্রহীদের জন্য সমতুল্য (প্রসারিত) জাভাস্ক্রিপ্ট:

var x, y, z;

z = function(a, b, g, h) {
  var c, d, e, f;
  if (g == null) {
    g = a;
  }
  if (h == null) {
    h = b;
  }
  c = y(a);
  d = y(b);
  e = a.length;
  f = b.length;
  if (c > d) {
    return g;
  }
  if (d > c) {
    return h;
  }
  if (e < 2 && f > 1) {
    return g;
  }
  if (f < 2 && e > 1) {
    return h;
  }
  if (f === e && f < 2) {
    return "STALEMATE";
  }
  return z(x(a), x(b), a, b);
};

y = function(a) {
  var c, t, _i, _len;
  t = 0;
  for (_i = 0, _len = a.length; _i < _len; _i++) {
    c = a[_i];
    t += c.charCodeAt(0) - 1;
  }
  while (9 < t) {
    t -= 9;
  }
  return t;
};

x = function(a) {
  var b, i, _i;
  for (i = _i = 90; _i >= 65; i = --_i) {
    b = new RegExp(String.fromCharCode(i));
    if (b.test(a)) {
      return a.replace(b, "");
    }
  }
};

1

রেকেট 479 বাইট

(define(dl n)(let p((ol '())(n n))(let-values(((q r)(quotient/remainder n 10)))(if(= q 0)(cons r ol)(p(cons r ol)q)))))
(define(dr N)(let p2((n N))(define s(apply +(dl n)))(if(< s 10)s(p2 s))))
(let p3((l(for/list((i(string->list s)))(-(char->integer i)64)))(k(for/list((i(string->list t)))(-(char->integer i)64))))
(let((a(dr(apply + l)))(b(dr(apply + k))))(cond[(> a b)s][(< a b)t][(equal? l k)"STALEMATE"][else(p3(remove*(list(apply max l))l)(remove*(list(apply max k))k))])))

Ungolfed:

(define (f s t)

  (define (getDigitList n)                     ; sub-fn  to get digit list
    (let loop ((ol '())
               (n n))
      (let-values (((q r) (quotient/remainder n 10)))
        (if (= q 0) (cons r ol)
            (loop (cons r ol) q)))))

  (define (digit_root N)                       ; sub-fn to get digital root of a number
    (let loop2 ((n N))                        
      (define s (apply + (getDigitList n)))    
      (if (< s 10)
          s
          (loop2 s))))

  (let loop3 ((l (for/list ((i (string->list s)))  ; actual fn to compare 2 strings
                   (- (char->integer i) 64)))
              (k (for/list ((i (string->list t)))
                   (- (char->integer i) 64))))
    (let ((a (digit_root (apply + l)))
          (b (digit_root (apply + k))))
      (cond
        [(> a b) s]
        [(< a b) t]
        [(equal? l k) "STALEMATE"]
        [else (loop3 (remove* (list (apply max l)) l)
                     (remove* (list (apply max k)) k)
                     )]
        ))))

পরীক্ষামূলক:

(f "CAN" "BAT")
(f "ZOO" "NO")

আউটপুট:

"CAN"
"NO"

1

পিএইচপি, 339 (নির্দিষ্ট নয়), 410 382 359 339 337 বাইট

$b=$w=fgetcsv(STDIN);function a($c){for(;a&$g=$c[$p++];)$f+=ord($g)-64;$f=trim($f);for(;$f[1]&a;$f=$h)for($h=0;a&$r=$f[$q++];$h=bcadd($h,$r));return$f;}function d($f){return strtr($f,[max(str_split($f))=>'']);}for(;$c==$d;$b=[$e,$f]){$x=$z++?d:trim;$e=$x($b[0]);$f=$x($b[1]);$c=a($e);$d=a($f);$e||die(STALEMATE);$c!=$d&&die($w[$c<=$d]);}

সম্পাদনা 1 : +71 বাইট। STDINপরিবর্তে fopen('php://stdin','r');এবং ছোট ট্যাগ ব্যবহার করে Using এছাড়াও, ধারণাটি সম্পূর্ণ কনফারেন্স।

সম্পাদনা 2 : -28 বাইট। এর fgetcsv(STDIN)পরিবর্তে explode(',',trim(fgets(STDIN)))এবং forলুপের পরিবর্তে ব্যবহার করা whileলুপ।

সম্পাদনা 3 : -23 বাইট। ফাংশন একীভূত aএবং b, loops জন্য মার্জ হয়েছে।

সম্পাদনা 4 : -20 বাইট cরিকার্সিভ থেকে লুপে পরিণত হয়েছে। তারপরে, ফাংশন সরানো হয়েছে cএবং এর কোডটি বিশ্বব্যাপী নেমস্পেসে রেখে দিন।

5 সম্পাদনা করুন : -২ বাইট। পতাকাটির জন্য @ টিটাসকে ধন্যবাদ -r



0

জাভা

    public static void main(String args[]) throws Exception{
        String input=(new BufferedReader(new InputStreamReader(System.in)).readLine());
        StringTokenizer st = new StringTokenizer(input, ",");
        String w1 = st.nextToken();String w2 = st.nextToken();int s1=0;int s2=0;
        String flag="";
        do{ Integer sum1=0;Integer sum2=0;
        for (int i=0;i<w1.length();i++)
            sum1+=((int)w1.charAt(i) - 64);
        for (int i=0;i<w2.length();i++)
            sum2+=((int)w2.charAt(i) - 64);
        while (sum1.toString().length()>1){
            s1=0;
            for (int i=0;i<sum1.toString().length();i++)
                s1+=((int)sum1.toString().charAt(i)-48);
            sum1=s1;
        }
        while (sum2.toString().length()>1){
            s2=0;
            for (int i=0;i<sum2.toString().length();i++)
                s2+=((int)sum2.toString().charAt(i)-48);
            sum2 =s2;
        }
        flag=(s1>s2)?w1:(s1!=s2)?w2:"";
        if (flag!="")
            {st = new StringTokenizer(input,",");
                if (s1>s2)
                    System.out.println(st.nextToken());  
                else{
                    st.nextToken();
                    System.out.println(st.nextToken());
                }
            }
        int max=0;
        for (int i=0;i<w1.length();i++){
            max=((int)w1.charAt(i)>max)?(int)w1.charAt(i):max;
        }
        w1 = w1.replace((char)max, (char)64);
        max=0;
        for (int i=0;i<w2.length();i++){
            max=((int)w2.charAt(i)>max)?(int)w2.charAt(i):max;
        }
        w2 = w2.replace((char)max, (char)64);
            }while(flag=="" && !w1.equals(w2)); 
    if (flag.length()<1)
        System.out.println("STALEMATE");
        }

উপরের কোডটি টাইয়ের ক্ষেত্রে সমস্ত সর্বাধিক চরিত্রকে প্রতিস্থাপন করে .. এটি প্রয়োজনীয়?
আমান জিক ভার্মা

0

সি ++, 473 (আমি একটি কোর্স লোহা ধার নিচ্ছি)

#include<iostream>
#define $ string
#define _ return
using namespace std;$ S($&s){int i=-1,m=i,x=0;while(++i<s.length())if(s[i]-'@'>x)m=i,x=s[i];s.erase(m,1);_ s;}int M($ w){int i,v=0;for(i=0;i<w.length();++i)v+=w[i]-'@';while(v>9){i=0;while(v)i+=v-v/10*10,v/=10;v=i;}_ v;}$ B($ x, $ y){while(!(M(x)-M(y)))S(x),S(y);if(M(x)>M(y))_ x;if(M(x)<M(y))_ y;_"STALEMATE";}int main(int c,char**v){$ s;cin>>s;$ x=s.substr(0,s.find(',')),y=s.substr(s.find(',')+1);cout<<B(x,y)<<endl;_ 0;}

আমি নিশ্চিত যে আমি এটি কোনওভাবে ছোট করতে পারি তবে আমি ক্লান্ত।

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


0

পাইথন: 383 অক্ষর

ফাংশন চালান c('CAN','BAT'):

def k(j):
 l=list(j);l.remove(max(j));return''.join(l)
def f(x):
 x=str(x)
 if len(x)==1 and x.isdigit():return int(x)
 return f(sum('ABCDEFGHIJKLMNOPQRSTUVWXYZ'.index(y)+1 for y in x)) if x.isalpha() else f(sum(map(int,x)))
def c(a,b):
 v=f(a);u=f(b);
 if v>u:return a
 if v<u:return b
 return'STALEMATE' if v==u and (len(a)==1 or len(b)==1)else c(k(a),k(b))

0

এফ #, 559 533 530 বাইট

এখনও হিসাবে প্রতিযোগিতামূলক নয়। আমি নিশ্চিত যে শেষ কয়েক লাইনের পাশাপাশি সি আরও ছোট করা যেতে পারে। কমান্ড লাইন আরগগুলিতে সহজে অ্যাক্সেস না পাওয়াও এখানে ব্যথা করছে।

open System
let m=Seq.map
let a s=s="";s.ToUpper()|>m(fun c->int c-64)
let rec c i=if i>9 then string i|>m(int>>(-))|>m(fun x->x 48)|>Seq.sum|>c else i
let b i=Seq.fold(fun(r,a)j->(Seq.sum i-a)::r,a+j)([],0)(Seq.sortBy(~-)i)|>fst|>m c
[<EntryPoint>]
let x z=
 let y=z.[0].Split(',')
 let u,v=y.[0].Length,y.[1].Length
 printf"%s"(Seq.fold2(fun s l r->if l=r then 3::s else if l>r then 0::s else 1::s)[](b<|a y.[0])(b<|a y.[1])|>Seq.tryFind((>)3)|>function|None when u>v->y.[0]|None when u<v->y.[1]|Some x->y.[x]|_->"STALEMATE")
 0

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

  • স্ট্রিংয়ের সাথে স্ট্রিংয়ের সাথে তুলনা করে 3 টি বাইট সংরক্ষণ করেছেন

উদার সংস্করণ

open System
let m=Seq.map // this is just to save some characters and I'll use Seq.map for this version

let toIntList s =
    s = "" // constrain s to type string
    s.ToUpper()
    |>Seq.map (fun c -> int c - 64) // converts char value to int and offsets it so that A=1

let rec digitSumUntilSingle i =
    if i > 9 then
        string i                // convert number to string
        |>Seq.map ( int>>(-) )  // convert individual char to int and partially apply substraction
                                // this returns a function
        |>Seq.map (fun x -> x 48) // provide last parameter for substraction, this is equivalent to
                                  // charValue - 48
        |>Seq.sum                 // sum over all digits
        |>digitSumUntilSingle     // recursively call this function again in case we are >9
    else
        i

let calculateDigitalRoot input =
    Seq.fold(fun (result, acc) current ->       // calculate digital root for all possible iterations
                (Seq.sum input - acc)::result,  // basically, this calculates Rule 3 until the end for a given word
                acc + current
            ) ([], 0) (Seq.sortBy (~-) input) // sort input by value descending
    |>fst   // only interested in the lits, not the final accumulator
    |>Seq.map digitSumUntilSingle

[<EntryPoint>]
let main (args) =
    let y = args.[0].Split(',')
    let leftLength = y.[0].Length
    let rightLength = y.[1].Length

    Seq.fold2 (fun state left right ->
                if left = right then
                    3::state
                else if left > right then
                    0::state                // 0 is chosen because this represents y[0] index
                else
                    1::state
               ) [] (calculateDigitalRoot (toIntList y.[0])) (calculateDigitalRoot (toIntList y.[1]))
    |> Seq.tryFind ((>) 3)                  // try to find first variation where left and right digital root isn't equal
    |> function
        | None when leftLength > rightLength -> y.[0]
        | None when leftLength < rightLength -> y.[1]
        | Some x -> y.[x]
        | _ ->"STALEMATE"
    |>printf "%s" 
    0

0

পিএইচপি, 296 281 267 বাইট

function f(&$s){for(;$c=$s[$i++];$m>$c||$m=$c)$p+=ord($c)&31;for($s=str_replace($m,'',$s);9<$p=array_sum(str_split($p)););return$p;}for(list($a,$b)=$x=fgetcsv(STDIN);$s==$t&&$a&$b;$t=f($b))$s=f($a);echo($s-=$t)||($s=strlen($x[0])-strlen($x[1]))?$x[+($s<0)]:STALEMATE;

এটি দিয়ে চালান -nবা অনলাইনে চেষ্টা করুন (টিআইওর বিপর্যয় অন্তর্ভুক্ত)।

ফেব্রুয়ারীতে ২০১১ সালে, বর্তমান পিএইচপি সংস্করণটি ছিল 5.3.5; তাই আমি পারিনি

  • শর্টহ্যান্ড তালিকা অ্যাসাইনমেন্ট ব্যবহার করুন ( [$a,$b]=fgetcsv(...)এবং এই জাতীয়)
  • ওরফে count_charsইনলাইন
  • সূচক ফাংশন ফলাফল সরাসরি
  • এর পরিবর্তে নেতিবাচক স্ট্রিং সূচকগুলি ব্যবহার করুন substr

কিন্তু উভয়ই অনেক কিছু বাঁচাতে পারত না; সুতরাং এটি কিছু যায় আসে না।

বেশিরভাগ ব্যয়বহুল জিনিসগুলি ছিল লুপগুলি (অবশ্যই) এবং নিয়ম # 4 ( 40 36 বাইট)।

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