Schreiben Sie ein Programm oder eine Funktion, die eine nicht leere einzeilige Zeichenfolge enthält. Die Zeichenfolge besteht entweder aus null oder mehr Leerzeichen, gefolgt von einer Periode (einem Partikel ) wie .
oder .
, oder die Zeichenfolge besteht aus einer Folge von einem oder mehreren abwechselnden Schrägstrichen (einer Welle ), die mit einem der beiden beginnen können, z als \
oder /\/
oder \/\/\/\/\/\/
.
In beiden Fällen müssen Sie das Partikel / die Welle um eine Einheit nach rechts ausbreiten .
Fügen Sie im Partikelfall ein Leerzeichen vor dem ein .
, verschieben Sie es um eine Stelle nach rechts und geben Sie dann die resultierende Zeichenfolge aus. Beispielsweise:
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
Fügen Sie im Wave-Fall entweder /
oder \
entsprechend hinzu, damit die Wave abwechselnd und um eins länger bleibt, und geben Sie dann die resultierende Zeichenfolge aus. Beispielsweise:
/
→ /\
\
→ \/
/\
→ /\/
\/
→ \/\
/\/
→ /\/\
\/\
→ \/\/
/\/\
→ /\/\/
\/\/
→\/\/\
In beiden Fällen darf die Ausgabe keine nachgestellten Leerzeichen enthalten, aber eine optionale nachgestellte Newline ist zulässig.
Der kürzeste Code in Bytes gewinnt.
Antworten:
C 69 Bytes
Dies erfordert eine Little-Endian-Maschine und die Ausgabe an ein Terminal, das ASCII-Escape-Codes unterstützt.
p=s[strlen(s)-1]^46
erfasst den letzten ASCII-Code der Eingabezeichenfolge und XOR-verknüpft ihn mit dem ASCII-Code eines Punkts.p^=p?93:3022856
verursachtp
,p^93
wenn der ASCII-Code kein (umgekehrter) Schrägstrich ist, wobeip^46^93 == p^115
zwischen einem umgekehrten und einem vorwärts gerichteten Schrägstrich umgeschaltet wird. Wennp
es ein Punkt ist, wird es stattdessen sein3022856
, was für Little-Endian ist"\b ."
.printf("%s%s",s,&p);
Gibt die Eingabezeichenfolge gefolgt von der Ganzzahl ausp
, die als Little-Endian-Byte-Zeichenfolge interpretiert wird.quelle
3022856
mit'. \b'
, ein Multibyte - Zeichen wörtlich zu nehmen . Geniale Antwort!Jelly ,
1714 BytesProbieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
CJam, 16 Bytes
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
Python, 41 bytes
Casework. Uses the sorted order
' ', '.', '/', '\'
. For spaces and period, prepends a space. Otherwise, appends a slash or blackslash opposite to the last character.quelle
Python,
44 42 bytesReplaces the last character with the correspond set of two characters. ideone link
(-2 bytes thanks to @xsot's shorter mapping function)
quelle
-ord(s[-1])&3
also gives 3 different indices.&
!Game Maker Language, 107 bytes
quelle
Vim,
2723 keystrokesFirst vim answer ever, haven't used vim at all really even.
How it works: It appends a
/
at the end of line, subs//
for/\
, subs./
for.
quelle
/
s if you use a different delimiter, for examples#//#/\\
.MATL, 19 bytes
Try it online! Or verify all test cases.
Explanation
quelle
CJam,
352625 bytesSaved 9 bytes thanks to dennis
Saved 1 more byte, also thanks to dennis
Try it online!
Probably poorly golfed, but I'm not too familiar with CJam. There's probably a better way to check if an element is in an array, but I couldn't find any operators for that.
Explanation:
quelle
W
is initially-1
and?
works both with blocks and other stack items, so you can reduce your code toq:I'.#)SI+IW='/=I'\+I'/+??
&
.05AB1E,
1715 bytesExplanation
Try it online
quelle
C, 85 bytes
Ideone
I haven't slept for about 20 hours, my code probably can be golfed a lot.
quelle
Brachylog, 35 bytes
Test suite. (Slightly modified.)
quelle
Matlab,
74716257 bytesIt computes the last two characters based on the
s(1)
(first character) - to determine if we're dealing with the\/
case, and the last characters(end)
to make the correct tuple for the\/
characters.quelle
Retina, 19 bytes
^H
represents the BS byte. Try it online!quelle
/
would become/\/
.><>, 47 bytes
Try it online!
The first line is a standard ><> input loop. The second line chooses the appropriate character from
/ \
to append to the string, based on the last input character. In addition, if the last input character was a.
, the top two elements are switched. Finally, the stack contents are printed in reverse.quelle
JavaScript,
79706558 bytesquelle
b.charAt(i+1)
withb[i+1]
to save some bytes. Also, this does not work for all test cases.\/
gives `/\`, for example.b
andi
as params with a default value:(a,b=...,i=...)=>
to avoidreturn
{ }
as well because of this.C# - 46 bytes
s=>s[0]<47?' '+s:s+(s.EndsWith("/")?'\\':'/')
Try it here.
quelle
Haskell,
464544 bytesNutzt die Tatsache , dass
<
.
</
<0
<\
in the ASCII table to save two bytesquelle
Python 2, 72 Bytes
Jede Hilfe mehr Golf wäre sehr dankbar!
Dies nimmt das letzte Zeichen in der Eingabe und konvertiert es in seinen ASCII-Code, um den entsprechenden Index in der Liste mit zwei Zeichen zu erhalten. Diese beiden Zeichen werden bis zum letzten Zeichen an alle Zeichen der Eingabe angehängt.
quelle
SQF, 91
Verwenden des Formats "Funktion als Datei":
Anrufen als
"STRING" call NAME_OF_COMPILED_FUNCTION
quelle
Perl, 30 + 1 (
-p
) = 31 BytesBedürfnisse
-p
und-M5.010
oder-E
zu laufen:Einfache Umsetzung der Herausforderung. (Beachten Sie, dass die
||
beiden letzten regulären Ausdrückeor
schwer lesbar sind. Die drei regulären Ausdrücke sind also:,s/\./ ./
unds|/$|/\\|
, und.s|\\$|\\/|
)quelle
C #, 54 Bytes
quelle
PowerShell v2 +,
59585251 ByteÜbernimmt die Eingabe
$n
, gibt eine Array-Indexoperation aus. Wir wählen das Element des Arrays basierend auf dem Index['.\/'.IndexOf($n[-1])
- dh basierend auf dem letzten Zeichen des Eingangs$n
, wird dies zur Folge0
,1
oder2
. Das entspricht der entsprechenden Zeichenfolge des Arrays. In jedem Fall verbleibt die resultierende Zeichenfolge in der Pipeline und das Drucken ist implizit.Testfälle
quelle
C #,
8063 Bytesquelle
s=>{var c=s[s.Length-1];return c<'/'?" "+s:c>'/'?s+"/":s+"\\";}
63 dotnetfiddle.net/8x79azs=>{var c=s[s.Length-1];return c<47?' '+s:s+(c>47?'/':'\\');}
61 dotnetfiddle.net/ykKIL1ARM-Maschinencode unter Linux, 50 Byte
Hex-Dump:
Erster Beitrag hier, hoffe ich mache das richtig. Dies ist eine 32-Bit-ARM-Assembly, insbesondere Thumb-2. Die Eingabezeichenfolge ist eine mit NUL abgeschlossene Zeichenfolge, die über r0 eingegeben wird. Die Ausgabe wird auf die Standardausgabe gedruckt. In der C-Syntax wäre der Prototyp für die Funktion ungültig func_name (char * string). Es ist eine AAPCS-Beschwerde (ARM Calling Convention), wenn es nicht so wäre, könnten 2 Bytes abgeschnitten werden.
Hier ist die entsprechende Assembly mit Kommentaren, die erklären, was passiert:
quelle
ECMAScript 6/2015 (JavaScript), 41 Byte
Guter Fang, Neil.
quelle
+(s+1)
?s<'/'
.R, 119 Bytes
Ungolfed:
quelle
SED,
41 36277 dank charlie gerettet
Verwendet 3 Substitutionen:
s/\./ ./
Fügt ein Leerzeichen hinzu, wenn ein vorhanden ist.
s|/$|/\\|
, unds|$|/|
fügt stattdessen den entsprechenden Schrägstrich an dieEndverwendung
|
an/
als Begrenzert
Verzweigt zum Ende, wenn der zweite reguläre Ausdruck übereinstimmt, sodass der andere Schrägstrich nicht hinzugefügt wirdquelle
s/\./ ./;s./$./\\.;t;s.$./.
- Es sind 27 Bytes. Die 3. Substitution ist vereinfacht und auf meinem System-re
wird die nicht benötigt. Auch benutze ich.
statt#
visuell im Eingaberaum zu bleiben. ; o)Turtlèd , 32 Bytes (nicht konkurrierend )
Erläuterung:
quelle
Java 7, 76 Bytes
Ziemlich einfach.
Ungolfed & Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle