Determinar o vencedor de um jogo de futebol australiano


13

No futebol australiano, os gols valem 6 pontos e os traseiros valem 1 ponto. As pontuações podem incluir o número de gols e atrasos, bem como a pontuação total. Dado o número de gols e as desvantagens de duas equipes diferentes, determine qual equipe venceu o jogo.

Pegue quatro números inteiros g1, b1, g2, b2como entrada e produz dois valores distintos para se a primeira equipe ou a segunda equipe inserida venceu. O formato de entrada é flexível, mas a ordem de entrada deve permitir que seja óbvio qual equipe é a primeira. Por exemplo, g1, g2, b1, b2seria permitido, mas b1, g2, g1, b2não seria.

Casos de teste

Os casos de teste serão usados truepara o primeiro time vencedor e falsepara o segundo time vencedor. A entrada está no formato (g1,b1),(g2,b2).

(1,0),(0,1)        true
(2,0),(0,11)       true
(10,8),(11,1)      true
(0,0),(1,0)        false
(100,100),(117,0)  false
(7,7),(5,12)       true
(2,0),(0,13)       false

Como exemplo, por exemplo, a (10,8),(11,1)equipe 1 marcou 10 gols e 8 atrasos, totalizando 106+81=68 pontos, enquanto a equipe 2 marcou 116+11=67 pontos, portanto a equipe 1 vence .

Nenhuma entrada será um empate - o comportamento do seu programa na entrada de empate não importa.


Poderíamos estender o futebol gaélico e o arremesso?
TRiG 27/09/19

@TRiG faça sua própria pergunta!
Stephen

Vou tentar pensar em algo que não está muito perto.
TRiG 27/09/19

2
@TRiG, ​​GAA seria idêntico, apenas usando a base-3 em vez da base-6.
Shaggy

Sim, @Shaggy, e é por isso que não pude simplesmente copiar esta pergunta para criar uma equivalente no GAA. Alguma coisa similar. Talvez incluindo regras internacionais de futebol.
TRiG 27/09/19

Respostas:


7

Geléia , 3 bytes

ḅ6M

Um link monádico que aceita uma lista de listas de números inteiros [[g1,b1],[g2,b2]], que gera uma lista [1]ou [2].
(Empates renderia [1,2])

... Ou um programa completo de impressão 1ou 2.

Experimente online! Ou veja a suíte de testes .

Quão?

ḅ6M - Link: list of lists of integers, X
 6  - literal six
ḅ   - convert (X) from base 6 (vectorises)
  M - maximal indices

5

Montagem CP-1610 ( Intellivision ), 9 DECLEs 1 ≈ 12 bytes

g1b1g2b2

275   PSHR  R5        ; push return address
110   SUBR  R2,   R0  ; R0 -= R2
082   MOVR  R0,   R2  ; R2 = R0
04C   SLL   R0,   2   ; R0 <<= 2
0D0   ADDR  R2,   R0  ; R0 += R2
0D0   ADDR  R2,   R0  ; R0 += R2
0C8   ADDR  R1,   R0  ; R0 += R1
118   SUBR  R3,   R0  ; R0 -= R3
2B7   PULR  R7        ; return

O CP-1610 não possui instrução de multiplicação e só pode mudar de 1 ou 2 posições por vez, portanto, calculamos a seguinte expressão:

((R0 - R2) << 2) + (R0 - R2) + (R0 - R2) + R1 - R3

Código de teste completo

          ROMW    10              ; use 10-bit ROM width
          ORG     $4800           ; map this program at $4800

          ;; ------------------------------------------------------------- ;;
          ;;  test code                                                    ;;
          ;; ------------------------------------------------------------- ;;
main      PROC
          SDBD                    ; set up an interrupt service routine
          MVII    #isr,     R0    ; to do some minimal STIC initialization
          MVO     R0,       $100
          SWAP    R0
          MVO     R0,       $101

          EIS                     ; enable interrupts

          SDBD                    ; R4 = pointer to test cases
          MVII    #@@data,  R4
          MVII    #$200,    R5    ; R5 = backtab pointer

