De acordo com mim, um tornado se parece com isso:
########
#######
######
#####
####
###
##
#
Esse tornado começa com largura n
e, em cada linha seguinte, um caractere é removido da esquerda ou da direita, dependendo da entrada.
Entrada
A entrada será uma lista de algum tipo de dois valores exclusivos (uma sequência de dois caracteres exclusivos também funciona) e um número inteiro positivo opcional para indicar a largura inicial. Se o número inteiro opcional não for utilizado, a largura inicial será 1 maior que o comprimento da lista. Seja a largura inicial n
.
Como fazer um tornado
No meu exemplo, escolhi minha lista para conter 1
s e 0
s, embora você possa escolher dois valores constantes distintos ou uma sequência de dois caracteres constantes distintos.
A primeira linha será composta por n
caracteres que não sejam espaços em branco (você pode escolher qualquer caractere consistente; eu escolho #
no meu exemplo).
Em seguida, para cada número da lista, se o número for 0
, remova o caractere esquerdo e crie uma nova linha; se for um 1
, remova o caractere certo e crie uma nova linha.
Assim, o tornado acima é a saída para 8, [1, 0, 0, 0, 1, 0, 0]
.
Saída
A saída pode ser uma lista de cadeias, uma lista de listas de caracteres ou uma cadeia de linhas múltiplas. O espaço em branco à direita em cada linha é permitido e uma nova linha à direita no final é permitida.
Casos de teste
Esses casos de teste incluem a largura inicial e usam listas de 1, 0
.
5, [1,0,0,1]
#####
####
###
##
#
10, [1,0,0,1,0,1,0,0,1]
##########
#########
########
#######
######
#####
####
###
##
#
7, [1,1,1,1,1,1]
#######
######
#####
####
###
##
#
100,
[1,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,1,0,0,1,1,0,0,0,0,1]
Regras
- Aplicam-se brechas padrão
- O menor código em bytes vence! código-golfe
- O plano de fundo não precisa ser um espaço (esqueci de especificar isso anteriormente).
- Seu idioma precisa apenas suportar números (larguras) que ele possa manipular, mas se o seu intérprete tiver sido reescrito com um tamanho de número maior, ele deverá funcionar teoricamente.
Respostas:
V ,
15, 12 bytesExperimente online!
l
para a direita (faz todo o sentido, não é?) e>
para a esquerda.fonte
Python 2 ,
6659 bytes-7 bytes graças a Arnold Palmer
Experimente online!
0
remover da direita,1
remover da esquerdafonte
len(z)+1
porx
se "número inteiro positivo opcional" significa que você não precisa usá-lo. A redação da pergunta faz parecer que isso é permitido, pois diz "Se o número inteiro opcional não for utilizado" versus "Se o número inteiro opcional não for fornecido".vim,
8582 bytes<ESC>
é 0x1B,<CR>
é0x0D
,<C-v>
é 0x16. E<ESC>OH
é uma sequência multibyte representando a tecla HOME.A entrada usa
a
como o valor "remover à esquerda" eb
como "remover à direita".Nenhum link TIO, infelizmente. Não consegui fazê-lo funcionar no V. Teste, copiando o código para tornado.vim (substituindo
<ESC>
, etc, por seus bytes reais) e executando da seguinte maneira:-3 bytes devido à sugestão de Neil.
fonte
^
vez de␛OH
?^
vai para o primeiro caractere que não está em branco.␛OH
vai para o primeiro caractere.0
que não ...05AB1E ,
119 bytes-2 bytes graças a Erik the Outgolfer
Remover da esquerda:
1
Remover da direita:
0
Experimente online!
fonte
0×ηsηO
tem muito potencial, mas não consigo descobrir com menos de 11 bytes.ðy×ì
comyú
a -2.Retina ,
3028 bytesExperimente online! Toma apenas uma sequência de 0s e 1s e calcula a largura com base na sequência. Explicação: O primeiro estágio pega a sequência de entrada e a duplica uma vez para cada ponto de limite, inserindo
#
a nesse ponto. O segundo estágio altera todos os dígitos depois de#
para mais#
s, criando o triângulo. O terceiro stange então apaga todos os restantes e muda os zeros para espaços que resultam na "oscilação" do torndao.fonte
J, 32 bytes
destroçado
Experimente online!
fonte
' #'#~0(,.#\.)@,+/\
, onde a entrada é invertida da amostra, pois o desafio permite escolher os dois valores distintos.Perl, 43 bytes
Código de 42 bytes + 1 para
-l
.Experimente online!
fonte
R ,
85bytes3 bytes salvos graças a Giuseppe
Experimente online!
Explicação:
fonte
{}
e utilizado uma nova linha literal em vez de'\n'
Haskell, 50 bytes
Experimente online!
Se a lista de entrada puder ser uma lista de nomes de funções, podemos salvar um byte
Haskell, 49 bytes
Exemplo de uso:
h 5 [g,f,f,g]
.Experimente online!
Como funciona:
fonte
Python 2,
5857 bytesedit: economizou 1 byte graças ao xnor
Experimente online!
1 para remover da esquerda, 0 para remover da direita.
fonte
s=" "*i+s[:-1]
com a esquerda e a direita trocadas.R ,
116109102 bytes-5 bytes graças a user2390246 (e outros 2 eu me salvei)
Superado pelo usuário2390246
Experimente online!
Retorna uma função anônima que leva
n
e um vetorl
com0
para a remoção da esquerda e1
para a remoção da direita, e imprime o resultado para o console com a formatação direita.fonte
#
s será n-i + 1: experimente online! Apesar de haver uma abordagem um pouco melhor se você apenas imprimir linha por linha, em vez de construir uma matriz: codegolf.stackexchange.com/a/133720/66252Japt ,
1413 bytes-1 byte graças a @ETH
Entrada é a matriz, depois o tamanho. Os valores da matriz são
""
or" "
, que representam a remoção da direita ou da esquerda, respectivamente. Usa em"
vez de#
e retorna como uma matriz de seqüências de caracteres.A idéia aqui era primeiro criar uma matriz do preenchimento esquerdo para cada linha, daí as seqüências de entrada. Então, cada linha recebe os
"
s adicionados, usando o fato de que a quantidade de"
s diminui 1 em cada vez.Experimente online!
Todos eles usam o
-R
sinalizador para formatar a saída juntando-o a novas linhas.Explicação
Implícito:
U
= matriz de entrada,V
= número de entrada.Reduza cumulativamente a matriz de entrada (
å
) com concatenação de string (+
). Isso resulta na matriz de cada valor intermediário da redução. Em seguida, acrescente (u
) uma sequência vazia (P
) à matriz.Mapeie
£
cada valor para si mesmo (X
) concatenado com ...O caractere de citação (
Q
) repetido (p
)V--
(V´
) vezes. Isso também diminui aV
cada vez.fonte
YnV
paraV´
++
ou--
no Japt.ArnoldC , 3132 bytes
O ArnoldC não possui concatenações de strings, portanto, isso cria um tornado de se
8
usa1
s para espaçá-lo. O ArnoldC também suporta apenas números inteiros de até 16 bits, portanto, excede a entrada com mais de 7 dígitos. (Então ele só fará mini-tornados)1
fica à esquerda, qualquer outro dígito está certo (embora eu não recomendo0
, pois você não pode começar com isso.)Entrada:
1221122
Saída:
Código de golfe:
Experimente online!
Código não destruído (5178 bytes):
fonte
Haskell ,
6764 bytesA entrada é invertida:
0
significa remover à direita e1
remover à esquerda:Experimente online!
"Ungolfed"
fonte
Java (OpenJDK 8) ,
138133 bytesExperimente online!
fonte
C,
6863 bytesIsso faz uso da especificação de largura do campo dinâmico em uma
printf()
sequência de formato. A função é chamada assim:fonte
int s=0;
e colocandos;
antes dof(w,i)
. Como assimJavaScript (ES6), 64 bytes
Função anônima que aceita parâmetros na sintaxe de curry (a) (b). Na matriz b, uma cadeia vazia representa a remoção da direita e um espaço representa a remoção da esquerda.
Usando 1 e 0, como nos exemplos, a pontuação é 70
Teste
fonte
PowerShell , 53 bytes
Experimente online!
Recebe a entrada
$a
como o número inteiro opcional e$b
como a matriz de1
e0
s. (Observe que minha matriz de1
e0
é flip-flop dos desafios.) Constrói a linha inicial de#
e a deixa no pipeline. Em seguida, passa de0
para$a
. A cada iteração, produzimos um número de espaços possivelmente incrementado, seguido por um número pré-decrementado de#
. Sim, isso cuspirá uma nova linha em branco no final, pois estamos repetindo$a
o número de itens da lista em vez do número.Todas as seqüências individuais são deixadas no pipeline e a saída com um separador de nova linha entre elas fica implícita na conclusão do programa.
fonte
C #, 181 bytes
Experimente online!
Versão completa / formatada:
fonte
Carvão , 17 bytes
Experimente online! O link está na versão detalhada do código mais próxima. Explicação:
A primeira entrada fornece o número de iterações de loop.
Como os índices de loop são padronizados como zero-indexados, adicionamos um aqui para obter o número correto de
#
s.Começando na parte inferior do tornado e processando economiza um byte, mas precisamos inverter a segunda entrada para poder indexar o dígito atual.
Se o dígito atual for a
1
, mova para cima. Isso faz com que a linha anterior tenha um extra#
no final.Se o dígito atual for a
0
, mova para cima e para a esquerda. Isso faz com que a linha anterior tenha um extra#
no início.fonte
C # , 159 bytes
Explicação
Experimente online!
fonte
PHP, 136 bytes
Salve em um arquivo php e teste com
php file.php 8 '1,0,0,0,1,0,0'
. Saída:Infelizmente, preparar a entrada é metade do trabalho.
Outra versão (158 bytes) usando em
str_repeat
vez deprintf
e ...goto
de todas as coisas:fonte