Le puzzle à quatre fours est un puzzle mathématique récréatif populaire qui consiste à utiliser exactement quatre 4 (et aucun autre nombre) et un ensemble défini d'opérations pour atteindre chaque nombre de 0 à un maximum donné.
Dans cette version, les seuls opérateurs suivants sont autorisés:
- Tous les symboles de regroupement peuvent être utilisés
- Addition (
+
), Soustraction (-
), Multiplication (*
), Division (/
) - Factorielle (
!
), fonction Gamma (Γ
) - Exponentiation (
^
), Racine carrée (√
) - Concaténation (par exemple,
44
est deux4
s) - Point décimal (par exemple,
4.4
deux4
s), Overbar (par exemple.4~ = 4/9
)
L'ordre des opérations standard s'applique.
Votre programme devrait générer, pour une entrée comprise entre 0 et 100 inclus, une solution correcte pour cette entrée. Si le programme génère une solution non valide sur une entrée, ce programme n'est pas valide.
Par exemple, avec une entrée de 0
, votre programme pourrait générer 44-44
.
L'utilisation de modules externes n'est pas autorisée. Seul _.4~
est autorisé pour l'opérateur overbar - c'est-à-dire qu'un seul 4
peut être derrière le point décimal.
C'est le golf de code, donc la solution la plus courte l'emporte.
Edit : Pour être plus clair, le programme doit sortir un ensemble des opérations ci-dessus appliquées à exactement quatre 4
s - ni plus, ni moins. En outre, .4 = 4/10
est un terme valide et compte pour n'en utiliser qu'un 4
.
la source
!(4)
plutôt que(4)!
)?Réponses:
GolfScript (129 caractères *)
Le temps de course est de l'ordre de 4 minutes sur mon PC. Une accélération modérée peut être obtenue au prix de deux caractères en ajoutant une opération d'unicité
.&
immédiatement après le%+
.J'utilise des expressions pré-codées
1
,2
,4
,6
,24
,120
, et44
, et construire le reste en place de ceux qui utilisent seulement+
,*
et-
. De cette façon, je n'ai pas besoin de faire d'arithmétique non entière dans le programme lui-même. J'ai essayé d'obtenir des expressions plus simples en plaçant les valeurs précodées plus simples au début.Toutes ces valeurs sont requises † , et il est nécessaire de prendre en charge les deux directions de soustraction (
complex_expression - simple_expression
et vice versa). Il est également nécessaire d'inclure certaines opérations qui nécessitent des parenthèses (en particulier,a*(b-c)
), donc je place toutes les sous-expressions sans distinction.* Je compte les points de code Unicode en supposant que le programme est encodé en UTF-8, et je passe sous le tapis le fait qu'à moins que vous n'utilisiez une version récente de Ruby pour exécuter l'interpréteur, il le traite vraiment comme des caractères ASCII. Si vous êtes très inquiet à ce sujet, utilisez
G
Gamma etv
sqrt.† Eh bien, strictement je pourrais retirer
44
en échange au11
fur44/4
et à71
mesure√(Γ√4+(ΓΓ4+Γ√4)!)
, mais ce n'est pas un bon compromis.la source
Python 155 octets
Les trois premiers octets (
\xEF\xBB\xBF
) sont la marque d'ordre des octets UTF-8, bien que le fichier doive être enregistré au format ANSI. Leû
etâ
sera interprété comme√
etΓ
respectivement dans cp437 et cp850 , qui devraient fonctionner sur à peu près n'importe quelle boîte Windows.Le temps d'exécution est d'environ 0,4 s sur mon ordinateur.
Exemple d'utilisation (nommez le fichier
four_fours.py
):Résultats pour 0..100 . En raison de la façon dont le hachage est itéré, il préfère l'utiliser
4!
aussi souvent que possible.Modifier: a enregistré un certain nombre d'octets en ajoutant
Γ√4 = 1
, ce qui élimine le besoin de regroupements, et en supprimant√4 = 2
, ce qui n'était plus nécessaire.la source
J,
175161 caractèresLe format vérifié est
(v op v) op (v op v)
oùv={0.4 4/9 1 2 4 6 24}
etop={+ - * /}
plein 0..100 résultats
la source
.4
soit un nombre valide pour ce jeu.