@@loop    PSHR    R5              ; save R5 on the stack
          MVI@    R4,       R0    ; load the next test case
          MVI@    R4,       R1    ; into R0 .. R3
          MVI@    R4,       R2
          MVI@    R4,       R3
          CALL    score           ; invoke our routine
          BMI     @@true

          MVII    #$80,     R0    ; set output to '0'
          B       @@output

@@true    MVII    #$88,     R0    ; set output to '1'

@@output  PULR    R5              ; restore R5
          MVO@    R0,       R5    ; draw the output

          SDBD                    ; was it the last test case?
          CMPI    #@@end,   R4
          BLT     @@loop          ; if not, jump to @@loop

          DECR    R7              ; loop forever

@@data    DECLE   1, 0, 0, 1      ; test cases
          DECLE   2, 0, 0, 11
          DECLE   10, 8, 11, 1
          DECLE   0, 0, 1, 0
          DECLE   100, 100, 117, 0
          DECLE   7, 7, 5, 12
          DECLE   2, 0, 0, 13
@@end     ENDP

          ;; ------------------------------------------------------------- ;;
          ;;  ISR                                                          ;;
          ;; ------------------------------------------------------------- ;;
isr       PROC
          MVO     R0,       $0020 ; enable display

          CLRR    R0
          MVO     R0,       $0030 ; no horizontal delay
          MVO     R0,       $0031 ; no vertical delay
          MVO     R0,       $0032 ; no border extension
          MVII    #$D,      R0
          MVO     R0,       $0028 ; light-blue background
          MVO     R0,       $002C ; light-blue border

          JR      R5              ; return from ISR
          ENDP

          ;; ------------------------------------------------------------- ;;
          ;;  routine                                                      ;;
          ;; ------------------------------------------------------------- ;;
score     PROC
          PSHR    R5              ; push the return address

          SUBR    R2,       R0    ; R0 -= R2
          MOVR    R0,       R2    ; R2 = R0
          SLL     R0,       2     ; R0 <<= 2
          ADDR    R2,       R0    ; R0 += R2
          ADDR    R2,       R0    ; R0 += R2
          ADDR    R1,       R0    ; R0 += R1
          SUBR    R3,       R0    ; R0 -= R3

          PULR    R7              ; return
          ENDP

Resultado

resultado

captura de tela do jzIntv


1. Um código de operação CP-1610 é codificado com um valor de 10 bits, conhecido como 'DECLE'. Essa rotina tem 9 DECLEs.




4

Linguagem Esotérica Fonética Internacional , 12 bytes (linguagem WIP)

6ɪθɪt6ɪθɪtʈo

Saídas 1para true e 0false.

Ainda não há intérprete de TIO, mas pode ser executado clonando o repositório acima e chamando python main.py "code here".

O TL; DR da linguagem é que é uma linguagem baseada em pilha, onde todas as instruções são um caractere do alfabeto fonético internacional .

Recebe argumentos como 4 entradas de STDIN, na ordem g1, b1, g2, b2. Pode ser reduzido a menos de 12 bytes quando os loops forem totalmente implementados.

6ɪθɪt6ɪθɪtʈo
6            ; Push 6
 ɪ           ; Take number input, push
  θ          ; Pop 2, multiply, push
   ɪ         ; Take number input, push
    t        ; Pop 2, add, push
     6       ; Push 6
      ɪ      ; Take number input, push
       θ     ; Pop 2, multiply, push
        ɪ    ; Take number input, push
         t   ; Pop 2, add, push 
          ʈ  ; Pop 2, if a > b push 1, otherwise 0
           o ; Pop, print

6
kuːl ˈlæŋgwɪʤ, djuːd!
roblogic 27/09/19

