Étant donné un entier positif, affichez une valeur de vérité / fausse indiquant si le nombre peut se manger lui-même.
Règles
Le plus à gauche est la tête, le plus à droite est la queue
Si la tête est supérieure ou égale à la queue, la tête mange la queue et la nouvelle tête devient leur somme.
Si la tête est remplacée par .
ne peut pas être ignoré, mais le numéro d'entrée n'aura jamais de zéros en tête.
Exemple:
number=2632
head-2, tail-2
2632 -> 463
head-4, tail-3
463 -> 76
head-7, tail-6
76 -> 3
If only one digit remains in the end, the number can eat itself.
Si à un moment donné la tête ne peut pas manger la queue, la réponse sera Faux.
number=6724
072
False (0<2)
Cas de test:
True:
[2632, 92258, 60282, 38410,3210, 2302, 2742, 8628, 6793, 1, 2, 10, 100, 55, 121]
False:
[6724, 47, 472, 60247, 33265, 79350, 83147, 93101, 57088, 69513, 62738, 54754, 23931, 7164, 5289, 3435, 3949, 8630, 5018, 6715, 340, 2194]
C'est le code-golf donc le code le plus court gagne.
code-golf
decision-problem
Vedant Kandoi
la source
la source
Réponses:
JavaScript (ES6),
52 5150 octets1 octet enregistré grâce à @tsh
Prend l'entrée sous forme de chaîne. Renvoie une valeur booléenne.
Essayez-le en ligne!
Commenté
la source
f=n=>n>[n%10]?f(-(-n[0]-n)%10+n.slice(1,-1)):!n[1]
Gelée , 11 octets
Essayez-le en ligne!
Comment ça marche
la source
Perl 6 ,
6362 octetsEssayez-le en ligne!
Explication:
la source
Java (JDK) , 83 octets
Essayez-le en ligne!
Crédits
la source
/10
et%10
dans une boucle. Si bien fait de battre les réponses Python; +1 de moi. :)r+=
versr=
et?1:0
vers?1:r
.r=1
r&=h<n%10?0:r;return r;
Mathematica, 62 octets
Appelle d'abord
IntegerDigits
l'entrée pour obtenir une liste de ses chiffres, puis applique à plusieurs reprises la règle suivante:La règle est appliquée jusqu'à ce que le motif ne corresponde plus, auquel cas il ne reste qu'un seul chiffre (véridique) ou la tête est inférieure à la queue (fausse).
Au lieu d'appeler
Length[__]==1
, nous pouvons enregistrer quelques octets avec0(__)=={0}
, en multipliant tous les éléments de la liste par0
puis en comparant avec la liste{0}
.la source
Python 3 , 50 octets
Première ligne volée à la réponse de Black Owl Kai .
Essayez-le en ligne!
La sortie se fait via un code de sortie. Échoue (1) pour les entrées fausses et termine (0) pour les entrées véridiques.
la source
p%10<k>q
ne lance pas une erreur de nom sip%10 >= k
?p%10<k>q
fait la même chose quep%10<k and k>q
.Python 2 ,
1058281 octetsEssayez-le en ligne!
Merci beaucoup pour un énorme -23 de @ ØrjanJohansen
Merci à @VedantKandoi (et @ ØrjanJohansen) pour encore -1
la source
for
avec une tranche inversée, et faire le%10
seul lors des tests: essayez-le en ligne!if i[0]<i[-1]:x=0
puiselse:....
. @ ØrjanJohansen, dans votre réponse aussi.True
cas, mais pas pour tousFalse
.Brachylog , 23 octets
Essayez-le en ligne!
Il s'agit d'une sauvegarde de 1 octet sur la solution de Fatalize . Cela utilise une approche récursive au lieu d'une approche itérative
Explication
la source
APL (Dyalog Unicode) , 33 octets SBCS
Fonction de préfixe tacite anonyme prenant une chaîne en argument.
Essayez-le en ligne!
⍎¨
évaluer chaque caractère (cela nous donne une liste de chiffres){
…}
Appliquer le "dfn" suivant à cela;⍵
est l'argument (liste des chiffres):⌽⍵
inverser l'argument⊃
choisissez le premier élément (c'est la queue)t←
affecter àt
(pour t tous)⍵<
pour chacun des chiffres d'origine, voyez s'il est inférieur à celui⊃
choisir le premier vrai / faux:
si c'est le cas:0
retourner faux⋄
puis:3::
si désormais, une erreur d'index (hors limites) se produit:1
retourner vrai¯1↓⍵
laisser tomber le dernier chiffre⊢
produire cela (sépare1
et¯1
donc ils ne formeront pas un seul tableau)t+@1
ajouter la queue au premier chiffre (la tête)10|
mod-10∇
recurseUne fois que nous avons atteint un seul chiffre,
¯1↓
cela en fera une liste vide et@1
provoquera une erreur d'index car il n'y a pas de premier chiffre, ce qui provoquera le retour de la fonction à true.la source
Python 3 , 77 octets
Essayez-le en ligne!
Et mon ancienne solution avec une approche récursive
Python 3 , 90 octets
Essayez-le en ligne!
Prend l'entrée sous forme de chaîne.
la source
Brachylog , 24 octets
Essayez-le en ligne!
Je devrais changer
ⁱ
le comportement par défaut de sorte qu'il répète un nombre inconnu de fois (actuellement, il réitère 1 fois par défaut, ce qui est complètement inutile). Je n'aurais alors pas besoin du[…];I[…]⁾
, économisant 3 octetsExplication
Ce programme contient une fourchette laide à l'intérieur d'une fourchette. Il y a aussi de la plomberie nécessaire pour travailler sur des listes de chiffres au lieu de chiffres (parce que si nous retirons la tête et la queue de
76
nous nous retrouvons avec0
, ce qui ne fonctionne pas contrairement à l'[7,6]
endroit où nous nous retrouvons[]
).la source
,
place, je pourrais supprimer 1 octet Essayez-le en ligne!Haskell,
706460 octetsL'entrée est considérée comme une chaîne.
Essayez-le en ligne!
Edit: -6 octets en utilisant l'astuce de @ Laikoni d'utiliser
||
au lieu de gardes séparés. Encore -4 octets grâce à @Laikoni.la source
read[l b]
peut être justeread b
parce que vous ne regardez de toute façon que le dernier chiffre. Enregistre 4 octets de plus en étant également en lignelast
: essayez-le en ligne!Perl 5 , 64 octets
Essayez-le en ligne!
la source
Python 2 ,
7567 octetsEssayez-le en ligne!
Approche lambda récursive. Prend l'entrée sous forme de chaîne. Un grand merci à Dennis pour avoir économisé 8 octets!
la source
Haskell ,
6964 octetsEssayez-le en ligne! Exemple d'utilisation:
f 2632
rendementsTrue
.Modifier: -5 octets car
mod (h + mod n 10) 10 = mod (h + n) 10
la source
||
, ce qui m'a également permis de raccourcir ma réponse. Merci!Rubis, 139 octets
Essayez-le en ligne! (a du code supplémentaire pour traiter l'entrée, car c'est une fonction)
Code non golfé:
la source
Retina 0.8.2 , 42 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Convertissez les chiffres en unaires et insérez des séparateurs.
Si le dernier chiffre n'est pas supérieur au premier, ajoutez-les ensemble.
Réduisez le modulo 10 si nécessaire.
Répétez jusqu'à ce que le dernier chiffre soit supérieur au premier ou qu'il ne reste qu'un seul chiffre.
Testez s'il ne reste qu'un seul chiffre.
la source
05AB1E ,
262524 octetsPeut probablement être joué un peu plus .. Cela semble trop long, mais peut-être que le défi est en termes de code plus complexe que je ne le pensais auparavant.
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
C ++ (gcc) , 144 octets
Essayez-le en ligne!
La première fois que j'essaie quelque chose comme ça, donc si j'ai formaté quelque chose de mal, faites le moi savoir. Je ne suis pas sûr à 100% des règles pour des choses comme utiliser l'espace de noms pour éliminer les 5 octets "std ::" alors je l'ai laissé.
Non golfé:
la source
#include
déclarations. Cependant, je proposerais la programmation dans la sous-dialecte std lib facilities de C ++ avec#include "std_lib_facilities.h"
prepended, qui fait aussi ausing namespace std;
. Cet en-tête a été écrit par l'auteur du chemin du langage (la dernière version est 2010) pour les étudiants débutants en C ++.#import<string>
. Essayez-le en ligne!#!/usr/bin/sh
nouvelle lignegcc -include "std_lib_facilities.h" $@
- si je trouve un cours de C ++ qui prévoit que script shell, serait - ce nombre?-include iostream
, c'est en effet 144 octets.C #, 114 octets
Essayez-le en ligne
la source
C (gcc) (avec string.h) ,
110108 octetsEssayez-le en ligne!
Encore relativement nouveau pour PPCG, la syntaxe correcte pour lier les bibliothèques en tant que nouvelle langue m'est étrangère. Notez également que la fonction renvoie 0 ou 1 pour false / true, et l'impression qui en résulte sur stdout nécessite stdio. Si nous sommes pédant et que l'exercice nécessite une sortie, le langage nécessite également stdio .
Conceptuellement similaire à la réponse de @ BenH, mais en C, donc bravo où ils sont dus (Bienvenue dans PPCG, btw), mais en utilisant la récursivité. Il utilise également l'arithmétique du pointeur de tableau, car le code sale est plus court que le code propre.
La fonction est récursive de queue, avec des conditions de sortie si le premier nombre ne peut pas manger le dernier ou si la longueur est 1, retournant respectivement faux ou vrai. Ces valeurs sont trouvées en déréférençant un pointeur sur la chaîne C (qui donne un caractère) au début et à la fin de la chaîne, et en effectuant les comparaisons sur elles. l'arithmétique du pointeur est effectuée pour trouver la fin de la chaîne. enfin, le dernier caractère est "effacé" en le remplaçant par un terminateur nul (0).
Il est possible que l'arithmétique du module soit raccourcie d'un octet ou deux, mais j'ai déjà besoin d'une douche après cette manipulation du pointeur.
Version non golfée ici
Mise à jour: enregistré deux octets en remplaçant c == 1 par! C. Il s'agit essentiellement de c == 0. Il s'exécutera un temps supplémentaire et se doublera inutilement avant de se supprimer, mais économisera deux octets. Un effet secondaire est que les chaînes de longueur nulle ou nulle ne causeront pas de récursion infinie (bien que nous ne devrions pas obtenir de chaînes nulles car l'exercice dit des entiers positifs).
la source
gcc
- bien que des avertissements soient générés, ilsgcc
seront heureux de compiler votre code sans#include
s. Vous pouvez également enregistrer 4 octets avec-DR=return
. Enfin, dans votre code de test, les\0
s ne sont pas nécessaires, car la chaîne les inclut déjà implicitement.b=case1?res1:case2?res2:res_else;
est la même queif(case1)return res1;if(case2)return res2;return res_else;
c
: vous pouvez déterminer si la chaîne est de longueur nullehead-tail
.Powershell, 89 octets
Important! Le script s'appelle récursivement. Enregistrez donc le script en tant que
g.ps1
fichier dans le répertoire courant. Vous pouvez également appeler une variable de bloc de script à la place d'un fichier de script (voir le script de test ci-dessous). Ces appels ont la même durée.Remarque 1: le script utilise une évaluation paresseuse des opérateurs logiques
-or
et-and
. Si"$args"-notmatch'(.)(.*)(.)'
estTrue
alors la bonne sous-expression de-or
n'est pas évaluée. Aussi si($m=$Matches).1-ge$m.3
estFalse
alors la bonne sous-expression de-and
n'est pas évaluée non plus. Nous évitons donc la récursion infinie.Remarque 2: L'expression régulière
'(.)(.*)(.)'
ne contient pas d'ancres de début et de fin car l'expression(.*)
est gourmande par défaut.Script de test
Sortie:
Powershell, 90 octets
Pas de récursivité. Aucune dépendance de nom de fichier et aucune dépendance de nom de bloc de script.
Un Powershell convertit implicitement un opérande droit en un type d'opérande gauche. Par conséquent,
$s-ge$s%10
calcule l'opérande droit$s%10
commeinteger
et le compare comme unstring
car le type de l'opérande gauche eststring
. Et2+$s[0]+$s
convertit un$s[0]
caractère et une chaîne$s
eninteger
car opérande gauche2
est un entier.$s|% S*g 1($s.Length-2)
est un raccourci vers$s.Substring(1,($s.Length-2))
la source
C # (compilateur interactif Visual C #) , 69 octets
Essayez-le en ligne!
Le succès ou l'échec est déterminé par présence ou l'absence d'une exception . L'entrée se présente sous la forme d'une chaîne.
Moins golfé ...
Il y a quelques octets supplémentaires pour gérer la conversion entre les caractères et les chiffres, mais dans l'ensemble, cela n'a pas trop affecté la taille.
la source
Perl 5
-pF
, 53 octetsEssayez-le en ligne!
la source
Brachylog , 18 octets
Essayez-le en ligne!
Prend trois octets au large de la solution de Fatalize juste en vertu de superscriptless non-déterministe
ⁱ
existant maintenant, mais perd trois autres en faisant vaguement les choses Jelly inspirés avecz₁
d'éviter d' utiliserc
,g
ou mêmeh
. (Également inspiré en essayant, et en échouant, d'utiliser une nouvelle fonctionnalité différente: leʰ
métaprédicat.)la source
PowerShell ,
9491 octetsEssayez-le en ligne!
Script de test
Code non golfé:
la source
$n[0]
votrefor
relevé - il suffit de vérifier$n
.-6
place-96
car il suffit de calculer% 10return
et enregistrer 7 octetsparam($n)
oufunction f($n)
.["1","2","3"]
une entrée non valide mais l'"123"
est. si @VedantKandoi a un problème avec ça, je peux certainement le changer!