Escriba un programa o función que tome una cadena de una sola línea no vacía. La cadena será cero o más espacios seguidos de un período (una partícula ), como .
o .
, o la secuencia será una secuencia de una o más barras alternadas hacia adelante y hacia atrás (una onda ) que podría comenzar con cualquiera de estos como \
o /\/
o \/\/\/\/\/\/
.
En cualquier caso, propague la partícula / onda hacia la derecha en una unidad.
Específicamente, en el caso de partículas, inserte un espacio antes del .
, moviéndolo un lugar a la derecha, luego envíe la cadena resultante. Por ejemplo:
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
En el caso de la onda, agregue cualquiera /
o \
apropiadamente para que la onda se mantenga alterna y su longitud aumente en uno, luego envíe la cadena resultante. Por ejemplo:
/
→ /\
\
→ \/
/\
→ /\/
\/
→ \/\
/\/
→ /\/\
\/\
→ \/\/
/\/\
→ /\/\/
\/\/
→\/\/\
En cualquier caso, la salida puede no tener espacios finales pero se permite una nueva línea final opcional.
El código más corto en bytes gana.
Respuestas:
C, 69 bytes
Esto requiere una máquina little endian y salida a una terminal que admita códigos de escape ASCII.
p=s[strlen(s)-1]^46
toma el último código ASCII de la cadena de entrada y lo XOR con el código ASCII de un punto.p^=p?93:3022856
causaráp
que seap^93
si el código ASCII no es una barra diagonal (posterior), dondep^46^93 == p^115
, que alternará entre barra diagonal inversa y diagonal. Sip
es un punto, lo será3022856
, lo cual es little-endian para"\b ."
.printf("%s%s",s,&p);
imprime la cadena de entrada seguida por el enterop
, interpretado como una cadena de bytes little-endian.fuente
3022856
con'. \b'
un literal de caracteres multibyte. Respuesta impresionante!Jalea ,
1714 bytesPruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
CJam, 16 bytes
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
Python, 41 bytes
Trabajo de caso Utiliza el orden ordenado
' ', '.', '/', '\'
. Para espacios y punto, antecede un espacio. De lo contrario, agrega una barra diagonal o una barra negra opuesta al último carácter.fuente
Python,
4442 bytesReemplaza el último carácter con el conjunto correspondiente de dos caracteres. enlace ideone
(-2 bytes gracias a la función de mapeo más corta de @xsot)
fuente
-ord(s[-1])&3
También da 3 índices diferentes.&
!Lenguaje Game Maker, 107 bytes
fuente
Vim,
2723 pulsaciones de teclasPrimera respuesta de vim, no he usado vim en absoluto, incluso.
Cómo funciona: agrega un
/
al final de la línea, subs//
para/\
, subs./
para.
fuente
/
s si utiliza un delimitador diferente, por ejemplos#//#/\\
.MATL , 19 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
CJam,
352625 bytesGuardado 9 bytes gracias a dennis
Guardado 1 byte más, también gracias a dennis
Pruébalo en línea!
Probablemente mal golfizado, pero no estoy muy familiarizado con CJam. Probablemente haya una mejor manera de verificar si un elemento está en una matriz, pero no pude encontrar ningún operador para eso.
Explicación:
fuente
W
es inicialmente-1
y?
funciona con bloques y otros elementos de la pila, por lo que puede reducir su código aq:I'.#)SI+IW='/=I'\+I'/+??
&
.05AB1E,
1715 bytesExplicación
Pruébalo en línea
fuente
C, 85 bytes
Ideona
No he dormido durante aproximadamente 20 horas, mi código probablemente se pueda jugar mucho.
fuente
Brachylog , 35 bytes
Banco de pruebas. (Ligeramente modificado.)
fuente
Matlab,
74716257 bytesCalcula los dos últimos caracteres en función del
s(1)
(primer carácter), para determinar si estamos tratando con el\/
caso, y el último personajes(end)
para hacer la tupla correcta para los\/
personajes.fuente
Retina, 19 bytes
^H
representa el byte BS. Pruébalo en línea!fuente
/
se convertiría/\/
.> <> , 47 bytes
Pruébalo en línea!
La primera línea es un bucle de entrada estándar> <>. La segunda línea elige el carácter apropiado
/ \
para agregar a la cadena, en función del último carácter de entrada. Además, si el último carácter de entrada fue a.
, se cambian los dos elementos superiores. Finalmente, el contenido de la pila se imprime al revés.fuente
JavaScript,
79706558 bytesfuente
b.charAt(i+1)
conb[i+1]
para guardar algunos bytes. Además, esto no funciona para todos los casos de prueba.\/
da `/ \`, por ejemplo.b
yi
como parámetros con un valor predeterminado:(a,b=...,i=...)=>
evitarreturn
{ }
también debido a esto.C # - 46 bytes
s=>s[0]<47?' '+s:s+(s.EndsWith("/")?'\\':'/')
Pruébalo aquí.
fuente
Haskell,
464544 bytesSe aprovecha del hecho de que
<
.
</
<0
<\
en la tabla ASCII para salvar dos bytesfuente
Python 2, 72 bytes
¡Cualquier ayuda para jugar más al golf sería muy apreciada!
Esto toma el último carácter en la entrada y lo convierte en su código ASCII para obtener el índice correspondiente en la lista de dos caracteres. Esos dos caracteres se agregan a todos los caracteres de la entrada hasta el último.
fuente
SQF, 91
Usando el formato de función como archivo:
Llamar como
"STRING" call NAME_OF_COMPILED_FUNCTION
fuente
Perl, 30 + 1 (
-p
) = 31 bytesNecesidades
-p
y /-M5.010
o-E
correr:Implementación directa del desafío. (Tenga en cuenta que
||
entre las dos últimas expresiones regulares sonor
, ya que puede ser difícil de leer, por lo que las tres expresiones regulares son:,s/\./ ./
ys|/$|/\\|
, ys|\\$|\\/|
)fuente
C #, 54 bytes
fuente
PowerShell v2 +,
59585251 bytesToma entrada
$n
, la convierte en una operación de índice de matriz. Seleccionamos el elemento de la matriz en base al índice['.\/'.IndexOf($n[-1])
- es decir, basado en el último carácter de la entrada$n
, esto dará lugar a0
,1
o2
. Eso corresponde a la cadena apropiada de la matriz. En cualquier caso, la cadena resultante se deja en la tubería y la impresión es implícita.Casos de prueba
fuente
C #,
8063 bytesfuente
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/ykKIL1Código de máquina ARM en Linux, 50 bytes
Volcado hexadecimal:
Primera publicación aquí, espero que esté haciendo esto bien. Este es un ensamblaje ARM de 32 bits, específicamente Thumb-2. La cadena de entrada es una cadena terminada en NUL tomada a través de r0, la salida se imprime en la salida estándar. En la sintaxis C, el prototipo de la función sería nulo func_name (char * string). Es una queja de AAPCS (convención de llamada ARM), si no fuera así, se podrían eliminar 2 bytes.
Aquí está la asamblea equivalente, con comentarios que explican lo que está sucediendo:
fuente
ECMAScript 6/2015 (JavaScript), 41 bytes
Buena captura Neil.
fuente
+(s+1)
?s<'/'
.R, 119 bytes
Sin golf:
fuente
SED,
41 3627guardado 7 gracias a charlie
usa 3 sustituciones:
s/\./ ./
agrega un espacio si hay un.
s|/$|/\\|
,s|$|/|
agrega la barra diagonal a losusos finales en
|
lugar de/
como delimitadort
se ramifica hasta el final si la segunda expresión regular coincide para que no agregue la otra barra inclinadafuente
s/\./ ./;s./$./\\.;t;s.$./.
son 27 bytes. La tercera sustitución se simplifica y en mi sistema-re
no es necesaria. Además, uso en.
lugar de#
permanecer visualmente en el espacio de entrada. ; o)Turtlèd , 32 bytes (sin competencia)
Explicación:
fuente
Java 7, 76 bytes
Muy claro.
Ungolfed y código de prueba:
Pruébalo aquí.
Salida:
fuente