Neste desafio, o texto de letreiro falso é um texto que é mostrado parte por parte, de maneira semelhante à rolagem.
Alguns exemplos:
testing 4
t
te
tes
test
esti
stin
ting
ing
ng
g
hello 2
h
he
el
ll
lo
o
foobarz 3
f
fo
foo
oob
oba
bar
arz
rz
z
Something a bit longer 10
S
So
Som
Some
Somet
Someth
Somethi
Somethin
Something
Something
omething a
mething a
ething a b
thing a bi
hing a bit
ing a bit
ng a bit l
g a bit lo
a bit lon
a bit long
bit longe
bit longer
it longer
t longer
longer
longer
onger
nger
ger
er
r
small 15
s
sm
sma
smal
small
small
small
small
small
small
small
small
small
small
small
mall
all
ll
l
aaa 3
a
aa
aaa
aa
a
brace yourself 6
b
br
bra
brac
brace
brace
race y
ace yo
ce you
e your
yours
yourse
oursel
urself
rself
self
elf
lf
f
Você precisa escrever um programa ou uma função que receba duas entradas e imprima a saída conforme descrito acima. Você pode ou não gerar espaços à direita na sua saída. Este é o código-golfe, pelo que o código mais curto em bytes vence.
Se o seu programa for autônomo (ou seja, quando a execução realmente imprime as linhas) (a entrada pode ser codificada, mas fácil de alterar) e dorme um pouco entre cada linha de saída, você recebe um bônus de -10.
Respostas:
CJam,
1211 bytes1 byte salvo por Dennis.
Estou fazendo uso de "A entrada pode ser codificada, mas fácil de alterar": isso espera que a entrada já esteja na pilha, para que você possa acrescentar
"testing" 4
o anterior, por exemplo.Teste aqui.
Explicação
Observe que a transposição da saída desejada é muito mais simples:
Então, só precisamos criar
n
linhas, acrescentandoi
espaços parai
den-1
baixo para cima0
. É isso que o código faz:19 - 10 = 9?
Acho que o bônus "dorme um pouco entre cada linha" é um tanto vago e desonesto, mas aqui está uma versão de 19 bytes que simplesmente pára após cada linha, computando todas as permutações da matriz
[0 1 .. 7]
. No intérprete online, isso simplesmente leva ao resultado final sendo mostrado um pouco mais tarde, mas se você usar o interpretador Java, ele realmente imprimirá cada linha depois de "dormir um pouco":fonte
z
. Supondo que a entrada seja ASCII imprimível, você pode substituirW%
por$
.z
o tempo todo para os desafios baseados em grade ascii.)C, 69 bytes
magia printf!
Versão expandida com algumas explicações:
E aqui está um exemplo:
fonte
Pitão, 13 bytes
Experimente online: Pyth Compiler / Executor
Explicação
fonte
Python
6563Isso foi realmente usado para escrever os exemplos. Solução de linha de base.
fonte
join
Javascript ( rascunho do ES7 ), 61 bytes
Entradas codificadas por Javascript ( ES6 ), 47 bytes
Assumindo entradas codificadas nas variáveis
s
(string) el
(comprimento), ela pode ser reduzida para 47 bytes de impressão com um alerta para cada linha:fonte
K, 19 bytes
Coloque
x
espaços (x#" "
) no início da sequênciay
. Em seguida, use o formulário "varredura de ponto fixo" do operador\
para criar o conjunto de seqüências de caracteres giradas. Um ponto fixo em K para de iterar se o resultado da aplicação da função retornar um resultado repetido ou se a entrada inicial for revisitada. Uma vez![1]
que girará uma corda um passo de cada vez,![1]\
é um bom idioma para permutações cíclicas. Depois, apenas aparamos os resultados comx#'
.Uma amostra de execução:
fonte
J (22)
Isso acabou mais do que eu previa, mas acho que não é tão ruim.
Curiosidade: não são
[
e]
são realmente compatíveis, ou têm algo a ver um com o outro.fonte
[{."1]]\.@,~' '#~[
(18 bytes).Julia, 75 bytes
Isso cria uma função sem nome que aceita uma string e um número inteiro como entrada e imprime a saída. Para chamá-lo, dê um nome, por exemplo
f=(s,n)->(...)
.Ungolfed + explicação:
Exemplos:
Observe que esta solução é de 66 bytes se
s
en
se supõe que já exista no programa.fonte
QBasic, 56 - 10 = 46
Esta é golfed QBasic - o autoformatter vai expandir
?
emPRINT
e adicionar alguns espaços. Testado com QB64 , embora não deva haver nada aqui que não funcione com o DOS QBasic.QBasic geralmente não é bom com operações de cadeia, mas há muito convenientemente é uma função que retorna um determinado número de espaços!
Tomando algumas liberdades com "entrada pode ser codificada", este código espera que a variável
s
sejaDIM
'dAS STRING
, para evitar o$
sufixo do tipo, bem como a string a ser atribuídas
e o número an
.Exemplo de preâmbulo:
Resultado:
A linha em branco superior pode ser eliminada iniciando o
FOR
loop em 2 em vez de 1.Bônus: adicionar
CLS
um pouco antesNEXT
de quatro bytes insignificantes transforma isso em ... uma verdadeira marca de seleção !Eu
PRINT CHR$(3)
QBasic. : ^ Dfonte
Ruby,
68, 55 bytesApós uma atualização do @blutorange:
Resultado:
ruby marquee.rb "Something a bit longer" 10
Primeira submissão pedindo críticas.
fonte
a=" "*(z=$*[1].to_i)+$*[0];a.size.times{|b|puts a[b,z]}
Haskell,
615954 bytesExemplo de uso:
Editar: uma linha vazia no início / fim é permitida
fonte
Bash, 109 - 10 = 99 bytes
Vejo que, no tempo que levei para escrever minha solução, fui profundamente derrotado. No entanto, passei muito tempo escrevendo para não publicá-lo ...
Além disso, possui alguns recursos exclusivos, como o tempo entre as linhas de impressão, sendo ajustável pelo usuário, com base no quanto está no diretório atual! (Também um pouco inconsistente, dependendo da sensação do seu disco)
Exemplo:
Ungolfed e comentou:
Eu realmente nunca tentei isso antes. Sugestões e comentários são bem-vindos!
fonte
Pure Bash, 61 bytes
Resultado:
fonte
Perl, 50
57
caracteres+3
para-i
,-n
e-l
.-10
caracteres para o sono.-i
é usado para a entrada numérica, que é armazenada em$^I
. Basicamente, adicionamosi
espaços na frente e no final da entrada e, em seguida, pesquisamos todos osi
caracteres e fazemos um loop entre eleswhile
.say
convenientemente retorna1
qual podemos inserirsleep
.fonte
s/^|$/$"x$^I/eg;sleep say$1 while s/.(.{$^I})/$1/
. Você também pode perder a-l
bandeira, mas eu acho que você precisa para contar 5 para-i -n
(uma vez que-i
não é uma bandeira padrão) se você executar via:echo -n "testing" | perl -i4 -nE'...'
. Ainda deve ser baixo para 44 embora!Shell POSIX, 94
Eu sei que parece mais perto de perl, mas isso realmente é shell!
A primeira linha adiciona os espaços iniciais necessários, apenas na primeira vez no loop. Ele define US $ 3 para indicar que o fez.
A segunda linha (nova linha incorporada NB) ocorre novamente até que a entrada seja esgotada, imprimindo o primeiro n caracteres da sequência e, em seguida, invocando-se com o primeiro caractere removido de $ 1.
Testado com Debian
/bin/dash
- exemplos de saídas a seguir:./marquee "testing" 4
./marquee "Algo um pouco mais" 10
./marquee "pequeno" 15
fonte
Python 2, 51 bytes / 37 bytes
Sem entrada codificada (51 bytes):
Ligue como
f("testing", 4)
.Com entrada codificada (37 bytes):
Ambas as versões produzem uma linha inicial de espaços.
fonte
Python 2, (54 bytes - 10 = 44)
64626046(Presumi que a linha para entrada codificada não adiciona à contagem de bytes.)
Ainda não vi um programa que realmente dorme entre as linhas de impressão, então criei um que sim, pois parece mais uma marquise dessa maneira. Este programa tem mais 2 bytes no Python 3.
EDIT: O programa agora faz um cálculo em vez de dormir. Eu usei
i
no cálculo para que o programa não o armazene como uma constante, mas precise calculá-lo sempre.Experimente o Python 3 aqui (a substituição do Python 2 é de buggy)
fonte
time.sleep
haver algum cálculo longo que você possa usar? Além disso, é um pouco mais curto usar umwhile
loop:i=0\nwhile s[i-n:]:print(' '*n+s)[i:n+i];i+=1
q=
. Obrigado.i**(7**7)
Pitão, 12 bytes
Demonstração.
Pitão, 17 - 10 = 7 bytes
Esta versão emprega um atraso entre as impressões de linha. Isso pode ser visto no compilador de linha de comando, que você pode obter aqui .
Execute o seguinte:
Isso tem um atraso de cerca de 0,3 segundos antes de cada impressão. Se você preferir um atraso maior, poderá usar:
Isso tem um atraso de cerca de 4 segundos.
fonte
Java,
133119115Versão longa:
O preenchimento é aplicado à sequência e, em seguida, substrings da sequência preenchida são impressos no console.
-4 bytes graças a @KevinCruijssen.
fonte
for(;i<= s.length();System.out.println(s.substring(i-n,i++)));
( -3 bytes )Matlab, 95
Como sempre, é uma manipulação de matrizes. O núcleo aqui é o comando
spdiags
que permite criar matrizes diagonais com muita facilidade.Com codificação codificada de 71 bytes (sequência esperada armazenada
t
e número emk
)fonte
APL, 50 - 10 = 40 caracteres
Tenho certeza que poderia ser mais curto. 50 é a duração do programa sem as duas constantes.
Explicação:
Desenvolvido para ngn APL no terminal.
fonte
Powershell -
8583 bytesÉ tarde, não vai ganhar :-) Mas pensei em colocar um Powershell por completo:
function m($s,$n){1..$($n+$s.length)|%{-join(" "*$n+$s+" "*$n)[$_-1..$($n+$_-1)]}}
fonte
Cobra - 60
fonte
Groovy - 82
fonte
Lua, 79 bytes
fonte
C #, 112 bytes
Programa completo com método não destruído e casos de teste:
fonte
Gelatina , 15 bytes - 10 = 5 ( não concorrente ?)
Experimente online!
Dorme por um segundo entre cada linha. Imprime uma nova linha à direita, se isso for aceitável.
yay Jelly bate Carvão
fonte
PHP4.1, 85-10 = 75 bytes
Sim, esta é uma versão muito antiga, mas tem uma funcionalidade que eu preciso.
Você ainda pode executá-lo em versões mais recentes do PHP, mas precisa definir as variáveis antes de executar o código abaixo.
Isso me ajuda a reduzir muito o tamanho do meu código!
É realmente básico:
Corri para o bônus devido a isso, citando OP:
Como você pode obviamente ver, ele dorme.
Isso pressupõe que você tenha
register_globals
ativado por padrão, que eram as configurações padrão para esta versão.Você pode testar facilmente no seu navegador, com
mínimoalgumas mudanças:O código acima é um poliglota e você pode executar no seu navegador ou em um intérprete PHP. Não devo receber um prêmio por isso? Um biscoito, talvez?
Lista de alterações:
sleep(1)
neste testeconcat
O objetivo é superar as diferenças de PHP e JS na concatenação de strings.
-
é usado para preencher o espaçoecho
,printf
é usado em vez (limitação do PHP)<br>
é usadafonte
J ,
1514 bytesExperimente online!
fonte
APL (Dyalog) , 17 bytes
Experimente online!
(o programa assume
⎕IO←0
padrão em muitas máquinas)Explicação
fonte