aɪm nɑːt ːmjuːzd baɪ ðə hʊd; bɪˈniːθ ɪt ɪz ˈsɪmpli dʒʌst əˈnʌðər stæk-beɪst ˈlæŋɡwɪdʒ. aɪstrˈli dɪsˈkɜːrɪdʒ ju tu ʊpvoʊt ðɪs ˈænsər.




3

33 , 22 bytes

6OxcOasz6OxcOaclmzh1co

Experimente online!

Pega a entrada como 4 números inteiros delimitados e retorna 0 para o primeiro time vencedor, 1 para o segundo.

Explicação:

6Oxc                   | Multiplies the first number by 6
    Oa                 | Adds the second number
        6Oxc           | Multiplies the third number by 6
            Oa         | Adds the fourth number
      sz      clmz     | Subtract this from the first team's score
                  h1co | Print 0 if the first team's score is greater, 1 otherwise

-4 bytes se resultados não distintos forem permitidos:

6OxcOasz6OxcOaclmo

Irá gerar a diferença de pontuação; resultados positivos significam a vitória da primeira equipe, negativos significam a vitória da segunda equipe.



3

brainfuck , 45 38 36 32 29 28 bytes

,[>,[<++++++>-],]-[[-<]>>]>.

Experimente online!

Graças a @Jo King por -8 bytes

A entrada é b1, g1, b2, g2 (as metas e os traseiros são trocados) Imprime þ, se o time 1 vencer. Imprime nulo, se o time 2 vencer.

código:

[tape: p1, p2, print marker]

[Get input and calculate scores]
,               input behinds of team 1
[               while input
  >,                go to next cell and input goals of team
  [<++++++>-]       add it 6 times to behinds
,]              repeat this with the second pair of values

[Determine, which one is better]
-               set print marker
[               while score of both teams is greater than zero
  [-<]              decrement and go to previous cell (team 1 or empty cell/in the first run, it will decrement the print marker a second time)
  >>                return to team 2 (or two cells to the right of the first team that became 0)
]
>               go one cell right. If team 1 won, we are at the print marker now
                If team 2 won, we are one cell right of the print marker
.           Print that

Eu não acho que isso funcione com entradas maiores que 10, mas de qualquer maneira uma ótima solução. (Anotá-lo ainda). Pode dar uma chance para outgolf que mais tarde :)
Roman Gräf

1
Sim, entradas maiores que 9 são pelo menos um pouco complicadas, porque o código usa apenas um caractere por entrada. Você precisa usar os próximos caracteres ASCII ( :;<=>?etc.) se desejar inserir pontuações mais altas.
Dorian

"Entrada como código de caractere, exceto nulo" é uma opção? Além disso, ambas as pontuações devem ser iguais, ao serem divididas por número inteiro por 256, pelo menos quando você usa tio.
Dorian

3

Scratch 3.0 17 16 blocos, 160 143 bytes

A pontuação vem do método de pontuação proposto aqui

1 bloco / 17 bytes salvos graças a @A (ou Uzer_A no zero) _

Programa em blocos melhores

Experimente no Scratch

Como Scratchblocks :

