Défi
Étant donné un nombre entier divisible par 9 et un chiffre manquant, recherchez le chiffre manquant.
Le chiffre manquant peut être représenté par n'importe quel caractère autre que les chiffres 0-9 tant qu'il est cohérent.
Si le chiffre manquant peut être 0 ou 9, affichez quelque chose pour le signifier.
Supposons que l'utilisateur est suffisamment intelligent pour ne mettre qu'un seul chiffre manquant et un seul numéro, etc.
Cas de test
Dans les cas de test, le chiffre manquant est représenté par un point d'interrogation
123? -> 3
?999 -> 0 or 9
?0023 -> 4
000?1 -> 8
code-golf
math
arithmetic
NK1406
la source
la source
0
? Et[0, 9]
(tableau ou liste de 2 nombres)??
une entrée possible?Réponses:
Python , 21 octets
Essayez-le en ligne!
J'avais l'habitude
I
de représenter un chiffre manquant.la source
Alice , 12 octets
Essayez-le en ligne!
Affiche
0
si le résultat peut être 0 ou 9.Explication
la source
&
peut être supprimé, car le mode cardinal interprète l'entrée d'origine comme au plus 2 entiers.JavaScript (ES6), 40 octets
Sorties 9 si pourrait être 0 ou 9.
la source
f=
; les fonctions anonymes sont parfaitement valides.Japt, 7 octets
J'ai essayé quelques solutions, mais la plus courte était similaire à la plupart des autres, sauf que nous n'avons pas besoin de remplacer la
?
au début.Peut prendre n'importe quel caractère non numérique comme chiffre manquant. Sorties
0
lorsque la solution peut être celle ou9
.Essayez-le
Explication
Saisie implicite de chaîne
U
.¬
se divise en un tableau de caractères individuels,x
réduit le tableau en ajoutant en ignorant tous les éléments non numériques,*J
multiplie chaque élément par -1 etu9
obtient le module positif du résultat.la source
JavaScript (ES6), 18 octets
Attend a
+
comme chiffre manquant. Retours9
pour 0 ou 9 .Cas de test
Afficher l'extrait de code
la source
05AB1E ,
76 octetsUne sortie de
0
signifie que le résultat peut être 0 ou 9 .Essayez-le en ligne! ou comme suite de tests
Explication
la source
Python 2 ,
444135 octets-6 octets grâce à RiaD
Essayez-le en ligne!
Utilisateurs
]
pour chiffre manquant.Affiche
0
si le chiffre manquant peut être 0 ou 9.la source
0
pour un cas ambigu, ce qui a du sens depuis9%9 == 0
Pyth,
97 octetsUtilise l'espace comme délimiteur et renvoie 0 si le résultat peut être 0 ou 9.
Essayez-le en ligne
Explication
la source
Prolog (SWI) , 59 octets
Essayez-le en ligne!
Ouais pour la programmation logique!
Explication
D'abord, nous faisons un prédicat
*
, qui tient lorsqu'il est appliqué à zéro et à la liste vide. Notre prédicat est également valable lorsque le début de la liste est compris entre 0 et 9 et lorsque nous ajoutons le chiffre de début mod 9, le prédicat est conservé.Nous définissons ensuite
+
être juste ce prédicat avec0
comme premier argument. C'est-à-dire que nous voulons que la somme numérique soit un multiple de 9.Prolog fait tout le gros travail pour trouver des solutions pour nous.
la source
Befunge-93 , 16 octets
Essayez-le en ligne!
Une version en ligne de la réponse Befunge de James Holderness qui parvient à raser deux octets. Cela comprime essentiellement le code sur une seule ligne, inverse la direction et profite du fait que Befunge ne saute pas à la fin de la ligne. Il m'a suggéré de poster une réponse séparée avec une explication. Le code prend un * comme représentant le chiffre manquant et renvoie un 9 pour 0 ou 9.
Comment ça marche
*
(Valeur ASCII 42) a été choisi comme caractère manquant car il contrebalance la valeur initiale du chiffre, 3.la source
LaTeX, plusieurs octets (
1000628614)LaTeX, illisible (
348334 octets)LaTeX, 132 octets
Seul l'espace est autorisé comme chiffre inconnu dans ce code.
la source
J ,
1412 octets-2 octets grâce à @BolceBussiere
Honnêtement, je ne sais pas pourquoi
"."0
interprète?
comme 0, mais il le fait sur mon interprète et sur TIO, donc je ne vais pas le remettre en question. (Mise à jour: voir les commentaires pour une explication pourquoi).Cette approche prend très simplement la somme des chiffres, la nie en soustrayant de 9 et la prend modulo 9.
Essayez-le en ligne!
la source
Gelée ,
1196 octetsExplication
Une sortie de 0 signifie que le résultat peut être 0 ou 9.
Essayez-le en ligne!
Enregistré 2 octets grâce à M. Xcoder . Lors de l'utilisation de chaque quick (
€
) pendant l'évaluation, la division du nombre en chiffres était redondante.Enregistré 3 octets grâce à Dennis . Peut être bit à bit OU l'entrée avec 0 au lieu d'analyser manuellement l'entrée comme un nombre tout en supprimant les zéros et les non-chiffres en tête.
la source
|0
fonctionne au lieu defØDV€
.Swift , 51 octets
Essayez-le en ligne!
la source
Befunge-93 (PyFunge) ,
2221 octetsJe me suis rendu compte que je n'avais pas besoin d'utiliser
?
pour représenter le chiffre absent, alors j'en ai utilisé un qui est un multiple de 9 après avoir soustrait 48:x
Cela m'a permis de jouer au golf sur le
3+
, mais cela ne m'a permis d'économiser qu'un octet en raison de la longueur du première ligne avant le conditionnel :(Un port de mon Befunge-98 Réponse:
5 plus d' octets afin de vérifier si nous avons atteint EOF,
1 octet supplémentaire pour pousser 48 (
"0"
vs'0
),1 octet supplémentaire pour imprimer la réponse avec
.@
,et 1 octet supplémentaire , parce que la seconde ligne a un espace
pour un total de 8 octets supplémentaires.
Essayez-le en ligne!
Affiche
0
si le chiffre manquant peut être 0 ou 9.Cela ne fonctionne que dans l'interpréteur PyFunge pour les raisons expliquées ci-dessous.
Explication
Une grande partie de cette explication est copiée de mon explication Befunge-98 , car ce programme est très similaire à celui-ci. fiche sans vergogne
Dans la première ligne du programme, nous additionnons les chiffres, y compris le x, qui est traité comme un 72 en raison de sa valeur ASCII. Cependant, la somme sera la même une fois que nous aurons modifié par 9, donc ce n'est pas pertinent.
Si nous venons de modifier par 9, nous nous retrouverions avec le mauvais chiffre, parce que nous voulons
9 - (sum % 9)
. Cependant, nous pouvons faire mieux que9\-
, ce qui soustrait le reste de 9: si nous rendons la somme négative avant de modifier par 9, nous obtiendrons un résultat positif, équivalent à celui9 - (sum % 9)
de certains interprètes. C'est ce qui nous oblige à utiliser les interprètes PyFunge pour Befunge 93 et 98, car c'est le seul sur TIO à le faire. Les autres nous donnent une valeur entre -8 et 8 au lieu de 0 et 8la source
Befunge-98 (PyFunge) ,
1513 octetsJ'ai réalisé que je n'avais pas besoin d'utiliser
?
pour représenter le chiffre absent, alors j'en ai utilisé un qui est un multiple de 9 après avoir soustrait 48:x
Cela m'a permis de jouer au golf
3+
.Essayez-le en ligne!
Utilise un
x
comme chiffre manquant, car sa valeur ASCII est divisible par 9 après avoir soustrait 48 (et c'est bien car il est couramment utilisé comme variable en mathématiques).Sorties via le code de sortie (car
q
un octet est plus court que.@
)Sorties
0
si le chiffre manquant peut être 0 ou 9.Cela ne fonctionne que dans l'interpréteur PyFunge pour les raisons expliquées ci-dessous.
Explication
Dans la première ligne du programme, nous additionnons les chiffres, y compris le
x
, qui est traité comme un 72 en raison de sa valeur ASCII. Cependant, la somme sera la même une fois que nous aurons modifié par 9, donc ce n'est pas pertinent.Si nous venons de modifier par 9, nous nous retrouverions avec le mauvais chiffre, parce que nous voulons
9 - (sum % 9)
. Cependant, nous pouvons faire mieux que9\-
, ce qui soustrait le reste de 9: si nous rendons la somme négative avant le modding de 9, nous obtiendrons un résultat positif, équivalent à9 - (sum % 9)
de certains interprètes . C'est ce qui nous oblige à utiliser les interprètes PyFunge pour Befunge 93 et 98, car c'est le seul sur TIO à le faire. Les autres nous donnent une valeur comprise entre -8 et 8 au lieu de 0 et 8.la source
Rubis , 22 octets
Les usages
'
(tout caractère dont la distance0
est divisible par "0" fera l'affaire, y compris0
lui-même).Une sortie de
0
signifie soit0
ou9
.Essayez-le en ligne!
Explication
la source
Rubis ,
46, 41 octets-5 grâce à @Unihedron
Essayez-le en ligne!
la source
chars
au lieu de.split(//)
, 2.'<'
peut être remplacé par?<
chars
Befunge-93,
28271918 octetsLe mérite doit être attribué à Mistah Figgins , dont la réponse PyFunge m'a montré que vous n'aviez pas besoin d'une vérification spéciale pour le caractère manquant, si vous vous êtes simplement assuré que la valeur ASCII était un multiple de neuf.
Remerciements supplémentaires à Jo King qui a montré que vous n'aviez pas besoin de convertir complètement les caractères en leur équivalent numérique et que vous pouviez simplement soustraire 3 pour obtenir une valeur relative à la base 9 (ASCII
0
moins 3 est 45, un multiple de 9) .Essayez-le en ligne!
Pour que cela fonctionne, vous devez utiliser le caractère
*
du chiffre manquant (il y en a d'autres qui pourraient également fonctionner, mais c'est le plus beau).Les sorties
9
si le chiffre manquant peut être 0 ou 9.Explication
Essentiellement, nous calculons la somme de tous les chiffres, plus 45 par chiffre (qui sera finalement annulé lorsque nous modifions avec 9). Cette somme est soustraite de 3 (notre total de départ) et 39 autres sont soustraits par le chiffre manquant (ASCII
*
moins trois). Encore une fois, 3 moins 39 est un multiple de 9, il est donc annulé lorsque nous modifions avec 9.Donc, à la fin, nous calculons la somme négative de tous les chiffres, mod 9, plus 9, c'est-à-dire
Et cela nous donne le chiffre manquant.
la source
Befunge-98 (PyFunge) , 8 octets
Essayez-le en ligne!
Sorties via code de sortie. Comme avec la réponse de Mistah Figgin , cela ne fonctionne qu'avec Pyfunge, où un nombre négatif mod 9 devient positif. Utilise un x comme chiffre manquant.
la source
PowerShell , 40 octets
Essayez-le en ligne! ou vérifier tous les cas de test
Prend l'entrée comme
'123x'
dans$a
. Construit une plage0
vers9
et utiliseWhere-Object
(ici abrégé comme|?
) pour extraire les entiers qui correspondent à la clause. La clause prend$a
, effectue une regex-replace
pour remplacer lex
par le chiffre actuel$_
et obtient le mod 9 avec%9
. Ainsi, si 9 se divise également, ce sera zéro. Nous prenons le booléen-pas de celui-ci, qui rend les zéros véridiques et tout le reste falsey, de sorte que satisfait la clause Where-Object. Ces résultats sont laissés sur le pipeline et la sortie est implicite.la source
Haskell , 35 octets
Essayez-le en ligne!
la source
Rétine ,
353425 octetsSi le
?
peut être0 or 9
, est représenté par le résultat9
.Essayez-le en ligne
Explication
la source
\d
peut être changé en juste.
et la ligne suivante en$*
.?
lorsque j'ai écrit cela.Perl 5 , 23 octets
Essayez-le en ligne!
Peu importe quel caractère signifie le chiffre manquant tant qu'il ne s'agit pas d'un chiffre.
la source
Tcl, 53 octets
Comme pour les autres réponses, cela est raccourci en ne disant pas explicitement «0 ou 9».
Au lieu de cela, un résultat de «9» signifie 0 ou 9.
Essayez-le en ligne!
Explication
Cela fonctionne assez simplement. Il utilise une expression régulière pour:
interrogationnon numériqueIl évalue ensuite 9 - (sum_of_digits mod 9) pour arriver à une valeur finale en 1..9, ce qu'il fait alors
puts
.Le 0 (in
0$argv
) de tête est requis au cas où le point d'interrogation apparaît en premier dans l'entrée; un signe plus en tête dans la séquence transformée n'est pas un problème pourexpr
.la source
Pyth , 8 octets
Essayez-le en ligne!
Utilise
I
au lieu de?
.la source
APL (Dyalog) , 13 octets
Essayez-le en ligne!
Le chiffre manquant est
⍬
.la source
brainfuck , 50 octets
Essayez-le en ligne!
Imprime un 9 pour 0 ou 9. Le caractère manquant est représenté par:
Comment ça marche
Le caractère manquant doit être un caractère ayant un mod 9 de 4, +3 car nous soustrayons 3 des chiffres normaux et +1 pour l'initialisation du total à 1.
En remarque, il y a beaucoup d'inefficacité dans le code pour le golf, car chaque chiffre réinitialise le total 5 fois chacun, plutôt qu'une seule fois parfois si je soustrais 48 au lieu de 3.
la source
> <> ,
3533252115 octetsUne sortie de
0
signifie que le résultat peut être 0 ou 9 .Essayez-le en ligne!
6 octets enregistrés grâce à Jo King en utilisant
'
pour représenter les chiffres manquants.la source
'
caractère au lieu d'un?
Java 8,
3634 octetsRenvoie
9
lorsque les deux0
et9
sont valides.Explication:
Essayez-le en ligne.
la source