Cette question est inspirée de cette réponse . Par coïncidence, j'avais l'habitude d'utiliser la multiplication éthiopienne quand j'étais enfant, mais je n'avais jamais connu le nom de la méthode jusqu'à récemment.
La multiplication éthiopienne est une méthode de multiplication d'entiers utilisant uniquement l'addition, le doublement et la réduction de moitié.
Méthode:
- Prenez deux nombres à multiplier et notez-les en haut de deux colonnes.
- Dans la colonne de gauche, divisez par deux à plusieurs reprises le dernier nombre, en supprimant tout reste et écrivez le résultat sous le dernier dans la même colonne, jusqu'à ce que vous écriviez une valeur de 1.
- Dans la colonne de droite, doublez plusieurs fois le dernier chiffre et écrivez le résultat ci-dessous. arrêtez lorsque vous ajoutez un résultat dans la même ligne que là où la colonne de gauche indique 1.
- Examinez le tableau produit et supprimez toute ligne où la valeur dans la colonne de gauche est paire. Additionnez les valeurs de la colonne de droite qui restent pour produire le résultat de la multiplication des deux nombres d'origine.
Par exemple: 17 x 34
17 34
Réduire de moitié la première colonne:
17 34
8
4
2
1
Doubler la deuxième colonne:
17 34
8 68
4 136
2 272
1 544
Barrer les lignes dont la première cellule est paire, nous le ferons en mettant ces chiffres à droite entre crochets:
17 34
8 [68]
4 [136]
2 [272]
1 544
Additionnez les nombres restants dans la colonne de droite:
17 34
8 [68]
4 [136]
2 [272]
1 544
=====
578
Donc 17 multiplié par 34, par la méthode éthiopienne est 578.
La tâche:
Code de golf qui prend deux nombres entre 1 et 1000 et exécute la même disposition et le même algorithme, affichant le produit ci-dessous.
Méthode d'entrée: Cependant, vous choisissez ...
Exemple d'entrée:
19 427
Résultat résultant:
19 427
9 854
4 [1708]
2 [3416]
1 6832
======
8113
Veuillez noter l'alignement des chiffres. C'est le plus important dans la mise en page. Notez également que la double ligne tracée par des signes égaux doit être de deux caractères plus longue que la réponse globale et doit être justifiée au centre.
Essai
Comment allez-vous tester cela? En fournissant une exécution de votre programme en utilisant deux nombres. Ces numéros peuvent être extraits de votre numéro d'utilisateur (vous pouvez les obtenir en plaçant votre curseur sur votre avatar dans la fenêtre supérieure). Prenez votre numéro et prenez les trois derniers chiffres, ce sera le numéro B, prenez tout ce qui reste à l'avant, ce sera le numéro A. Ensuite, testez A fois B.
Exemple de test:
Mon numéro d'identification d'utilisateur est 8555, donc mes numéros sont 8 et 555. Donc, ma sortie devrait ressembler à ceci:
8 [555]
4 [1110]
2 [2220]
1 4440
======
4440
Restrictions:
Aucun opérateur de multiplication natif n'est autorisé sauf dans l'utilisation du "doublage", comme mentionné dans l'algorithme. En d'autres termes, si vous utilisez un opérateur comme *, il ne peut être utilisé que pour la multiplication par 2 uniquement.
Les inscriptions qui n'y adhèrent pas ne seront pas prises en compte et l'utilisateur sera escorté hors des lieux avec une boîte en carton pleine de ses effets personnels. Chaque entrée aura un code, plus le test basé sur votre numéro d'identification d'utilisateur.
C'est le golf de code. Le plus petit nombre d'octets recevra le prix, la gloire et l'admiration de leurs pairs ... (Et peut-être une Lamborghini ... j'ai dit "peut-être"!)
*
oux
), mais il est impossible de détecter si la multiplication est utilisée ou non. Hormis cette partie, le défi est intéressant.