टूर्नामेंट प्रारूप पर्यायवाची


17

मैंने आज का सारा समय एक सुपर स्मैश ब्रदर्स टूर्नामेंट में बिताया, और मैंने सेटों का वर्णन करते समय हमारे द्वारा इस्तेमाल की जाने वाली कुछ शब्दावली के बारे में सोचना शुरू कर दिया। ये तीन प्रकार के सेट हैं जो मुझे टूर्नामेंट में खेले गए हैं:

  • 3 का सर्वश्रेष्ठ (Bo3)
    • तीन खेल खेले जाते हैं। सेट का विजेता वह खिलाड़ी होता है जिसने अधिकांश खेल जीते हैं।
    • यदि कोई एकल खिलाड़ी सेट के दो गेम जीतता है, तो उन्हें तुरंत विजेता घोषित किया जाता है, क्योंकि प्रतिद्वंद्वी को पकड़ना असंभव होगा।
  • बेस्ट ऑफ़ 5 (Bo5)
    • पाँच खेल खेले जाते हैं। सेट का विजेता वह खिलाड़ी होता है जिसने अधिकांश खेल जीते हैं।
    • यदि कोई एकल खिलाड़ी सेट के तीन गेम जीतता है, तो उन्हें तुरंत विजेता घोषित किया जाता है, क्योंकि प्रतिद्वंद्वी को पकड़ना असंभव होगा।
  • पहले 5 (फीट 5)
    • ठीक है, मैंने पहले अपने शब्दों के साथ थोड़ा धोखा दिया। इस तरह का सेट एक टूर्नामेंट का हिस्सा नहीं है , लेकिन आप अक्सर उन्हें आयोजन स्थल में होते हुए देखेंगे। यदि आप किसी अन्य खिलाड़ी को चुनौती दे चुके हैं और पैसा लाइन पर है तो यह पारंपरिक रूप से आपके द्वारा खेला जाने वाला सेट है।
    • यह उतना ही सरल है जितना लगता है: खिलाड़ी बार-बार खेल खेलते हैं जब तक कि उनमें से एक ने पांच नहीं जीता हो, और उस खिलाड़ी को विजेता घोषित किया जाता है।

जाहिर है, Bo3 और Bo5 बहुत समान हैं, केवल खेले जाने वाले खेलों की संख्या में भिन्नता है। लेकिन फीट 5 स्पष्ट रूप से अलग है ... सही है? ज़रुरी नहीं! कोई फर्क नहीं पड़ता कि कैसे एक बो 3 सेट नीचे जाता है, विजेता ने ठीक दो गेम जीते होंगे। Bo5 सेट के विजेता ने ठीक 3 गेम जीते होंगे। क्यों नहीं उन्हें फीट 2, या फीट 3 कहा जाता है? एक ही तर्क, रिवर्स में लागू होता है, दिखाएगा कि Ft5 Bo9 के समान है।

इस चुनौती का उद्देश्य एक सेट प्रारूप के पर्याय का निर्धारण करना है।

विशिष्टता

आपका प्रोग्राम या फ़ंक्शन इनपुट से एकल स्ट्रिंग लेगा । पहले दो अक्षर होंगे Boया Ft, और उनके बाद एक नंबर होगा। प्रोग्राम / फ़ंक्शन विपरीत उपसर्ग और एक संख्या के साथ एक स्ट्रिंग आउटपुट करेगा जैसे कि इनपुट और आउटपुट स्ट्रिंग्स का मतलब एक ही है।

किसी भी स्ट्रिंग के साथ शुरुआत Boएक विषम संख्या में समाप्त होगी।

आप मान सकते हैं कि इनपुट स्ट्रिंग में संख्या कभी भी 200 से अधिक नहीं होगी। आप यह भी मान सकते हैं कि आपको कभी भी इनपुट प्राप्त नहीं होगा जिसके लिए सही आउटपुट में 200 से अधिक नंबर शामिल होंगे। इसी तरह, इनपुट और सही आउटपुट संख्या हमेशा रहेगी 0 से अधिक हो।

