Herausforderung
Haben Sie jemals diese Trailer-Titel (Martian, Interstellar usw.) gesehen, bei denen sich zwischen den Buchstaben große Lücken ausbreiten?
Die Herausforderung besteht darin, diesen Effekt bei gegebener Zeichenfolge, Lückenmultiplikator und Richtung durch Einfügen einer angemessenen Anzahl von Leerzeichen zwischen den Buchstaben wiederherzustellen.
Beispiel
Eingabe : 'INTERSTELLAR', Gap-Multiplikator: 1.0, Richtung: nach innen steigend
Output: I N T E R S T E L L A R
Der Abstand beträgt: [1, 2, 3, ..., 3, 2, 1]; Ersetzen der Leerzeichen durch '.' um den Abstand besser zu demonstrieren:
I.N..T...E....R.....S......T.....E....L...L..A.R
Eingabe : 'INTERSTELLAR', Gap-Multiplikator: 0,5, Richtung: nach innen steigend
Output: IN T E R S T E L L AR
Der Abstand wird mit 0,5 multipliziert, daher erhalten wir [0, 1, 1, 2, ... 2, 1, 1, 0] aus der Ganzzahldivision; mit '.':
IN.T.E..R..S...T..E..L.L.AR
Eingabe : 'CODEGOLF', Gap-Multiplikator: 2,0, Richtung: Zunehmend nach außen
Output: C O D E G O L F
Der Abstand wird mit 2 multipliziert und nimmt nach außen zu, daher erhalten wir [8,6,4,2,4,6,8]; Ersetzen durch '.':
C........O......D....E..G....O......L........F
Eingabe : 'CODEGOLF', Gap-Multiplikator: 0,4, Richtung: Zunehmend nach außen
Output: C O DEGO L F
Der Abstand wird mit 0,4 multipliziert und nimmt nach außen zu, daher erhalten wir [1,1,0,0,0,1,1]; Ersetzen durch '.':
C.O.DEGO.L.F
Regeln
- Nimmt 3 Eingaben auf: String, Gap-Multiplikator und Richtung
- Wenn die Länge der Eingabezeichenfolge ungerade ist (gerade in Anzahl der Lücken), z. B. 'HELLO', sollte der Abstand der innersten 2 Lücken gleich sein
H E L L O
- Der Richtungs- und Lückenmultiplikator kann beliebig analysiert werden, z. B. können Sie -2 als "mit einem Multiplikator von 2 nach innen ansteigen", 1 als "mit einem Multiplikator von 1 nach außen ansteigen" usw. verwenden.
- Es ist nur erforderlich, Leerzeichen zu verwenden. Dies ist jedoch ein Bonus, wenn die Zeichenfüllung anpassbar ist.
Referenz-Animation
Viel Spaß beim Golfen!
Increasing
um1 => Inward, 0 => Outward
oder umgekehrt.C..O....D......E........G......O....L..F
Antworten:
JavaScript (ES6),
86828180 ByteEingaben werden in der aktuellen Syntax erwartet
f(s)(r)
, mit:s
= Zeichenfolger
= Verhältnis + Richtung: ein negativer Schwimmer nach innen oder ein positiver Schwimmer nach außenquelle
05AB1E , 33 Bytes
Verwendet CP-1252- Codierung.
Der Gap-Multiplikator wird als negativ angesehen, wenn er nach außen steigt.
Probieren Sie es online!
quelle
APL, 40 Bytes
Dabei wird der String als rechtes Argument, das Verhältnis als linkes Argument und die Richtung als linker Operand verwendet (0 für nach innen und 1 für nach außen).
Erläuterung:
⍳⍴1↓⍵
: Erhalte eine Liste von Zahlen von 1 bis N-1, wobei N die Länge der Zeichenkette ist(⌽⌊+)
: invertiere die Liste und erhalte an jeder Position die niedrigste Anzahl beider Listen (dies ergibt die Größe der Lücken, wenn sie nach innen zunehmen)(1+⌈/-+)⍣⍺⍺
: subtrahieren Sie jede Zahl in der Liste von der höchsten Zahl in der Liste und addieren Sie 1. Tun Sie diesmal⍺⍺
. (Wenn⍺⍺=0
nichts passiert, und wenn⍺⍺=1
dies der Fall ist , werden die Lücken größer, wenn sie nach außen zunehmen.)-⌊⍺×
: Multipliziere jede Lücke mit⍺
, runde sie ab und negiere sie.∊1,⍨1,¨
: Fügen Sie vor jeder Lücke eine 1 und ganz am Ende der Liste eine 1 hinzu.0~⍨
: Alle Nullen entfernen.⍵\⍨
: Verwenden Sie die resultierende Liste zum Erweitern⍵
. Expand (\
) funktioniert folgendermaßen: Für jede positive Zahl wird das aktuelle Zeichen so oft repliziert, und für jede negative Zahl werden so viele Leerzeichen eingefügt, mit dem Vorbehalt, dass0
und¯1
dasselbe zu tun, weshalb alle Nullen mussten früher entfernt werden.quelle
MATL , 31 Bytes
Eingaben sind: string;
0
oder1
nach innen oder außen zu erhöhen; Multiplikator.Probieren Sie es online!
Erläuterung
Betrachten Eingänge
'INTERSTELLAR'
,1
,0.5
als Beispiel.quelle
Schläger 348 Bytes
Ungolfed:
Testen:
Ausgabe:
quelle
PHP, 129 Bytes
12 Bytes von @Titus gespeichert Vielen Dank
Zeichenfolge = $ argv [1], Verhältnis = $ argv [2], Richtung = $ argv [3] nach innen = 0, nach außen = 1
quelle
str_pad
sollte 4 Bytes sparen. Versuchen Sie es mit++$i>$l?$l-$i/2:$i/2
und$t[$i++]/2
erhöhen Sie nicht die Schleifen-Nachbedingung. das sollte sparen 9. Warum0^
?0^3.12
Ergebnis, in3
dem notwendig ist$i=0
ist unnötig.++$i>
spart immer noch ein Byte über$i++>=
. Und Sie können , indem diese Erhöhung auf die Voraussetzung ein weiteres Byte speichern++$i<2*$l=...
statt$i+1<2*$l=...
, tauschen wahr und falsch Zweige des äußeren ternär$i
statt++$i
und$t[$i/2-.5]
statt$t[$i++/2]
.1
und "nach außen" definieren2
, können Sie weitere 3 Bytes speichern:($l>>1)
statt(0^$l/2+1)
; aber ich habe keines davon getestet.