축구 경기에서 누가 이길까요?


17

미국 축구 선수권 대회, 슈퍼 볼 (50)은 11:30 오후에 오늘 무슨 일이 일어나고 UTC (당신은 할 수 는 온라인 살고 시청 ). 이 도전은 그것을 축하하기 위해 만들어졌습니다.


미식 축구 경기에서 두 팀이 가장 많은 점수를 획득하기 위해 경쟁하며이 점수를 얻는 방법 에는 6 가지가 있습니다. 우리는 각각 약어를 줄 것이다 :

이 6 개의 약어 만 포함하는 단일 행 문자열을 대문자와 소문자로 모두 사용하는 프로그램이나 함수를 작성하십시오.

이 문자열은 축구 경기 (또는 게임의 일부)에서 모든 득점 이벤트를 나타내며 대문자는 한 팀에 속하고 소문자는 다른 팀에 속합니다.

당신의 임무는 게임의 최종 점수를보고하고 양식의 출력으로 누가 이겼는지 표시하는 것입니다

[score 1] [to] [score 2]

어디:

  • [score 1] 대문자 또는 소문자에 관계없이 항상 두 점수 중 더 큽니다 (같지 않은 경우).
  • [score 2] 두 점수 중 작은 점수입니다 (같지 않은 경우).
  • [to]TO경우 대문자 팀 원, to소문자 팀 원 경우, 그리고 To그 넥타이가 있다면.

예 : 모든 채점 이벤트 에서 슈퍼 볼 XLIX은 문자열로 요약 될 수있다

TDXPtdxpTDXPtdxpfgtdxpTDXPTDXP

여기서 대문자는 New England Patriots 이고 소문자는 Seattle Seahawks 입니다. Patriots는 28 점과 Hawks 24 점을 얻었으므로 결과는 다음과 같습니다.

28 TO 24

노트

  • 프로그램 / 함수는 빈 문자열을 포함하여 임의의 입력을 지원해야합니다.
  • XP그리고 XD단지 직후에 발생합니다 TD. xp그리고 xd단지 직후에 발생합니다 td.
  • 경우에 따라 입력 문자열이 시작되거나 끝나는 것으로 가정 할 수 없습니다.
  • 입력 및 출력 모두에서 단일 후행 줄 바꿈이 선택적으로 허용됩니다.

채점

바이트 단위의 가장 짧은 코드가 이깁니다. Super Bowl 50 의 킥오프 전에 게시 된 답변 ( 너무 늦었습니다! )은 우승 팀 ( Panthers 또는 Broncos )을 예측할 수 있으며 , 정확하다면 -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
나는 그것이 "슈퍼 볼"이 아닌 "슈퍼 올빼미"로 양식화되었다고 생각합니다
Downgoat

슈퍼 볼이 끝난 후에도 게시물을 편집해도 보너스가 계속 적용 됩니까?
Doorknob

1
@Doorknob 방법 : 시작하기 전에 예측을하고 편집으로 변경하지 않으면 원하는만큼 코드를 편집 할 수 있습니다. (그러나 당신의 예측은 어떤 의견이 아니라 당신의 대답에 있어야합니다. 그래서 당신은 시작하기 위해 작업 코드가 필요합니다.)
Calvin 's Hobbies

2
그냥 예측하고 대답하지 않습니까? : P
Rɪᴋᴇʀ

2
나는 득점 보너스의 열렬한 팬이 아닙니다. 처음이 문제를 본 사람들에게 불공평 한 후 뛰어난 올빼미, 그것은주의를 기울 그 NFL에 그쪽으로 편향, 그리고 능력을 프로그램에 전혀 관련되지 않은 것.
DJMcMayhem

답변:


3

Pyth, 49 46 43 42 바이트 (37.8 바이트, 보너스 포함)

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

4 바이트를 절약 할 수있는 @Maltysen에게 감사드립니다!

Pyth Compiler 에서 사용해보십시오 .

나는 모든 기지를 덮는 것을 좋아하므로 Broncos에 베팅 할 것입니다.

