Un certain nombre d'escalier est un entier positif x tel que sa n ième chiffre (une indexée en commençant par le chiffre le moins significatif) est égal à x% (n + 1) . C'est un peu bouchée, alors regardons un exemple. Prenez 7211311 , si nous prenons les résidus modulaires de 7211311 sur la plage 2-8, nous obtenons ce qui suit:
7211311 % 2 = 1
7211311 % 3 = 1
7211311 % 4 = 3
7211311 % 5 = 1
7211311 % 6 = 1
7211311 % 7 = 2
7211311 % 8 = 7
Ce sont les chiffres de 7211311 ! Ainsi, 7211311 est un numéro d'escalier.
Tâche
Écrire du code qui prend quand on lui donne un nombre positif en entrée, produira deux valeurs distinctes l'une si le nombre est un nombre d'escalier et l'autre s'il ne l'est pas.
Il s'agit d'une compétition de code-golf donc votre objectif devrait être de minimiser le nombre d'octets dans votre code source.
Cas de test
Voici les 13 premiers numéros d'escalier:
1, 10, 20, 1101, 1121, 11311, 31101, 40210, 340210, 4620020, 5431101, 7211311, 12040210
la source
0
un numéro d'escalier? Beaucoup de réponses le pensent.Réponses:
Haskell, 55
57octetsUne approche différente de celle de l'autre solution Haskell.
Merci xnor d'avoir sauvé 2 octets.
la source
let
expression.Brachylog ,
25211614 octetsEssayez-le en ligne!
Première soumission Brachylog: D
probablement très peu golfé... merci beaucoup à Leaky Nun et Fatalize pour leurs encouragements et leur aide à jouer au golf de 25 à 14. 14. :) :)la source
Javascript,
42413938 octets-4 octets grâce à @Shaggy et @ETHProductions
Cela prend le nombre sous forme de chaîne et renvoie
false
si le numéro est un numéro d'escalier ettrue
sinon.Exemple d'extrait de code:
la source
!
car le défi ne spécifie pas explicitement que vous devez retournertrue
pour vrai etfalse
pour faux, simplement que vous devez retourner 2 valeurs distinctes.i
vous-même:s=>[...s].some(d=>s%i--^d,i=s.length+1)
~x == -(x+1)
sur les entiers etx%-y == x%y
, je pense que vous pouvez en obtenir un de plus:s=>[...s].some(d=>s%i++^d,i=~s.length)
05AB1E , 6 octets
Code:
Utilise l' encodage 05AB1E . Essayez-le en ligne!
Explication:
la source
Haskell, 60 octets
Prend le nombre en entier
la source
Mathematica, 60 octets
Essayez-le en ligne!
@alephalpha l'a joué au golf à 48
Mathematica, 48 octets
le suivant est 24120020
la source
Python 2 , 54 octets
Essayez-le en ligne!
la source
Japt ,
97 octetsPrend l'entrée sous forme de chaîne.
Essaye-le
Explication
Nous prenons implicitement la chaîne en entrée.
Mappez sur chaque caractère de la chaîne.
J
est la constante Japt de-1
, et la´
décrémente de 1 à chaque passage (--
en JavaScript). Donc, au premier passage, cela nous donne-2
.Nous utilisons cette valeur pour effectuer une opération modulo sur la chaîne d'entrée qui est automatiquement convertie en un entier dans le processus. En JavaScript
x%-y
donne le même résultat quex%y
.Inverse la chaîne résultante.
Vérifiez si la nouvelle chaîne est égale à l'entrée d'origine et émettez implicitement le résultat sous la forme d'un booléen.
la source
(Y+2
, j'ai l'impression que cela pourrait être au moins 1 octet plus court ...¥£%´JÃw
:-) (fonctionne parce quex%y == x%-y
dans JS)Neim , 6 octets
Explication:
Essayez-le en ligne!
la source
Gelée , 7 octets
Essayez-le en ligne!
la source
Python 2 , 56 octets
Essayez-le en ligne!
la source
Perl 6 , 32 octets
Essayez-le en ligne!
.comb
est le nombre de caractères dans la représentation sous forme de chaîne de l'argument d'entrée$_
(c'est-à-dire le nombre de chiffres).1 + .comb ... 2
est la séquence de nombres de un supérieur au nombre de chiffres jusqu'à 2.«%«
est le module hyperoperator qui donne le reste lorsque$_
le paramètre d'entrée à sa gauche, est divisée par chacun des éléments de la séquence à sa droite:$_ % 2, $_ % 3, ...
.[~]
concatène ces chiffres en un nouveau nombre, qui est comparé à l'argument d'entrée à l'aide de l'opérateur d'égalité de chaîneeq
.la source
PHP , 43 octets
Essayez-le en ligne!
PHP , 44 octets
imprime 1 pour vrai et rien pour faux
Essayez-le en ligne!
la source
Pyth , 13 octets
-1 octets grâce à Okx .
Essayez-le en ligne!
Explication
Solution alternative , toujours 13 octets (merci à karlkastor )
Essayez-le en ligne! C'est essentiellement la même que la première solution, sauf qu'elle utilise
i
pour convertir d'un tableau de nombres en un nombre, et que la plage est générée différemment.la source
ss`M_
parjk_
pour économiser 2 octets.j
produit une chaîne alors que j'ai besoin d'un nombre à comparer avec l'entrée (qui est un nombre).qi_.e%Q+2k`QT
utiliser map (.e
) énuméré au lieu de map. Et convertir les restes en base 10 int de la liste au lieu d'utiliser join.C ++, 104 octets
1) version originale:
2) sous une forme lisible:
Essayez-le en ligne!
la source
Pari / GP , 42 octets
Essayez-le en ligne!
la source
Python 2 ,
66 60 5857 octetsx and
(ne vérifiez pas 0)enumerate
Essayez-le en ligne!
la source
Python 3: 63 octets
Si je pouvais compter le nombre de fois que je souhaitais que «énumérer» soit plus court ...
Essayez-le en ligne!
la source
lambda m:all(m%n==int(x)for n,x in enumerate(str(m)[::-1],2))
Java (OpenJDK 8) , 60 octets
Essayez-le en ligne!
Une version sans chaîne.
la source
Java 8,
156149octetsNon golfé:
Essayez-le en ligne!
MISE À JOUR:
-7 octets : supprimé inutile
{}
et remplacéInteger.parseInt(...)
parnew Integer(...)
-9 octets : grâce à Kevin Cruijssen, supprimé un tas d'inutiles
()
, utilisé à laLong
place deInteger
etprint
au lieu deprintln
. Merci Kévin!la source
new Integer
peut êtrenew Long
(-3 octets);println
peut êtreprint
(-2 octets); et vous pouvez supprimer les parenthèses entourantnew Long(s[0])%i+f;
(-4 octets).Fusain ,
2015 octetsEssayez-le en ligne! Sorties
-
pour un numéro d'escalier, rien d'autre. Le lien est vers la version détaillée du code.la source
Python 2, 61 octets
la source
q / kdb +, 34 octets
Solution:
Exemple:
Explication:
Cast le numéro d'entrée dans une chaîne, comptez à partir de 0..longueur de chaîne, ajoutez 2 à tous, inversez-le et introduisez chaque numéro
mod
avec l'entrée d'origine. Convertissez le résultat du mod en chaîne et réduisez la liste, vérifiez s'il est égal à la chaîne du numéro d'entrée:Remarques:
La plupart de la solution consiste à générer la
2,3,4..
liste, j'ai une autre solution qui fait moins de choses, mais qui finit par être de 37 octets après le golf:la source
Clojure, 75 octets
L'entrée est une chaîne, en utilisant
map
et la%
fin a été plus courte que l'for[i(range(count %))]
approche.la source
Haskell, 62 octets
f x=and$zipWith(==)(reverse$show x)$map(head.show.mod x)[2..]
Au lieu d'inverser la liste (infinie) de modules, il tronque la liste en la zippant avec la représentation de chaîne inversée de l'intégrale x, dont elle assure ensuite qu'elle est égale par élément.
la source
Perl 5 , 41 octets
39 octets de code + 2 drapeaux
-pa
Essayez-le en ligne!
N'affiche rien (undef) pour les numéros d'escalier, 1 pour autre chose
la source