उदाहरण

Bo3 -> Ft2
Ft2 -> Bo3

Bo5 -> Ft3
Ft3 -> Bo5

Bo9 -> Ft5
Ft5 -> Bo9

Bo51 -> Ft26
Ft26 -> Bo51

Bo199 -> Ft100
Ft100 -> Bo199

2
कोड गोल्फ और हाथापाई? हम दोस्त बन सकते हैं! जब तक आप एक अवर एसएसबी के बारे में बात कर रहे हैं
अक्स।

2
@aks। बेशक हाथापाई;)
भूमिगत

फ्राकिन माइलिस्ट्स ...
मोनिका

1
@aks। प्रोजेक्ट मी के साथ कुछ भी गलत नहीं है; (
Cilan

1
कानूनी रूप से बोलने के अलावा @doorhandle। RIP
भूमिगत

जवाबों:


10

पायथ, 23 बाइट्स

@,/hKsttz2tyKCp-"BoFt"z

परीक्षण सूट।

यह काम किस प्रकार करता है:

सबसे पहले, Boया को खोजने के लिए Ft, प्रोग्राम इनपुट से वर्णों को फ़िल्टर करता है BoFt, के साथ -"BoFt"z

इसके साथ तुरंत मुद्रित किया जाता है ppइसका इनपुट भी लौटाता है। उस स्ट्रिंग को आधार 256 के रूप में बाइट्स की व्याख्या करने वाली संख्या में परिवर्तित किया जाता है। यदि स्ट्रिंग थी Bo, तो परिणाम 17007 है और यदि स्ट्रिंग था तो 18036 है Ft

अगला, यह दोनों संभावित परिणामों की गणना करता है, num * 2 - 1और (num + 1)/2इसे 2 प्रविष्टि सूची में डालता है। फिर, कार्यक्रम उपरोक्त संख्या, 17007 या 18036 के साथ उस सूची में सूचीबद्ध करता है। पाइथ के मॉड्यूलर इंडेक्सिंग के कारण, यह उचित संख्या का चयन करता है। परिणाम तब स्वचालित रूप से मुद्रित होता है।

चूंकि pकोई अनुगामी न्यूलाइन के साथ प्रिंट करता है, लेकिन अंतर्निहित मुद्रण में अनुवर्ती न्यूलाइन है, दो क्रमिक प्रिंट बिल्कुल सही प्रारूप में सामने आते हैं।


13

अजगर 2, 59

lambda s:'FBto'[s>'C'::2]+`eval(s[2:]+'/*22+-11'[s>'C'::2])`

छोटी चुनौतियों में जहां फ़ंक्शंस की अनुमति होती है, lambdaआमतौर पर संक्षिप्तता तब भी जीत जाती है, जब कोड को वेरिएबल असाइन करने में असमर्थता के कारण कोड को खुद को दोहराना होगा।

हम जांच करते हैं कि हम किस मामले में स्ट्रिंग तुलना के साथ हैं s>'C'। फिर, सूची स्लाइसिंग ट्रिक के साथ सही उपसर्ग प्राप्त करें 'FBto'[s>'C'::2]

संख्या प्राप्त करने के लिए, हमें दूसरे से परे वर्णों का मूल्यांकन करना चाहिए और *2+1या तो /2-1करना चाहिए। हम स्ट्रिंग्स के रूप में उन दो अभिव्यक्तियों में से किसी से भी निपटने के द्वारा करते हैं, फिर से सूची स्लाइसिंग द्वारा चुना जाता है, परिणाम का मूल्यांकन करता है, और उस संख्या को एक स्ट्रिंग में बदल देता है।

संपादित करें: सहेजा गया एक चार (59):

lambda s:eval("''FBto''++``%%ss/*22+-11``"[s>'C'::2]%s[2:])

पूछना भी मत ...


2
आप लैम्ब्डा के अंदर वैरिएबल असाइन कर सकते हैं। उदाहरण: lambda a:(lambda b:b*b)(a+3)। यह विशेष रूप से छोटा नहीं है।
orlp

8

सी ++ 11 टेम्पलेट मेटाप्रोग्रामिंग, 305 बाइट्स

संपादित करें: एक और 100 बाइट्स बंद

क्या मुझे अपनी पसंद की भाषा के लिए किसी भी तरह की बाधा है? : p

#define C wchar_t
#define T };template<C p
#define L C...l>struct
#define X l...>
C a{T,L I{T,C c,L I<p,c,X:I<10*p+c-'0',X{T>struct I<p>{enum E{v=p};T,L S{T,C c,C d,L G:G<p/10,c,d,p%10+'0',X{T,L G<0,p,X{typedef S<p,X t;T,L F{T,L F<p,'o',X:G<(I<0,X::v+1)/2,'F','t'>{T,L F<p,'t',X:G<I<0,X::v*2-1,'B','o'>{};

उदाहरण:

#include <type_traits>
static_assert(I<0,'5'>::v == 5, "fail");
static_assert(I<0,'1','0','5'>::v == 105, "fail");
static_assert(I<0,'5','1'>::v == 51, "fail");
static_assert(std::is_same<typename G<5,'B','o'>::t, S<'B','o','5'>>::value, "fail");
static_assert(std::is_same<typename G<51,'F','t'>::t, S<'F','t','5','1'>>::value, "fail");
static_assert(std::is_same<typename F<'B','o','3'>::t, S<'F','t','2'>>::value, "fail");
static_assert(std::is_same<typename F<'F','t','2'>::t, S<'B','o','3'>>::value, "fail");
static_assert(std::is_same<typename F<'B','o','5'>::t, S<'F','t','3'>>::value, "fail");
static_assert(std::is_same<typename F<'F','t','3'>::t, S<'B','o','5'>>::value, "fail");
static_assert(std::is_same<typename F<'B','o','7'>::t, S<'F','t','4'>>::value, "fail");
static_assert(std::is_same<typename F<'F','t','4'>::t, S<'B','o','7'>>::value, "fail");
static_assert(std::is_same<typename F<'B','o','1','1'>::t, S<'F','t','6'>>::value, "fail");
static_assert(std::is_same<typename F<'F','t','6'>::t, S<'B','o','1','1'>>::value, "fail");
static_assert(std::is_same<typename F<'B','o','1','0','5'>::t, S<'F','t','5','3'>>::value, "fail");
static_assert(std::is_same<typename F<'F','t','5','3'>::t, S<'B','o','1','0','5'>>::value, "fail");
static_assert(std::is_same<typename F<'B','o','1','9','5'>::t, S<'F','t','9','8'>>::value, "fail");
static_assert(std::is_same<typename F<'F','t','9','8'>::t, S<'B','o','1','9','5'>>::value, "fail");
int main() {}

6

सीजेएम, 29 बाइट्स

l('B=\1>i"Ft"1$)2/+"Bo"@2*(+?

इसे ऑनलाइन आज़माएं

यहां बहुत कुछ विस्तृत नहीं है। दो संभावित परिणामों की गणना, और इनपुट में पहले अक्षर के आधार पर दोनों में से एक को चुनना। अगर मैं कुछ बेहतर लेकर आऊंगा तो अपडेट करूंगा।

स्पष्टीकरण:

l     Get input.
(     Pop off first character.
'B=   Compare with 'B.
\1>   Get rest of input to top of stack, and slice off first character.
i     Convert to integer.
"Ft"  String part of first possible output.
1$    Copy input value to top.
)2/   Increment, and divide by 2.
+     Concatenate with string part.
"Bo"  String part of second possible output.
@     Move input value to top.
2*(   Multiply by 2, and decrement.
+     Concatenate with string part.
?     Ternary to pick one of the two constructed outputs, based on comparison
      of first input character with 'B.

6

सीजेएम, 27 बाइट्स

4 27]r.^(_o'B=\(oi_2*(\)2/?

यह इस तथ्य का उपयोग करता है कि 'B' ^ 'F' == 4और 'o' ^ 't' == 27

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।


5

जावास्क्रिप्ट (ES6), 50 47 वर्ण

बहुत सरल समाधान: (एक बाइट को हटाने के लिए अंडरग्राउंडोरेल के लिए धन्यवाद!)

x=>(y=x.slice(2),x<'C'?'Ft'+-~y/2:'Bo'+(y*2-1))

Ungolfed:

function(x){
  y = x.slice(2); // everything after the 'Ft' or 'Bo'
  return x<'C' ? 'Ft'+Math.ceil(y/2) : 'Bo'+(y*2-1)
}

एक बार के लिए मेरा जवाब केवल ~ 2x सबसे अच्छा पायथ उत्तर की लंबाई था!


मैं चैट में इस उल्लेख किया है, लेकिन आप को बदलने के लिए सक्षम होना चाहिए y/2+.5के साथ -~y/2एक बाइट बचाने के लिए।
अंडरग्राउंडोरेल

@undergroundmonorail टिप के लिए धन्यवाद! BTW, मुझे यह चुनौती पसंद है क्योंकि यह अधिकांश चुनौतियों की तुलना में सरल है, इसलिए मेरा जवाब सामान्य से बहुत कम निकला।
ETHproductions

4

हास्केल, 69 बाइट्स

f('B':_:x)="Ft"++show(div(read x)2+1)
f(_:_:x)="Bo"++show(2*read x-1)

यथोचित रूप से सीधे-सीधे।


3

पायथ - 31 बाइट्स

बहुत सरल, स्विच प्राप्त करने के लिए ज़िप और मॉड्यूलर इंडेक्सिंग का उपयोग करता है। वास्तविक गणना वास्तव में आसान है।

s@C,Jc"FtBo"2,h/Ksttz2tyKhxJ<z2

टेस्ट सूट


3

जूलिया, 63 बाइट्स

x->(y=int(x[3:end]);join([x<"C"?"Ft":"Bo",x<"C"?(y+12:2y-1]))

Ungolfed:

function f(x::String)
    # Extract the number at the end
    y = int(x[3:end])

    # If x is lexographically less than "C", we have
    # "best of," so we need "first to." Otherwise we
    # need "best of."
    if x < "C"
        join(["Ft", (y+12])
    else
        join(["Bo", 2y-1])
    end
end

3

मतलाब, 95 बाइट्स

function f(s)
t='Bo';a=2;b=-1;if s(1)<70
t='Ft';a=.5;b=a;end
[t num2str(str2num(s(3:end))*a+b)]

उदाहरण:

>> f('Ft5')
ans =
Bo9
>> f('Bo51')
ans =
Ft26

3

पॉवरशेल, 111

पॉवरशेल और आवश्यक कोष्ठक की शब्दावलियाँ फिर से इसके पतन हैं। यहां तक ​​कि केवल 2 बाइट्स को बचाने के .Substring(0,2)लिए गोल्फिंग [0..1]-join'', और एक और युगल बाइट्स एक निहित Elseधन्यवाद के साथ सहेजे गएexit कमांड के । ओह अच्छा। स्ट्रिंग्स को अलग करने पर अच्छा रिफ्रेशर।

कोड:

$b=($a=$args[0])[0..1]-join'';$c=+($a[2..($a.Length-1)]-join'');if($b-eq"Bo"){"Ft"+($c+1)/2;exit};"Bo"+(2*$c-1)

उपयोग:

PS C:\Scripts\Golfing> .\ssb_tourney.ps1 Bo199
Ft100

व्याख्या

$b=($a=$args[0])[0..1]-join''      # Take in the command-line argument as $a, recast as
                                   # array, suck out the first two characters, save as $b
$c=+($a[2..($a.Length-1)]-join'')  # Do a similar trick with the right-hand side of $a,
                                   # re-cast it as an integer with the +
if($b-eq"Bo"){                     # If the first letters are "Bo"
    "Ft"+($c+1)/2                  # Implied write of the answer
    exit
}
"Bo"+(2*$c-1)                      # Implied write of the other answer, only reached if
                                   # the input is "Ft", else we would have hit the exit

3

पर्ल 5, 38 बाइट्स (37 + 1 फॉर -p)

$_=/Bo/?Ft.(.5+$'/2):Bo.(2*s/Ft//r-1)

प्रयोग : 54768.pl और के रूप में चलाने के रूप में सहेजें:

perl -p 54768.pl <<< 'Bo3'
# Ft2

या अंतःक्रियात्मक:

perl -p 54768.pl
Bo199
# Ft100

-pतात्पर्य है -n। आपको दोनों की आवश्यकता नहीं है।
डेनिस

@ डेनिस, वास्तव में मैं नहीं! धन्यवाद!
डोम हेस्टिंग्स

3

एफएसएचआरपी - 153 143 बाइट्स

let t(s:string)=
 let c=s.[2..]|>Seq.map string|>Seq.reduce(+)|>float
 if s.[0]='B'then sprintf"Ft%.0f"(ceil(c/2.)) else sprintf"Bo%.0f"(c*2.-1.)

अपडेट

  1. एक साधारण से मिलान पैटर्न से स्विच करके कुछ बाइट्स खटखटाया if ... then ...

3

रूबी, 82 बाइट्स

x=$*[0]
y=x.match(/..(\d*)/)[1].to_i
x=~/Bo/?(puts"Ft#{y/2+1}"):(puts"Bo#{y*2-1}")

कुछ बाइट्स को बंद करने के लिए एक तर्क के साथ कहा जाता है।
पहला पोस्ट, सुझावों का स्वागत है। :)

संपादित करें: मेरे गणित को बदलकर 12 बाइट्स से छुटकारा पाया। चूंकि बो संख्या विषम है, इसलिए 2 से विभाजित होने के बाद उनके पास हमेशा एक दशमलव होगा, जिसका अर्थ है कि मैं केवल छोटा कर सकता हूं और ceilराउंड अप का उपयोग करने के बजाय 1 जोड़ सकता हूं ।


आप बाद में स्थान को हटाकर दो बाइट्स बचा सकते हैं puts
प्रोग्रामफॉक्स

@ProgramFOX नहीं जानता कि मैं कैसे चूक गया, धन्यवाद। इसके अलावा, मैं किसी तरह संपादन को गड़बड़ाने में कामयाब रहा, लेकिन मुझे लगता है कि यह अब तय हो गया है, हाहा।
HugableSquare

हम एक ही समय में पोस्ट को संपादित कर रहे थे, जिससे एक संपादित संघर्ष हुआ। क्योंकि आपने बाद में सबमिट किया था, इसलिए आपके संपादन ने मेरा निर्माण किया। मुझे पता है, संपादित संघर्ष थोड़ा मुश्किल है: P
ProgramFOX

3

PHP, 85 79 75 बाइट्स

<?php
$f=$argv[1];$s=substr($f,2);echo strpos($f,Bo)===0?Ft.($s+1)/2:Bo.($s*2-1);


उपयोग:
एक तर्क के साथ स्क्रिप्ट को बुलाओ:php -d error_reporting=0 script.php Bo5


3

दूसरों की तरह हास्यास्पद रूप से छोटा नहीं है, लेकिन यह मेरी पहली पोस्ट है:

जेएस, 143 बाइट्स

f=prompt("","");n=parseInt(f.match(/\d{1,}/));s=0;r=0;if(f.match(/B/)){r=(n+1)/2;s="Ft"+r;}if(f.match(/F/)){r=n*2-1;s="Bo"+r;}alert(f+" : "+s);

Ungolfed संस्करण:

var f = prompt("", "");
var n = parseInt(f.match(/\d{1,}/));
var s = 0;
var r = 0;

if (f.match(/B/)) {
  r = (n + 1)/ 2;
  s = "Ft"+r;
 }
if (f.match(/F/)) {
  r = n * 2 - 1;
  s = "Bo"+r;
 }
alert(f+" : "+s);

7
प्रोग्रामिंग पहेलियाँ और कोड गोल्फ में आपका स्वागत है! आपके कोड को छोटा करने के कई तरीके हैं, इसलिए यहां कुछ हैं। 1) जावास्क्रिप्ट में लगभग सभी व्हाट्सएप अनावश्यक हैं, 2) आपको varकीवर्ड की आवश्यकता नहीं है , और 3) स्टेटमेंट को अर्धविराम या एक नई पंक्ति के साथ अलग किया जा सकता है, इसलिए आपको दोनों की आवश्यकता नहीं है। अधिक सामान्य युक्तियों के लिए युक्तियाँ देखें
निंजाबियरनॉकी

2

आर, 144 बाइट्स

कोड-गोल्फिंग, आर और इस साइट पर नया। तो यहाँ जाता है:

a=function(){n=readline();z="Bo";p=(as.numeric(gsub("[^0-9]","",n)));if(grepl(z,n)==TRUE){x="Ft";b=(p+1)/2}else{x="Bo";b=p*2-1};cat(x);cat(b)}

मुझे आर नहीं पता, लेकिन मुझे यकीन है कि आप व्हाट्सएप से छुटकारा पा सकते हैं।
अंडरग्राउंडोरेल

@undergroundmonorail तुम सही हो, आर वास्तव में व्हाट्सएप का उपयोग नहीं करता है। मैंने इसे केवल इस तरह लिखा था कि इसे देखने के लिए इसे अच्छा बनाने के लिए = व्हाट्सएप के बिना फ़ाइल का आकार 144 बाइट्स है, मुझे यकीन नहीं था कि कौन सी संख्या डालनी है इसलिए मैंने सबसे कम डाल दिया जिसे मैं उस कोड में फिट कर सका।
एक नरम तकिया

ओह, ठीक है :) रिकॉर्ड के लिए, यह आमतौर पर आपके स्कोर के लिए आपके द्वारा उपयोग किए गए सटीक कोड को पोस्ट करने के लिए बेहतर है, बस इसे सत्यापित करना जितना आसान हो सके, हालांकि लोगों को अक्सर "ungolfed" संस्करणों को शामिल करना आसान हो जाता है। Ungolfing की सीमा इंडेंटेशन और newlines जोड़ने से, चर नाम बदलने के लिए, कार्यों में कोड के अमूर्त करने और आम तौर पर कोड क्लीनर बनाने से होती है। इसमें से किसी की आवश्यकता नहीं है, लेकिन यह ठीक है जब तक कि पूरी तरह से गोल्फ संस्करण है।
अंडरग्राउंडोरेल

1

सी #, 110 बाइट्स

string f(string s){var b=s[0]=='B';var o=s.Remove(0,2);int i=int.Parse(o)/2;return b?"Ft"+(i+1):"Bo"+(4*i-1);}

PPCG में आपका स्वागत है! कृपया अपने उत्तर में आपके द्वारा गिना गया सटीक कोड शामिल करें ताकि लोग आपके स्कोर को आसानी से देख सकें (ऐसा प्रतीत होता है कि आपने अनावश्यक व्हाट्सएप के बिना कोड गिना है)। आप हमेशा इसके अलावा एक अनगुल्ड / पठनीय संस्करण शामिल कर सकते हैं।
मार्टिन एंडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.