Imaginez une grille rectangulaire de |caractères représentant les chaînes tendues d'un métier à tisser ( la chaîne ) sur lesquelles d'autres fils ( la trame ), que nous représenterons -, peuvent être tissés.
Voici la chaîne non tissée d'un métier à tisser 7 × 4:
|||||||
|||||||
|||||||
|||||||
Il existe un certain nombre de façons dont la trame peut être tissée dans la chaîne, la plus simple étant l' armure toile .
Dans la première rangée d'une armure toile, la trame commence au-dessus de la première chaîne de chaîne, descend en dessous de la deuxième chaîne, puis au-dessus de la troisième chaîne, puis en dessous de la quatrième, etc.
La deuxième ligne de trame est identique à la première mais décalée vers la droite d'une chaîne de chaîne, elle commence donc sous puis passe, et ainsi de suite.
Sur notre métier à tisser 7 × 4, le tissage uni ressemble à ceci:
-|-|-|-
|-|-|-|
-|-|-|-
|-|-|-|
Nous pouvons décrire le tissage simple en disant que la trame passe sur la chaîne 1 fois, puis sous 1 fois, et chaque ligne suivante est décalée d' une chaîne vers la droite.
Un tissage généralisé peut être décrit en faisant passer la trame sur les temps v de chaîne , puis sur les temps u , chaque rangée suivante étant décalée de s chaînes vers la droite. (Toutes les valeurs sont des entiers, s peut être 0 ou négatif, u et v doivent être non négatifs.)
Un métier à tisser 7 × 4 avec v = 1 , u = 2 , s = 2 , un type d' armure sergée :
-||-||-
||-||-|
|-||-||
-||-||-
Défi
Votre tâche consiste à écrire le programme le plus court (en octets) qui produit un motif tissé de barres et de tirets étant donné v , u , s , la largeur et la hauteur du métier à tisser et le décalage initial .
Le décalage initial est le nombre de chaînes que la première ligne de la trame est décalée vers la droite (0 dans les exemples ci-dessus). Chaque ligne suivante est décalée de s chaînes supplémentaires.
Votre programme doit prendre ces 6 chiffres dans un format facile à utiliser (stdin, un appel de fonction, etc.) et produire la grille tissée de barres et de rectangles sur stdout. Vous pouvez supposer que toutes les entrées sont valides. (Toutes les valeurs sont des entiers, la largeur et la hauteur doivent être positives, le décalage initial peut être n'importe quoi.)
Exemples
largeur = 5, hauteur = 4, décalage initial = 0, v = 1, u = 3, s = -2:
-|||-
||-||
-|||-
||-||
largeur = 5, hauteur = 4, décalage initial = 3, v = 1, u = 3, s = -2:
|||-|
|-|||
|||-|
|-|||
largeur = 5, hauteur = 4, décalage initial = 1, v = 1, u = 1, s = 0:
|-|-|
|-|-|
|-|-|
|-|-|
largeur = 5, hauteur = 4, décalage initial = 0, v = 1, u = 0, s = 0:
-----
-----
-----
-----
Remarques
- Le motif commence toujours par la trame sur la chaîne dans le coin supérieur gauche de la grille (à moins qu'elle ne soit initialement décalée).
- Tous les fils de trame viennent de la gauche. Ils ne tournent pas comme ça .
- u + v n'est pas nécessairement un multiple de la largeur de la grille.
- u et v peuvent ne pas être tous les deux 0