Écrivez le code le plus court pour imprimer la table de multiplication suivante:
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
1×4=4 2×4=8 3×4=12 4×4=16
1×5=5 2×5=10 3×5=15 4×5=20 5×5=25
1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36
1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49
1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64
1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81
code-golf
kolmogorov-complexity
matrix89
la source
la source
for
boucles? Où est la partie difficile (intéressante)?for
. Ok, j'utilisewhile
.Réponses:
Excel,
9291 octetsDans la fenêtre immédiate de l'éditeur VBA, exécutez la commande suivante:
Range("A1:I9").Formula="=IF(ROW()<COLUMN(),"""",COLUMN()&""×""&ROW()&""=""&COLUMN()*ROW())"
La sortie est directement sur la feuille de calcul active.Je un octet supplémentaire joué au golf en échangeant l'ordre d'un
if
à changer>=
pour<
. Je n'ai pas mis à jour la capture d'écran, mais cela n'affecte que la formule en haut, pas la sortie.la source
FOR
boucle imbriquée habituelle .Python (75)
un peu mieux joué que les deux autres versions de Python.
la source
C ++,
10698 octetsJ'ai utilisé deux boucles et quelques astuces.
la source
#import <stdio.h> main(){for(int i=0,j;i++-9;j=0)while(j++-i)printf("%dx%d=%d%s",j,i,i*j,j<i?"\n":" ";}
est de 3 octets plus court.#import
et<cstdio>
?J:
5751 caractèresPas de boucles.
la source
([:;"2*\#"2(":@],'x',":@[,'=',":@*,' '"_)"0/~)>:i.9
APL (37)
Et ce n'est même pas seulement deux boucles pour. Dans APL, la construction suivante:
où
x
ety
sont des listes, etF
est une fonction, s'appliqueF
à chaque paire d'éléments dansx
ety
et vous donne une matrice.Donc:
∆∘.×∆←⍳9
vous obtient une table de multiplication de 1 à 9. La fonction ci-dessus génère la chaîne requise pour chaque paire, c'est-à-dire(⍕⍺)
la représentation sous forme de chaîne du premier nombre, suivie par×
, suivie par(⍕⍵)
, la représentation sous forme de chaîne du deuxième nombre, suivie par=
, suivie par⍕⍺×⍵
, tant que⍺≥⍵
.la source
Ruby:
6059 caractèresExemple d'exécution:
la source
(1..9).map{
en1.upto(9){
!Perl, 54 caractères
la source
APL (Dyalog), 28
Analogue à une double boucle dans d'autres langues
{⍵{...}¨⍳⍵}¨⍳9
configure la double boucle⍕⍵,'×',⍺,'=',⍺×⍵
crée la chaîne pour chaque paire↑
Convertir un tableau de tableau de chaînes en une matrice de piqûresProduction
la source
↑{⍵{⍕⍵'×'⍺'=',⍺×⍵}¨⍳⍵}¨⍳9
ou même utiliser le nouvel "opérateur clé":{⍕⍵'×'⍺'=',⍺×⍵}¨∘⍳⌸⍳9
Mathematica , 45
Assez ennuyeux, mais je suppose que cela sert de comparaison de syntaxe:
la source
D, 75 caractères
vous venez de dire que le code ne fonctionne pas ou le programme complet
la source
foreach(i,1..10){foreach(j,1..i+1)writef("%dx%d=%d ",i,j,i*j);writeln;}
VBScript (133); sans boucles.
A la demande du challenger: pas de boucles. Ce code utilise des appels de sous-programme récursifs.
la source
Érable, 64
la source
code machine x86_64 (linux),
1759976 octetsIl s'agit d'un vidage du fichier binaire, et tout cela fait 175 octets. Il fait essentiellement les deux mêmes boucles que toutes les réponses, mais l'impression sur la console est un peu plus difficile et nécessite essentiellement de pousser les caractères pour imprimer sur la pile à l'envers, puis de faire un appel système (spécifique à Linux) pour réellement mettre ces caractères en stdout.J'ai maintenant optimisé cela afin qu'une seule opération d'écriture soit effectuée (plus vite!) Et ait des nombres magiques (wow!) Et en poussant le résultat entier sur la pile en arrière avant de faire l'appel système. J'ai également supprimé la routine de sortie, car qui a besoin d'un code de sortie approprié?
Voici un lien vers mes première et deuxième tentatives, dans leur syntaxe nasm d'origine.
Je souhaite la bienvenue à tous ceux qui ont d'autres suggestions sur la façon de l'améliorer. Je peux également expliquer la logique plus en détail si quelqu'un est curieux.
(En outre, il n'imprime pas les espaces supplémentaires pour aligner toutes les colonnes, mais si cela est nécessaire, je peux mettre la logique au prix de quelques octets supplémentaires).EDIT: Imprime maintenant des espaces supplémentaires et est encore plus golfé! Il fait des trucs assez fous avec les registres, et est probablement instable si ce programme devait être étendu.
la source
Javascript, 190 octets
Tard dans la soirée, mais j'ai été piqué par le commentaire de @jdstankosky et j'ai décidé d'adopter une approche différente. Voici une entrée Javascript qui mutile un modèle et évolue en cours de route.
Version non-golfée (version légèrement plus ancienne dans laquelle une fonction renvoie la table au lieu d'un script l'alerte, mais les mêmes principes s'appliquent):
la source
Pascal, 128 octets
Une procédure récursive s'occupe de tout. Appelez avec
m(9,9)
.Non golfé:
la source
Fourier,
756632 octetsMerci @BetaDecay pour 124 octets!
la source
vba 55
(fenêtre immédiate)
note - GWBasic n'a besoin que de 2 caractères supplémentaires:
la source
Javascript, 75
Je me demande si quelque chose de mieux que deux (combinés?) Pour les boucles est possible ...
la source
Coreutils / bash:
147136135Golfé, en utilisant une nouvelle ligne explicite et, en utilisant l'option de tête obsolète (merci manatwork):
Production:
la source
$(( ))
les évaluations arithmétiques par$[ ]
; partager 2 caractères en remplaçant le$'\n'
caractère de nouvelle ligne échappé par un caractère littéral (je veux dire,yes '
sur une ligne, puis'
sur la suivante); épargnez 2 caractères en n'utilisant pashead
l'-n
option de explicitement, juste-
et le nombre.$[ ]
notation, bon à savoir. Remplacer-n
par-
n'est qu'un caractère de moins, donc c'est 11 au total, merci beaucoup :).LOLCODE, 202 octets
Non golfé:
Pythoné pour les non-locuteurs:
la source
c #, 142 octets
Et pas un pour en vue ...
la source
ForEach
"pas un pour en vue" bien ... xD> <> , 50 octets
Vous pouvez l'essayer sur l' interpréteur en ligne .
Notez qu'il y a des espaces de fin sur chaque ligne, ce qui pourrait la rendre incorrecte (OP n'a pas indiqué sur ce point à partir de cette réponse).
la source
/// , 268 octets
la source
JAVA,
103 94 9290 octetsL'utilisation de JShell à partir du SDK Java 9 me permet d'économiser une grande quantité d'espace
Suite à la suggestion de Kevin, j'ai réduit la solution de 2 octets.
Grâce à cliffroot, j'ai pu le réduire d'un autre 1 octet
la source
int
de la seconde boucle for et en ajoutant,j
au premier. Alors comme ça:for(int i=0,j;++i<=9;)for(j=1;j<=i;)System.out.print(i+"*"+j+"="+i*j+"\t"+(j++<i?"":"\n"));
++i<=9
pari++<9
C 79 octets
le principal
la table
la source
Tcl 98 caractères
la source
Javascript: 82 caractères
la source
for(i=0,s="";9>i++;){for(j=0;j++<i;)s+=j+"x"+i+"="+j*i+" ";s+="\n"}alert(s)
, cependant la chose des espaces doubles sur 2 chiffres n'est pas respectée, j'étais sur le point de soumettre celui-là mais en utilisant+(9<i*j?" ":" ")
au lieu de simplement+" "
éditer: sur le ternaire les espaces doubles ont disparu, mais ils sont sur le second param4x4
n'est pas directement sous5x4
comme dans la tâche.Python: 87
J'observe les solutions que d'autres ont publiées et la plupart d'entre elles ne semblent pas obtenir l'espacement correct.
la source
Python (79)
ou ( 77 ) si j'utilise
range(10)
sauf que cela produit une ligne vide au débutla source
Perl:
65, 62 caractèresla source
printf
parenthèse de; 1 caractère libre en déplaçant l'affectation de $ i dans l'expression de gamme:map{map{printf"%dx%d=%2d ",$_,$i,$_*$i}1..($i=$_);print$/}1..9
.