Récemment, ma réputation était 25,121
. J'ai remarqué que chaque groupe de chiffres (c'est-à-dire les nombres séparés par des virgules) était un carré parfait.
Votre défi est, étant donné un entier non négatif N et une fonction de boîte noire unaire booléenne f : Z * → B , de produire une valeur véridique si chaque valeur de f appliquée aux groupes de chiffres de N est véridique, et Falsey sinon.
On peut trouver les groupes de chiffres en divisant le nombre en groupes de 3, en commençant par le côté droit. Le groupe le plus à gauche peut avoir 1, 2 ou 3 chiffres. Quelques exemples:
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)
Règles supplémentaires
- Cette fonction peut correspondre à des booléens (par exemple,
true
etfalse
),1
s et0
s, ou à toute valeur truey / falsey. Veuillez spécifier le ou les formats pris en charge par votre réponse. - Vous pouvez prendre un entier en entrée ou une chaîne entière (c'est-à-dire une chaîne composée de chiffres).
- Vous pouvez écrire un programme ou une fonction.
- Lorsque vous passez les groupes numériques à la fonction f , vous devez supprimer tous les zéros de tête inutiles. Par exemple, f , lorsqu'il est appliqué à N = 123 000, doit être exécuté comme f (123) et f (0).
Cas de test
La notation fonctionnelle est n -> f(n)
, par exemple, n -> n == 0
. Tous les opérateurs supposent une arithmétique entière. (Par exemple, 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
la source
la source
n -> n > 0
appliqué à0
) aux cas de test car la plupart des réponses échouent.[0]
.Réponses:
Gelée , 5 octets
Essayez-le en ligne!
L'argument de la ligne de commande est le nombre. La ligne au-dessus de la ligne dans laquelle cette fonction réside est la ligne principale du reste du programme, c'est-à-dire le code qui est appelé pour chacun des groupes. Attention à ne pas se référer à la ligne qui
bȷÇ€Ạ
est dedans! L'exemple utilisé ici est le 5ème cas de test.la source
n -> n != 0
à0
0
, et sa liste de groupes de chiffres est[0]
, doncṆ
est mappé à chaque élément (le seul0
ici), transformant la liste en[1]
et, puisque tous les éléments de cette liste sont véridiques,1
est retourné. Notez que si j'avais la liste des groupes de chiffres,[]
le résultat ne changerait pas, car tous les éléments de[]
sont véridiques (vérité vide). Cependant, le résultat peut être différent pour différents programmes, et les règles ne sont pas exactement claires à ce sujet ( OP demandé ).Brachylog , 8 octets
Essayez-le en ligne!
La fonction blackbox va sur la deuxième ligne (ou le "Footer" sur TIO) et l'entier est lu depuis STDIN. Imprime
true.
ou enfalse.
conséquence.la source
APL (Dyalog) ,
1613 octets3 octets enregistrés grâce à @ Adám
Essayez-le en ligne!
Comment?
1e3⊥⍣¯1⊢⎕
- saisir le nombre et encoder en base 1000⎕¨
- saisir la fonction et appliquer sur chacun∧/
- réduire avec logique etla source
Python 2 , 46 octets
Essayez-le en ligne!
la source
*
à la place deand
.Haskell,
424038 octetsLa fonction blackbox doit retourner
True
ouFalse
.Essayez-le en ligne!
Edit:
-2-4 octets grâce à @ovs.la source
&&
au lieu deand
C (gcc) ,
665848 octets-10 octets grâce à @Neil!
Essayez-le en ligne!
la source
g(f,i)int f();{i=!i||f(i%1000)&&g(f,i/1000);}
f(n){return n > n;}
à0
Wolfram Language (Mathematica) , 30 octets
Essayez-le en ligne!
la source
JavaScript (ES6),
4036 octetsPrend la fonction et la valeur en curry et retourne 0 ou 1. Edit: 4 octets enregistrés grâce à @Shaggy.
la source
1000
->1e3
pour économiser quelques octets. Et pourriez-vous remplacer&&
par&
un autre octet?function_name(n=>n>0)(0)
(retournetrue
)Pyth , 9 octets
Essayez-le en ligne!(utilise le troisième cas de test)
Suppose que la fonction de boîte noire est nommée
y
. Vous pouvez déclarer une telle fonction en utilisantL
(argument:)b
, comme indiqué sur TIO. Je mettrai en œuvre tous les cas de test plus tard, si j'ai le temps.la source
Stax , 8 octets
Les programmes Stax n'ont pas d'appels de fonction ou d'arguments, donc nous stockons un bloc dans le
Y
registre qui consomme et produit une seule valeur. Cela peut être fait avant le code du programme.Voici un exemple utilisant la fonction carrée parfaite.
la source
Nettoyer , 54 octets
Essayez-le en ligne!
Définit la fonction
$ :: Int -> Bool
, en attendant qu'une fonctionf :: Int -> Bool
soit définie ailleurs.la source
n -> n > 0
à0
Java (OpenJDK 9) , 94 octets
Essayez-le en ligne!
la source
n -> n > 0
à0
Lisp commun ,
7372 octetsEssayez-le en ligne!
la source
05AB1E , 8 octets
Essayez-le en ligne!
Explication
Prend le nombre comme première ligne d'entrée et la fonction comme seconde.
Sorties 1 pour vérité et 0 pour fausse.
la source
Q
etÊ
pourtant. Je reviens à la version 8 octets..V
que vectorise, il ne prend même pas la liste comme argument lui-même pour commencer..V
vectorise. Dans l'exemple de mon lien, c'estÈ
.Q
,Ê
cela fonctionnerait avec la vectorisation contrairement à ce que j'ai dit précédemment, mais l'utilisation de la vectorisation automatique ferait transposer ces commandes sur toute la liste, ce qui semble en dehors de l'esprit du défi dont nous avons besoinε
.Excel VBA, 79 octets
Une fonction de fenêtre immédiate VBE anonyme qui prend en entrée,
n
comme type entier de la plage[A1]
et le nom d'une fonction VBA définie publiquement de la plage[B1]
.Exemple d'utilisation
Dans un module public, la fonction d'entrée, dans ce cas,
f()
est définie.Les variables d'entrée sont définies.
La fonction de fenêtre immédiate est alors appelée.
la source
Rubis , 37 octets
Essayez-le en ligne!
Un lambda récursif, prenant la fonction et l'entier et renvoyant un booléen.
36 octets (seulement positif n)
Cette version revient
1
pour vérité,false
pour falsey. Malheureusement, il peut échouer lorsquen = 0
Essayez-le en ligne!
la source
g=
if it's recursive1
as the truthy valueg[->n{n>0},0]
(retournetrue
). Il échoue uniquement si l'entrée est0
mais la question dit "non négatif", vous devriez donc revenir à 37. désoléAppleseed, 51 bytes
Anonymous lambda function that takes a number and a function and returns a boolean value.
Essayez-le en ligne!
la source
Ajouter ++, 15 bytes
Try it online!
Nécessite une fonction
f
to be declared in the TIO header.Comment ça fonctionne
la source