when gf clicked
repeat(2
ask[]and wait
set[m v]to((answer)*(6)
ask[]and wait
change[m v]by(answer
add(m)to[x v
end
say<(item(1) of [x v]) > (m)

Histórico de respostas

Programa em blocos

Praticamente um porto da minha resposta em barril.

Experimente no Scratch

A entrada está na forma de g1, b1, g2, b2

Sintaxe Scratchblocks

when gf clicked
repeat(0
set[m v]to(0
ask[]and wait
change[m v]by((answer)*(6)
ask[]and wait
change[m v]by(answer
add(m)to[x v
end
say<(item(1) of [x v]) > (m)

Agora eu sei o que você está dizendo ... por que jogar golfe?!? Bem, é divertido. É por isso. Além disso, o Scratch é único, pois muitas vezes não é apresentado aqui no CGCC.




2

Barril , 10 bytes (SBCS)

(2|¿¿6*+)>

Experimente online!

Como australiano, eu aprovo esta pergunta.

Entrada tomada como:

b1
g1
b2
g2

E 0 significa equipe 2 e 1 significa equipe 1

Explicado

(2| #twice
¿¿  #get input in the form of bn, gn where n is the team number
*6+ #multiply the goals by 6 and add the values
)>  #compare the two values to determine the winner

2

05AB1E , 6 5 bytes

6δβZk

Entrada como uma lista aninhada [[g1,b1],[g2,b2]]. Saída 0se o time 1 vencer e 1se o time 2 vencer.

-1 byte graças a @Grimy por me lembrar δ.

Experimente online ou verifique todos os casos de teste .

Explicação:

Aparentemente, a conversão de base arbitrária em listas aninhadas não funciona sem um produto externo do mapa explícito .

 δβ    # Apply arbitrary base-conversion double-vectorized,
6      # using the (implicit) input-list of lists and 6 as base
       # (i.e. [a,b] becomes 6a+b (or to be more precise: 6¹a + 6⁰b))
   Z   # Get the maximum of this mapped list (without popping the list itself)
    k  # And get the 0-based index of this maximum in the mapped list
       # (after which the top of the stack is output implicitly as result)


2

C (gcc) , 39 35 31 26 bytes

e(a,b,c,d){a=(a-c)*6>d-b;}

0 é falso

1 é verdadeiro

A entrada para a função é (g1, b1, g2, b2)

Graças à maçaneta da porta por -5 bytes

Experimente online!


3
Você pode remover o espaço depois return, mas também pode abusar de um detalhe de implementação por 26 bytes .
Maçaneta

2

Flak cerebral , 62 bytes

([((({})({}){}){}{}[(({})({}){}){}{}]<(())>)(<>)]){({}())<>}{}

Resultados 1se o primeiro time perdeu e 0se ganhou (ou empatou).

Experimente online!

# Input: G B g b

   (                                 <(())>)                   # Push 1 under...
    ({})({}){}){}{}                                            #   6G + B
                   [                ]                          #   Minus
                    (({})({}){}){}{}                           #   6g + b
                                             <>                # Switch stacks
([(                                         (  )])             # Push 0 under -(6G+B-6g+b)
                                                   ({}())<>    # Add 1 and switch stacks...
                                                  {        }   #   until one stack reaches 0
                                                            {} # Pop, leaving either 1 or 0


2

Poético , 751 bytes

the game:a game o soccer
for a moment of my fun,i kicked my leg
o,i hurt a player
o.m.gee,o no
suddenly i then apologized a little
o.m.gee,o no
but really,i loved a good soccer battle
a game i am doing,i love it
there is a game,a twenty-to-one unwinnable match(as we called it,i mean)a match we won
a wonder of an event i saw
i played,i go in again
i am happy in a match-up of teams,i am pumped
then o,a coach i saw played soccer
i know i do admire a game o soccer
o,a match was not a bummer,and also i am making in an extra score
i think i saw a split net,a hole i ripped out a net
i am ready to win a match
o,my people and i love a sport,a bit o soccer
i am going in a game,i score,i win
o really,i am doing a game o soccer
play ball
i am gonna wi-n

Experimente online!

Rapaz, foi difícil escrever.

A entrada está no seguinte formato:

g1
b1
g2
b2

Isso fornece o código de erro "IF / EIF incompatível" se o primeiro time vencer e "EOF inesperado" se o segundo time vencer. (Aliás, um empate é tratado como o segundo time vencedor).


1

Retina 0.8.2 , 34 bytes

\d+
$*
(1*),
$1$1$1$1$1$1
(1*);\1$

Experimente online! O link inclui casos de teste. Resultados 1se o segundo time não vencer e 0se vencer . Explicação:

\d+
$*

Converta a entrada para unário.

(1*),
$1$1$1$1$1$1

Em cada par, multiplique o primeiro número por seis e adicione o segundo.

(1*);\1$

Verifique se o segundo número é maior que o primeiro. Como alternativa, você pode usar o ^(1*);\1que resultaria 0se o primeiro time vencer e 1se não vencer .



1

Montador ABC , 111 74 bytes

.o 0 4 iiii
f
	subI
	pushI 6
	mulI
	addI
	subI
	pushI 0
	ltI
.d 0 1 b
	rtn

Experimente online!

Ele não usa nada acima das operações de pilha mais básicas:

subI    | B = [g1-g2,b1,b2]
pushI 6 | B = [6,g1-g2,b1,b2]
mulI    | B = [6*g1-6*g2,b1,b2]
addI    | B = [6*g1+b1-6*g2,b2]
subI    | B = [6*g1+b1-6*g2-b2]
pushI 0 | B = [0,6*g1+b1-6*g2-b2]
ltI     | B = [0<6*g1+b1-6*g2-b2]



1

Espaço em branco, 115 bytes

[S S S N
_Push_0][S N
S _Duplicate_0][T   N
T   T   _STDIN_as_integer][T    T   T   _Retrieve_integer][S S S T  T   S N
_Push_6][T  S S N
_Multiply][S N
S _Duplicate][S N
S _Duplicate][T N
T   T   _STDIN_as_integer][T    T   T   _Retrieve_integer][T    S S S _Add][S N
S _Duplicate][S N
S _Duplicate][T N
T   T   _STDIN_as_integer][T    T   T   _Retrieve_input][S S S T    T   S N
_Push_6][T  S S N
_Multiply][S N
S _Duplicate][S N
S _Duplicate][T N
T   T   _STDIN_as_integer][T    T   T   _Retrieve_input][T  S S S _Add][T   S S T   _Subtract][N
T   T   N
_If_negative_jump_to_Label_NEGATIVE][S S S N
_Push_0][T  N
S T _Print_as_integer][N
N
N
_Exit_Program][N
S S N
_Label_NEGATIVE][S S S T    N
_Push_1][T  N
S T _Print_as_integer]

Letras S(espaço), T(tabulação) e N(nova linha) adicionadas apenas como destaque.
[..._some_action]adicionado apenas como explicação.

Imprime 0se o time 1 vencer e 1(também pode ser -1para a mesma contagem de bytes) se o time 2 vencer.

Experimente online (apenas com espaços brutos, guias e novas linhas).

Explicação em pseudo-código:

Integer g1 = STDIN as integer
Integer t1 = g1*6
Integer b1 = STDIN as integer
t1 = t1 + b1
Integer g2 = STDIN as integer
Integer t2 = g2*6
Integer b2 = STDIN as integer
t2 = t2 + b2
If(t1 - t2 < 0):
  Goto NEGATIVE
Print 0
Exit program

Label NEGATIVE:
  Print 1
  (implicitly exit with an error)

00



1

SimpleTemplate , 84 bytes

Apenas a abordagem simples "multiplique por 6, some e compare", exceto que o suporte matemático está extremamente ausente.

{@set*A argv.0,6}{@incbyargv.1 A}{@set*B argv.2,6}{@incbyargv.3 B}0{@ifB is lowerA}1

Saídas 0para false e 01true.


Ungolfed:

{@// multiply the first argument by 6}
{@set* teamA argv.0, 6}

{@// add the 2nd argument to the previous result}
{@inc by argv.1 teamA}

{@// same as before, for argument 3 and 4}
{@set* teamB argv.2, 6}
{@inc by argv.3 teamB}

{@echo 0}
{@// alternative: teamA is greater than teamB}
{@if teamB is lower than teamA}
    {@echo 1}
{@/}

Tudo deve ficar claro com os comentários ( {@// ... }) adicionados.


1

Japonês , 6 bytes

Entrada como uma matriz 2D. Saídas 1para a equipe 1, 0para um empate ou -1para a equipe 2.

mì6 rg

Tente

mì6 rg     :Implicit input of array
m          :Map
 ì6        :  Convert from base-6 digit array
    r      :Reduce by
     g     :  Sign of difference

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.