Eu tenho uma tarefa simples que deve ser relativamente fácil de implementar por meio de código. Seu objetivo é escrever um programa que produza a hora escrita em espanhol, com a hora no formato HH: MM. Muitas pessoas provavelmente não sabem como fazer isso, então vou elaborar.
O tempo em espanhol é bastante lógico. Geralmente segue o padrão de "Es la / Son las (hora) y (minutos)". As horas estão no formato de 12 horas e "Es la" é usado apenas se a hora for 1 (ou seja, uma hora). Os minutos são uma história diferente. Se o minuto for menor que 30, ele será representado como mostrado acima. Se o minuto for superior a 30, no entanto, a hora é arredondada e o minuto é subtraído. Por exemplo, 7:35 é traduzido para o equivalente a "8 horas menos 25 minutos". Mais alguns exemplos serão dados abaixo. A lista de números em espanhol necessários pode ser encontrada aqui . Existem acentos em alguns números, mas estes não são necessários.
Nota: A fonte diz "uno", mas, para estar gramaticalmente correta, deve ser "una". Até o momento, isso não deve afetar nenhuma resposta.
Nota 2: Além disso, "cero" não é necessário. Se o seu programa exibir "Es la una" ou "Son las tres", tudo bem comigo. Desculpe por essas alterações de regra.
Regras
- A entrada será fornecida através do STDIN ou equivalente no seu idioma.
- Nenhuma leitura de bibliotecas externas.
- Seu código pode fazer qualquer coisa com entrada inválida.
Bônus
- -10 se o seu código adicionar essas frases extras - "y cuarto" para: 15, "y media" para: 30 e "menos cuarto" para: 45 (arredondado para cima).
- -15 se o seu código puder manipular AM e PM, respondendo com "da mañana" e "da tarde", de acordo.
- -15 se o seu código puder traduzir a hora atual se nenhuma entrada for fornecida.
Pontuação
- Este é um desafio de código-golfe e será pontuado por bytes, não por caracteres.
Exemplos
Entrada: 8:10
Saída:Son las ocho y diez.
Entrada: 6:45
Saída:Son las siete menos quince (or cuarto).
Entrada: 1:29
Saída:Es la una y veintinueve.
Entrada: 12:55
Saída:Es la una menos cinco.
Deixe-me saber se há algo para especificar aqui. Esta é a minha primeira pergunta, por isso definitivamente não é perfeita.
Es la una y cero
é bastante repetitivo, então eu entendo o seu ponto. Eu não especifiquei isso, então acho que qualquer um deles ficaria bem. Obrigado pelo feedback.01:21
como caso de teste, porque pelo menos um respondente ficou confuso com o que você disse sobre una vs uno .Respostas:
JavaScript (ES6) 308
316Correção de bug Edit2 Edit esqueceu de reivindicar o bônus
Como um programa com E / S via pop-up
Como uma função testável
Teste no console do FireFox / FireBug
Saída
fonte
Sim, o idioma menos esperado para aparecer em uma competição de golfe, codificado pelo pior jogador de golfe do mundo, está de volta!
Java - 676 bytes (716-10-15-15)
Golfe:
Ungolfed:
Lida com o
quarto
emedia
, com o AM / PM e não tem entrada. Então, posso reivindicar todos os bônus, mesmo que, se eu não implementasse esses recursos, eu teria uma pontuação ainda mais baixa, lol. facepalmsfonte
Caracteres do Python 3: 294 - 10 = 284
Isso recebe o bônus de dez pontos pelo uso de "cuarto" e "mídia"
Lemos as horas e minutos como
int
s. Se os minutos estiverem acima de 30, passamos para a próxima hora, medimos os minutos a partir de 60 e alteramos a conjunção para "menos".A lista
d
tem traduções de números espanhóis até 15. Nós fazemosd[0]
seja''
para evitar coisas como "diecicero". Isso é feito chamando desajeitadamentesplit(' ')
com um espaço inicial; o regularsplit
simplesmente ignoraria. O caso de zero minuto é tratado posteriormente.Para obter números acima de 15, combinamos a sequência de dezenas e a sequência de um dígito apropriada.
15
e30
são escritos como "mídia" e "cuarto", sem nenhum custo.O Python 3 salva uma rede de caracteres sobre o Python 2: -4 para em
input
vez deraw_input
, +2 para parens na impressão, +1 para//
.fonte
una
parauno
, deve funcionar agora.PHP,
351349360 - 15 = 345 bytesEste programa não é de linha de comando: recebe entrada via $ _GET [0]. Você pode ter que desativar avisos no seu php.ini. Agora vem com tempo automático sem entrada, graças a Niet the Dark Absol.
Truques usados:
~(...)
salva um byte invertendo bit a bit uma string, pois você não precisa de aspas, pois o PHP normalmente assume que todo ASCII de 0x80 a 0xFF é uma string.<?=preg_filter(...,...)
: O<?=
é um atalho para escrever<? echo
.preg_filter()
geralmente aplica substituições em uma string usando um regex, mas podemos usar o modificador / e depreciado para avaliar a string resultante como código PHP. Portanto, em vez de precisar dividir a string de entrada em duas variáveis separadas, podemos usar referências anteriores ($ 1 e $ 2) na string de entrada correspondente, economizando grandes quantidades de bytes.fonte
$_GET[0]?:date(~·Å–)
subtrair 3 da sua pontuação.C ++:
474...422411 bytesEsta versão está resgatando o bônus cuarto / mídia (-10).
Minha primeira tentativa de golfe com código! Vai tentar melhorá-lo neste fim de semana.
Ungolfed:
fonte
m%=10
Lua, 450 - 10 (cuarto / mídia) - 15 (manana / tarde) = 425
H>=12
porH<12
e de ligar a expressão dependente torno.table.concat
por operações de string e adicionado a sugestão de @ edc65, adicionando 22 bytes.function
corpo para dentro do pedaço principal reduziu o comprimento em 15 bytes .fonte
Es la una y uno
D - 484 bytes
fonte
Es la una y uno
Python 3, 409 bytes
fonte
'string1 string2 string3'.split()
d[j]if i<31 else d[(j+1)%12]
parad[(j+(i>30))%12]
. Em geral, se suas duas alternativas tiverem uma estrutura semelhante, você poderá criar uma expressão simples que seja igual a cada uma delas, dependendo do booleano.Ruby, 313 (338 - 15-10)
Esta solução traduz o horário atual em que nenhuma entrada foi fornecida e adiciona as três frases "y cuarto", "y media" e "menos cuarto".
fonte
Son las ocho y diecioch
Bash 423
(433 - 10 = 423, removendo diacríticos e cuarto, poderíamos descer para 381)
fonte
Perl - 297 - 10 + 1 = 288 (contando o
p
bandeira)Edit: graças a @guifa, agora posso reivindicar um bônus :)
Aqui está o mesmo código em várias linhas para facilitar a leitura:
fonte
Es la una y uno
Scala 652 bytes - 25
fonte
Pitão :
277um monte mais234 - 10 (bônus de desenho / mídia) = 224 bytesAgora reduzido em mais de 50 bytes do original!
Insanamente longo para Pyth, mas é porque há alguns dados brutos. Provavelmente pode ser jogado ainda mais. Utiliza a técnica óbvia de dividir tarefas em horas, menos / dez, dezenas de minutos e um dígito de minutos e depois converte números usando a matriz de tradução e todo o resto usando uma porcaria de ternários.
História do Golfe
fonte
":"
e"i"
, use\:
e em\i
vez disso.