Herausforderung:
Wenn eine Zeichenfolge nur Groß- und / oder Kleinbuchstaben enthält (je nachdem, was Sie bevorzugen), platzieren Sie sie tape
horizontal, um sie zu reparieren. Dazu prüfen wir den Unterschied zweier benachbarter Buchstaben im Alphabet (ignorieren den Umbruch und gehen nur vorwärts) und füllen den Raum mit so viel TAPE
/ tape
wie wir benötigen.
Beispiel:
Eingabe: abcmnnnopstzra
Ausgabe:abcTAPETAPETmnnnopTAstTAPETzra
Warum?
- Zwischen
c
undm
sollte seindefghijkl
(Länge 9), also füllen wir dies mitTAPETAPET
; - Zwischen
p
unds
sollte seinqr
(Länge 2), also füllen wir dies mitTA
; - Zwischen
t
undz
sollte seinuvwxy
(Länge 5), also füllen wir dies mitTAPET
.
Herausforderungsregeln:
- Der Unterschied gilt nur vorwärts, also kein Band dazwischen
zra
. - Es ist möglich, mehrere gleiche benachbarte Buchstaben wie zu haben
nnn
. - Sie dürfen die Eingabe in einem angemessenen Format vornehmen. Kann ein einzelner String, ein String-Array / eine Liste, ein Zeichen-Array / eine Liste usw. sein. Die Ausgabe hat die gleiche Flexibilität.
- Sie dürfen Klein- und / oder Großbuchstaben nach Belieben verwenden. Dies gilt sowohl für die Eingabe als auch für die Ausgabe und
TAPE
. - Möglicherweise ist keine
TAPE
Eingabe erforderlich. In diesem Fall bleibt die Eingabe unverändert.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link zu einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
Testfälle:
Input: "abcmnnnopstzra"
Output: "abcTAPETAPETmnnnopTAstTAPETzra"
Input: "aza"
Output: "aTAPETAPETAPETAPETAPETAPEza"
Input: "ghijk"
Output: "ghijk"
Input: "aabbddeeffiiacek"
Output: "aabbTddeeffTAiiaTcTeTAPETk"
Input: "zyxxccba"
Output: "zyxxccba"
Input: "abccxxyz"
Output: "abccTAPETAPETAPETAPETAPExxyz"
Input: "abtapegh"
Output: "abTAPETAPETAPETAPETtaTAPETAPETAPETApeTgh"
Input: "tape"
Output: "taTAPETAPETAPETApe"
ab[TAPETAPETAPETAPET]TA[TAPETAPETAPETA]PE[T]gh
(; fügte das hinzu[]
, um es lesbarer zu machen).Antworten:
05AB1E ,
1412 BytesProbieren Sie es online!
Erläuterung
quelle
-d
, um den Operation-by-Operation-Dump des unformatierten Stacks dessen zu erhalten, was anstelle einer Erklärung vor sich geht von mir LOL.Jelly , 13 Bytes
Probieren Sie es online!
Erläuterung
quelle
abctapetapetmnnnopapstetapezra
stattabctapetapetmnnnoptasttapetzra
.Haskell , 58 Bytes
Probieren Sie es online! Die Funktion
f
wiederholt die Zeichenfolge und betrachtet aufeinanderfolgende Zeichenx
undy
.cycle"TAPE"
ergibt die unendliche Zeichenfolge"TAPETAPETAPE..."
.[x..y]
Ruft den Zeichenbereich vonx
bisy
einschließlich ab, so müssen wir zwei von der Länge subtrahieren. Im Fallx
später im Alphabet erfolgt danny
oder beide das gleiche Zeichen, wir eine negative Zahl nach Abzug, aber glücklicherweisetake
diejenigen akzeptiert , wie gut und dauern nur nichts.quelle
Perl 5 ,
-F
46 BytesProbieren Sie es online!
quelle
P,E,T,A
anstattT,A,P,E
, aber jetzt merke ich, dass Sie zwei Bytes((P,E,T,A)x7)[2..-$^H+($^H=ord)
anstelle von((T,A,P,E)x7)[0..-$^H+($^H=ord)-2
gespeichert haben. Gute Antwort!^H
(\x08
) 2 Bytes sparen !do$0
), aber es sind nur 2 Bytes hier, also habe ich mich nicht darumPython 2 ,
968780 BytesProbieren Sie es online!
quelle
Haskell , 64 Bytes
Behandelt Zeichenfolgen mit Groß- oder Kleinbuchstaben, jedoch nicht mit beiden.
Probieren Sie es online!
quelle
C 84 Bytes
Probieren Sie es online!
C (auf Windows-Eingabeaufforderung ausführen), 81 Byte
Ausgabe:
quelle
Python 3 , 98 Bytes
Probieren Sie es online!
-1 Byte danke an Asone Tuhid
quelle
Scala , 66 Bytes
Probieren Sie es online!
Erläuterung
quelle
PHP , 85 Bytes
Probieren Sie es online!
Erläuterung
quelle
Javascript,
131127 Bytes4 Bytes gespart dank Rick Hitchcock.
Abgerollt
Mein Problem hier ist, dass Javascript keine saubere Möglichkeit hatte, die Entfernung zwischen Zeichen a und b zu ermitteln.
quelle
charCodeAt
einer Variablenz=(a=>[...a].reduce((x,y)=>x+[...Array((f=y[c='charCodeAt']()-x.slice(-1)[c]())>1?f-1:0)].reduce((e,r,t)=>e+"TAPE"[t%4],"")+y))
Python 2/3 ,
7069 BytesProbieren Sie es online!
quelle
Holzkohle , 20 Bytes
Probieren Sie es online! Erläuterung:
quelle
Pip , 29 Bytes
Nimmt Eingaben als Befehlszeilenargument (Klein- oder Großbuchstaben, egal). Probieren Sie es online!
Erläuterung
quelle
JavaScript (ES6),
80 bis78 ByteDer Abstand zwischen zwei Zeichen kann bestimmt werden, indem ihre Verkettung in die Basis 36 umgewandelt wird, wobei der Modul 37 subtrahiert wird.
Zum Beispiel
(parseInt('cy',36)-370)%37 == 22
.Wir können dann verwenden
padEnd
, um die Lücken zu füllen, und Rekursion, um die Schleife zu behandeln.Testfälle:
Code-Snippet anzeigen
quelle
K4 , 48 Bytes
Lösung:
Beispiele:
Erläuterung:
Ziemlich einfache Lösung, aber hohe Byteanzahl ... Finde die Deltas, nimm sie aus der Zeichenkette
"TAPE"
und verbinde sie mit dem ursprünglichen Zeichenkettenschnitt, in dem die Deltas> 1 sind.quelle
Excel VBA, 106 Bytes
Eine anonyme VBE-Direktfensterfunktion, die Eingaben als Großbuchstaben über die Zelle
A1
akzeptiert und an das VBE-Direktfenster ausgibt.quelle
Ruby ,
5953 BytesProbieren Sie es online!
Dies ist eigentlich ziemlich einfach - wir nehmen die Eingabe als
Teilung unserer Zeichenfolge ineine Reihe von Zeichen (danke an Asone Tuhid für diesen Hinweis) und wenden eine Reduktionsoperation an, bei der wir jedes Zeichen mit "TAPE" als Füllzeichenfolge auf die erforderliche Länge begründen.quelle
K (oK) , 33 Bytes
Probieren Sie es online!
{ }
anonyme Funktion mit Argumentx
-':x
subtrahiere jeden vorherigen Punkt (benutze eine imaginäre 0 vor dem ersten Punkt)1_
Lass den ersten Gegenstand fallen0,
stellen Sie eine 0 voran-1+
addiere -10|
max (0, ...)(
...)#\:"TAPE"
gestalten Sie die Zeichenfolge"TAPE"
für jedes Element aus der Liste auf der linken Seite neu(
... an jede umgeformte Zeichenkette),'x
das entsprechende Zeichen von anhängenx
,/
verketten allequelle
Ruby ,
78 77 6462 Bytes-1 Byte dank Kevin Cruijssen
Probieren Sie es online!
quelle
ord-l[-1].ord-1
zuord+~l[-1].ord
. Gute Antwort. +1 von mir.Java (JDK) , 91 Byte
Probieren Sie es online!
Erläuterung
Credits
var
quelle
int p=123
würde ein Zeichen speichern. Es spielt keine Rolle, wasp
sich in der ersten Iteration befindet, solange es größer oder gleich dem ersten Zeichen ist. Der größte Wert, den das erste Zeichen haben kann, ist'z'
== ASCII122
, also ist 123 gut genug. Wenn Sie Großbuchstaben verwenden, können Sie auch 91 anstelle von 123 verwenden und ein anderes Zeichen speichern.C # (.NET Core) ,
122111 Bytes11 Bytes dank @KevinCruijssen gespeichert
Probieren Sie es online!
Erläuterung:
quelle
while
auf einfor
und das Entfernen der Klammern:for(int i=1,e,d;i<s.Length;r+=s[i++])for(e=d=s[i]-s[i-1];d-->1;r+=t[(e-d)%4]);
. :) Oh, und da Sie verwendent="ETAP"
nur einmal, können Sie es direkt verwenden und ändernstring
zuvar
7 weitere Bytes zu speichern:s=>{var r=""+s[0];for(int i=1,e,d;i<s.Length;r+=s[i++])for(e=d=s[i]-s[i-1];d-->1;r+="ETAP"[(e-d)%4]);return r;}
.Yabasic , 119 Bytes
Eine anonyme Funktion, die Eingaben als Großbuchstaben akzeptiert und an STDOUT ausgibt.
Probieren Sie es online!
quelle
Python 3, 90 Bytes
Probieren Sie es online
quelle
**title**
bis festgelegt#title
. Würde es Ihnen auch etwas ausmachen , einen TryItOnline-Link mit Testcode hinzuzufügen ?Clojure,
139119 BytesAnonyme Funktion, die die Zeichenfolge übernimmt und die aufgezeichnete zurückgibt. Wie immer scheint Clojure nicht allzu gut zu funktionieren. Was ich nicht wirklich herausfinden konnte, ist das Abrufen des nächsten Charakters auf kurze Weise. Beim letzten Mal würde mir ein
OutOfBoundsException
Grund klar werden. Also habe ich es umgangencycle
. Vielleicht gibt es eine elegantere Lösung.Ungolfed
Aktualisieren
Es ist gelungen, ein paar Bytes abzuschirmen. Befreie dich von der lästigen
if
Aussage, indem du die Differenz dekrementierst.take
Erzeugt eine leere Liste, wenn die Zahl 0 oder weniger ist, was wiederum zu einer leeren Zeichenfolge führt.Ungolfed
quelle
APL (Dyalog Classic) , 30 Byte
Probieren Sie es online!
{ }
anonyme Funktion mit Argument⍵
⎕a⍳⍵
finden Sie Indizes seiner Zeichen im Alphabet2-/
paarweise Unterschiede (prev minus next)1+
addiere 1-
negieren0⌈
max (0, ...)0,
stellen Sie eine 0 voran⍴∘'TAPE'¨
umformen zyklisch die Zeichenfolge'TAPE'
zu jedem⍵,¨⍨
Hängen Sie jedes Zeichen vom Argument an die entsprechende umgeformte Zeichenfolge an∊
ebnenquelle
CJam ,
2725 BytesProbieren Sie es online!
Weit, weit weg von den anderen Golfsprachen, aber ich bin trotzdem stolz auf dieses Golf.
Erläuterung
quelle
Schale ,
2625 BytesProbieren Sie es online!
quelle
PowerShell , 72 Byte
Probieren Sie es online!
quelle
Java,
213166153 Bytesversuche es online
Bitte hilf mir, es besser zu machen.
Vielen Dank an @cairdcoinheringaahing für den Tipp zu Leerzeichen. Danke an @RM für den Tipp auf Tape String. Vielen Dank an @KevinCruijssen für die Tipps zu Lambda und Ausdrücken.
quelle
"TAPETAPETAPETAPETAPETAPET".substring...
.int a=1,l=i.length;a<=l;a++
Kann seinint a=0,l=i.length;++a<=l;
,char u=i[a-1];o+=u;if(a<l){char n=
kann seinchar u=i[a-1],n;o+=u;if(a<l){n=
,(n-u)
braucht keine Klammer undn-u-1
kann seinn+~u
. Außerdem ist Ihre Antwort derzeit ein Ausschnitt anstelle einer Funktion. Um es zu einem Lambda zu machen, müssen Siei->{
vorne und}
am Ende hinzufügen . Also insgesamt: Online ausprobieren. 153 Bytes