Escreva um programa ou função que utilize uma sequência de linhas simples não vazia. A cadeia terá zero ou mais espaços seguidos por um período (uma partícula ), como .
or .
, ou a cadeia será uma sequência de uma ou mais barras alternadas para frente e para trás (uma onda ) que poderiam começar com uma, como \
ou /\/
ou \/\/\/\/\/\/
.
Nos dois casos, propague a partícula / onda para a direita por uma unidade.
Especificamente, no caso das partículas, insira um espaço antes de .
, movendo-o um lugar para a direita e, em seguida, imprima a sequência resultante. Por exemplo:
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
No caso de onda, acrescente uma /
ou de \
forma adequada para que a onda continue alternando e seu comprimento aumente em um, depois produza a string resultante. Por exemplo:
/
→ /\
\
→ \/
/\
→ /\/
\/
→ \/\
/\/
→ /\/\
\/\
→ \/\/
/\/\
→ /\/\/
\/\/
→\/\/\
Em ambos os casos, a saída pode não ter espaços à direita, mas uma nova linha à direita opcional é permitida.
O código mais curto em bytes vence.
Respostas:
C, 69 bytes
Isso requer uma máquina little-endian e saída para um terminal que suporte códigos de escape ASCII.
p=s[strlen(s)-1]^46
pega o último código ASCII da sequência de entrada e o XORs com o código ASCII de um ponto.p^=p?93:3022856
fará comp
quep^93
se o código ASCII não for uma barra (de volta), ondep^46^93 == p^115
, que alternará entre a barra de retorno e a de avanço. Sep
é um ponto, será, em vez disso3022856
, o que é pouco endian"\b ."
.printf("%s%s",s,&p);
imprime a sequência de entrada seguida pelo número inteirop
, interpretada como uma sequência de bytes little-endian.fonte
3022856
por'. \b'
um literal de caractere multibyte. Resposta incrível!Geléia ,
1714 bytesExperimente online! ou verifique todos os casos de teste .
Como funciona
fonte
CJam, 16 bytes
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
Python, 41 bytes
Casework. Usa a ordem classificada
' ', '.', '/', '\'
. Para espaços e pontos, precede um espaço. Caso contrário, anexa uma barra ou barra preta oposta ao último caractere.fonte
Pitão,
4442 bytesSubstitui o último caractere pelo conjunto correspondente de dois caracteres. link ideone
(-2 bytes graças à função de mapeamento mais curta do @ xsot)
fonte
-ord(s[-1])&3
também fornece 3 índices diferentes.&
!Linguagem do Game Maker, 107 bytes
fonte
Vim,
2723 pressionamentos de teclasPrimeira resposta do vim, nunca usei o vim de maneira alguma.
Como funciona: Anexa a
/
no final da linha, subs//
para/\
, subs./
para.
fonte
/
s se usar um delimitador diferente, por exemplos#//#/\\
.MATL , 19 bytes
Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
CJam,
352625 bytesEconomizou 9 bytes graças a dennis
Economizou mais 1 byte, também graças a dennis
Experimente online!
Provavelmente mal jogou golfe, mas não estou muito familiarizado com CJam. Provavelmente existe uma maneira melhor de verificar se um elemento está em uma matriz, mas não consegui encontrar nenhum operador para isso.
Explicação:
fonte
W
é inicialmente-1
e?
funciona tanto com blocos e outros itens da pilha, de modo que você pode reduzir o seu código paraq:I'.#)SI+IW='/=I'\+I'/+??
&
.05AB1E,
1715 bytesExplicação
Experimente online
fonte
C, 85 bytes
Ideone
Eu não durmo há cerca de 20 horas, meu código provavelmente pode ser muito jogado.
fonte
Braquilog , 35 bytes
Suíte de teste. (Ligeiramente modificado.)
fonte
Matlab,
74716257 bytesEle calcula os dois últimos caracteres com base no
s(1)
(primeiro caractere) - para determinar se estamos lidando com o\/
caso e o último caracteres(end)
para fazer a tupla correta para os\/
caracteres.fonte
Retina, 19 bytes
^H
representa o byte BS. Experimente online!fonte
/
se tornaria/\/
.> <> , 47 bytes
Experimente online!
A primeira linha é um loop de entrada padrão> <>. A segunda linha escolhe o caractere apropriado
/ \
para anexar à string, com base no último caractere de entrada. Além disso, se o último caractere de entrada for a.
, os dois principais elementos serão alternados. Finalmente, o conteúdo da pilha é impresso ao contrário.fonte
JavaScript,
79706558 bytesfonte
b.charAt(i+1)
porb[i+1]
para salvar alguns bytes. Além disso, isso não funciona para todos os casos de teste.\/
dá `/ \`, por exemplo.b
ei
como parâmetros com um valor padrão:(a,b=...,i=...)=>
para evitarreturn
{ }
bem por causa disso.C # - 46 bytes
s=>s[0]<47?' '+s:s+(s.EndsWith("/")?'\\':'/')
Experimente aqui.
fonte
Haskell,
464544 bytesTira proveito do fato de que
<
.
</
<0
<\
na tabela ASCII para salvar dois bytesfonte
Python 2, 72 bytes
Qualquer ajuda no golfe seria muito apreciada!
Isso pega o último caractere na entrada e o converte em seu código ASCII para obter o índice correspondente na lista de dois caracteres. Esses dois caracteres são anexados a todos os caracteres da entrada até o último.
fonte
SQF, 91
Usando o formato de função como um arquivo:
Ligar como
"STRING" call NAME_OF_COMPILED_FUNCTION
fonte
Perl, 30 + 1 (
-p
) = 31 bytesPrecisa
-p
e /-M5.010
ou-E
executar:Implementação direta do desafio. (Observe que
||
entre as duas últimas regex sãoor
, como pode ser difícil de ler, as três regex são:,s/\./ ./
es|/$|/\\|
, es|\\$|\\/|
)fonte
C #, 54 bytes
fonte
PowerShell v2 +,
59585251 bytesPega entrada
$n
, despeja uma operação de índice de matriz. Nós selecionamos o elemento da matriz com base no índice['.\/'.IndexOf($n[-1])
- ou seja, com base no último caractere da entrada$n
, isso irá resultar em0
,1
ou2
. Isso corresponde à sequência apropriada da matriz. De qualquer forma, a sequência resultante é deixada no pipeline e a impressão está implícita.Casos de teste
fonte
C #,
8063 bytesfonte
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 da máquina ARM no Linux, 50 bytes
Despejo hexagonal:
Primeiro post aqui, espero que eu esteja fazendo isso certo. Este é um conjunto ARM de 32 bits, especificamente o Thumb-2. A sequência de entrada é uma sequência terminada em NUL, obtida através de r0, a saída é impressa no stdout. Na sintaxe C, o protótipo para a função seria nulo func_name (char * string). É uma reclamação AAPCS (convenção de chamada do ARM), se não fosse, então 2 bytes poderiam ser removidos.
Aqui está a montagem equivalente, com comentários explicando o que está acontecendo:
fonte
ECMAScript 6/2015 (JavaScript), 41 bytes
Boa captura Neil.
fonte
+(s+1)
?s<'/'
.R, 119 bytes
Ungolfed:
fonte
SED,
41 3627economizou 7 graças a charlie
usa 3 substituições:
s/\./ ./
adiciona um espaço, se houver.
s|/$|/\\|
,s|$|/|
adiciona a barra apropriada aosusos finais, e
|
não/
como delimitadort
ramifica até o fim se o segundo regex corresponder para que ele não adicione a outra barrafonte
s/\./ ./;s./$./\\.;t;s.$./.
- são 27 bytes. A terceira substituição é simplificada e, no meu sistema, isso-re
não é necessário. Além disso, eu uso em.
vez de#
ficar visualmente no espaço de entrada. ; o)Turtlèd , 32 bytes (não-competitivo)
Explicação:
fonte
Java 7, 76 bytes
Bem direto.
Ungolfed & código de teste:
Experimente aqui.
Saída:
fonte