Napisz program lub funkcję, która pobiera niepusty łańcuch jednowierszowy. Ciąg będzie albo zerowy lub więcej spacji, po których nastąpi jeden kropka ( cząstka ), taki jak .
lub .
, lub ciąg będzie sekwencją jednego lub więcej naprzemiennych ukośników do przodu i do tyłu ( fala ), które mogą zaczynać się od jednego, takiego jak jako \
lub /\/
lub \/\/\/\/\/\/
.
W obu przypadkach propaguj cząstkę / falę w prawo o jedną jednostkę.
W szczególności w przypadku cząstek wstaw spację przed .
, przesuwając ją o jedno miejsce w prawo, a następnie wyślij powstały ciąg. Na przykład:
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
W przypadku fali dołącz jedną z nich /
lub \
odpowiednio, aby fala ciągle się naprzemiennie, a jej długość zwiększy się o jeden, a następnie wyślij wynikowy ciąg. Na przykład:
/
→ /\
\
→ \/
/\
→ /\/
\/
→ \/\
/\/
→ /\/\
\/\
→ \/\/
/\/\
→ /\/\/
\/\/
→\/\/\
W obu przypadkach dane wyjściowe mogą nie zawierać końcowych spacji, ale opcjonalny końcowy znak nowej linii jest dozwolony.
Najkrótszy kod w bajtach wygrywa.
Odpowiedzi:
C, 69 bajtów
Wymaga to maszyny little-endian i wysyłania danych do terminala obsługującego kody specjalne ASCII.
p=s[strlen(s)-1]^46
pobiera ostatni kod ASCII ciągu wejściowego i XORs go z kodem ASCII kropki.p^=p?93:3022856
spowodujep
sięp^93
, jeśli kod nie jest ASCII (z tyłu) ukośnik, gdziep^46^93 == p^115
, który przełącza pomiędzy plecami a ukośnikiem. Jeślip
jest kropką, to zamiast niej będzie3022856
, co jest dla little-endian"\b ."
.printf("%s%s",s,&p);
wypisuje ciąg wejściowy, po którym następuje liczba całkowitap
, interpretowana jako ciąg bajtów endian.źródło
3022856
z'. \b'
, znak literalny wielobajtowej. Świetna odpowiedź!Galaretka ,
1714 bajtówWypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
CJam, 16 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
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.źródło
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)
źródło
-ord(s[-1])&3
also gives 3 different indices.&
!Game Maker Language, 107 bytes
źródło
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.
źródło
/
s if you use a different delimiter, for examples#//#/\\
.MATL, 19 bytes
Try it online! Or verify all test cases.
Explanation
źródło
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:
źródło
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
źródło
C, 85 bytes
Ideone
I haven't slept for about 20 hours, my code probably can be golfed a lot.
źródło
Brachylog, 35 bytes
Test suite. (Slightly modified.)
źródło
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.źródło
Retina, 19 bytes
^H
represents the BS byte. Try it online!źródło
/
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.źródło
JavaScript,
79706558 bytesźródło
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.
źródło
Haskell,
464544 bytesTakes advantage of the fact that
<
.
</
<0
<\
in the ASCII table to save two bytesźródło
Python 2, 72 bytes
Any help golfing more would be greatly appreciated!
This takes the last character in the input and converts it into its ASCII code to get the corresponding index in the list of two characters. Those two characters are appended to all the characters of the input up until the last one.
źródło
SQF, 91
Using the function-as-a-file format:
Call as
"STRING" call NAME_OF_COMPILED_FUNCTION
źródło
Perl, 30 + 1 (
-p
) = 31 bytesNeeds
-p
and-M5.010
or-E
to run :Straight forward implementation of the challenge. (Note that the
||
between the last two regex areor
, as it might be hard to read, so the three regex are :s/\./ ./
, ands|/$|/\\|
, ands|\\$|\\/|
)źródło
C#, 54 bytes
źródło
PowerShell v2+,
59585251 bytesTakes input
$n
, dumps it an array index operation. We select the element of the array based on the index['.\/'.IndexOf($n[-1])
-- i.e., based on the last character of the input$n
, this will result in0
,1
, or2
. That corresponds to the appropriate string of the array. In any case, the resulting string is left on the pipeline and printing is implicit.Test cases
źródło
C#,
8063 bytesźródło
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 machine code on Linux, 50 bytes
Hex dump:
First post here, hope I'm doing this right. This is 32-bit ARM assembly, specifically Thumb-2. The input string is a NUL-terminated string taken in through r0, the output is printed to the stdout. In C-syntax, the prototype for the function would be void func_name(char* string). It is AAPCS (ARM calling convention) complaint, if it weren't then 2 bytes could be shaved off.
Here's the equivalent assembly, with comments explaining what's happening:
źródło
ECMAScript 6 / 2015 (JavaScript), 41 bytes
Good catch Neil.
źródło
+(s+1)
?s<'/'
.R, 119 bytes
Ungolfed :
źródło
SED,
41 3627saved 7 thanks to charlie
uses 3 substitutions:
s/\./ ./
adds a space if there is a.
s|/$|/\\|
,s|$|/|
adds the appropriate slash to the enduses
|
instead of/
as the delimitert
branches to the end if the second regex matches so it doesn't add the other slashźródło
s/\./ ./;s./$./\\.;t;s.$./.
-- it's 27 bytes. The 3rd substitution is simplified and on my system the-re
is not needed. Also, I use.
instead of#
to stay visually in the input space. ;o)Turtlèd, 32 bytes (noncompeting)
Explanation:
źródło
Java 7, 76 bytes
Pretty straightforward.
Ungolfed & test code:
Try it here.
Output:
źródło