Stellen Sie sich ein rechteckiges |
Zeichengitter vor, das die gespannten Fäden auf einem Webstuhl ( die Kette ) darstellt, um die andere Fäden ( der Schuss ), die wir darstellen -
, gewebt werden können.
Hier ist die ungewebte Kette eines 7 × 4-Webstuhls:
|||||||
|||||||
|||||||
|||||||
Es gibt eine Reihe von Möglichkeiten, wie der Schuss in die Kette eingewebt werden kann, wobei die einfachste die Leinwandbindung ist .
In der ersten Reihe einer Leinwandbindung beginnt der Schuss über der ersten Kette, geht unter der zweiten Kette, dann über der dritten Kette, dann unter der vierten Kette und so weiter.
Die zweite Schussreihe ist mit der ersten identisch, aber um einen Kettfaden nach rechts versetzt. Sie beginnt also unter und geht dann über und so weiter.
Auf unserem 7 × 4-Webstuhl sieht die Leinwandbindung folgendermaßen aus:
-|-|-|-
|-|-|-|
-|-|-|-
|-|-|-|
Wir können die Leinwandbindung beschreiben damit , dass der Schussfaden über die Kett- geht 1 Mal dann unter 1 Zeit, und jede nachfolgende Zeile verschoben 1 String nach rechts.
Eine verallgemeinerte Bindung kann beschrieben werden, indem der Schuss die Kett- V- Zeiten und dann die U- Zeiten durchläuft , wobei jede nachfolgende Reihe um s- Ketten nach rechts verschoben wird . (Alle Werte sind Ganzzahlen, s kann 0 oder negativ sein, u und v dürfen nicht negativ sein.)
Eine 7 × 4-Webmaschine mit v = 1 , u = 2 , s = 2 , eine Art Köperbindung :
-||-||-
||-||-|
|-||-||
-||-||-
Herausforderung
Ihre Aufgabe ist es, das kürzeste Programm (in Bytes) zu schreiben, das ein gewebtes Muster aus Strichen und Strichen erzeugt, wenn v , u , s , die Breite und Höhe des Webstuhls und die anfängliche Verschiebung gegeben sind .
Die anfängliche Verschiebung ist die Anzahl der Fäden, um die die erste Reihe im Schuss nach rechts verschoben ist (0 in den obigen Beispielen). Jede folgende Reihe wird durch verschobene s mehr Strings.
Ihr Programm sollte diese 6 Zahlen in einem einfach zu verwendenden Format (stdin, ein Funktionsaufruf usw.) aufnehmen und das gewebte Gitter aus Balken und Rechtecken an stdout ausgeben. Sie können davon ausgehen, dass alle Eingaben gültig sind. (Alle Werte sind ganze Zahlen, Breite und Höhe müssen positiv sein, die anfängliche Verschiebung kann beliebig sein.)
Beispiele
width = 5, height = 4, initial shift = 0, v = 1, u = 3, s = -2:
-|||-
||-||
-|||-
||-||
width = 5, height = 4, initial shift = 3, v = 1, u = 3, s = -2:
|||-|
|-|||
|||-|
|-|||
width = 5, height = 4, initial shift = 1, v = 1, u = 1, s = 0:
|-|-|
|-|-|
|-|-|
|-|-|
width = 5, height = 4, initial shift = 0, v = 1, u = 0, s = 0:
-----
-----
-----
-----
Anmerkungen
- Das Muster beginnt immer mit dem Schuss über der Kette in der oberen linken Ecke des Gitters (sofern nicht anfänglich verschoben).
- Alle Schussfäden kommen von links. Sie tun nicht wie Spirale dies .
- u + v ist nicht unbedingt ein Vielfaches der Gitterbreite.
- u und v dürfen nicht beide 0 sein