Hintergrund
Wir feiern die Veröffentlichung von Dyalog APL 16.0 , wo die Lösung für dieses Problem in {⊢⌺(≢⍵)⊢⍵}
Erläuterung besteht
Aufgabe
Wenn Sie eine druckbare ASCII-Zeichenfolge mit der ungeraden Länge n erhalten , machen Sie ein n × n- Quadrat, wobei die Zeichenfolge horizontal zentriert, für die vertikale Zentrierung dupliziert und in jeder Zeile und Spalte dieselbe Zeichenfolge enthalten ist. Beachten Sie, dass alle Zeichenfolgen mit Ausnahme der zentrierten Zeichenfolgen abgeschnitten werden, um die Größe des Quadrats n × n beizubehalten .
Die Erklärung Ihres Codes wird sehr geschätzt.
Regeln
- Möglicherweise haben Sie nachgestellte Leerzeichen und Zeilenumbrüche (dies schließt das untere rechte Dreieck ein).
- Sie können eine Liste von Zeichenfolgen zurückgeben
Beispiel mit dem String ABXCD
:
n ist 5. Zuerst zeichnen wir die zwei zentrierten Zeichenketten, eine horizontale und eine vertikale:
┌─────┐ │ A │ │ B │ │ABXCD│ │ C │ │ D │ └─────┘
(5 × 5-Begrenzungsrahmen zur Verdeutlichung hinzugefügt)
Dann platzieren wir alle möglichen Akrostiken horizontal und vertikal:
EIN AB ┌─────┐ │ ABX│CD │ ABXC│D │ABXCD│ A│BXCD │ AB│XCD │ └─────┘ CD D
Schließlich geben wir nur das zurück, was sich innerhalb des Begrenzungsrahmens befindet:
ABX ABXC ABXCD BXCD XCD
Testfälle
World
:
Wor
Worl
World
orld
rld
mississippi
:
missis
mississ
mississi
mississip
mississipp
mississippi
ississippi
ssissippi
sissippi
issippi
ssippi
Pneumonoultramicroscopicsilicovolcanoconiosis
:
Pneumonoultramicroscopi
Pneumonoultramicroscopic
Pneumonoultramicroscopics
Pneumonoultramicroscopicsi
Pneumonoultramicroscopicsil
Pneumonoultramicroscopicsili
Pneumonoultramicroscopicsilic
Pneumonoultramicroscopicsilico
Pneumonoultramicroscopicsilicov
Pneumonoultramicroscopicsilicovo
Pneumonoultramicroscopicsilicovol
Pneumonoultramicroscopicsilicovolc
Pneumonoultramicroscopicsilicovolca
Pneumonoultramicroscopicsilicovolcan
Pneumonoultramicroscopicsilicovolcano
Pneumonoultramicroscopicsilicovolcanoc
Pneumonoultramicroscopicsilicovolcanoco
Pneumonoultramicroscopicsilicovolcanocon
Pneumonoultramicroscopicsilicovolcanoconi
Pneumonoultramicroscopicsilicovolcanoconio
Pneumonoultramicroscopicsilicovolcanoconios
Pneumonoultramicroscopicsilicovolcanoconiosi
Pneumonoultramicroscopicsilicovolcanoconiosis
neumonoultramicroscopicsilicovolcanoconiosis
eumonoultramicroscopicsilicovolcanoconiosis
umonoultramicroscopicsilicovolcanoconiosis
monoultramicroscopicsilicovolcanoconiosis
onoultramicroscopicsilicovolcanoconiosis
noultramicroscopicsilicovolcanoconiosis
oultramicroscopicsilicovolcanoconiosis
ultramicroscopicsilicovolcanoconiosis
ltramicroscopicsilicovolcanoconiosis
tramicroscopicsilicovolcanoconiosis
ramicroscopicsilicovolcanoconiosis
amicroscopicsilicovolcanoconiosis
microscopicsilicovolcanoconiosis
icroscopicsilicovolcanoconiosis
croscopicsilicovolcanoconiosis
roscopicsilicovolcanoconiosis
oscopicsilicovolcanoconiosis
scopicsilicovolcanoconiosis
copicsilicovolcanoconiosis
opicsilicovolcanoconiosis
picsilicovolcanoconiosis
icsilicovolcanoconiosis
Danksagung
Vielen Dank an Dzaima , Leaky Nun , Mr. Xcoder für alles andere als die Idee dieser Herausforderung.
Antworten:
Python 2 , 60 Bytes
Probieren Sie es online!
quelle
MATL , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
Retina ,
7059 BytesProbieren Sie es online! Bearbeiten: 11 Bytes mit Hilfe von @MartinEnder gespeichert. Erläuterung: In der ersten Stufe wird die Eingabe einmal für jedes Zeichen wiederholt, wobei es in jeder Zeile entsprechend aufgefüllt wird, um die Scherung zu erhalten. Die letzte Stufe entfernt dann 25% von jeder Seite, um das gewünschte Ergebnis zu erzielen.
quelle
n/2
Leerzeichen links und rechts (mit so etwas wie(..)+.
->$#1$* $&$#1$*
mit einem nachgestellten Leerzeichen) und dann tat mir nur ,!&`...
wo...
Streichhölzern
genaun
Zeichen.$*sp
?Java 8,
120103 Bytes-17 Bytes dank @ OlivierGrégoire .
Erläuterung:
Probieren Sie es hier aus.
quelle
i=l/2+1
undi-->1
undfor(;i<l
ein Byte speichern.s->{int l=s.length(),i=l/2;while(i-->0)s=" "+s+" ";while(++i<l)System.out.println(s.substring(i,l+i));}
(103 Bytes). Die einzige wesentliche Änderung besteht darin, dass die Zeichenfolge mit Leerzeichen ein für alle Mal generiert wird, anstatt "on the fly" (und natürlich der Ausdruck, anstatt zurückzukehren).Haskell,
6462 BytesProbieren Sie es online! Wie es funktioniert:
quelle
SWI-Prolog, 234 Bytes
Vielleicht versuchen Sie es hier online: http://swish.swi-prolog.org/p/hEKigfEl.pl
NB.
_
hier zu sein, da es zeigt, dass es funktioniert und die Byteanzahl nicht beeinflusst.Beispiele, die in Swish laufen:
Annäherung, im Grunde das erste, was ich überhaupt zum Arbeiten bringen könnte, und zweifellos könnte ein erfahrener Prolog-Benutzer es sehr verkürzen:
Erklärter und kommentierter Code (wird möglicherweise nicht ausgeführt), von
superacrostic()
unten gelesen , dannhelper()
Hauptteil, dannhelper()
Basisfall:quelle
05AB1E , 11 Bytes
Probieren Sie es online!
Erläuterung
quelle
JavaScript (ES6), 75 Byte
quelle
APL (Dyalog Unicode) , 10 Zeichen = 22 Byte
Probieren Sie es online!
{
…}
Anonyme Funktion, bei der das Argument durch ⍵ dargestellt wird⊢
Geben Sie den abgedeckten Bereich an, wenn⌺(
…)
Eine Schablone der Größe schieben≢
Länge von⍵
das Argument⊢
auf⍵
das ArgumentDies funktioniert, indem jedes Zeichen die Mitte einer Zeichenfolge mit der gleichen Länge wie die Eingabe bildet und nach Bedarf nach links oder rechts aufgefüllt wird. Nimm zB
ABXCD
:Die Zeichenfolge besteht aus fünf Zeichen, sodass die Schablone eine "Öffnung" mit einer Breite von fünf Zeichen aufweist.
┌──↓──┐
Schablonenöffnung mit mittlerem Marker│ ABX│CD
lassen SieA
in der Mitte sein ,│ ABXC│D
dannB
│ABXCD|
usw.A|BXCD |
AB|XCD |
└──↑──┘
endgültige Schablonenpositionquelle
PHP , 98 Bytes
Probieren Sie es online!
quelle
JavaScript (ES8),
666362 BytesGibt ein Array zurück.
Versuch es
Erläuterung
Anonyme Funktion, die die Zeichenfolge als Argument über Parameter verwendet
s
.Teilen Sie die Zeichenfolge in ein Array einzelner Zeichen auf.
Rufen Sie die Länge der Zeichenfolge ab und weisen Sie sie der Variablen zu
l
.Ordnen Sie dem Array zu, indem Sie jedes Element durch eine Funktion leiten, wobei
x
der Index des aktuellen Elements ist.Geben Sie für jedes Element die ursprüngliche Zeichenfolge mit vorangestellten Leerzeichen zurück, bis die Länge das 1,5-fache der ursprünglichen Länge beträgt.
Liefert den Teilstring der Länge
l
beginnend mit dem Index des aktuellen Elements.quelle
V ,
14, 11 BytesProbieren Sie es online!
3 Bytes gespart dank @nmjmcman!
Hexdump:
Ursprünglicher Ansatz (18 Bytes):
Erläuterung:
quelle
ê
. Danke :)PowerShell Core , 68 Byte
Probieren Sie es online!
Ungolfed Erklärung
quelle
[($_..($_+$L))]
?(
geht nicht mit dem Join, es geht-join ($Padding + $Text)[0,1,2,3,4]
darum, mehrere Zeichen aus einer gepolsterten Zeichenfolge für eine Ausgabezeile auszuwählen und diese zu einer Zeichenfolge zusammenzufügen, um eine kürzere Möglichkeit zu haben.SubString()
. und es erzeugt die Auffüllung an Ort und Stelle und den Bereich der Zeichen an Ort und Stelle. Die vollständige Erklärung zum Ungolf wurde zu meiner Antwort hinzugefügt.Japt ,
191714 Bytes5 Bytes gespart dank @ETHproductions und @Shaggy
Online testen!
-R
Fahne hinzugefügt, um mit Zeilenumbrüchen zu verbinden (Sichtbarkeitszwecke)Erläuterung
quelle
Sp½*Ul
, but I don't think there is one atm... BTW, you can usually changesXX+Y
totXY
(s == .slice
,t == .substr
)Holzkohle , 26 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes.
quelle
Jelly , 11 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
QBIC , 32 Bytes
Mann, es ist Zeit für mich,
space$
zu QBIC hinzuzufügen ...Erläuterung
Probelauf
quelle
Mathematica, 88 Bytes
quelle
Haskell,
8670 bytesThis is (still) way too long, but thanks @bartavelle for reminding me that outputting a list of strings is acceptable too!
Try it online!
quelle
Python 3, 68 bytes
Try it online!
quelle
PowerShell,
133119 bytesTry it online!
Ungolfed
quelle
Python 2,
76 7473 bytes-1 thanks to @FelipeNardiBatista
Of course, not as short as the other Python answer, but it's worth trying a completely different method:
Try it online! (with the 74 byte version)
This first generates the full String, and then slices it to fit the square.
Explanation
quelle
(2*x+~i)
to save a byteJ, 19 bytes
Try it online!
Explanation
quelle
''
as the replacement.C# (.NET Core), 101 bytes
Basically @KevinCruijssen's answer. Saves 2 bytes because
string.Length
doesn't need () and another 2 bytes because the second argument ofstring.Substring()
is length rather than end Index, but then loses 2 bytes becauseConsole.WriteLine()
is longer. I had a more naive implementation, but it was about twice as long so...quelle
Excel VBA, 68 Bytes
Golfed
Anonymous VBE immediate window function that takes input from cell
[A1]
and outputs to the VBE immediate windowUngolfed
quelle
Perl 5, 53 + 1 (
-n
) = 54 bytesTry it online!
quelle