Vous avez une case avec un seul chiffre dans chaque coin:
1|2
---
3|4
Si nous concaténons les chiffres le long des lignes de gauche à droite, nous obtenons 12 et 34. Si nous concaténons les chiffres le long des colonnes de haut en bas, nous obtenons 13 et 24. Si nous additionnons tous ces nombres, nous obtenons 12 + 34 + 13 + 24 = 83.
Défi
Écrivez un programme pour imprimer toutes ces cases où la somme calculée comme ci-dessus est égale à 100.
En supposant que chaque coin contient un numéro à un chiffre compris entre 1 et 9, il existe 9 combinaisons: 1157, 1247, 1337, 1427, 1517, 2138, 2228, 2318 et 3119. (Notez qu'il y a 25 combinaisons si nous incluons 0, mais nous ne sommes pas pour ce défi.)
Notez que l'exemple 1234 ne fonctionne pas car 12 + 34 + 13 + 24 n'est pas égal à 100.
Contribution
Aucun
Production
Boîtes de réponse au format suivant:
A|B
---
C|D
La sortie doit être imprimée sur STDOUT ou l'alternative la plus proche.
Règles
- AB + CD + AC + BD = 100
- Chaque coin contiendra uniquement les entiers positifs 1-9.
- 0 est exclu.
- Les numéros peuvent être utilisés plusieurs fois.
- Vous devez dessiner les cases, comme ci-dessus. (
A|B\n---\nC|D\n
) - Vous devez générer toutes les réponses valides.
- Une nouvelle ligne de fin supplémentaire est très bien.
- code-golf , donc le code le plus court en octets gagne.
- Les échappatoires standard et les conditions générales s'appliquent.
Ceci est ma première soumission, veuillez donc me faire savoir si j'ai besoin de clarifier quoi que ce soit.
Réponses:
Pyth,
423834 octetsLa nouvelle ligne de fin dans le code est importante. La principale raison pour laquelle je suis compétitif est parce que j'utilise le produit scalaire vectoriel
[1, 1, 5, 7]
et[20, 11, 11, 2]
et le comparer à 100.la source
"|"
->\|
,\n
-> (saut de ligne littéral) et vous n'avez pas besoin du devis final.Rubis, 71
Comme le codage en dur n'est pas interdit (et en tout cas il est difficile de tracer une ligne), voici une réponse codée en dur partielle.
Explication
La formule d'une solution est la suivante:
Par des arguments arithmétiques modulaires, nous voyons que A et D doivent différer d'une quantité constante, telle que
(A*20+D*2)%11
constante. En fait D = A + 6. Lai
boucle parcourt les trois valeurs possibles de A.La valeur de B peut être comprise entre 1
7-i*2
et le total de B et C doit être14-A-D
. Nous obtenons ainsi les expressions suivantes, qui sont imprimées. Ruby permet des sauts de ligne littéraux dans les chaînes incluses dans''
la source
Java,
202200198Essayer pour la première fois: D
EDIT: enregistré 2 octets avec un calcul légèrement plus petit trouvé dans un autre commentaire.
la source
Lot - 187 octets
Force brute.
Sans golf, c'est un peu moins dégoûtant:
la source
CJam, 40 octets
L'approche pour trouver les combinaisons est différente de celle de @ Optimizer, mais le code pour les imprimer est identique.
Essayez-le en ligne dans l' interpréteur CJam .
Comment ça fonctionne
la source
Haskell,
107131 octetsLa deuxième version de mon premier programme Haskell!
Cette fois avec affichage selon les exigences, sans vergogne
voléadapté de nimi's (eh bien j'ai fait des recherches mais il semble qu'il n'y ait pas de moyens efficaces d'afficher les caractères dans Haskell pour que putStr $ unlines soit difficile à éviter).Et ... à part la factorisation de la formule à la fin, c'est toujours lisible =)
la source
Haskell,
125121 octetsUsage:
>>
in"abcd">>[[1..9]]
fait une liste avec 4 (longueur du 1er paramètre) copies du deuxième élément, ie[[1..9],[1..9],[1..9],[1..9]]
.mapM id
fait une liste de toutes les combinaisons de ceux - ci, soit[0,0,0,0]
à[9,9,9,9]
. Gardez ceux qui résument100
et construisez une chaîne avec la boîte de celui-ci. Imprimez toutes les cases.Merci @Mauris pour 1 octet et en me faisant revoir mon post pour en trouver 3 de plus.
la source
mapM id
enregistre un octet contresequence
.Python 2,
145129 OctetsJe suis en train de jouer avec quelques méthodes de calcul différentes qui devraient être plus courtes que ce qui est décrit, mais je publierai ce que j'ai maintenant.
la source
CJam,
4342 octetsExplication à suivre .. d'ici aujourd'hui EOD
Essayez-le en ligne ici
la source
Python 3, 159
Rapide et sale.
la source
R, 165 octets
Cela aurait été beaucoup plus court si j'avais choisi de coder en dur la sortie d'une manière ou d'une autre. Comme quelques autres solutions, cela profite de l'identité 20 x 1 + 11 ( x 2 + x 3 ) + 2 x 4 = 100.
Non golfé + explication:
Vous vous demandez peut-être pourquoi la dernière déclaration est une affectation. Il s'avère que la
cat
fonction, qui concatène et imprime, renvoie une valeur deNULL
. Lorsque vous appelez àcat
partir d'une fonction commeapply
, la sortie sera suivie deNULL
, ce qui n'est pas souhaitable. Il y a deux façons de contourner cela: l'affecter à une variable ou l'envelopperinvisible
. Ici, j'ai opté pour le premier car il est nettement plus court.Vous pouvez l' essayer en ligne .
la source
Java, 450
Ma première tentative (non golfée) ressemblait à ceci:
la source
20*a + 11*(b + c) + 2*d == 100
.PowerShell, 98
formule adaptée de steveverrill
la source