誰がフットボールの試合に勝つつもりですか?


17

アメリカンフットボールのチャンピオンシップであるスーパーボウル50は、本日11時30分(UTCに開催されます(オンラインでライブ視聴できます)。この挑戦はそれを祝うためになされました。


アメリカンフットボールの試合では、2つのチームが最も多くのポイントを獲得するために競い合い、これらのポイントを獲得する6つの方法があります。それぞれに略語を付けます:

これらの6つの略語のみを大文字と小文字の両方で含む1行の文字列を取り込むプログラムまたは関数を記述します。

この文字列は、フットボールの試合(または試合の一部)のすべてのスコアリングイベントを表し、大文字の用語は1つのチームに属し、小文字の用語は他のチームに属します。

あなたの仕事は、ゲームの最終スコアを報告し、フォームの出力で勝った人を示すことです

[score 1] [to] [score 2]

どこ:

  • [score 1] 大文字と小文字のどちらが勝つかに関係なく、常に2つのスコアの大きい方(等しくない場合)です。
  • [score 2] 2つのスコアのうち小さい方(等しくない場合)。
  • [to]TO、あれば大文字のチームウォンto小文字のチームが勝った場合、およびToそれがタイだ場合。

例:スーパーボウルXLIXのすべてのスコアリングイベントは 、文字列で要約できます。

TDXPtdxpTDXPtdxpfgtdxpTDXPTDXP

ここで、大文字はニューイングランド・ペイトリオッツ、小文字は シアトル・シーホークスです。パトリオットは28点、ホークス24点を獲得したため、出力は次のようになります。

28 TO 24

ノート

  • プログラム/関数は、空の文字列を含む任意の入力をサポートする必要があります。
  • XPおよびのXD直後にのみ発生しますTDxpおよびのxd直後にのみ発生しますtd
  • 特定の場合に、入力文字列が開始または終了するとは限りません。
  • 入力と出力の両方で、オプションで単一の末尾の改行を使用できます

得点

バイト単位の最短コードが優先されます。スーパーボウル50 のキックオフ(今では遅すぎる!)の前に投稿された回答は、勝者チーム(パンサーズまたはブロンコス)を予測する可能性があり、正しければ、-10%バイトのボーナスを獲得できます!

(予測が変更されておらず、キックオフ前に実際に行われたことを確認するために、改訂履歴を確認します。)

テストケース

[empty string] -> 0 To 0
TDXPtdxpTDXPtdxpfgtdxpTDXPTDXP -> 28 TO 24
FG -> 3 TO 0
fg -> 3 to 0
TD -> 6 TO 0
td -> 6 to 0
TDXP -> 7 TO 0
tdxp -> 7 to 0
TDXD -> 8 TO 0
tdxd -> 8 to 0
S -> 2 TO 0
s -> 2 to 0
FCK -> 3 TO 0
fck -> 3 to 0
TDTDXDSssFCKfgfckFGtd -> 22 TO 16
fcksFCKS -> 5 To 5
tdtdtdtdxp -> 25 to 0
SSSSSSSTD -> 20 TO 0
fgSfckFGfgtdxptdxdTDs -> 26 to 11
FGTDXPtdxdtdsStdxpfgTDfckTDXDFCK -> 29 To 29


26
「Superbowl」ではなく「Superb Owl」と定型化されていると思います
-Downgoat

スーパーボウルの終了に投稿を編集した場合、ボーナスは引き続き適用されますか?
ドアノブ

1
@Doorknobこれについてはどうですか:キックオフの前に予測を行い、編集で変更しない場合は、コードを必要なだけ編集できます。(ただし、予測はコメントではなく回答にある必要があります。そのため、開始するには作業コードが必要です。)
カルビンの趣味

2
予測せずに答えることはできますか?:P
Rɪᴋᴇʀ

2
私は得点ボーナスの大ファンではありません。素晴らしいフクロウの後にこの挑戦を見た人には不公平であり、NFLに注意を払う人に偏っており、プログラミング能力とはまったく関係ありません。
DJMcMayhem

回答:


3

ピス、49 46 43 42バイト(ボーナス付き37.8バイト)

jr" to "xh._-FJmsmhx"PSFT"kXd\D\S,rz2z2_SJ

4バイトの節約を支援してくれた@Maltysenに感謝します!

で試してみてください Pyth Compiler

私はすべての拠点をカバーするのが好きなので、ブロンコスに賭けます。

使い方

jr" to "xh._-FJmsmhx"PSFT"kXd\D\S,rz2z2_SJ Input: z

                                  rz2      Swap the case of z.
                                 ,   z     Pair the result with z.
               m                           Map; for each d in the pair:
                           Xd\D\S            Replace each D with an S.
                 m                           Map; for each character k:
                   x"PSFT"k                    Compute k's first index on "PSFT".
                  h                            Increment the index.
                s                            Compute the sum of the incr. indices.
                                               "FG"  -> [3, 0]     -> 3
                                               "TD"  -> [4, 2]     -> 6
                                               "XP"  -> [0, 1]     -> 1
                                               "XD"  -> [0, 2]     -> 2
                                               "S"   -> [2]        -> 2
                                               "FCK" -> [3, 0, 0]  -> 3
                                               (lowercase letters) -> 0
              J                            Save the resulting list of scores in J.
            -F                             Reduce J by subtraction.
          ._                               Compute the sign of the difference.
         h                                 Add 1.
        x                             2    XOR the result with 2.
 r" to "                                   Pick‡ a function and apply it to " to ".
                                       _SJ Sort and reverse the list of scores.
j                                          Join, separating by the modified string.

rは、文字列を操作する関数のファミリーです。

  • の最初のスコアJz元の小文字に対応)が2番目のスコアよりも低い場合、符号関数はを返し-1(-1 + 1) ^ 2 == 2r" to "2あるswapcaseため、を返します" TO "

  • 第1のスコアが第二のスコアより高い場合、符号関数は戻ります1(1 + 1) ^ 2 == 0r" to "0あるlowercaseので、それを返し、" to "

  • スコアが等しい場合、符号関数が返され0(0 + 1) ^ 2 == 3そしてr" to "3あるtitleので、それを返し、" To "


