Desafio
Um repdigit é um número inteiro não negativo cujos dígitos são todos iguais.
Crie uma função ou programa completo que utilize um único número inteiro como entrada e emita um valor verdadeiro se o número de entrada for um re-dígito na base 10 e, caso contrário, o valor falso.
A entrada é garantida como um número inteiro positivo .
Você pode pegar e usar a entrada como uma representação de string na base 10 com impunidade.
Casos de teste
Todos esses são redigits abaixo de 1000.
1
2
3
4
5
6
7
8
9
11
22
33
44
55
66
77
88
99
111
222
333
444
555
666
777
888
999
Uma lista maior pode ser encontrada no OEIS .
Ganhando
O código mais curto em bytes vence. Isso não quer dizer que respostas inteligentes em idiomas detalhados não sejam bem-vindas.
code-golf
math
number
arithmetic
decision-problem
Aidan F. Pierce
fonte
fonte
Respostas:
Braquilog , 1 byte
Experimente online!
Isso atua em números inteiros.
De
src/predicates.pl#L1151
:fonte
C (gcc) ,
333029 bytesExperimente online!
fonte
return
(acho que vou roubar o último pela minha resposta :)).-O0
escreverá o resultado finaln
exatamente deeax
, para torná-lo o valor de retorno? Você poderia elaborar a lógica por que sabia que funcionaria?return n
ser um nop, e não há razão para atribuir a uma variável local no final de uma função se você não quiser retornar o resultado.COBOL , 139 BYTES
Eu sinto que o COBOL não gosta de golfe de código (provavelmente porque não há como ele vencer), mas aqui vai:
A é definido como um PIC 9 (4).
fonte
TRUE
eFALSE
a 1 e 0, respectivamente05AB1E , 1 byte
Verifica se todos os dígitos são iguais
Experimente online!
fonte
Python 3,
25, 24 e19 bytes.Uma variante de código de erro stdin =>.
Retorna o código de erro 0 se for um repdigit - ou um erro na falha.
Agradeço ao Dennis por me ajudar nos comentários.
fonte
>1
e não<2
. Gerar um erro real seria mais curto do que usarexit
btw.if python3 repdigit.py; then echo truthy; else echo falsy; fi
tem que funcionar de acordo com a definição, então 0 é verdadeiro e todo o resto é falso.*
descompacta um iterável. Por exemplo,{*'123'}
gera o conjunto{'1','2','3'}
.Mathematica, 27 bytes
Não bate
Equal@@IntegerDigits@#&
, mas supera a outra solução Mathematica baseada em aritmética.Os repdígitos têm a forma n = d (10 m -1) / 9, em que m é o número de dígitos ed é o dígito repetido. Podemos recuperar d de n usando o módulo 10 (porque se for um dígito repetitivo, será o último dígito d ). Portanto, podemos apenas reorganizar isso como m = log 10 (9 n / (n% 10) + 1) e verificar se m é um número inteiro.
fonte
Haskell , 15 bytes
Experimente online!Pega a entrada da string.
Equivalente a
\s->all(==head s)s
. Estreitamente supera alternativas:fonte
f s=(s<*s)==(s*>s)
é uma ideia muito interessante, eu não estava ciente desse comportamento de<*
antes.C (gcc), 41 bytes
Esta é uma função que recebe a entrada como uma string e retorna
1
se for um repdigit e0
não.Faz isso fazendo uso do
strspn
função, que pega duas cadeias e retorna o comprimento do prefixo mais longo da primeira cadeia, consistindo apenas em caracteres da segunda cadeia. Aqui, a primeira string é a entrada e a segunda string é o último dígito da entrada, obtido ao passar um ponteiro para o último caractere da string de entrada.Se a entrada for um re-dígito, o resultado da chamada para
strspn
serástrlen(s)
. Em seguida, a indexaçãos
retornará um byte nulo, se este for o caso (str[strlen(str)]
é sempre\0
) ou o primeiro dígito que não corresponder ao último dígito. Negar isso com!
resultados ses
representa um repdigit.Experimente online!
Agradeço ao @Dennis por me lembrar indiretamente do truque de atribuir em vez de retornar por meio de sua resposta incrivelmente impressionante , economizando 4 bytes!
fonte
strlen
e criando uma nova string a partir de*s
:c;f(char*s){c=*s;c=!s[strspn(s,&c)];}
for 37. #PHP,
252825remova todos os caracteres da direita que sejam iguais ao primeiro e imprima
1
se todos os caracteres foram removidos.fonte
R, 31 bytes
Essas funções funcionam com entradas de sequência e usam uma expressão regular para determinar se a entrada é um repdigit.
Exemplo
fonte
/// , 110 bytes
Experimente online!
A linguagem /// não tem nenhum conceito de verdade e falsey, portanto, gera "T" se a entrada é um re-dígito e não gera nenhum caractere se a entrada não é um re-dígito.
fonte
Gelatina ,
21 byteExperimente online!
fonte
1
-9
contam como repdigits?Oitava , 11 bytes
Experimente online!
Toma a entrada como uma sequência.
Ele verifica a igualdade de todos os caracteres com os primeiros caracteres. Se todos forem iguais, o resultado será um vetor com apenas
1
(verdadeiro no Octave), caso contrário, haverá pelo menos um0
(falso no Octave). Aqui está uma prova .fonte
all(...)
para obter uma saída de valor verdadeiro / falso?grep, 17 bytes
Corresponde a qualquer sequência que seja uma repetição de seu primeiro caractere.
fonte
C #,
423328 bytesi
tem que ser uma string.Muito raspada graças a @LethalCoder
fonte
i[0].ToString()
pode ser reduzido parai[0]+""
,<1
é menor que==0
..Length<1
pode ser apenas==""
Braingolf , 6 bytes
Experimente online!
Infelizmente, a entrada implícita de Braingolf a partir dos argumentos da linha de comando não pode aceitar uma entrada com todos os dígitos como uma string; ela sempre a converterá em um número; portanto, a solução é transmiti-la via STDIN, que adiciona 1 byte para ler STDIN (
i
)Explicação:
Depois
u
, o comprimento da pilha é igual ao número de caracteres únicos na entrada, subtraindo 1 significa que será0
se, e somente se houver exatamente 1 caractere exclusivo na entrada,0
for o único número falsey no Python,n
substituindo0
por1
, e tudo mais com0
.fonte
Japonês , 4 bytes
Experimente online!
fonte
JavaScript (ES6),
2321 bytesEconomizou 2 bytes graças a Neil
Recebe a entrada como um número inteiro ou uma sequência. Retorna um booleano.
Demo
Mostrar snippet de código
fonte
test
vez de!!exec
salvar 2 bytes?Ohm , 4 bytes
Experimente online!
Explicação
fonte
Ul≤
deveria funcionar.0
é falsey e todos os outros números são verdadeiros. Acabei de perceber que precisamos exatamente do oposto para esse desafio (geralmente podemos trocar, desde que declaremos qual caso é verdadeiro e qual é falsey). Truthy é definido por "tomaria um brench".Ul1E
também deve funcionar (embora eu não sei Ohm), porque ele não precisa lidar com 0.APL, 5 bytes
2 bytes salvos graças a @KritixiLithos
Experimente online!
fonte
⊢≡1⌽⊢
.⊢
por⍕
para lidar com seqüências de caracteres e números.Java, 21 bytes:
l
é umaMutableList<Character>
das coleções do eclipse.fonte
l
também poderia ser um CharAdapter.Kotlin ,
2819 bytesExperimente online!
Toma entrada como um
String
porqueExplicação
Se você não gostar do fato de ser um
String
, pode ter um que sejaInt
por 24 bytes .fonte
Regex (ECMAScript), 31 bytes
Experimente online!
Recebe entrada unária, como de costume para expressões regulares matemáticas (observe que o problema é trivial com entrada decimal: apenas
^(.)\1*$
).Explicação:
fonte
PHP, 30 bytes
fonte
Neim , 1 byte
Simplesmente verifica se todos os elementos são iguais.
Sem embutido, 2 bytes:
Explicação:
Isso funciona porque apenas
1
é considerado verdadeiro em Neim, e todo o resto é falso.Como alternativa, para 4 bytes:
Explicação:
Tente!
fonte
C, 38 bytes
Recursivamente caminha uma corda. Se os dois primeiros caracteres diferirem (
*s^s[1]
), teremos sucesso apenas se estivermos no final da string (!s[1]
), caso contrário, repetiremos o teste na próxima posição (f(s+1)
).Programa de teste
fonte
Java,
383323 bytesn
é umString
, naturalmente.Observe que não há necessidade
^...$
no regex, pois ele é usado automaticamente para a correspondência exata (como omatch
método), em comparação com a localização na string.Tente!
Salva
String
desde "Você pode receber e usar a entrada como uma string com impunidade".fonte
matches
não requerimento,^$
porque corresponde à String inteira. Então, um +1 definitivo de mim. ;)R, 25 bytes
Experimente online
A melhor solução não-regex que eu consegui encontrar foi 36 bytes:
fonte
rle(charToRaw(scan(,'')))$v[2]<1
Cubix , 15 bytes
Experimente online!
Assista
Saídas 1 para verdade e nada para falsey
Simplesmente leia leituras na entrada, um caractere de cada vez. Afasta o caractere atual do anterior. Se um resultado diferente de zero, ele será interrompido imediatamente. Caso contrário, ele continua inserindo e comparando até o EOI. No EOI (-1), negue e saia
fonte
QBasic 4.5, 55 bytes
Eu calculei isso! O loop FOR verifica o número de dígitos na entrada e cria
c
, que é uma série de 1's de comprimento igual à entrada. Um número é re-digitado se modular a string == 0.Experimente online! Observe que o intérprete on-line é um pouco peculiar e eu tive que escrever algumas declarações de que o QBasic IDE baseado em DOS se expandia automaticamente.
fonte