Étant donné un entier positif N
, sortez le plus petit entier positif tel que ce nombre soit un palindrome (c'est-à-dire son propre inverse) et soit divisible par N
.
Le palindrome (c'est-à-dire la sortie) ne doit pas avoir besoin d'un zéro de tête pour être un palindrome, par exemple 080
n'est pas la réponse valable pour 16
.
L'entrée ne sera jamais un multiple de 10, pour la raison précédente.
Votre programme peut prendre autant de temps que nécessaire, même si en pratique il serait beaucoup trop long pour produire la réponse.
Entrées et sorties
- Vous pouvez prendre la saisie par
STDIN
tant qu'argument de fonction ou quelque chose de similaire. - Vous pouvez imprimer la sortie sur
STDOUT
, la renvoyer à partir d'une fonction ou quelque chose de similaire. - Les entrées et sorties doivent être en base décimale.
Cas de test
N Output
1 1
2 2
16 272
17 272
42 252
111 111
302 87278
1234 28382
Notation
Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte.
N
Réponses:
2sable / 05AB1E , 6/7 octets
2sable
Explication
Essayez-le en ligne
05AB1E
La différence avec le code 2sable est que l'entrée n'est implicite qu'une seule fois dans 05AB1E, donc ici nous devons
¹
récupérer la première entrée.Essayez-le en ligne
1 octet enregistré avec 2sable comme suggéré par Adnan
la source
[DÂQ#+
.Haskell,
453734 octetsla source
Pyth, 7 octets
Essayez-le en ligne: Démonstration
Explication
la source
Java,
16415912610894 octetsVersion golfée:
Version non golfée:
Remerciements à Emigna et Kevin Cruijssen pour avoir apporté des améliorations et réduit les octets presque de moitié :)
la source
x % a == 0
peu redondant lorsque vous initialisez x en tant que et ne l'augmentez que de a? De plus, la comparaison avec l'inversion de la chaîne peut-elle être effectuée dans le temps conditionnel?import org.apache.commons.lang.StringUtils;
et utiliserorg.apache.commons.lang.StringUtils.reverse
directement.for(;;)
est plus court quewhile(1>0)
. Pas besoin d'un programme complet,int c(int a){...}
ferait juste comme une réponse valide, car la question a la règle suivante: " Vous pouvez prendre l'entrée comme argument de fonction. Vous pouvez renvoyer la sortie d'une fonction. " @Emigna a en effet raison que la vérification modulo n'est pas nécessaire.x += a
). Je n'ai pas à vérifier la divisibilité :) et merci pour les conseils de golf!C #,
10380 octetsNon golfé
la source
x.ToString()
par 'x + "" `sauvera un tas de caractères.Python 2, 46 octets
Ideone it!
Solution récursive avec
c
comme compteur.Le cas de
0
est intéressant, car bien quec=0
satisfaisant la condition palindrome, il ne serait pas retourné, carccc and 0 or xxx
revient toujoursxxx
.la source
c*(`c`[::-1]==`c`)or
.PHP, 39 octets
;
après un moment pour ne rien fairestrrev
retourner la chaîne en arrièreMême longueur avec for-loop
la source
Brachylog , 8 octets
Essayez-le en ligne! (environ 5 secondes pour
1234
)Vérifiez tous les cas de test. (environ 20 secondes)
la source
Javascript (ES6),
5551 octets4 octets grâce à Neil.
la source
+
semble inutile.(x,c=x)
permettrait d'éviter le&&c
?c^[...c+""].reverse().join``?f(x,x+c):c
pour enregistrer un octet de plus.c-
fonctionnerait pour des nombres légèrement plus élevés quec^
, si nécessaire.Pyke,
119 octetsEssayez-le ici!
la source
C,
217189 octetsVersion autonome:
Appel à une version de fonction:
Non golfé:
Appel à une fonction non golfée:
J'ai inclus la version autonome pour l'historicité.
Ceci est mon premier codegolf, tout commentaire est le bienvenu!
la source
main()
quelles que soient vos préférences. Vous ne joueriez pas au baseball en exécutant douze boucles avant de marquer "parce que je le préfère", vous n'atteindrez jamais en toute sécurité. Il s'agit d'une compétition, et la règle principale est d'utiliser tous les moyens nécessaires et légaux pour réduire le nombre d'octets.int f(int a)
->f(a)
2) si vous devez déclarer quelquesint
s vous pouvez utiliser les paramètres de la fonction:int f(int a){int b;
->f(a,b){
3)sprintf
ne retournera jamais 0 donc vous pouvez l'utiliser danswhile
:while(1){sprintf(c,"%d",b);
->while(sprintf(c,"%d",b)){
4 ) utilisez le K&R C pour définir une fonction afin que vous puissiez combiner avec mon 2ème indice:int s(char*a){int b=strlen(a);for(int i=0
->s(a,b,i)char*a;{b=strlen(a);for(i=0;
R,
117113109 109101 octetsNon golfé
all(charToRaw(a)==rev(charToRaw(a)))
vérifie si à chaque positiona
la valeur dea
et son inverse sont identiques (c'est-à-dire sia
est palindromique).Il pourrait être possible de jouer au golf sur certains octets en jouant avec le
types
.la source
En fait ,
1514 octetsDemandé par Leaky Nun. Suggestions de golf bienvenues. Essayez-le en ligne!
Ungolfing
la source
Haskell,
64 6356 octetsAppelez avec
(1!)16
ou simplement1!16
. Essayez-le sur Ideone.la source
VBSCRIPT, 47 octets
non golfé
la source
Perl, 25 octets
Comprend +2 pour
-ap
Exécutez avec l'entrée sur STDIN:
palidiv.pl
:la source
SILOS , 109 octets
Essayez-le en ligne!
la source
Japt , 14 octets
Essayez-le en ligne!
Merci ETHproductions pour l'aide! :)
la source
MATL , 10 octets
Essayez-le en ligne!
la source
PowerShell v2 +, 72 octets
Long à cause de la façon dont l'inversion est gérée dans PowerShell - pas très bien. ;-)
Prend l'entrée
$args[0]
, stocke dans$i
(notre variable de boucle) et$n
(notre entrée). Boucles infinies, incrémentées$i
à$n
chaque fois (pour garantir la divisibilité).A chaque itération, nous vérifions s'il
$i
s'agit d'un palindrome. Il y a une supercherie ici, alors laissez-moi vous expliquer. Nous le prenons d'abord$i
et le stringifions avec"$i"
. C'est ensuite indexé dans un tableau dans l'ordre inverse["$i".length..0]
avant d'être-join
réédité dans une chaîne. Cela est introduit dans le côté droit de l'-eq
opérateur de ualité, qui rejette implicitement la chaîne dans un[int]
, puisque c'est l'opérande de gauche. Remarque: ce casting supprime tous les zéros de tête du palindrome, mais comme nous sommes garantis que l'entrée n'est pas divisible par10
, c'est OK.Ensuite,
if
c'est un palindrome, nous plaçons simplement$i
sur le pipeline etexit
. La sortie est implicite à la fin de l'exécution.Cas de test
la source
MATLAB, 76 octets
Le format de l'appel est le
p(302)
résultat est une chaîne.Rien d'intelligent ici. Il effectue une recherche linéaire, en utilisant les fonctions
num2str()
etfliplr()
.Cet agencement laid est une touche plus courte que l'utilisation d'un
while(1) ... if ... break end
motif.Non golfé
la source
Mathematica, 49 octets
Starts the search at
c = N
, and incrementsc
if not a palindrome and not divisible byN
. When conditions are met, outputsc
.la source
Jelly, 12 bytes
Try it online!
Explanation:
This link takes 1 argument. The
µ
s split it into 4 parts. Starting from the last and moving left:la source
Elixir, 75 bytes
la source
Python 2,
6665 bytesi
is input andx
is (eventually) outputAfter scrolling through other answers I found a shorter Python 2 answer but I put the effort into my solution so might as well throw it here. ¯\_(ツ)_/¯
la source
[::-1] else
.return x if x%i==0&&
x==
x[::-1]else f(i,x+1)
, which then means you can make it a lambda, and golf more bytes?REXX, 46 bytes
la source
Python 2, 44 bytes
Try it online!
I know that the question was posted over six months ago, but this was shorter than any other Python submission.
la source
QBIC, 29 bytes
Explanation:
la source
Perl 6, 35 bytes
Explanation:
la source
Perl 6, 39 bytes
(33 not including the
my &f=
)la source