Écrivez un programme qui lit depuis stdin deux entiers, chaque nouvelle ligne se terminant, ci-après appelé "nombre" et "radix", et:
- Imprime tout message fixe que vous voulez si le nombre est un palindrome dans ce radix (par exemple
true
,t
,1
) - Imprime différent message fixe que vous voulez si le numéro est un palindrome dans cette radix (par exemple
false
,f
,0
, etc.) - Ces messages doivent être les mêmes pour chaque course, mais il n'y a pas de règles sur ce qu'ils doivent être (ce qui est le mieux pour le golf).
- Vous pouvez supposer que l'entrée est valide, deux entiers positifs. "nombre" ne dépassera pas
2147483647
, "radix" ne dépassera pas32767
. - Vous ne pouvez pas utiliser de ressources externes, mais vous pouvez utiliser n'importe quelle fonction mathématique incluse par défaut dans votre langue.
Remarque: un radix n'est que la base du nombre.
Exemples de cycles:
16
10
false
16
3
true
16
20
true
121
10
true
5
5
false
12346
12345
true
16781313
64
true
16781313
16
true
Réponses:
Double fonction J (23 caractères) et K (19)
Les deux langues sont très similaires, à la fois en général et dans ce golf spécifique. Voici le J:
,~1
- Ajoutez le numéro 1 à lui-même, ce qui rend le tableau1 1
.1!:1
- Lire en deux chaînes à partir du clavier (1!:1
est à lire, et1
est le descripteur / numéro de fichier pour la saisie au clavier).".
- Convertissez chaque chaîne en nombre.#.^:_1~/
-F~/ x,y
signifie trouvery F x
. NotreF
est#.^:_1
, qui effectue l'expansion de la base.(-:|.)
- L'argument correspond-il à (-:
) son inverse (|.
)?1
pour oui,0
pour non.Et voici le K:
0::'``
- Lisez dans (0::
) une chaîne pour chaque'
ligne ( ) de la console (`
est le descripteur de fichier pour cela)..:'
- Convertissez (.:
) chaque'
chaîne ( ) en nombre._vs/|
- Inversez la paire de nombres, de sorte que le radix soit devant le nombre, puis insérez (/
) la fonction d'expansion de base_vs
("vecteur de scalaire") entre eux.a~|a:
- Attribuez cette extension résultante àa
, puis vérifiez sia
correspond (~
) à son inverse (|
). Encore une fois,1
pour oui,0
pour non.la source
GolfScript, 10 caractères
C'est facile pour GolfScript si nous le faisons de manière simple. La sortie est
0
/1
pour false / true.la source
APL (20)
Sorties
0
ou1
, par exemple:Explication:
⎕{
...}⎕
: lisez deux nombres, passez-les à la fonction.⍵
est le premier nombre et⍺
le deuxième nombre.⌊1+⍺⍟⍵
:floor(1+⍺ log ⍵)
, nombre de chiffres nécessaires pour représenter⍵
en base⍺
.⍺/⍨
: la base de chaque chiffre, donc⍺
répliquée par le nombre que nous venons de calculer.⍵⊤⍨
: représenter⍵
dans la base donnée (en utilisant des nombres, donc cela fonctionne pour toutes les valeurs de⍺
).≡∘⌽⍨
: voir si le résultat est égal à son inverse.la source
Perl,
82777369 octetsLes nombres entrés sont attendus comme des lignes d'entrée de STDIN et le résultat est écrit comme
1
ou0
, le premier signifiant que le premier nombre est un palindrome dans sa représentation de la base donnée.Edit 1: Using
$=
enregistre quelques octets, en raison de sa conversion interne en int.Edit 2: l' opérateur smartmatch
~~
compare directement les éléments du tableau, ainsi la conversion en chaîne n'est pas nécessaire.Edit 3: Optimisation en supprimant une variable inutile.
65 octets : si la chaîne vide est autorisée comme sortie pour
false
, les quatre derniers octets peuvent être supprimés.Version non golfée
L'algorithme stocke les chiffres du nombre converti dans un tableau
@a
. Ensuite, la représentation sous forme de chaîne de ce tableau est comparée au tableau dans l'ordre inverse. Des espaces séparent les chiffres.la source
$=
laissez-vous fouetter l'int
étape ... Et la question se pose pouranything you want
que rien ne puisse être ce que vous voulez ;-)$=
est également donné comme astuce dans cette réponse à la question "Astuces pour le golf en Perl" . Le retour0
coûte 6 octets supplémentaires, mais j'avais l'impression qu'un message fixe n'est pas destiné à être vide.silence
Javascript 87
n
argument est le nombre,b
argument est le radix.la source
Sauge, 45
S'exécute dans l'invite interactive
Imprime
True
lorsqu'il s'agit d'un palindrome, imprimeFalse
autrementla source
Perl
54 5662Être testé:
va donner:
Donc, cette sortie
1
pourtrue
quand un palindrome est trouvé et rien d' autre.Ungolfing:
Nota :
$_
est le tampon de ligne actuel et est vide au début.$=
est une variable réservée , utilisée à l'origine pour l'impression de lignes, c'est un compteur de lignes. Donc, cette variable est un entier , tout calcul à ce sujet entraînerait un entier tronqué comme s'ilint()
était utilisé.$-
a été utilisé pour le plaisir, juste pour ne pas utiliser les lettres traditionnelles ... (un peu plus d'obscurcissement) ...la source
Mathematica
7743IntegerDigits[n,b]
représente n comme une liste de chiffres dans la base b. Chaque chiffre de base b est exprimé de manière décimale.Par exemple, 16781313 n'est pas un palindrome en base 17:
Cependant, il est un palindrome en base 16:
Si les paires ordonnées dans les exemples ci-dessus ont été saisies,
retournerais
la source
Integer
Haskell (80 caractères)
Appelez-le avec
pali $number $radix
. Vrai, lorsque le nombre est un palindrome, Faux sinon.la source
Rubis - 76 caractères
la source
Perl 6 , 27 octets (22 sans stdin / out)
Essayez-le en ligne!
Perl6, roi des golfs lisibles (golfeurs?) (Et aussi certains pas si lisibles).
Fonction Perl 6 (pas stdin / stdout), 22 octets
Essayez-le en ligne!
la source
base
dans ma réponse est quebase
ne prend en charge que jusqu'à la base 36, et la question demande de prendre en charge les radix jusqu'à32767
dg - 97 octets
Essayer dg :
Expliqué:
la source
C,
140132la source
puts(m)
marcherait bien?printf("%d",m);
sera de 8 caractères plus court.Haskell - 59
Peu de changements dans la réponse de Max Ried.
la source
Pyth , 4 octets
Essayez-le ici ou consultez une suite de tests (prend environ 10 à 15 secondes).
la source
dc, 39 octets
La longueur est bien sûr un palindrome (
33₁₂
).Le numéro et le radix doivent se trouver en haut de la pile (dans la base numérique actuelle); le nombre doit être d'au moins 0 et le radix doit être d'au moins 2. La sortie est
t
si c'est un palindrome etf
sinon. Comme cela n'est pas spécifié dans le défi, j'ai supposé que les nombres n'ont jamais de zéros en tête (donc tout nombre se terminant par0
ne peut pas être un palindrome).Explication
En programme complet:
la source
LaTeX, 165 octets
Exemple sur desmos.com
k
, le radix, est une entrée réglableSi
f(x)=0
,x
est un palindrome de basek
.la source
Perl 6 , 34 octets
-4 octets grâce à PhilH
Essayez-le en ligne!
la source
05AB1E ,
43 octetsEssayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
C (gcc) , 79 octets
Essayez-le en ligne!
Fatigué
Basé sur le fait que pour un palindrome, l'inverse du nombre doit être égal au nombre lui-même.
Supposons que vous ayez le numéro à trois chiffres ABC dans une base. En le multipliant par la base, vous obtiendrez toujours ABC0 et en le divisant par la base en AB avec C comme reste. Donc, pour inverser le nombre, nous choisissons le chiffre le plus à droite du numéro d'origine et l'insérons à droite sur le nombre inversé. Pour faire de la place à ce chiffre, nous multiplions l'inverse par la base au préalable.
Fondamentalement:
la source