In der Grabstätte des Königs Silo von Asturien befindet sich eine Inschrift mit der Aufschrift SILO PRINCEPS FECIT ( König Silo machte dies ).
Der erste Buchstabe befindet sich ganz in der Mitte, und von dort liest man, indem man in eine nicht-diagonale Richtung geht, die nach außen ausstrahlt. Der letzte Buchstabe befindet sich an allen vier Ecken. In dieser Herausforderung verallgemeinern Sie den Prozess, um sie zu erstellen.
Eingang
Eine Zeichenfolge ( oder ein Äquivalent ) und eine Ganzzahl. Sie können die folgenden Annahmen bezüglich der Eingabe treffen:
- Die Zeichenfolge hat eine ungerade Länge.
- Die Ganzzahl ist eine ungerade Zahl zwischen 1 und 1, weniger als die doppelte Länge der Zeichenfolge.
Ausgabe
Ein Inscriptio Labyrinthica für die Zeichenfolge, wobei die Ganzzahl für die Höhe oder Breite verwendet wird (siehe Modelle für Höhenbeispiele). Die Ausgabe sollte aus jedem Buchstaben ohne Leerzeichen bestehen. Der Zeilenumbruch ist die Standardeinstellung für Ihr System / Ihre Sprache.
Testfälle
Beachten Sie, dass eine Eingabe von 1 oder (Länge * 2 - 1) zu einem horizontalen oder vertikalen Palindrom führt.
Input: FOO, 3 Input: BAR, 1 Input: BAR, 3 Input: BAR, 5
Output: OOO Output: RABAR Output: RAR Output: R
OFO ABA A
OOO RAR B
A
R
Input: ABCDE, 5 Input: ABCDE, 3 Input: *<>v^, 5
Output: EDCDE Output: EDCBCDE ^v>v^
DCBCD DCBABCD v><>v
CBABC EDCBCDE ><*<>
DCBCD v><>v
EDCDE ^v>v^
Wertung
Dies ist Code-Golf, also gewinnt die kürzeste Antwort in Bytes. Standardlücken verboten.
Antworten:
J , 27 Bytes
Probieren Sie es online!
Ein Beispiel wird den Ansatz auf hoher Ebene verdeutlichen.
Erwägen
'ABCDE' f 3
Wir bemerken, dass wir einfach die Kreuzadditionstabelle von
1 0 1
und suchen3 2 1 0 1 2 3
, die so aussieht:Wir ziehen dann diese Indizes aus der ursprünglichen Zeichenfolge:
[{~
.Der ganze Rest des Codes ist nur langweilig Arithmetik und die Verwendung von
i:
, um die Argumente1 0 1
und zu konstruieren3 2 1 0 1 2 3
.quelle
Gelee , 12 Bytes
Probieren Sie es online!
Eine dyadische Verknüpfung, bei der die Zeichenfolge als linkes und die Höhe als rechtes Argument verwendet wird. Gibt einen String mit Zeilenumbrüchen zurück. Wenn eine Liste von Zeichenfolgen für die Ausgabe akzeptabel war, kann ich die endgültige
Y
Speicherung eines Bytes entfernen . Interessanterweise erscheint mir das Original „SILO PRINCEPS FECIT“ als ASCII-Kunst eines 3D-Diamanten, wenn ich es auf TIO betrachte.Erläuterung
quelle
R ,
939187 Bytes-2 Bytes dank Giuseppe. -4 Bytes durch Eingabe der Breite anstelle der Höhe, wie dies durch OP erlaubt ist.
Probieren Sie es online!
Nimmt die Eingabe als Vektor von Zeichen. Der Schlüsselteil ist
s[1+outer(abs(-w:w),abs(-h:h),'+')]
.abs(-w:w)
abs(-h:h)
abs(-h:h)
outer(abs(-2:2), abs(-1:1), '+')
(Wir müssen dann 1 addieren, weil R 1-indiziert ist.) Die 0 in der Mitte ist die Stelle, an der der erste Buchstabe der Eingabe stehen soll.
Der Rest ist Formatierung.
quelle
Holzkohle ,
25 bis19 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Zeichnen Sie ein Viertel der Inschrift.
Überlege, um die Inschrift zu vervollständigen.
quelle
Japt
-R
,1916 BytesVersuch es
quelle
Wolfram Language (Mathematica) ,
5754 BytesProbieren Sie es online!
Übernimmt die Breite als Eingabe.
quelle
g
nicht ausgewertet, wenn die Funktion zum ersten Mal aufgerufen wird. Probieren Sie es online!Print/@f[...]
->Print/@Transpose[g[...]]
->Transpose[Print@g[...]]
, bis zu welcher Zeitg
definiert wird.Japt
-R
, 10 BytesNimmt Breite statt Höhe.
Versuch es
Pseudocode (U ist String, V ist Integer):
quelle
Perl 6 ,
6867 BytesProbieren Sie es online!
quelle
Python 3, 104 Bytes
Ich habe noch nicht so lange Golf gespielt ... Ich bin sicher, das könnte kürzer sein.
Einzelheiten
Dieser Code definiert eine Funktion, die zwei Argumente (die Zeichenfolge und die Höhe) akzeptiert und das Ergebnis bei der Standardausgabe ausgibt.
Der Index in der Zeichenfolge ist der Manhattan-Abstand vom Mittelpunkt des Gitters. Für ein Gitter mit einer Breite
w
und Höheh
, der Abstand für die Zelle bei(x, y)
ISabs(x - (w - 1) / 2) + abs(v - (h - 1) / 2)
.Die Breite des Gitters muss so sein, dass der Manhattan-Abstand der Ecken (z. B.
(0, 0)
) um eins kürzer als die Länge der Zeichenfolge ist. Wenn(0, 0)
wir das Obige ersetzen und vereinfachen, stellen wir fest, dass die Breite einfach ist2 * len(s) - h
.Code
Probieren Sie es online!
quelle
05AB1E , 10 Bytes
Probieren Sie es online!
quelle
Pyth , 19 Bytes
Probieren Sie es online!
quelle
Python 2 , 95 Bytes
Probieren Sie es online!
quelle
Stax ,
119 BytesFühren Sie es aus und debuggen Sie es
Die Breite und die ursprüngliche Zeichenfolge werden in dieser Reihenfolge verwendet.
quelle
C # (.NET Core) , 146 Byte
Probieren Sie es online!
Längste Antwort so lange. :-) Es nutzt die Manhattan-Distanz zum Zentrum des Platzes. Es muss jedoch einen kürzeren Weg geben.
quelle
Tcl ,
188170162 BytesProbieren Sie es online!
Es scheint eine Million schlechte Möglichkeiten zu geben, um dieses Problem in TCL zu lösen. Dies ist nicht das Schlimmste von ihnen.
Mindestens 18 Byte werden durch Konvertierung in Lambda gespeichert (kann bis zu 13 weitere Bytes einsparen, wenn der Rückgabewert einer Zeilenliste akzeptabel ist)
Es wurden weitere 8 gespeichert, da der lmap-Iterator als zusätzliche Konstante diente
quelle
Canvas , 18 Byte
Probieren Sie es hier aus!
Canvas macht keine Teilstrings, also muss ich es wie ein Kunstobjekt behandeln und auf diese Weise einen Unterabschnitt erhalten. Ich glaube, das kostet mich 2 Bytes, aber hey, was kannst du tun?Es sieht so aus, als würde das nicht so funktionieren, wie ich dachte: Die Palindromisierungsfunktionen von Canvas spiegeln bestimmte Zeichen (z. B. V wird vertikal gespiegelt zu ^), und das kann ich nicht genau deaktivieren ... na ja , ich schätze
quelle
Ruby , 65 Bytes
Probieren Sie es online!
quelle