私はそれを試しませんでしたが、さまざまなto値をさまざまな値にすることでおそらく節約できますr
-Maltysen

@Maltysenそれはうまくいきました。ありがとう!
デニス

4

MATL、51 * 0.9 = 45.9 54 57 58 63バイト

3バイトを削除してくれたDennisに感謝します!

'%i To %i'j0h!3'PDFTS'tkXc=s4:Hh*sSPYD3MdXK?kK0<?Xk

空の入力文字列は、オンラインコンパイラでは単一の改行文字として表されます。

編集(2016年6月8日):以下のリンクには、言語のリリース18.1.0による変更が含まれています(3直前に最初に移動しますXc

オンラインでお試しください!

ブロンコスに賭けた。

説明

スコアは、大文字または小文字の1文字を使用して検出されます(大文字は次のとおりです)。

  • P XPの場合(1ポイント)
  • D XDの場合(2ポイント)
  • F FG(3ポイント)およびFCK(3ポイント)
  • T TD用(6ポイント)
  • S Sの場合(2ポイント)

これらの5文字はそれぞれ、スコアイベントに一意に対応しています。ただし、

  • F以下のために再利用されるFGFCK、同じスコアを持っています、。@Dennisに感謝します!
  • DTDとXDの両方を検出します。そうT補償する4点の代わりに6を割り当てられます。

順序付けPDFTSは、ポイントを指定する数値配列を定義するときに数バイトを節約します[1,2,3,4,2]

各イベントは、大文字または小文字の上記文字のいずれかが存在することで検出されます。比較は、入力文字列の長さ(N)×チームの数(2)×検出されたスコアイベントの数(5)の3つの次元で行われます。ブロードキャスティングは広範囲に使用されます。これは、より大きなアレイのサイズに合わせてシングルトン次元に沿ってアレイを自動的に拡張することです。

'%i To %i'  % string with format specifiers for two integers
j0h         % input string. Attach 0 so it's never empty. Gives string of length N>0
!           % transpose into char array of size N×1
3           % number literal
'PDFTS'     % characters to detect the five combined types of score
tk          % duplicate and convert to lowercase
Xc          % concatenate along the third dimension to produce a 1×5×2 array
=           % test for equality with broadcast. Gives N×5×2 array
s           % sum along 1st dim. Gives 1×5×2 array
4:Hh        % array [1,2,3,4,2] to compute the total score. Size 1×5(×1) 
*           % multiply with broadcast. Gives 1×5×2 array
s           % sum along 2nd dim. Gives 1×1×2 array with the two scores
SP          % sort in reverse order along 3rd dim
YD          % sprintf. Gives output string with "To"
3M          % push array with the two scores again
dXK         % difference along 3rd dim. Gives a number. Copy to clipboard K
?           % is it non-zero? If so we need to make either lowercase or uppercase
  k         %   make (tentatively) lowercase
  K0<       %   did the uppercase team win?
  ?         %   if so...
    Xk      %     make uppercase
            % implicitly end the two if's and display string

勝ち予測なし?
カルビンの趣味

2
@ Calvin'sHobbies私はウィキペディアに相談していました...アメリカンフットボールの私の知識はほとんどありません:
ルイスメンドー

2
Fin FGを再利用すると、FCK3バイト節約できます。
デニス

3

CJam、57 55 54 53 50 49バイト

q_32f^]{"PSFTD"f#:)5Yer1b}%_$(@:-g"ToTOto"2/=\]S*

オンラインでお試しください!

ブロンコとは何なのかわからないので、パンサーズに賭けます。

使い方

q                              Read all input from STDIN.
 _                             Push a copy.
  32f^                         XOR all characters with 32. This swaps case.
      ]                        Wrap both strings in an array.
       {                 }%    Map; push the string S, then:
        "PSFTD"                    Push that string (T).
               f#                  Compute the index of each character of S in T.
                 :)                Increment each index.
                   5Yer            Replace 5's with 2's.
                       1b          Add the resulting integers.
                                       "FG"  -> [3 0]      -> 3
                                       "TD"  -> [4 2]      -> 6
                                       "XP"  -> [0 1]      -> 1
                                       "XD"  -> [0 2]      -> 2
                                       "S"   -> [2]        -> 2
                                       "FCK" -> [3 0 0]    -> 3
                                       (lowercase letters) -> 0

                               We've now computed the scores of the first (input)
                               and second (swapped case) team.

