Meu professor sempre me fornece o conjunto mais complicado de problemas de matemática para trabalhos de casa. Como: pg. 546: 17-19, 22, 26, pg. 548: 35-67 odd, 79, 80-86 even
. E quero saber com antecedência quanto tempo reservar para minha lição de casa, mas não quero ter que descobrir tudo isso. É por isso que é sua tarefa programá-lo para mim.
Especificações
- Você receberá uma string detalhando os problemas que tenho que concluir como args, stdio, etc.
- Eles serão separados por vírgula (possivelmente
comma-space
separados) - Incluirá problemas únicos na forma de apenas um número (por exemplo
79
) - E intervalos no formulário
17-18
(novamente, você precisa lidar com espaços opcionais) - Os intervalos incluem as duas extremidades
- Os intervalos opcionalmente terão o sufixo
odd
or oueven
, que você deve levar em consideração. - Um conjunto de intervalos / páginas será anexado por um número de página no formulário
pg. 545:
, novamente tendo que lidar com espaços opcionais. Você pode ignorá-los com segurança, pois precisa obter os problemas em todas as páginas - O texto pode estar em maiúsculas ou minúsculas, mas não será ambos.
- Retorno, stdout, etc. o número de problemas que tenho que fazer na lição de casa.
- Como se trata de código-golfe , o código mais curto em bytes vence!
Casos de teste
pg. 546: 17-19, 22, 26, pg. 548: 35-67 odd, 79, 80-86 even -> 27
pg. 34: 1 -> 1
PG. 565: 2-5,PG.345:7 -> 5
pg. 343: 5,8,13 - 56 even,pg. 345: 34 - 78,80 -> 70
pg.492: 2-4 odd,7-9 even -> 2
code-golf
natural-language
Maltysen
fonte
fonte
2-4 odd
? Parece causar alguns problemas para abordagens mais simples.pg.492: 2-4 odd,7-9 even -> 2
22-26,25-30
?Respostas:
CJam,
6158514846434138 bytesVerifique os casos de teste no intérprete CJam .
Como funciona
fonte
Perl - 47 bytes
Alterado para passar no novo caso de teste.
Original
Perl - 36 bytes
Contando o shebang como 4, a entrada é obtida de stdin.
Uso da amostra
Ressalvas
Para intervalos pares / ímpares, espera-se que pelo menos um dos pontos de extremidade corresponda à paridade do intervalo. Por exemplo,
11-19 odd
,11-20 odd
, e10-19 odd
serão todos correctamente contado como 5, mas10-20 odd
será sobre-contado como seis.fonte
pg. 20: 13-15 even
? oupg. 20: 13-14 even
?*
é um caractere menor que&&
, facilitando a melhoria:$\+=/\d+ ?-/*($'-$&>>/o|e/i)+1for@F}{
lc=~
.T^
parte, mas de alguma forma perdi issolc
mudou o caso de$'
. A introduçãolc
de$'
teria sido um pouco menor. Isso ainda deve funcionar para qualquer uma das abordagens:lc$'!~(T^lc$_%2)
ou($_%2x9^lc$')!~T
!~T
é genial, obrigado!Python 2,
259253249239 bytesExperimente aqui
Provavelmente isso ainda pode ser jogado mais.
Edit: Corrigido um bug que fazia com que o meu não funcionasse
2-4 even
como eu esperava. Em seguida, fez um ajuste para essa correção. Essa correção me salvou quatro bytes!Editar: agora usa
input()
e +2 bytes para as duas aspas com as quais o usuário deve colocar a entrada.Menos golfe (com comentários!: D):
Espero que esses comentários ajudem alguns. Ainda não tenho certeza se expliquei a última linha complexa corretamente ou não.
fonte
s=raw_input()
e removendo algum recuo.Pitão,
43424442 bytesExperimente on-line: demonstração ou equipamento de teste
Eu acho que ainda posso cortar um ou dois bytes.
Explicação
fonte
JavaScript (console Spidermonkey) - 139
É apenas mais fácil testar na linha de comando.
Ungolfed:
fonte
[,from,to]
simplesmente ser[from,to]
?r.exec
, que contém toda a string correspondente.Fator - 488 bytes:
fonte
Bash
344 315 306 294 262 252 242240Eu não acho que joguei isso o máximo possível, mas não é ruim para uma primeira finalização. Versão comentada abaixo.
Execute os casos de teste:
Dependendo de como eu li as regras, seria possível salvar outros 4 bytes. Se pares / ímpares são sempre minúsculos,
${1,,}
pode ser alterado para$1
fonte
JavaScript ( ES6 ), 149
Execute o snippet no Firefox para testar
fonte
C ++
226224222Eu sei que estou meio atrasada para a festa, mas isso parecia um problema divertido e a falta de entradas usando os idiomas da família C me incomodou.
Então, aqui está uma função C ++ que não usa regexp ou substituição de string, apenas algumas contas simples:
Ungolfed :
Eu não disse que seria legível, não é? :) Os operadores ternários são um inferno. Eu tentei o meu melhor para (meio que) formatá-lo, então espero que ajude pelo menos um pouco.
Uso :
fonte
Python 2 - 163 bytes:
Experimente aqui
A entrada deve ser fornecida entre aspas
Explicação:
A abordagem geral é converter a entrada existente em python válido e, em seguida, avaliar isso. Cada valor separado por vírgula é convertido em uma matriz, que são todos anexados e o comprimento fornece o resultado final.
Por exemplo, com a entrada
12-15 odd,19
, antes da avaliação, a substituição do regex produzirá:Para detalhar ainda mais:
15+1 if 15.0 else 12+1
Esse bit garantirá que o segundo argumento do intervalo () esteja correto, dependendo se houver um intervalo ou um valor único (se \ 3 estiver vazio, \ 3.0 será avaliado como falso).if x%2!="oe".find("o")
Dependendo do valor encontrado a dois caracteres do dígito final no intervalo ((?=.(.))
na regex - procure dois caracteres sem consumi-los), há três resultados possíveis:x%2!="oe".find("o")
avalia comox % 2 != 0
(apenas ímpar correspondente)x%2!="oe".find("e")
avalia comox % 2 != 1
(apenas compatível)x%2!="oe".find("[")
avalia comox % 2 != -1
(esse caractere pode ser múltiplo, pois fica a apenas dois caracteres do último dígito, mas será apenas o ou e se for ímpar / par)fonte