Étant donné (par tout moyen) deux nombres naturels différents (de toute taille raisonnable), affichez (par tout moyen) le carré de leur somme comme dans les exemples ci-dessous:
Étant donné 4 et 3, sortie:
12 12 12 12 9 9 9
12 12 12 12 9 9 9
12 12 12 12 9 9 9
16 16 16 16 12 12 12
16 16 16 16 12 12 12
16 16 16 16 12 12 12
16 16 16 16 12 12 12
Étant donné 1 et 3, sortie:
3 9 9 9
3 9 9 9
3 9 9 9
1 3 3 3
Les espaces peuvent varier dans des limites raisonnables, mais les colonnes doivent être alignées à gauche, à droite ou (pseudo-) centrées.
Une nouvelle ligne de fin est très bien, mais les failles standard ne le sont pas.
Il s'agit de code-golf, donc incluez un en-tête comme # LanguageName, 123
dans votre réponse, où le nombre est des caractères (octets pour les langues qui ne sont pas basées sur du texte). Il est interdit de compresser du code dans de grands caractères Unicode.
Bonus: -3 si votre code ne produit qu'un seul carré lorsque l'un des nombres est 0; par exemple donné 0 et 3, sortie:
9 9 9
9 9 9
9 9 9
Réponses:
J, 9 octets - 3 = 6
Inspiré par la réponse APL de @ NBZ , joué par @randomra. Cela définit un verbe qui prend un tableau de nombres. Il est utilisé comme suit:
Je réclame également le bonus de 3 octets, car une entrée de 0 produit des sous-matrices de taille zéro:
Explication
J a un avantage certain dans ce défi. En plus de manger des problèmes de manipulation de tableaux pour le petit déjeuner, il imprime les matrices 2D au format correct par défaut.
la source
table flipper
émoticône ASCII (╯ ° □ °) ╯︵ ┻━┻Octave, 45 octets - 3 = 42
Explication
Cela construit deux vecteurs (supposons
m = 4
etn = 3
):ones(n, 1)
construit un tableau de ceux de taillen x 1
, donc en multipliant ceux parn
nous obtenons:Ensuite, les vecteurs sont multipliés de manière élémentaire, avec une expansion de diffusion automatique de sorte que les vecteurs à 7 éléments produisent une matrice à 7x7 éléments:
Par exemple, la multiplication de la première ligne de
a
parb
donne:Et de même pour les lignes restantes de
a
.Sortie:
Vous pouvez l'essayer ici sur ideone
la source
s=
. Nous avons la convention selon laquelle les fonctions / lambdas anonymes ne doivent pas être stockées dans une variable.Dyalog APL , 10-3 = 7
Inspiré * par cette réponse où les arguments sont répliqués puis utilisés dans une table de multiplication:
⎕
Emet une invite (⎕:
) et évalue toute expression entrée ensuite. (Pour des raisons de sécurité, cela ne fonctionne pas sur TryAPL mais cela fonctionne sur NGN / APL .)/⍨
Réplique son argument lui-même fois (/⍨4 3
⇔3 3 3 4 4 4 4
)∘.×⍨
Crée une table de multiplication.⊖
Se retourne à l'envers.Cela arrive à travailler sur n'importe quelle entrée de longueur (l'entrée est en retrait de 6 espaces, la sortie est à gauche):
* À l'origine, j'avais une solution différente à l'esprit: chaque rectangle est créé séparément en créant une table de multiplication pour chaque combinaison des deux arguments. Ensuite, les quatre carrés sont raccommodés verticalement et horizontalement. Cela ressemble à ceci:
⎕
Invite, comme ci-dessus.,⍴×<
Combinez (,
) les arguments et utilisez-les pour former (⍴
) un rectangle rempli de leur produit (×
).∘.(
…)⍨
Créez un tableau dans lequel chaque cellule correspond à ce qui est spécifié dans(
…)
⊖
Retourner verticalement.⍪⌿
Combinez les cellules verticalement.,/
Combinez les cellules horizontalement.la source
(|.*/])@#~
R, 31-3 = 28
Explication:
Cela fonctionne également pour plus de deux numéros. Par exemple, la sortie pour (5,3,2) ressemble à ceci:
la source
cat
ouwrite
pour que ce soit une réponse valide.Haskell,
153125octets - 3 = 122La moitié du code est pour le formatage de sortie. Cela fonctionne pour les grands nombres arbitraires. Exemple de sortie:
Parfois, il y a un espace supplémentaire entre les nombres, car je calcule l'espace nécessaire en fonction
x*x+y*y
demax (x*x) (y*y)
, par exempleMais c'est tout au plus un espace.
la source
Mathematica 56-3 = 53
Mise à jour : j'ai ajouté une deuxième méthode, exactement de la même taille de code, qui utilise une fonction nommée. Il utilise un
Array
plutôt qu'un,Table
mais suit la même logique. (Voir ci-dessous.)Méthode 1
Cela crée un tableau de produits, dont les facteurs dépendent des valeurs de ligne et de colonne. La paire de nombres est entrée sous la forme d'une liste d'entiers. Les fonctions anonymes telles que les suivantes sont plus utiles si elles ne sont utilisées qu'une seule fois dans un programme. Sinon, il est plus logique d'utiliser une fonction nommée.
Chaque facteur est une instruction If-then:
If[r>#2,#,#2]
signifie: "Si le numéro de ligne est supérieur à la deuxième entrée, utilisez la première entrée comme facteur, sinon utilisez la deuxième entrée.If[c>#,#2,#]
signifie: "Si le numéro de colonne est supérieur à la première entrée, utilisez la deuxième entrée comme facteur, sinon utilisez la première entrée.Exemple 1
Exemple 2
Méthode 2 (également 56-3 = 53)
Cela fonctionne de manière similaire à la méthode 1. Mais elle nécessite moins de code lorsqu'elle est appelée. Et les cellules sont adressables, contrairement aux cellules d'un tableau. Il est préférable d'utiliser cette méthode si la fonction sera utilisée plusieurs fois.
Les exemples ci-dessus sont produits par les éléments suivants:
Ex 1:
Ex 2:
la source
Octave, 34-3 = 31
Exemples:
la source
repelems
existence. Impressionnant!CJam, 27 octets - 3 = 24
Prend l'entrée comme un tableau de style CJam. Il utilise un peu plus d'espacement que nécessaire, mais je pense que c'est "dans des limites raisonnables", et il est toujours correctement aligné à droite.
Testez-le ici.
Explication
la source
Fonction C (en utilisant la glibc), 122 octets - 3 = 119
Implémentation généralement simple avec 2 boucles. Je pense qu'il y a des opportunités de golf que j'ai manquées ici:
Les entrées sont passées dans les deux premiers paramètres de la fonction, les deux autres sont des variables muettes. Les colonnes sont alignées à droite.
Remarque glibc
puts()
semble toujours renvoyer le nombre d'octets écrits, y compris la nouvelle ligne implicite de fin, ce dont nous avons besoin ici. Aucune garantie que cela fonctionnera avec toute autre libc.Dans un programme complet:
Compilez en tant que
gcc sqrbin.c -o sqrbin
(oumake sqrbin
). Les avertissements peuvent être ignorés en toute sécurité.Exemple de sortie:
la source
puts()
dépend de la machine. C'est 10 sur le mien par exemple. En outre, voici une astuce: vous pouvez généralement compresser deux boucles en une seule si vous incrémentez conditionnellement le compteur dans la boucle externe. Ma solution montre comment cela peut être fait.puts()
code retour n'est garanti que pour être positif . Cependant, mes tests avec la glibc semblent montrer que la valeur de retour est le nombre d'octets écrits. En ce qui concerne la consolidation de boucle - oui, je connais cette technique et je l'ai essayée ici, jusqu'à présent sans raccourcir dans ce cas.Ruby, (133-3) = 130 octets
pour 4,3
pour 1,3
pour 0,3
la source
1
et un grand nombre comme9999
. Celas
apparaîtra alors4
, vous remplissez donc à une largeur des+3 = 7
mais avez9999^2
besoin de 8 chiffres. Vous voudrez peut-être utiliser à la2*s
place.rjust
avant de faireljust
. Vous pouvez réduireprint
à$><<
(et de se débarrasser de l'espace après).ARGV
a un alias$*
. Vous pouvez peut-être éviter celaflatten
en créant votre tableau avec quelque chose comme ceci: codegolf.stackexchange.com/a/19493/8478 . De plus, les réponses uniquement fonctionnelles sont définitivement autorisées ici (même les fonctions sans nom), de sorte que cette fonction puisse prendre les entiers comme entrées, et vous n'auriez pas à en faire.to_i
.Python 2, 176 octets - 3 = 173
Cela utilise des fonctions de chaîne Python pour créer une grille de caractères, puis remplace les caractères par des nombres entiers et imprime la sortie formatée.
la source
Matlab, 58-3 = 55
Utilisation d'une fonction anonyme:
Exemple:
(Ancienne solution) 59-3 = 56
Utilisation d'une fonction anonyme:
la source
C, (125-3) octets
L'entrée est considérée comme deux entiers séparés par des espaces sur la même ligne. Chaque cellule est remplie d'espaces à deux fois la longueur de la chaîne d'entrée.
la source
Pyth, 39-3 = 36
Pyth n'a pas de formatage matriciel intégré, ce qui augmente considérablement la taille, car il faut remplir manuellement les numéros de sortie. Voici ce que j'ai trouvé.
Essayez-le en ligne.
la source
Blocs , 51 octets
52628287(non concurrents)Non golfé:
Essayez-le
la source