_$                             Push a copy of the array of scores and sort it.
  (                            Shift out the first (lower) score.
   @                           Rotate the array of scores on top.
    :-                         Reduce it by subtraction.
      g                        Compute the sign (1, 0 or -1) of the difference.
       "ToTOto"2/              Push ["To" "TO" "to"].
                 =             Select the string that corresponds to the sign.
                  \            Swap it with the lower score.
                   ]           Wrap the entire stack in an array.
                    S*         Join the resulting array, separating by spaces.


1
:-gその絵文字を見たことがない
-ETHproductions

@ETHproductionsカタツムリ口?
はないチャールズ

@ETHproductionsそれは眼鏡を口に落とした人です。
CJデニス

これはブロンコです。
DJMcMayhem

3

JavaScript(ES6)、128 130バイト

@Neilのヒントを適用して保存された2バイトを編集する

s=>(l=u=0,s.replace(/fck|s|../gi,x=>(z=+' 231  362'[parseInt(x,36)%10],x>'a'?l+=z:u+=z)),l>u?l+' to '+u:u+(u>l?' TO ':' To ')+l

テスト

f=s=>(
  l=u=0,
  s.replace(/fck|s|../gi,x=>(
    z=+' 231  362'[parseInt(x,36)%10],
    x>'a'?l+=z:u+=z
  )),
  l>u?l+' to '+u:u+(u>l?' TO ':' To ')+l
)

//TEST
console.log=x=>O.textContent+=x+'\n'

;[
["","0 To 0"],
["TDXPtdxpTDXPtdxpfgtdxpTDXPTDXP", "28 TO 24"],
["FG", "3 TO 0"],
["fg", "3 to 0"],
["TD", "6 TO 0"],
["td", "6 to 0"],
["TDXP", "7 TO 0"],
["tdxp", "7 to 0"],
["TDXD", "8 TO 0"],
["tdxd", "8 to 0"],
["S", "2 TO 0"],
["s", "2 to 0"],
["FCK", "3 TO 0"],
["fck", "3 to 0"],
["TDTDXDSssFCKfgfckFGtd", "22 TO 16"],
["fcksFCKS", "5 To 5"],
["tdtdtdtdxp", "25 to 0"],
["SSSSSSSTD", "20 TO 0"],
["fgSfckFGfgtdxptdxdTDs", "26 to 11"],
["FGTDXPtdxdtdsStdxpfgTDfckTDXDFCK", "29 To 29"]
].forEach(t=>{
  var i=t[0],x=t[1],r=f(i)
  console.log(i+' -> '+r+(r==x?' OK':' FAIL expected '+x))
})
<pre id=O></pre>


1
うわー、そのトリックparseIntは本当に賢いです!l>u?l+" to "+u:u+(u>l?" TO ":" To ")+l出力に@Neilのtipを使用すると、2バイトも節約されます。
user81655

@ user81655大文字と小文字を区別しない方法で文字の小さなグループを操作する必要があるたびにparseIntを検討します... 99%の時間は役に立たないです。ニールのヒントを指摘していただきありがとうございます
-edc65

2

JavaScriptの(ES6)、165の 156 151 149バイト

s=>(a=b=0,s.match(/S|FCK|../gi)||[]).map(m=>(u=m.toUpperCase(),p=u>"XO"?1:u=="TD"?6:u>"R"?2:3,u<m?a+=p:b+=p))&&a>b?a+" to "+b:b+(b>a?" TO ":" To ")+a

@ dev-nullのおかげで9バイト、@ Not that Charlesのおかげで5 バイト、@ Neilのおかげで2 バイト節約されました!

説明

var solution =

s=>(
    a=b=0,                // scores for teams A and B
    s.match(/S|FCK|../gi) // get an array of each abbreviation
      ||[]                // if it returns null, default to an empty array
  ).map(m=>(              // for each abbreviation m
    u=m.toUpperCase(),    // u = abbreviation in upper-case
    p=                    // p = number of points for the abbreviation
      u>"XO"?1            // case "XP"
      :u=="TD"?6          // case "TD"
      :u>"R"?2            // case "XD" or "S"
      :3,                 // case "FG" or "FCK"
    u<m?a+=p:b+=p         // add the points to the appropriate team
  ))
  
  // Output the scores
  &&a>b?a+" to "+b
  :b+(b>a?" TO ":" To ")+a
<input type="text" id="input" value="FGTDXPtdxdtdsStdxpfgTDfckTDXDFCK" />
<button onclick="result.textContent=solution(input.value)">Go</button>
<pre id="result"></pre>


あなたが使用カント/s|fck|../gimap(..),a>bの代わりにmap(..)&&a>b
andlrc

もしそうなら、いくらか節約できると思う...:u=="T"?6:u>"R"?2:3...
チャールズ

@NotthatCharles True。ヒントをありがとう!
user81655

使用して2バイトを節約するかもしれないと思うb+(b>a?" TO ":" To ")+a
ニール

2

Perl、144 140 + 2 = 142バイト

%a=qw(fg 3 td 6 xp 1 xd 2 s 2 fck 3);@a=(0,0);$^=lc,$a[$^eq$_]+=$a{$^}for/fck|s|../gi;$,=$".(To,TO,to)[$a[1]-$a[0]<=>0].$";say sort{$b-$a}@a

必要で-nフラグをし、-E:です

$ echo "
TDXPtdxpTDXPtdxpfgtdxpTDXPTDXP
FG
fg
SSSSSSSTD
FGTDXPtdxdtdsStdxpfgTDfckTDXDFCK" | \
perl -nE'%a=qw(fg 3 td 6 xp 1 xd 2 s 2 fck 3);@a=(0,0);$^=lc,$a[$^eq$_]+=$a{$^}for/fck|s|../gi;$,=$".(To,TO,to)[$a[1]-$a[0]<=>0].$";say sort{$b-$a}@a'
0 To 0
28 TO 24 
3 TO 0
3 to 0
20 TO 0
29 To 29

編集:サポートするのを忘れてtoToそしてTO


いいね しかし%a=qw(fg 3 td 6 xp 1 xd 2 s 2 fck 3)、より簡単%a=(fg,3,td,6,xp,1,xd,2,s,2,fck,3)です。そして" "(あなたの定義では$,)はとして簡潔$"です。しかし、私はそれらのどちらもテストしていません。
msh210

@ msh210、使用$"できqwto To TOアレイから削除できます、ありがとう!
andlrc

1

Lua、231200バイト

アメリカンフットボールのルールをよく知らなくても、とても楽しかったです(ここにはラグビーがあります:))。できる限り短くするために多くのことをテストしなければなりませんでした。改善すべきことはあまりないと思います。おそらくないでしょう。

