Eu acho que todos nós fizemos isso quando criança: alguns sites exigem idade mínima de 18 anos, então apenas subtraímos alguns anos a partir do ano de nascimento e pronto, somos 'maiores de 18 anos'.
Além disso, para a maioria dos passeios em parques de diversões, a altura mínima para entrada é de 1,40 metros (aqui na Holanda, pelo menos). É claro que isso pode ser enganado com menos facilidade do que a idade, mas você pode usar sapatos com saltos grossos, arrumar o cabelo, usar chapéu, ficar na ponta dos pés etc.
Entrada:
Seu programa / função aceita um número inteiro positivo ou decimal.
Resultado:
- A entrada é um número inteiro
>= 18
? Simplesmente imprima a entrada. - A entrada é um número inteiro
0-17
? Imprimir18
. - A entrada é decimal
>= 1.4
? Simplesmente imprima a entrada. - A entrada é decimal
0.0-1.4
? Imprimir1.4
.
Regras do desafio:
- Suponha que a entrada esteja sempre na faixa de
0-122
(a mulher mais velha já teve 122 anos) ou0.0-2.72
(o homem mais alto já teve 2,72). - Você pode receber a entrada como uma String, objeto ou qualquer outra coisa que preferir.
- As entradas decimais nunca terão mais de três casas decimais após o ponto decimal.
2
ou2.
ambos não são saídas válidas para2.0
. Você é livre para produzir2.00
ou, em2.000
vez disso,2.0
no entanto.
Assim como a entrada, a saída nunca terá mais de três casas decimais após o ponto.
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados, programas completos. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, adicione uma explicação, se necessário.
Casos de teste:
0 -> 18
1 -> 18
2 -> 18
12 -> 18
18 -> 18
43 -> 43
115 -> 115
122 -> 122
0.0 -> 1.4
1.04 -> 1.4
1.225 -> 1.4
1.399 -> 1.4
1.4 -> 1.4
1.74 -> 1.74
2.0 -> 2.0
2.72 -> 2.72
code-golf
arithmetic
Kevin Cruijssen
fonte
fonte
0.0-2.72 (tallest man ever was 2.72).
- Você não é0.0
quando você nasceu ...0
e0.0
. :) O adicionadotallest man ever was 2.72
eoldest woman ever was 122
foi adicionado apenas como fatos informativos para os interessados.Respostas:
Convexo , 9 bytes
Experimente online!
fonte
Python 2.7, 34 bytes
fonte
max(2.0,[18,1.4][True]) == max(2.0,1.4) == 2.0
JavaScript (ES6), 27
31Entrada tomada como uma sequência. Para verificar se o valor de entrada possui decimais, ele é anexado a si mesmo: se não houver ponto decimal, o resultado ainda será um número válido, caso contrário, não será. Para reconhecer um número válido (incluindo 0), eu uso a divisão, pois em javascript
1/n
é numérico e não 0 para qualquer númeron
(eventualmente o valor éInfinity
paran==0
); caso contrário, éNaN
Teste
Minha solução anterior (incorreta):
Tomando a entrada como um número, você pode usar o operador restante
%
para verificar se o número é inteiro.ou
Mas isso não funciona como o pedido desafio para discriminar entre, digamos,
2
e2.0
e esse é o mesmo número. Portanto, não é possível obter a entrada como um númerofonte
2.0
deveria ser2.0
, não18
.2.0%1
e1.0%1
resultará em 01/(x+x)
- agora é imaginativo!05AB1E ,
1311 bytesUsa a codificação CP-1252 .
Explicação
Experimente online
fonte
Java 8,
906157 bytes-4 bytes retornando em
Object
vez deString
; e alguns bytes adicionais convertendo Java 7 para 8.-4 bytes, aceitando a entrada em
Object
vez deString
também.Explicação:
Experimente aqui.
fonte
+
, o que significa que se você removeu os parênteses, ele se transformaria em(""+i.contains(...)) ?
Pitão, 14 bytes
Experimente online.
fonte
PHP, 40 bytes
modificado por @ user59178 Obrigado
PHP, primeira versão de 42 bytes
fonte
is_int($i=$argv[1]+0)
é 2 bytes mais curto questrpos($i=$argv[1],".")
e pode servir ao mesmo propósito se você trocar o1.4
e o18
is_numeric
em uma corda, mas nãois_int
+0
, para convertê-lo em um tipo numérico.strpos($i=$argv[1],".")
versão, lembrou-se de trocar as saídas do ternário?<?=max(is_int(0+$i=$argv[1])?18:1.4,$i);
vez de<?=max(is_int($i=$argv[1]+0)?18:1.4,$i);
evitar a saída 2, quando fornecido 2.0.EXCEL:
263129 bytesA fórmula pode ir a qualquer lugar, exceto A1, a célula de entrada.
Corrigidos erros e substituídos pela sugestão de Emigna.
Agradeço a Alexandru por me salvar alguns bytes usando verdades
fonte
n
para a célula de entrada? Pode estar em qualquer lugar do documento e também é 2 bytes mais curto.Braquilog , 14 bytes
Experimente online!
Explicação
fonte
Perl,
2927 bytesInclui +2 para
-lp
Dê entrada no STDIN
adult.pl
:Se você não se importa com uma nova linha extra, se realmente era um adulto completo, deixar de fora a
l
opção por 26 bytes também funciona.fonte
GNU sed, 40 + 1 = 41 bytes
(marcar +1 pelo uso da
-r
bandeira para o intérprete)Anotado:
Aproveitamos as restrições de entrada, portanto, não precisamos testar o início da string quando virmos '1'. - sabemos que há apenas um dígito antes do ponto decimal.
Resultado do teste:
fonte
Haskell, 50 bytes
Exemplo de uso:
f "1.0"
->"1.6"
.O tipo estrito de Haskell requer o uso de strings como entrada e saída. Howevers,
read
,max
eshow
são polimórficos e lidar com todos os tipos numéricos.fonte
(#)x=map(show.max x.fst).reads;f s=head$18#s++1.4#s
reads
. Com uma pequena modificação, é um byte menor que o meu. Poste-o como uma resposta separada.x#y=show.max x.fst<$>reads y;f s=head$18#s++1.4#s
.Java,
7970 bytesDefine dois métodos com sobrecarga, que usam o operador condicional.
Chame como
f(5)
ouf(1.4f)
.fonte
x<18?18:x
ex<1.4f?1.4f:x
são mais curtos que oMath.max
. Eu acho que você pode encontrar dicas de golfe em Java interessantes para ler. :)CJam,
1814 bytesEconomizou 4 bytes graças a Martin Ender.
Intérprete online
fonte
C #, 69 bytes
Experimente online!
Programa completo com casos de teste:
Uma solução bastante direta. Observe que em alguns sistemas float.Parse () pode retornar resultados incorretos. Passe CultureInfo.InvariantCulture como o segundo argumento de acordo com esta resposta .
fonte
s.Contains(".")
por #s[1]=='.'
s[1]==46
, ou uma abordagem ainda mais agressiva (presumindo que você só tem dígitos e um personagem no índice 1 '') (tem um código ASCII de 46 ''):s[1]<47
.IBM / Lotus Notes Formula Language,
5849 bytesFórmula de campo computado em que a é um campo numérico editável.
EDITAR
Alternativa inspirada em @Mego
fonte
Gelatina ,
16 1513 bytesTryItOnline
Ou veja todos os casos de teste, também em TryItOnline
Quão?
fonte
18
para2.0
, infelizmente :(C ++, 68 bytes
Esta resposta é na verdade 2 funções com o mesmo nome, e o compilador trabalha para mim o que chamar; portanto, ele atua como uma função sem que eu precise receber uma entrada e decidir qual é. Como a entrada no ponto flutuante é garantida com a mesma precisão que a saída, eu posso devolvê-la com segurança sem precisar truncá-la.
Ungolfed + tests
fonte
float
s emauto
s. Rejeitei a edição de acordo com a política, mas sinta-se à vontade para editá-la, se você confirmou que funciona.C #, 58 bytes
Não é necessária análise de string maluca para C #. A entrada deve ser um
int
oufloat
(infelizmente, o C # não pode converter umdouble
parafloat
sedouble
estiver em umobject
). A saída seráint
oustring
em umobject
.(quase perdeu o requisito de pelo menos 1 decimal, acrescentou isso agora)
Ungolfed:
Implementação alternativa, que também tem 58 bytes.
fonte
Na verdade, 16 bytes
Experimente online!
Explicação:
fonte
9τ
vez de apenas18
? Eu sei que é a mesma contagem de bytes, por isso realmente não importa, mas18
parece mais legível. Ou existe um motivo para não funcionar na atual linguagem de implementação / programação?18
empurra um1
e um8
. Para enviar um literal18
, você usaria:18
, que é maior que9τ
.Emacs Lisp, 37 bytes
Supõe, a partir do "tipo de dados", se a versão inteira ou flutuante deve ser usada. (
floatp
retornat
para1.0
, mas não para1.
) O parâmetro é um número como número inteiro ou flutuante, ou seja, deve satisfazernumberp
.fonte
Haskell, 49 bytes
Basicamente, isso primeiro tenta ler a entrada como um número inteiro e, em seguida, como um duplo, se isso falhar. Em seguida, prossiga para compará-lo à respectiva linha de base de comparação.
fonte
Dyalog APL , 14 bytesinválido por outras especificações⎕IO←0
que é padrão em muitos sistemas. Aceita string como argumento.⍎⌈
max do argumento avaliado e18 1.4⊃⍨
{18,1.4} selecionado por'.'∘∊
se o argumento contém um períodofonte
C #, 95 bytes
Golfe:
Ungolfed:
Casos de teste:
Resultado:
fonte
string y(string p){int a;return int.TryParse(p,out a)?a<1?"18":p:double.Parse(p)<1.4?"1.4":p;}
(parêntese removido;>=1.4
a<1.4
, trocando o"1.4"
ep
; mudoudecimal
dedouble
modo que oM
é gone Além disso, alguém acabou de enviar. Uma abordagem diferente em C # que é ligeiramente mais curto Você pode achar. Dicas para o golfe em C # interessante para ler através de uma vez, bem-vindo :).!float.Parse
vez dedouble.Parse
. E também, se você mover a declaração de a para os argumentos do método com um valor padrão, poderá descartar sua declaração de retorno usando o membro incorporado da expressão. por exemplo:string f(string s,int a=0)=>int.TryParse(s,out a)?a>17?s:"18":float.Parse(s)<1.4?"1.4":s;
AWK - 29 bytes
Uso:
Os testes foram realizados
gawk
no RHEL 6. Tentei com todos os casos de teste, infelizmente não tenhoAWK
na máquina que possui acesso à Internet, portanto, copiar e colar não é possível.Existe uma maneira mais compacta de fazer isso
AWK
?fonte
C, 50 bytes:
A contagem de bytes inclui a nova linha no final da definição da macro.
Teste :
fonte
C #, 71 bytes
tente aqui
fonte
C,
119111105100Testado com
Resultado
fonte
Lote, 102 bytes
Primeiro determina se a entrada é um número inteiro, verificando se a exclusão de todos os
.
s tem algum efeito na sequência. Se for, o valor será facilmente comparado com 18, caso contrário, o primeiro e o terceiro caracteres serão combinados em um número que será comparado com 14.fonte
PHP: 40 bytes
psuedocode (turnary aninhado):
fonte