Einführung
Manchmal sind meine Boxen zu klein, um irgendetwas hinein zu passen. Du musst einen Box Expander bauen! Also, was macht eine Box eine Box in dieser Herausforderung.
OOOO
O O
O O
O O
OOOO
Die Ecken der Box sind immer Leerzeichen. Die Box selbst kann aus dem gleichen Zeichen bestehen. Dieses Zeichen kann ein beliebiges druckbares ASCII-Zeichen sein , mit Ausnahme eines Leerzeichens. Das sind also diese Charaktere:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Die Seitenlängen des obigen Kastens betragen 4, 3 . Sie können davon ausgehen, dass die Seitenlänge immer positiv ist . Das bedeutet, dass dies die kleinste Box ist, die Sie handhaben müssen:
#
# #
#
Um ein Feld zu erweitern, müssen Sie jede Seitenlänge erhöhen. Lassen Sie uns dies Schritt für Schritt anhand des obigen Beispiels durchgehen. Wir nehmen zuerst die Oberseite der Schachtel:
OOOO
Wir erweitern dies um eins, also erhalten wir:
OOOOO
Dies ist jetzt der obere und untere Teil der Box. Danach machen wir dasselbe mit den Seiten links und rechts:
O
O
O
Wird:
O
O
O
O
Nun bauen wir die Box wieder zusammen, was ergibt:
OOOOO
O O
O O
O O
O O
OOOOO
Die Aufgabe
Erweitern Sie ein gegebenes Kästchen um 1. Das Kästchen kann in mehreren Zeilen oder in einem Array angegeben werden.
Testfälle
OOOO OOOOO
O O > O O
OOOO O O
OOOOO
XXXXXX XXXXXXX
X X > X X
X X X X
XXXXXX X X
XXXXXXX
~ ~~
~ ~ > ~ ~
~ ~ ~
~~
Das ist Code-Golf , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!
Antworten:
V ,
65 BytesProbieren Sie es online!
Das ist eigentlich ein Byte länger als es sein sollte. Es hätte sein sollen:
Das hat aber einen unbekannten Bug. :(
Erläuterung:
quelle
ä
ist der doppelte Operator (im Wesentlichen "y" und "p" zusammen in einem Byte), alsoäê
"doppelte Spalte"Vim, 7 Bytes
wo ♥ ist Control-V.
quelle
YP
beide Male für die Konsistenz verwenden?p
beim Aufzeichnen der Animation gedrückt, also bin ich beim Abschreiben der Antwort dabei geblieben. Ist das wichtig? > _>;<C-v> G
und erstellt habeYP
. Dadurch fühlt sich meine Sprache billig an. : /JavaScript (ES6),
575352 BytesErläuterung: Der erste reguläre Ausdruck dupliziert die zweite Spalte und der zweite reguläre Ausdruck dupliziert die zweite Zeile, wodurch das Feld wie gewünscht vergrößert wird. Edit: 4 Bytes gespeichert dank MartinEnder ♦.
quelle
Python,
4942 BytesAnonymes Lambda:
-7 von xnor
Vorherige Version:
D ist eine Funktion, die das zweite Element einer Sequenz dupliziert.
quelle
lambda L:[s[:2]+s[1:]for s in L[:2]+L[1:]]
.map(D,D(s))
würde stattdessen 43 gebenNetzhaut , 20 Bytes
Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Probieren Sie es online! (Es gibt mehrere zusätzliche Zeilen, die eine Testsuite ermöglichen, bei der die Testfälle durch zwei Zeilenvorschübe getrennt sind.)
Erläuterung
1
a Grenze , die Retina , die Substitution nur auf das erste Spiel anzuwenden schränkt es findet.¶
passt zu einem einzelnen Zeilenvorschub, daher müssen wir nur den Zeilenvorschub am Ende der ersten Zeile ersetzen. Es wird ersetzt durch¶$%'¶
, wobei$%'
die gesamte Zeile nach der Übereinstimmung eingefügt wird (ein Retina-spezifisches Substitutionselement). Daher dupliziert dies die zweite Zeile.In diesem
%
Modus wird jede Zeile einzeln verarbeitet, und die Zeilen werden anschließend erneut verbunden.2=
ist auch eine Grenze. Dies bedeutet "Wende die Auswechslung nur auf das zweite Spiel an". Die Übereinstimmung selbst ist einfach ein einzelnes Zeichen und die Ersetzung dupliziert es. Daher dupliziert diese Stufe die zweite Spalte.quelle
Haskell, 24 Bytes
Verwendet die Idee von RootTwo, die zweite Zeile und Spalte zu duplizieren. Das
map f
macht das mit jeder Zeile und dasf.
macht das dann mit den Zeilen.quelle
PowerShell v2 +,
575352 BytesEtwas ähnlich wie Neils JavaScript-Antwort . Das erste Ersetzen stimmt mit dem Zeilenanfang und den nächsten beiden Zeichen überein und ersetzt sie durch das erste Zeichen und das zweite Zeichen zweimal. Anstelle einer zweiten Ersetzung wird sie für die Array-Indizierung ausgetauscht, um die zweite Zeile zu duplizieren. Nimmt Eingaben als ein Array von Zeichenfolgen. Die resultierenden Array-Slices verbleiben in der Pipeline und das Drucken ist implizit.
4 Bytes gespart dank Martin.
Einige Beispiele:
quelle
Brachylog ,
2826 Bytes2 Bytes dank Fatalize.
Probieren Sie es online!
quelle
MATL , 12 Bytes
Die Eingabe ist ein 2D-Zeichen-Array mit einem Semikolon als Zeilentrennzeichen. Beispielsweise hat der erste Testfall eine Eingabe
Probieren Sie es online! Testfälle 1 , 2 , 3 .
Erläuterung
Der Code macht zweimal Folgendes: Wiederholen Sie die zweite Zeile des Arrays und transponieren Sie.
Um die zweite Zeile eines
m
×n
-Arrays zu wiederholen , wird der Vektor[1 2 2 3 ... m]
als Zeilenindex verwendet. Dieser Vektor wird wie folgt generiert: range[1 2 3 ... m]
, attach another2
, sort.quelle
Pyth , 10 Bytes
Probieren Sie es online!
quelle
SED
69 19(14 + 1 für -r) 15quelle
/.\(.\)/\0\1;2p
?2p
, ich dachte, es gibt eine Möglichkeit, das zu tun, aber ich konnte es nicht finden. Vielen Dank!\0
Rückverweis sah , da sie bei 1 beginnen. Das Online-Handbuch des GNU-Sed spricht nichts davon. Allerdings ist die Verwendung&
meiner Meinung nach gleichwertig und kürzer.\0
dann?CJam , 14 Bytes
Ähnlich wie meine MATL-Antwort , wiederholt jedoch die vorletzte Zeile anstelle der zweiten.
Probieren Sie es online!
Erläuterung
quelle
K, 15 Bytes
Nimmt die Eingabe als eine Matrix von Zeichen:
Wenden Sie zweimal (
2{…}/
) eine Funktion an, die der Transponierung (+
) des rechten Arguments, diex@
durch die inkrementelle Lauflängendekodierung (&
) von eins plus (1+
) indiziert ist, eine Liste der Positionen gleich 1 (1=
) im Bereich von 0 bis zu gibt (!
) die Größe der äußeren Dimension des richtigen Arguments (#x
).Schritt für Schritt,
Probieren Sie es hier mit OK.
quelle
APL,
17-15BytesPrüfung:
Erläuterung:
quelle
⌽⍉
oder⊖⍉
, aber in diesem Fall spielt es keine Rolle.ListSharp , 326 Bytes
ich definitiv die Verschachtelung von Funktionen hinzufügen, aber das funktioniert sehr gut
Kommentar, wenn Sie eine Erklärung wünschen
quelle
JavaScript,
160146141 Bytesquelle
Dyalog APL , 14 Bytes
ZB für
wir finden die Indizes; {1, 2, 3} für die Zeilen und {1, 2, 3, 4} für die Spalten. Jetzt lassen wir die Anfangselemente fallen, um {2, 3} und {2, 3, 4} zu erhalten, und stellen dann {1, 2} voran und geben {1, 2, 2, 3} und {1, 2, 2, 3, 4}. Schließlich verwenden wir dies, um Zeilen und Spalten auszuwählen und gleichzeitig Zeile 2 und Spalte 2 zu verdoppeln.
TryAPL online!
quelle
Ruby, 46 Bytes
Sehr unkomplizierte Lösung, die Eingaben als Array von Zeilen aufnimmt. Ich mag keine duplizierten
insert
s, also werde ich versuchen, Golf zu spielen.quelle
C #,
127124 BytesKompiliert zu a
Func<List<string>, List<string>>
.Formatierte Version:
quelle