Se você já tentou adicionar rótulos a uma plotagem realmente densa, perceberá que às vezes os rótulos se sobrepõem, dificultando a leitura. Nós vamos fazer algo semelhante, mas em 1D.
A entrada será uma sequência de (label, x-coordinate)
pares e a saída será o resultado do desenho de cada ponto e etiqueta, na ordem especificada. Um asterisco *
representando o ponto deve ser colocado na coordenada x fornecida e o rótulo deve seguir. Quaisquer caracteres existentes serão substituídos.
Por exemplo, se a entrada foi
Hello 0
World 8
Fizz 3
Buzz 5
PPCG 16
X 9
Então o seguinte aconteceria:
*Hello
*Hello *World
*He*Fizz*World
*He*F*Buzzorld
*He*F*Buzzorld *PPCG
*He*F*Buz*Xrld *PPCG
A linha final deve então ser impressa.
Regras de E / S
A entrada pode consistir em qualquer número de pares. Cada etiqueta consiste apenas em letras maiúsculas e minúsculas e os comprimentos das etiquetas terão no máximo 127 caracteres. Cada coordenada x estará entre 0 e 127, inclusive.
A entrada pode estar em qualquer formato conveniente de lista ou string, de modo que os pares sejam inequívocos e os rótulos / coordenadas x se alternem na entrada. Por exemplo, um formato como
[("Hello", 0), ("World", 8) ...]
ou[0 "Hello" 8 "World" ...]
está bom. No entanto, você não pode assumir duas listas separadas de rótulos e coordenadas x.Funções e programas completos estão bem.
Quaisquer pontos não cobertos por uma etiqueta devem ser representados com um espaço. No entanto, pode não haver nenhum espaço em branco inicial ou final estranho além de uma única nova linha final opcional.
Exemplos
Entrada:
OneLabel 10
Saída:
*OneLabel
Entrada:
Heathrow 0
Edinburgh 2
London 4
Liverpool 6
Oxford 8
Saída:
*H*E*L*L*Oxfordl
Entrada:
alpha 20
beta 4
gamma 57
delta 3
epsilon 22
zeta 32
eta 53
theta 27
Saída:
*delta *a*epsi*thetazeta *eta*gamma
Entrada:
abc 5
d 5
abc 10
ABCDEFGHIJKLMNOPQRSTUVWXYZ 127
Saída:
*dbc *abc *ABCDEFGHIJKLMNOPQRSTUVWXYZ
Observe que etiquetas e / ou coordenadas x podem ser repetidas.
Respostas:
CJam,
242319 bytesIsso lê a entrada como uma matriz CJam de pares de rótulos de coordenadas.
Experimente este violino no intérprete CJam ou verifique todos os casos de teste de uma só vez.
Obrigado a @ MartinBüttner por me ajudar a economizar 4 bytes!
Como funciona
fonte
Pitão, 20 bytes
Experimente on-line: Demonstration or Test Suite
Explicação
fonte
JavaScript ES6, 104 bytes
Exemplo de uso
Entrada em um console compatível:
Saída da última instrução:
Explicação
Isso cria uma função anônima de
c
até três expressões que foram AND logicamente juntas. As duas primeiras instruções são sempre verdadeiras, e as regras de curto-circuito do JS dizem que sempre que a primeira for verdadeira, retorne todo o valor no lado direito (sem coagir ao booleano): portanto, isso é formalmente equivalente aA primeira instrução deve ser colocada entre parênteses acima, porque o operador de atribuição
=
tem precedência mais baixa que o operador AND lógico&&
.O conjunto "resto do parâmetro"
..."*"+v
também faz parte do ES6; concatena uma liderança*
à string e, em seguida, interpreta-a como um parâmetro semelhante a uma lista, dividindo-a em vários argumentos fornecidosArray.prototype.splice
, que pegam(m, n, ...rest)
e modificam sua matriz na posiçãom
para removern
elementos e depois inserir todos osrest
argumentos. Para fazer isso antes do ES6, você usaria o mais complicado:A matriz é concatenada com a sequência vazia e o espaço em branco à direita é excluído.
fonte
Python 2, 67 bytes
Toma entrada como
[('Heathrow', 0), ('Edinburgh', 2), ('London', 4), ('Liverpool', 6), ('Oxford', 8)]
e imprime o resultado.O Python não permite que strings sejam modificadas, e a conversão de e para uma lista é cara. Portanto, isso recria a string
z
para adicionar uma nova palavra. Pegamos osb
caracteres antes da palavra, preenchendo espaços, se necessário, depois o novo texto com um asterisco e depois a partez
após a nova palavra. Observe que os espaços finais nunca são adicionados.A
reduce
versão tem 3 caracteres a mais (70):fonte
Ruby,
948175 bytesGolfe:
Aqui está o código não destruído:
Obrigado @ w0lf pelas sugestões sobre o mapeamento da entrada!
Obrigado @ w0lf e @Não Charles pelo pensamento em remover uma variável.
fonte
puts
por$><<
(que não requer espaço extra)..chomp
pode ser removido..to_i
será o caso. Bom pensamento. Obrigado @ w0lf!s[int, int]
formulário em vez des[range]
economizar 1 char.Javascript 121 caracteres
Usando recursos não padrão, funciona no Firefox.
x=Array(255).fill(" ");eval(prompt()).map(s=>{s[0].split``.map((n,i)=>x[s[1]+i+1]=n);x[s[1]]="*"});x=x.join``.trimRight()
Versão antiga:
x=Array(255).fill(" ");eval(prompt()).map(s=>{s[0].split``.map((n,i)=>x[s[1]+i+1]=n);x[s[1]]="*"});x=x.join``.replace(/ +$/,"")
fonte
/ +/
faz muito mais sentido do que\s
decepcionar, eu perdi isso! Você poderia salvar bytes usandox=' '.repeat(255);
e evitando o.join
?.split('')
isso em uma estrutura de dados mutável, mas nesse pontoArray(255).fill(' ')
é mais curto. Na minha versão, a maioria das minhas economias vem de (a) usando a regra "você pode atribuir uma função ou programa" a ser excluídaeval(prompt())
em trocac=>
e (b) usando oArray.prototype.slice
método interno com um parâmetro rest para reduzir um pouco a parte lógica .[].map.call(s[0],
também não salva ...Python, 85 bytes
Experimente online
fonte
'z'[2::5]
(backticks em vez de apóstrofes) em vez de''.join(z)
salvar um byte, e passarz=[' ']*256
para os parâmetros deve salvar outro. Além disso, acho que você pode mudarreturn
paraprint
.p=input()
(Python 2) em vez de uma função, o que evita o recuo. Além disso,b+len(a)+1
pode serb-~len(a)
for a,b in input():
.Perl, 66 bytes
Script de 63 bytes + 3 bytes para
-p
Nada muito especial, utilizando as variáveis
$`
e$'
que são 'antes da partida' e 'depois da partida', respectivamente, em vez de dividir a sequência. Eu usei um$}
para a variável string como originalmente estava me salvando um byte, mas não existe mais!Exemplo de execução:
Perl, 65 bytes
Script de 62 bytes + 3 bytes para
-p
Outra versão que imprime cada linha (por menos um byte!). (Sim, fiz isso porque não li a pergunta corretamente ...)
Exemplo de execução:
fonte
PHP - 84 bytes
Usa códigos de escape ANSI para posicionar o cursor (
\x1b[XG
apresentando o caractere Escape e X sendo a coordenada baseada em 1), seguida pela*
sequência de caracteres de entrada da linha. Aceita entrada na linha de comando do formulário:Aceita entradas com várias palavras se estiverem entre aspas, pois são argumentos de linha de comando.
fonte
C ++ 11, 95 bytes
Por que não?
Como função, receba entrada como um
map<int, string>
nomev
contendo a posição e a sequência.Uso
Verifique aqui em execução
fonte