編集:私はトータルリタードです。私が取り組んだ最初の解決策は、配列拡張を使用することを中心に展開してから変更し、小文字と大文字の両方のチームのスコアを含む配列はもう役に立ちませんでした。削除してプレーン変数を使用すると、美しい-31バイトになります。

a={F=3,D=2,T=4,P=1,S=2}l,u=0,0 io.read():gsub(".",function(c)x=a[c:upper()]if a[c]then u=u+a[c]elseif x then l=l+x end end)w=l>u and" to "or l<u and" TO "or" To "print(math.max(l,u)..w..math.min(l,u))

非ゴルフと説明

a={F=3,D=2,T=4,P=1,S=2}        -- define the table a with our scoring values
l,u=0,0                        -- scores for the upper and lowercase teams
io.read():gsub(".",function(c) -- iterate over each character in the input
  x=a[c:upper()]               -- x contains the score for a lowercase character
  if a[c]                      -- if a contains c (would evaluate to nil otherwise)
  then
    u=u+a[c]                   -- increment the score of the uppercase team
  elseif x                     -- if x isn't nil
  then                         -- same as "a contains c:upper()"
    l=l+x                      -- increment the score of the lowercase team
  end
end)                           -- exit the anonyme function
w=l>u and" to "               -- nested ternary, lower > upper, we will use "to"
    or l<u and" TO "       -- lower < uppercase, use "TO"
    or" To "                   -- else (draw), use "To"
print(math.max(l,u)        -- output the concatenated string using 
      ..b.w..math.min(l,u))-- min/max to put the winner in the first position

0

Python、167バイト

素晴らしいフクロウは長い間過ぎていますが、まだPythonの解決策がないため:

def f(s):g=lambda s:0if s==""else{68:1,70:3,83:2,84:5,88:1}.get(ord(s[0]),0)+g(s[1:]);a=g(s);b=g(s.upper())-a;return"%i %s %i"%((a,("To","TO")[a>b],b),(b,"to",a))[a<b]

Python 2または3で動作します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.