Em inglês, os substantivos podem assumir duas formas diferentes, dependendo de serem singulares (uma) ou plural (qualquer outra coisa). Por exemplo, diríamos "1 cachorro", mas "2 cães", "0 cães", "57 cães" e assim por diante.
Em russo, existem três categorias. Em vez de "1 cão, 2 cães, 5 cães", em russo, seria "1 pessoa, 2 pessoas, 5 pessoas".
As categorias são divididas de acordo com a seguinte lógica:
- "Singular": usado para 1 e qualquer número que termina em 1, exceto para números que terminam em 11.
- Exemplos: 1 собака, 21 собака, 101 itens
- "Poucos": usados para 2, 3 e 4 e qualquer número que termina em 2, 3 ou 4, exceto para números que terminam em 12, 13 e 14.
- Exemplos: 2 pçs, 3 pçs, 4 pçs, 32 pçs, 43 pçs, 43 pçs, 104 pçs
- "Muitos": qualquer coisa que não seja considerada "Singular" ou "Pouca".
- Exemplos: 0 itens, 5 itens, 11 itens, 13 itens, 25 itens, 111 itens, 114 itens, 114 itens
O desafio
Dada uma entrada inteira no intervalo [0, 1000], retorne 1
se pertencer à categoria "singular", 2
se pertencer à categoria "poucos" e 5
se pertencer à categoria "muitos".
Seu programa pode ser uma função ou pode usar STDIN. Você pode imprimir em STDOUT ou retornar um valor da função
Este é um desafio de código de golfe , portanto, a solução com o menor número de bytes vence.
fonte
1
,2
e5
em particular? Além disso, por que não consigo usar códigos de saída?Respostas:
Python 2 , 36 bytes
Experimente online!
Mesmo comprimento aritmeticamente:
Vamos primeiro olhar para um código mais simples que não leva em consideração os adolescentes.
Aqui, queremos um mapeamento do dígito da pessoa para uma saída que funcione como
Mas, em vez de usar o
n
módulo 10 (%10
), podemos fazern%-10
, que mapeia os intervalos[-9..0]
para fornecer os restantes:Este é promissor porque as duas primeiras entradas
0
e-9
estão distantes, e eles precisam ser enviados para diferentes saídas. Além disso,-10
pode ser reduzido para~9
.A partir daqui, a divisão do piso
/-3
fornece pedaços de 3 com o ponto de partida certoPara obter a saída desejada, agora precisamos apenas mapear
0->5, 1->5, 2->2, 1->1
, o que fazemos com a seleção de strings'5521'[_]
.Agora, também precisamos de números que terminem em 11 a 15 para sempre dar
5
. Primeiro, fazemos isso detectando se o dígito das dezenas é1
. Tomandon/10
para remover o último dígito, aplicamos%~9
como antes para obter os resultadospara os respectivos dígitos finais. O dígito 1 que queremos detectar é mapeado para o valor externo
-9
. A divisão do piso-9
transforma em 1 e todo o resto em 0.Finalmente, fazemos com que esse indicador
1
sempre dê a saída 5. Isso é feito deslocando o resultado dan%~9/-3
direita pelo indicador. O resultado de0,1,2,3
sempre muda de bit para 0 ou 1, o que fornece uma saída de 5, conforme desejado.fonte
Python 2 , 45 bytes
Experimente online!
fonte
(s+'5'*10+s*9)
110 caracteres?Perl 5 , 26 bytes
25 bytes de código +
-p
sinalizador.Experimente online!
Para mais um byte, existe
$_=/(?<!1)[1-4]$/?2-/1$/:5
.Explicações: (na versão de 27 bytes; o 26 é bastante simétrico)
Ambos "singular" e "poucos" terminam com "não um 1 seguido por um dígito de 1 a 4" (testado com
(?<!1)[1-4]$/
). Nesse caso, o resultado é 2, menos 1 se o número terminar com 1 (2-/1$/
). Caso contrário, o resultado será 5.fonte
JavaScript (ES6),
5349484039383736 bytesTente
fonte
1[1-4]
pode ser1.
e/1$/.test(s)
poderia ser+s%10==1
. Nunca esqueça unário+
!+
,s%10
deve converters
para um número.n%10
->n%5
salva um byteGeléia ,
1918 bytesUm link monádico que recebe e retorna números inteiros não negativos.
Experimente online! ou veja os três grupos de 0 a 1000, inclusive nesta suíte de testes .
Quão?
fonte
05AB1E ,
3819 bytesUsa o truque de índice da resposta python de Rod
Experimente online!
Explicação
fonte
PHP> = 7.1, 44 bytes
Versão Online
fonte
<?=$argn[-2]!=1&($m=($argn+9)%10)<4?2-!$m:5;
.Montagem MCxxxx , 123 bytes
Nota:
O TiO não suporta esse idioma, usado no jogo Zachtronics Shenzhen I / O , portanto não há link para testar isso.
Explicação:
Esta é uma função que recebe entrada pela porta XBus x0 e sai pela porta x1. É muito longo para ser executado em um MC4000, mas se encaixa perfeitamente na memória de um MC6000. As portas XBus, para quem não conhece, permitem a transmissão de pacotes discretos de dados digitais.
Uma informação que pode ser útil para ler isso: na montagem MCxxxx, as instruções de teste definem um sinalizador que indica qual ramificação deve ser executada. As linhas que começam com
+
são executadas apenas se o teste mais recente retornou verdadeiro, e as linhas que começam com-
são executadas apenas se o teste for falso.Linha por linha:
Uma observação sobre a pontuação: o assembly MCxxxx não possui funções em si, mas é o mais próximo possível de uma função - é um programa que se encaixa em um único nó de execução, recebe entrada por uma porta e sai por outra. Como resultado, marquei isso como uma função (ou seja, sem contar os bytes necessários para criar um arquivo de emulador MCxxxx válido).
fonte
Retina ,
2521 bytesExperimente online! -4 bytes graças a Neil.
fonte
!`.$
para extrair o último dígito. Experimente online!Haskell ,
6258 bytesExperimente online!
Explicação
Isso cria a seguinte string:
5122255555555555555551222555555122255555512225555551222555555122255555512225555551222555555122255555 ...
Qual é a tabela em que a célula
n
contém a resposta para onth
número. A tabela está correta apenas para os 100 primeiros elementos, daí omod
.fonte
f n|s<-"5122255555"=(s++('5'<$[0..9])++cycle s)!!mod n 100
Scala, 110 bytes
fonte
Turtlèd, 35 bytes
Experimente online!
Essa função requer que a entrada comece com um>, o que eu acho que está bem, porque python2 usa entrada semi regularmente e isso precisa de aspas.
Explicação:
fonte
>
servem a um propósito em turtled ou é um caráter arbitrário que você adicionou à entrada?