작동 원리

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 문자열에서 작동하는 기능 군입니다.

  • 최초의 점수 경우 J(교환의 경우에 해당하는 z, 즉, 원래 소문자 문자) 두 번째 점수보다 낮은, 사인 함수를 반환합니다 -1, (-1 + 1) ^ 2 == 2하고 r" to "2있다 swapcase가 반환되도록 " TO ".

  • 첫 번째 점수가 두 번째 점수보다 높을 경우, 부호의 기능은 반환 1, (1 + 1) ^ 2 == 0그리고 r" to "0이다 lowercase그래서 반환 " to ".

  • 점수가 동일한 경우, 서명 기능은 반환 0, (0 + 1) ^ 2 == 3그리고 r" to "3이다 title그래서 반환 " To ".


나는 그것을 시도하지 않았지만, 당신은 아마 to다른 값을 통해 다양한 s를 만들어서 절약 할 수 있습니다r
Maltysen

@ Maltysen 잘 작동했습니다. 감사!
Dennis

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

빈 입력 문자열은 온라인 컴파일러에서 단일 개행 문자로 표시됩니다.

EDIT (2016 년 6 월 8) : 아래의 링크는 언어의 버전 18.1.0에 따라 수정이 포함 (처음 그가 이동 3직전 Xc)

온라인으로 사용해보십시오!

나는 야생마에 내기를 걸었다.

설명

점수는 대문자 또는 소문자의 단일 문자를 사용하여 감지됩니다 (대문자는 다음에 표시됨).

  • P XP 용 (1 점)
  • D XD 용 (2 점)
  • F FG (3 점) 및 FCK (3 점)
  • T TD 용 (6 점)
  • S S 용 (2 점)

이 다섯 글자는 각각 점수 이벤트에 고유하게 해당합니다.

  • F같은 점수를 가진 FG및에 재사용됩니다 FCK. @Dennis에게 감사드립니다 !
  • DTD와 XD를 모두 감지합니다. 따라서 T보상하기 위해 6 대신 4 포인트가 할당됩니다.

ordering 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

승리 예측이 없습니까?
Calvin 's Hobbies

2
@ 나는 위키 백과을 컨설팅했다 Calvin'sHobbies은 ... 미식 축구의 내 지식 가까이 :-) 대 0이다
루이스 Mendo

2
재사용 F의를 FG하고하는 것은 FCK3 바이트를 저장해야합니다.
Dennis

3

CJam, 57 55 54 53 50 49 바이트

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

온라인으로 사용해보십시오!

나는 야생마가 무엇인지 전혀 모른다. 그래서 나는 Panthers에 내기를 할 것이다.

작동 원리

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 Dennis

이것은 야생마입니다.
DJMcMayhem

3

자바 스크립트 (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의 팁을 사용 하면 2 바이트도 절약됩니다.
user81655

@ user81655 음 나는 대소 문자를 구분하지 않는 작은 문자 그룹에서 작동해야 할 때마다 parseInt를 고려합니다 ... 99 %의 시간은 쓸모가 없습니다. Neil의 팁을 지적 해 주셔서 감사합니다
edc65

2

자바 스크립트 (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

덕분에 9 바이트 절약 @ dev에 널 (null) 로, 5 감사를 @Not 그 찰스 와 2 덕분에 @Neil을 !

설명

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

b+(b>a?" TO ":" To ")+a
Neil

2

Perl, 144140 + 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

편집 : 지원 분실 to, To하고 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, 사용할 $"qw있고 to To TO어레이에서 제거 할 수 있습니다 . 감사합니다!
andlrc

1

루아, 231200 바이트

미식 축구의 규칙을 모르는 경우에도 많은 재미가있었습니다 (우리는 여기에 Rugby가 있습니다). 나는 가능한 한 짧게 만들기 위해 많은 것을 테스트해야했지만 개선해야 할 것이 많지 않다고 생각합니다.

편집 : 나는 총 지체입니다. 내가 작업 한 첫 번째 솔루션은 배열 확장을 사용하여 회전 한 다음 소문자와 대문자 팀 모두에 대한 점수를 포함하는 배열을 변경하고 더 이상 유용하지 않았습니다. 그것을 제거하고 일반 변수를 사용하면 아름다운 -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

파이썬, 167 바이트

멋진 올빼미는 오래되었지만 파이썬 솔루션이 아직 없기 때문에 :

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.