Défi:
Sortez les «chiffres entiers» de l'une des six tables arithmétiques suivantes en fonction de l'entrée:
- addition ( +
);
- soustraction ( -
);
- multiplication ( *
);
- division ( /
);
- exponentiation ( ^
);
- fonctionnement modulo ( %
).
Règles:
- Qu'est-ce que je définis comme « integer-chiffres »: Tous les résultats de l'opérande arithmétique qui est exactement un des éléments suivants:
0
,1
,2
,3
,4
,5
,6
,7
,8
,9
. Cela signifie que vous excluez chaque résultat de10
ou supérieur, chaque résultat de-1
ou inférieur et chaque résultat non entier. Comment calculer les résultats arithmétiques: en utilisant d'abord le chiffre du haut, puis en utilisant l'opérande avec le chiffre de gauche.Vous êtes autorisé à le faire vice-versa (c'est-à-direy/x
au lieu dex/y
), tant que vous êtes cohérent pour les six sorties! (Vous n'êtes donc pas autorisé à utilisery-x
etx/y
dans la même réponse.) †- Nous ne publierons rien pour les cas de test de division par 0 (pour les tables d'opérations de division et de module)
- Nous ne publierons rien pour le cas de bord
0^0
.
Production:
Sortez donc les éléments suivants (le format du tableau est quelque peu flexible (voir ci-dessous): les lignes sont donc facultatives et principalement ajoutées pour la lisibilité des cas de test):
Une addition:
+ | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 0 1 2 3 4 5 6 7 8 9
1 | 1 2 3 4 5 6 7 8 9
2 | 2 3 4 5 6 7 8 9
3 | 3 4 5 6 7 8 9
4 | 4 5 6 7 8 9
5 | 5 6 7 8 9
6 | 6 7 8 9
7 | 7 8 9
8 | 8 9
9 | 9
Soustraction:
- | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 0 1 2 3 4 5 6 7 8 9
1 | 0 1 2 3 4 5 6 7 8
2 | 0 1 2 3 4 5 6 7
3 | 0 1 2 3 4 5 6
4 | 0 1 2 3 4 5
5 | 0 1 2 3 4
6 | 0 1 2 3
7 | 0 1 2
8 | 0 1
9 | 0
Multiplication:
* | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 0 0 0 0 0 0 0 0 0 0
1 | 0 1 2 3 4 5 6 7 8 9
2 | 0 2 4 6 8
3 | 0 3 6 9
4 | 0 4 8
5 | 0 5
6 | 0 6
7 | 0 7
8 | 0 8
9 | 0 9
Division:
/ | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 |
1 | 0 1 2 3 4 5 6 7 8 9
2 | 0 1 2 3 4
3 | 0 1 2 3
4 | 0 1 2
5 | 0 1
6 | 0 1
7 | 0 1
8 | 0 1
9 | 0 1
Exponentiation:
^ | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 1 1 1 1 1 1 1 1 1
1 | 0 1 2 3 4 5 6 7 8 9
2 | 0 1 4 9
3 | 0 1 8
4 | 0 1
5 | 0 1
6 | 0 1
7 | 0 1
8 | 0 1
9 | 0 1
Modulo:
% | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 |
1 | 0 0 0 0 0 0 0 0 0 0
2 | 0 1 0 1 0 1 0 1 0 1
3 | 0 1 2 0 1 2 0 1 2 0
4 | 0 1 2 3 0 1 2 3 0 1
5 | 0 1 2 3 4 0 1 2 3 4
6 | 0 1 2 3 4 5 0 1 2 3
7 | 0 1 2 3 4 5 6 0 1 2
8 | 0 1 2 3 4 5 6 7 0 1
9 | 0 1 2 3 4 5 6 7 8 0
Règles du défi:
- Les nouvelles lignes et les espaces de fin sont facultatifs
- Les lignes horizontales et verticales dans les cas de test sont facultatives. Je les ai seulement ajoutés pour une meilleure lisibilité. †
- Les espaces entre chaque résultat ne sont PAS facultatifs.
- Le symbole de l'arithmétique peut être différent, tant qu'il est clair de savoir lequel il s'agit. C'est-à-dire
×
ou·
au lieu de*
pour la multiplication;÷
au lieu de/
pour la division; etc. †
Et tant qu'il s'agit d'un seul caractère, alors désolé Python**
. - Le format d'entrée est flexible. Vous pouvez choisir un index de 0-5 ou 1-6 pour les six tables correspondantes; vous pouvez saisir l'opérande-symbole; etc. (Contrairement à ce que vous affichez dans le résultat, vous êtes autorisé à saisir des chaînes complètes, ou
**
dans le cas de Python.)
Assurez-vous simplement d'indiquer le format d'entrée que vous utilisez dans votre réponse!
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés, des programmes complets. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- Veuillez également ajouter une explication si nécessaire.
† Exemple de sortie valide sans lignes horizontales et verticales, ÷
comme symbole, et utilisant à la y/x
place de x/y
:
÷ 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0
1 1
2 2 1
3 3 1
4 4 2 1
5 5 1
6 6 3 2 1
7 7 1
8 8 4 2 1
9 9 3 1
1
, d'autres0
, d'autres quelque chose d'autre0^0
ou divisent / mod 0, mais vous devrez contourner cela. Quant à votre deuxième question: Oui bien sûr, tant que les chiffres sont toujours dans les mêmes colonnes / lignes, vous pouvez utiliser autant d'espaces que vous le souhaitez.y-x
,y/x
,y^x
et auy%x
lieu dex-y
,x/y
,x^y
etx%y
? Hmm, je suppose que ça pourrait être bien. Je vais le modifier dans la réponse; tant que vous serez cohérent pour les six d'entre eux (donc pasy-x
etx/y
dans la même réponse).Réponses:
Japt , 45 octets
Collaboration avec @ETHproductions
Exécutez-le en ligne!
Prend l'entrée comme:
"+"
pour addition"-"
pour la soustraction"*"
pour la multiplication"/"
pour la division"p"
pour l'exponentiation"%"
pour moduloExplication (avec des raccourcis étendus):
la source
JavaScript (ES7), 128 octets
Le boîtier spécial
0^0
m'a coûté 8 octets.la source
^
), mais merci!Langage de script Operation Flashpoint ,
343333303301 octetsAppeler avec:
Non golfé:
Production:
opérateur +
opérateur -
opérateur *
opérateur /
opérateur ^
opérateur%
la source
Python 2 ,
240231226224203202200197 octetsEssayez-le en ligne!
Prend l'entrée comme "+", "-", "*", "/", "^" ou "%".
Modifications
-9-16 avec grâce à @FelipeNardiBatista pour quelques grands conseilsJusqu'à 221 avec plus d'aide de @FelipeNardiBatista, puis jusqu'à 203 en perdant
and E(c)==int(E(c))
. Si nous vérifions siE(c)
estrange(10)
dedans, ce sera toujours un entier s'il est là. Pas besoin de vérifier les doublons.Cela doit descendre en dessous de 200 sans passer à Python 3 et déclarer
P=print
. Des idées? Je suis toujours content d'apprendre.Oui! Je savais que cela pouvait être fait. 197. Il est temps de se coucher maintenant. J'ai passé assez de temps sur celui-ci. Merci pour le défi intéressant @KevinCruijssen.
la source
('**',i)[i<'^']
et(i<'^'or x>0 or b>0)
enregistre 4 octetsa=i=input()
avecfor z in R:a+=' '+`z`
pour quelques octets supplémentaires sauvegardés vsa=i+' 0 1 2 3 4 5 6 7 8 9'
1.
vs1.0
etE(c)in R
vs-1<E(c)<10
pour 2 octetsx+b>0
vsx>0 or b>0
et"b%s(x*1.)"%('**',i)[i<'^']
vs"b"+('**',i)[i<'^']+"(x*1.)"
(
,)
dans votre jointure pour 223 octetsMathematica, 150 octets
Définit une fonction unaire
±
prenant un des caractères+-*/^%
comme entréei
(donc par exemple±"^"
) et renvoyant unGrid
objet qui ressemble exactement à la dernière sortie de l'OP.<|Thread[Characters@"+-*/^%"->{Plus,#-#2&,1##&,#/#2&,Power,Mod}]|>
associe, à chaque caractère d'entrée possible, la fonction binaire correspondante (listable) (où#-#2&,1##&,#/#2&
sont les versions golfées deSubtract,Times,Divide
);<|...|>[i][r,#]
calcule donc l'opération binaire avec tous les premiers arguments possibles et#
comme deuxième argument.If[0<=#<=9,#]/._@__->""&
convertit chaque résultat en unNull
ou""
si ce n'est pas un résultat à un chiffre (/._@__->""
est nécessaire car certains résultats comme1/0
ne peuvent pas être traités par les inégalités0<=#<=9
). Enfin, nous ajoutons les différents en-têtes et pieds de page et affichons la réponse.la source
0^0
. " Mathematica ne sort rien par défaut pour ce cas de bord?0^0
àIndeterminate
, ce qui nous donne un résultat mal évalué non évalué àIf[0<=Indeterminate<=9, Indeterminate]
mi- parcours ; mais/._@__->""
est une règle qui prend toute fonction non évaluée et ses arguments et la transforme en une chaîne invisible.#^0=1
et0^#
= 0` se produisent pour0^0
. Bon jusqu'à maintenant et pratique pour ce défi. :) Btw, votre lien ne semble pas fonctionner. Je reçois une erreur indiquant que je n'ai pas la permission d'y accéder.±"^"
.Python 3,
343335363362 octetsLa partie la plus triste à ce sujet est qu'une réponse Java me bat ... Je jouerai plus au golf le matin.
ReplIT
-8 octets en passant à la compréhension de liste plutôt qu'à une double boucle
+28 octets pour éviter le cas de bord
0 ^ 0
. -.--1 octet en passant
==0
à<1
grâce à @StewieGriffinla source
0-9
. Btw, umm .. J'ai remarqué une erreur dans votre Repl. Il émet actuellement**
au lieu de^
pour l'exponentiation. (En outre, vous êtes autorisé à entrer**
, mais pas à le sortir dans le tableau de résultats. Actuellement, vous l'avez dans l'autre sens.)Java 7,
312305 octetsN'utilise pas de lignes horizontales / verticales et les caractères sont tels qu'affichés dans les exemples de défi (
+-*/^%
).Utilise un indice de
0-5
pour les six opérandes mathématiques en entrée.-7 octets grâce à @Frozn .
Explication:
Code de test:
Essayez-le ici.
la source
b
tant quedouble
top
et vous en débarrasserr
en attribuant la valeur du ternaire chaîné àb
.Haskell,
230199182 +534746 + 1 octet de séparateur =284247232229 octetsLa fonction est
(zipWith y[(+),(-),(*),(!),(?),(&)]"+-*/^%"!!)
, qui à elle seule occupe 53 octets, où 0 est l'addition, 1 est la soustraction, 2 est la multiplication, 3 est la division, 4 est l'exponentiation et 5 est le modulo.Essayez-le en ligne!
Explication
À venir plus tard (peut-être). . . . Pour l'instant quelques petites friandises:? est l'opérateur d'exponentiation,! est l'opérateur de division et & est l'opérateur de mod.
EDIT: Une partie de la masse pourrait être due au fait que la plupart (?) Des autres réponses utilisent eval, que Haskell n'a pas sans une longue importation.
EDIT2: Merci Ørjan Johansen pour -31 octets (Wow!) Sur le code et -6 octets sur la fonction! A également changé certains des 11 en 10 à des fins de cohérence. Essayez la version mise à jour en ligne!
EDIT3: Même personne, dix-sept octets de plus! Essayez la version mise à jour et mise à jour en ligne!
la source
!
Tests plus courts :e<-a`div`b,e*b==a=e
ou(e,0)<-a`divMod`b=e
.(zipWith(#)"+-*/^%"[(+),(-),(*),(!),(?),(&)]!!)
last$f k:[' '|k<0||k>9]
. Enfin (peut-être),[0..9]
c'est juste assez long pour qu'il soit payant de le définir comme nom lorsque vous l'utilisez deux fois.k<-[o x y]
est plus court que alet
.Python 2 , 197 octets
Essayez-le en ligne!
Entrée: Python 2
'+'
Une addition'-'
Sbtraction'*'
Multiplication'/'
Division'**'
Exponentiation'%'
ModuloPython 3 , 200 octets
Essayez-le en ligne!
Entrée: Python 3
+
Une addition-
Sbtraction*
Multiplication//
Division**
Exponentiation%
ModuloExplication
le stockage
range(10)
dans une variabler
, nous pouvons obtenir la première ligne de sortie du formaten mappant chaque entier dans
r
une chaîne et en joignant la liste des chaînes['0','1','2','3','4','5','6','7','8','9']
avec un espaces
avec l'p
opérateurAvec cela, pour chaque
i
dansr
(plage), pour chaquej
évaluationi
etj
avec votre opérateurici, une exception peut être levée si elle n'est pas gérée - division ou module par 0. Pour gérer ce cas (
i and(j%i==0 and'/'==p or'%'==p)
) et le format de sortie décrit dans l'énoncé du problème (le résultat de chaque évaluation ne doit pas être un nombre négatif ni un nombre supérieur à 10 -eval("j"+p+"i")in r
),Impression de la table arithmétique!
Codage heureux!
la source
APL (Dyalog) ,
6876 octetsRequiert
⎕IO←0
ce qui est par défaut sur de nombreux systèmes. Demande une entrée et attend un seul caractère représentant l'opérande.Essayez-le en ligne!
Une grande partie du code est de contourner les résultats d'APL pour
÷0
et0*0
et de contrebalancer le fait que le modulo (|
) d' APL a ses arguments inversés par rapport à la plupart des autres langues. N'aurait été que 41 octets autrement:Essayez-le en ligne!
la source
R ,
194177 octets-17 octets passant à la sortie de la matrice de manipulation
Essayez-le en ligne!
Le passage à cette approche présente certains inconvénients, à savoir qu'elle ne peut pas être optimisée en utilisant
pryr
et est un peu maladroit pour configurer la matrice d'origine, mais il peut être reproduit parfaitement avec quelques espaces de fin sur la première ligne.Je dois encore utiliser l'
substr
astuce à cause de l'%%
opérateur mod. Continuera à couper cela quand j'aurai une chance, il me semble toujours très maladroit de traiter les cas spéciaux.la source
PHP, 191 octets
**
au lieu de^
comme entrée+ - / % * **
Version en ligne des deux versions
PHP, 245 octets sans eval
contribution
+ - / % * ^
utiliser
bcpowmod($c,1,$r)
au lieu debcmod($c,$r)
parce que j'ai besoin d'un troisième paramètre dans l'entrée de division.$c**1%$r==$c%$r
BC Math Functions
la source
05AB1E ,
5655 octetsSorties sans lignes et avec inversé
x
ety
. Entrée / sortie utilisent+
,-
,*
,/
,m
,%
.Essayez-le en ligne ou vérifiez toutes les tables .
21 octets sont utilisés pour les cas de bord fixe
/0
,%0
et0^0
qui conduisent à0
,0
et1
respectivement en 05AB1E .. Ici , sans que la partie ( 34 octets ):Essayez-le en ligne ou essayez toutes les tables .
Explication:
la source