Si vous vous souvenez de vos années de scolarité, vous vous souvenez peut-être avoir appris les tables de vérité . Ils semblaient ennuyeux, mais ils sont à la base de la logique et (certains diront) de l'informatique ...
Problème
Votre mission, si vous choisissez de l'accepter, est d'écrire un programme, une fonction ou un widget de code qui peut produire une entrée de table de vérité.
Contribution
L'entrée sera une chaîne (comme la structure de données) contenant l'instruction logique dans laquelle faire la table de vérité. Par exemple:
p ∧ q
Cela signifie p and q
(conjonction logique) et produira:
p q p ∧ q
T T T
T F F
F T F
F F F
Remarquez l'espacement: l'élément de la colonne est au centre de l'en-tête
Personnages
Score via des caractères, pas des octets Les caractères de comparaison logique sont spéciaux et ne sont pas toujours à quoi ils ressemblent. Utilisez ces caractères:
Conjonction logique (AND): ∧
U + 2227
Disjonction logique (OR): ∨
U + 2228
Négation logique (NON) ~
ou ¬
U + 7e et U + ac respectivement
Bonus
Tous ces bonus sont facultatifs, mais vous feront perdre des points à votre score. Choisissez-en.
Négation logique
La négation logique est un opérateur unaire dans les tables de vérité. C'est l'équivalent de !
dans la plupart des langages basés sur C. Cela fait false
=> true
et vice versa. Il est noté avec un ¬
ou ~
(vous devez prendre en charge les deux). Soutenir cela réduira 10% de votre score. Vous devez cependant ajouter une colonne supplémentaire pour afficher ses résultats: Par exemple:
~p ∧ q
affichera:
p ~p q ~p ∧ q
T F T F
T F F F
F T T T
F T F F
Jolie impression
La notation de table normale est ennuyeuse. Faisons-le joli! Le joli format d'impression est le suivant pour p ∧ q
est le suivant:
+---+---+-------+
| p | q | p ∧ q |
+---+---+-------+
| T | T | T |
+---+---+-------+
| T | F | F |
+---+---+-------+
| F | T | F |
+---+---+-------+
| F | F | F |
+---+---+-------+
Détails spéciaux pour une jolie impression:
- Il y a 1 espace de remplissage dans chaque cellule
- Les valeurs des cellules sont toujours centrées
Si vous imprimez assez vos tableaux, à partir de votre code, puis multipliez par 0,6. Utilisez cette fonction pour ce bonus:
score = 0.6 * code
Exemples
p ∧ q
:
p q p ∧ q
T T T
T F F
F T F
F F F
p ∨ q
:
p q p ∨ q
T T T
T F T
F T T
F F F
~p ∧ q
:
p ~p q ~p ∧ q
T F T F
T F F F
F T T T
F T F F
~p ∨ q
:
p ~p q ~p ∧ q
T F T T
T F F F
F T T T
F T F T
Règles
- Des échappatoires standard s'appliquent
- Pas de ressources externes
- Si vous allez enfreindre les règles, soyez intelligent;)
Le code le plus court (en caractères) gagne. Bonne chance!
la source
p
etq
. À moins qu'ils aient toujours ces noms, vous souhaiterez peut-être afficher quelques options différentes dans les exemples de test. S'agit-il toujours d'une seule lettre?score = 0.6 * (code - 15)
=.6 * code - 9
p
q
etr
dans une table de vérité;)Réponses:
JavaScript (ES6), 141
Fonction simple, pas de bonus, 141 caractères. (140 uft8, 1 unicode de large)
Gestion des fonctions complexes ~ ou ¬, 254 caractères (253 utf, 1 unicode large), score 229
Pourrait économiser 6 octets en utilisant
alert
au lieu deconsole.log
, maisalert
est particulièrement impropre à afficher des tableaux.Testez l'exécution de l'extrait ci-dessous dans un navigateur compatible EcmaScript 6 (testé avec Firefox. Ne fonctionnera pas dans Chrome car Chrome ne le prend pas en charge
...
. De plus, la version bonus utilise une extensionsplit
qui est spécifique à Firefox).la source
Modèle MediaWiki - 2347 caractères
MediaWiki a une fonction de modèle intégrée appelée
{{#expr}}
qui peut gérer les expressions logiques. Ce doit être le défi parfait pour les modèles MediaWiki! Des fonctionnalités telles que des variables, des boucles et une syntaxe lisible auraient cependant aidé un peu. De plus, le fait qu'il n'y ait pas d'opérateur NOT pour la fonction expr la rendait un peu plus complexe.Tester:
Résultat:
Je suppose que MediaWiki> = 1.18, où les extensions ParserFunctions sont livrées avec le logiciel.
la source
¬
/~
est manquant; si vous l'ajoutez, vous aurez droit à un10%
bonus.Python - 288 caractères (pénalité de +10 car je n'ai pas pu faire fonctionner l'unicode: c)
Pas de bonus. Ceci est ma toute première réponse codegolf.
i
est l'entrée.EDIT: Suppression de quelques espaces et il utilise maintenant la fonction args comme entrée.
la source
Dyalog APL ,
5848 caractèresRequiert
⎕IO←0
, qui est par défaut sur de nombreux systèmes. Prend la chaîne comme argument.Aucun bonus, mais du côté positif, tout opérateur fonctionne.
⍳4
quatre premiers indices (0 1 2 3)⌽
marche arrière (3 2 1 0)2 2⊤
table booléenne deux bits↓
divisé en une liste de listes à deux éléments (bits hauts, bits bas)p q←
stocker sous p et q≢
les compter (2) *9⍴
remodeler cycliquement à la longueur 9 (2 2 2 2 2 2 2 2 2)324⊤⍨
coder ainsi 324, c'est-à-dire en binaire 12 bits (1 0 1 0 0 0 1 0 0)\⍨
utiliser cela pour développer (insérer un espace pour chaque 0) ...'FT '[
...]
la chaîne "FT", indexée par⍎⍵
l'argument exécuté (valide puisque p et q ont maintenant des valeurs)⍪
en faire une matrice de colonnesq,
ajouter une colonne composée de q (1 1 0 0)q,
ajouter une colonne composée de p (1 0 1 0)(
...)⍪
insérer une ligne au-dessus, composée de⍵
l'argument'p q ',
ajouté avec la chaîne "p q"* Veuillez lire ce problème si vous voyez
≢
comme≢
et non comme̸≡
.la source
Julia, 161 octets
Pas de bonus.
Non golfé:
la source
Mathematica, 129 octets
Golfé:
Non golfé:
Pas un expert de Mathematica, mais j'ai trouvé cela plutôt élégant par rapport à la comparaison directe des caractères.
J'avais une solution qui fonctionnait pour la négation, mais elle était plus longue que la réduction du score ne décollerait.
Selon ce qui se qualifie pour une jolie impression, je pourrais essayer ce bonus. J'ai l'impression que la sortie en ASCII dans Mathematica serait beaucoup trop coûteuse pour que la réduction du score compense, mais si les deux fonctionnalités principales sont une bordure en pointillés et un remplissage spécifié à l'intérieur des cellules, ce ne sont que quelques options dans Grid.
Avec une jolie impression, 171 * 0,6 = 102,6 octets
la source
Python3,
145139120119 OctetsPas de bonus (avec bonus à la fin)
Besoin de Python3 pour le support Unicode prêt à l'emploi.
Basé sur le code Python de DJgamer98, comprendre sa table n'est pas correct.
Edit1: division en variables distinctes et omission de la variable de chaîne d'opérateur
Edit2: (ab) utilisant F et T comme variables et caractères de chaîne
Edit3: économiser un espace grâce à NoOneIsHere
Avec Bonus, 215 * 0,6 = 129
la source
q in c:
.C / C ++ 302 octets
335 caractères moins 10% pour la gestion de la négation. Formatage incomplet mais soumission avant de voir quel est l'impact de l'achèvement.
Marqué comme C / C ++ parce que mes gcc et g ++ l'acceptent avec -fpermissive et il me semble beaucoup plus C que C ++.
Je suis sûr qu'il y a probablement quelques ajustements qui pourraient être appliqués. En fait, la gestion des nots ajoute plus que le bonus de 10% ne supprime.
Cela suppose que le format d'entrée est comme indiqué, c'est-à-dire 2 valeurs d'entrée (p et q), avec ou sans le préfixe not et rien d'autre, et tous les jetons délimités par un seul espace.
Non golfé:
et les tests:
la source
Mathematica, 128 caractères
est le caractère à usage privéU+F3C7
représentant\[Transpose]
.Heureusement pour nous les golfeurs de Mathematica,
∧
et représentons∨
déjàAnd
etOr
, donc nous devons faire tout est convertir la chaîne d'entrée en une expression Mathematica et nous pouvons faire des opérations logiques symboliques sur elle.Notez que cette solution gérera également
Not
(¬
),Implies
(
),Equivalent
(⧦
),Xor
(⊻
),Nand
(⊼
),Xor
(⊻
) etNor
(⊽
), mais elle n'obtient pas le bonus car il~p
s'agit d'une erreur de syntaxe dans Mathematica. Meh.Explication
Convertit la chaîne d'entrée en une expression Mathematica et la stocke dans
b
.Il s'agit d'une liste de toutes les sous-expressions possibles de l'entrée. Chacun recevra sa propre colonne.
Il s'agit d'une liste de toutes les variables qui apparaissent dans l'entrée.
Fonction pure qui prend une expression d'entrée
#
et renvoie une liste de valeurs de vérité pour toutes les combinaisons possibles de valeurs de vérité pour les variables.Ajoute l'expression elle-même à cette liste.
Applique cette fonction à chaque sous-expression de l'entrée.
Remplacez ensuite true (
0<1
) par "T" et false (0>1
) par "F".Échangez des lignes et des colonnes.
Affichez le résultat sous forme de
Grid
.Convertissez le
Grid
en forme traditionnelle afin qu'il utilise les symboles fantaisie.la source