É na minha humilde opinião que o texto padrão é chato. Portanto, proponho um novo padrão de escrita, palavras ambulantes!
Palavras ambulantes
Palavras ambulantes são aquelas que respondem a certos caracteres. Para o propósito deste desafio, os personagens de gatilho são [u, d, r, l]
de up down right left
.
Sempre que encontrar esse caractere ao imprimir texto, você moverá a direção do texto.
Por exemplo, o textoabcdef
resultará em:
abcd
e
f
Regras
- Maiúsculas
UDRL
e minúsculasudrl
devem mudar a direção, mas a caixa deve ser preservada na saída - A entrada conterá apenas caracteres imprimíveis
(0-9, A-Z, a-z, !@#%^&*() etc...)
, sem novas linhas! - Sempre que o texto colidir, ele substituirá o caractere antigo nessa posição
- A saída deve ser apresentada ao usuário em qualquer assunto da moda, mas deve ser uma saída única (sem matriz de linhas)
- Novas linhas à direita e à direita são permitidas
- Espaços à direita são permitidos
- Aplicam-se brechas padrão
Casos de teste
empty input => empty output or a newline
u =>
u
abc =>
abc
abcd =>
abcd
abcde =>
abcd
e
abcdde =>
abcd
d
e
codegolf and programming puzzles =>
cod
e
g
o
dna fl sel
z
p z
rogramming pu
ABCDELFUGHI =>
I
AHCD
G E
UFL
It is in my humble opinion that standard text is boring. Therefore I propose a new writing standard, walking words! =>
dnats taht noinipo el
a b
rd m
It is in my hu
t
e
x
t
i
s
b
o
ring. Therefore I propose a new writing stand
a
rd
,
w
a
rdw gnikl
s
!
Este é o código-golfe , o código mais curto em bytes vence!
code-golf
grid
printable-ascii
Bassdrop Cumberwubwubwub
fonte
fonte
golf
por si só?gfl
Respostas:
Carvão ,
29272019 bytesExperimente online! Link é a versão detalhada do código. Explicação:
Faça um loop sobre os caracteres de entrada.
Se a letra atual é uma direção ...
atualize a direção atual a pé.
Imprima o caractere na direção atual a pé, padronizando para a direita se nenhuma direção ainda tiver sido definida.
fonte
⌕
deveria ser um№
. Me desculpe por isso.Dyalog APL , 63 bytes
s@(n+11 9∘○¨+\0j1*⊃¨,⍨\(8∘≠⍴¨⊢)0,'rdluRDLU'⍳¯1↓s)⍴∘'',⍨2×n←≢s←⍞
usos
⎕IO←0
e recursos da v16 (@
)n←≢s←⍞
entrada brutas
e seu comprimenton
⍴∘'',⍨2×n
crie uma matriz de espaços 2n por 2ns@(...)
alterar a matriz com os caracteress
nos índices (pares de) especificadoscomo os índices são calculados:
¯1↓s
solte o último caractere des
'rdluRDLU'⍳'
codificar'r'
como 0,'d'
como 1, etc; outros caracteres como 80,
preceder um 0(8∘≠⍴¨⊢)
transforme cada 8 em uma lista vazia, todos os outros em uma lista de 1 elemento,⍨\
concatenações trocadas cumulativas (abcd
->a ba cba dcba
)⊃¨
primeiro de cada0j1*
constante imaginária i ao poder de+\
somas acumuladas11 9∘○¨
parte real e imaginária de cada um; obter cordas na faixa-n
...n
n+
centre-os na grande matrizfonte
Pitão,
6865 bytesSuíte de teste
Isso usa um dicionário, indexado por um par de coordenadas, que é atualizado conforme a entrada é lida e depois impresso no final. Ele também usa uma tonelada de truques de golfe inteligentes.
Aqui está como eu escrevi, usando a
-m
flag do intérprete para remover o espaço em branco e os comentários antes de executar:fonte
C #,
525474 bytesEdit: Saved 51 Bytes graças a @steenbergh
Não é bonito, mas funciona ...
Golfe:
Ungolfed:
Explicação:
Usa uma matriz bidimensional e o
d
valor para incrementar a posição da matriz na direção da correção, em que os valores de d são:Teste:
fonte
d=0;
, substitua esta declaração pela declaração em segundo interruptorcase 0:
declaração e fazer semelhante a outros casos e você pode não precisar de um segundo switch.And finalmente remover esta declaraçãoa[y,x]=s[i]
e gravá-lo no topo do primeiro interruptor.a[y,x]=s[i]
antes da primeira troca?switch(s[i].toLowerCase())
(ou qual é o equivalente em c # ...) e remover todas as maiúsculas. Deve salvar alguns bytes.ToUpper()
porque não échar
umstring
. As escolhas sãos[i].ToString().ToUpper()
ouchar.ToUpper(s[i])
- acho que achar
mais curta. Cheers :) #JavaScript (ES6), 218
220 232Editar Eu estava usando
u
et
para acompanhar a posição superior e mais à esquerda, mas percebi que issot
não é necessário.Menos golfe
Teste
fonte
05AB1E ,
27 26 25 2322 bytesEconomizou 3 bytes graças ao Grimy
Experimente online!
Explicação
fonte
Javascript, 4̶6̶6̶,
455, 433 bytesEdições: 11 bytes salvos, graças ao usuário 1000000000 10 ou mais salvos, graças ao user2428118 Também foram removidos alguns pontos e vírgulas desnecessários.
Tenho certeza de que isso pode ser ainda mais jogado, mas não consegui administrá-lo. Eu ainda sou novo, então qualquer conselho é muito apreciado :)
Ungolfed:
}
Eu mais ou menos adotei a abordagem de:
fonte
['r','u','l','d']
por"ruld"
z=
no início do seu programaa.split``
.Python 3,
314309290268 BytesEu tentei executar o meu programa como entrada para o meu programa com alguns resultados interessantes. Hah, tente interpretar isso, Python!
Raspado 5 bytes - elogios a Jack Bates.
23 bytes levados embora pela Kundor
Nota: Acho que houve algum erro de medição nos meus bytes devido ao uso de editores diferentes. No entanto, tenho certeza de que o último está correto.
fonte
'r':(1,0)
por'r':d
e removendo o espaço emw[a] for
. Também isso é loucura !!! Quanto tempo isso levou?X,Y=map(...)
linha porX,Y=zip(*m)
. Trabalha aqui. (*m
Descompacta a uma lista de suas chaves, e zip reagrupa-los para duas tuplas.)PHP,
23822320420bytes12 bytes salvos por Jörg (em
stripos
vez depreg_match
), 1 byte + chaves levando à frente da nova linha à direita, 16 + chaves jogadas a partir da mudança de direção, mais 1 com ternário em vez deif
.Executar como tubo com
php -nR '<code>'
ou experimente online .demolir
fonte
strspn($r[$y+=$e][$x+=$d]=$c,udlruDLR)
vir esse direito, deve salvar alguns bytes em vez de usar o regex, ´stripos (_ulrd, $ r [$ y + = $ e] [$ x + = $ d] = $ c) `deve ser melhor como strspn$argn
salvar 3 bytesJava 10,
288286280263 bytes-17 bytes graças a @Grimy .
Explicação:
Experimente aqui. (OBSERVAÇÃO: removo todos os espaços à direita / novas linhas para tornar a saída um pouco mais compacta. Sinta-se à vontade para remover
.replaceAll("(m?)\\s+$","")
otest
método no método para ver o resultado real.)fonte
d<69?1:d>84?-1:0
pode ser5-d/14
d==82?1:d==76?-1:0
pode ser3-(d^16)/23
Perl, 204 + 3 = 207 bytes
+3 para
-F
O espaço em branco não faz parte do código e é fornecido para legibilidade.
Semelhante à minha solução para o desafio do Fizz Buzz, eu crio um hash com coordenadas x, y para cada etapa do caminho, mantendo os máximos e mínimos das coordenadas x e y armazenadas, depois passo e imprimo tudo.
Se estiver desesperado , talvez consiga transformar as três últimas linhas do primeiro
for
loop em uma única declaração nojenta que possa salvar um byte ou dois, mas não estou ansioso pelo resultado completamente ilegível.fonte
Excel VBA, 205 bytes
Estou meio surpreso com a capacidade do Excel de competir com as respostas existentes. Funciona porque
w
ez
acompanha a direção.fonte
SmileBASIC,
148146 bytesChame a função com
W "text",vx,vy
, em que vx e vy é a direção no início (o padrão é 1,0)fonte
Swift 3, 283 bytes
Ungolfed
Atenção
Entrada mais longa requer tela maior. A saída não tem tratamento para linhas / colunas "vazias", como eu entendi que é aceitável pelas regras do desafio.
Rant
print
suxfonte