Recentemente, minha reputação era 25,121
. Notei que cada agrupamento de dígitos (ou seja, os números separados por vírgulas) era um quadrado perfeito.
Seu desafio é que, dado um número inteiro não negativo N e uma função booleana binária unária f : Z * → B , produza um valor verdadeiro se cada valor de f aplicado aos agrupamentos de dígitos de N for verdadeiro e, se não, falsey.
Pode-se encontrar os agrupamentos de dígitos dividindo o número em grupos de 3, começando do lado direito. O grupo mais à esquerda pode ter 1, 2 ou 3 dígitos. Alguns exemplos:
12398123 -> 12,398,123 (3 digit groupings)
10 -> 10 (1 digit grouping)
23045 -> 23,045 (2 digit groupings)
100000001 -> 100,000,001 (3 digit groupings)
1337 -> 1,337 (2 digit groupings)
0 -> 0 (1 digit grouping)
Regras adicionais
- Esta função pode mapear para qualquer booleanos (por exemplo,
true
efalse
),1
S e0
S, ou qualquer valor truthy / Falsey. Especifique quais formatos são suportados pela sua resposta. - Você pode usar um número inteiro como entrada ou uma sequência inteira (ou seja, uma sequência composta de dígitos).
- Você pode escrever um programa ou uma função.
- Ao passar os grupos digitais para a função f , você deve cortar todos os zeros iniciais desnecessários. Por exemplo, f , quando aplicado a N = 123.000, deve ser executado como f (123) ef (0).
Casos de teste
A notação de função é n -> f(n)
, por exemplo n -> n == 0
,. Todos os operadores assumem aritmética inteira. (Por exemplo, sqrt(3) == 1
)
function f
integer N
boolean result
n -> n == n
1230192
true
n -> n != n
42
false
n -> n > 400
420000
false
n -> n > 0
0
false
n -> n -> 0
1
true
n -> sqrt(n) ** 2 == n
25121
true
n -> sqrt(n) ** 2 == n
4101
false
n -> mod(n, 2) == 0
2902414
true
n -> n % 10 > max(digits(n / 10))
10239120
false
n -> n % 10 > max(digits(n / 10))
123456789
true
code-golf
number
decision-problem
functional-programming
Conor O'Brien
fonte
fonte
n -> n > 0
aplicado a0
) aos casos de teste porque a maioria das respostas falha nele.[0]
.Respostas:
Gelatina , 5 bytes
Experimente online!
O argumento da linha de comandos é o número. A linha acima da linha em que essa função reside é a linha principal do restante do programa, ou seja, o código que é chamado para cada um dos grupos. Cuidado para não se referir à linha
bȷÇ€Ạ
em que está! O exemplo usado aqui é o quinto caso de teste.fonte
n -> n != 0
a0
0
e sua lista de grupos de dígitos é[0]
, portanto,Ṇ
é mapeada para cada elemento (o único0
aqui), transformando a lista em[1]
e, como todos os elementos desta lista são verdadeiros,1
é retornado. Observe que, se eu tivesse a lista do grupo de dígitos,[]
o resultado não mudaria, pois todos os elementos de[]
são verdadeiros (verdade vazia). No entanto, o resultado pode ser diferente para diferentes programas, e as regras não são exatamente claras sobre isso ( OP solicitado ).Braquilog , 8 bytes
Experimente online!
A função de caixa preta fica na segunda linha (ou no "Rodapé" no TIO) e o número inteiro é lido em STDIN. Imprime
true.
ou defalse.
acordo.fonte
APL (Dyalog) ,
1613 bytes3 bytes salvos graças a @ Adám
Experimente online!
Quão?
1e3⊥⍣¯1⊢⎕
- insira o número e codifique na base 1000⎕¨
- insira a função e aplique em cada∧/
- reduzir com lógica efonte
Python 2 , 46 bytes
Experimente online!
fonte
*
no lugar deand
.Haskell,
424038 bytesA função de caixa preta deve retornar
True
ouFalse
.Experimente online!
Edit:
-2-4 bytes graças a @ovs.fonte
&&
vez deand
C (gcc) ,
665848 bytes-10 bytes graças a @Neil!
Experimente online!
fonte
g(f,i)int f();{i=!i||f(i%1000)&&g(f,i/1000);}
f(n){return n > n;}
a0
Wolfram Language (Mathematica) , 30 bytes
Experimente online!
fonte
JavaScript (ES6),
4036 bytesPega a função e o valor currying e retorna 0 ou 1. Edit: Salvo 4 bytes graças ao @Shaggy.
fonte
1000
->1e3
para salvar alguns bytes. E você poderia substituir&&
com&
um outro byte?function_name(n=>n>0)(0)
(retornatrue
)Pitão , 9 bytes
Experimente online! (usa o terceiro caso de teste)
Assume que a função de caixa preta é nomeada
y
. Você pode declarar essa função usandoL
(argumentob
:), conforme mostrado no TIO. Implementarei todos os casos de teste posteriormente, se tiver tempo.fonte
Stax , 8 bytes
Os programas Stax não possuem chamadas ou argumentos de função; portanto, armazenamos um bloco no
Y
registro que consome e produz um único valor. Isso pode ser feito antes do código do programa.Aqui está um exemplo usando a função quadrada perfeita.
fonte
Limpo , 54 bytes
Experimente online!
Define a função
$ :: Int -> Bool
, esperando que uma funçãof :: Int -> Bool
seja definida em outro lugar.fonte
n -> n > 0
a0
Java (OpenJDK 9) , 94 bytes
Experimente online!
fonte
n -> n > 0
a0
Lisp comum ,
7372 bytesExperimente online!
fonte
Excel VBA, 79 bytes
Uma função de janela imediata anônima do VBE que recebe entrada,
n
como o número inteiro do intervalo[A1]
e o nome de uma função VBA definida publicamente do intervalo[B1]
.Exemplo de uso
Em um módulo público, a função de entrada, neste caso,
f()
é definida.As variáveis de entrada estão definidas.
A função imediata da janela é chamada.
fonte
Ruby , 37 bytes
Experimente online!
Um lambda recursivo, tendo função e número inteiro e retornando booleano.
36 bytes (apenas n positivo)
Esta versão retorna
1
para verdade,false
para falsey. Infelizmente, pode falhar quandon = 0
Experimente online!
fonte
g=
se é recursiva1
como o valorg[->n{n>0},0]
(retornatrue
). Ele só não se a entrada for0
mas a questão diz "não negativo" para que você deveria voltar para 37. desculpeAppleseed , 51 bytes
Função lambda anônima que pega um número e uma função e retorna um valor booleano.
Experimente online!
fonte
Adicionar ++ , 15 bytes
Experimente online!
Requer uma função
f
seja declarada no cabeçalho TIO.Como funciona
fonte
05AB1E , 8 bytes
Experimente online!
Explicação
Pega o número como a primeira linha de entrada e a função como a segunda.
Saídas 1 para verdade e 0 para falsidade.
fonte
Q
e, noÊ
entanto. Voltarei à versão de 8 bytes..V
que vectoriza, nem sequer leva a lista como argumento em si para começar..V
vetoriza. No exemplo no meu link éÈ
.Q
eÊ
funcionaria com a vetorização ao contrário do que afirmei anteriormente, mas o uso da vetorização automática faria com que esses comandos fossem mapeados em toda a lista, o que parece estar fora do espírito do desafio, por isso precisamosε
.