Neste desafio, você deve usar a arte ASCII com várias linhas como entrada, como:
OOOOOO OOOOOO OOOOOO OOOOOOO OOOOOO OOOOOO OO OOOOOOO
OO OO OO OO OO OO OO OO OO OO OO
OO OO OO OO OO OOOOO OO OOO OO OO OO OOOOO
OO OO OO OO OO OO OO OO OO OO OO OO
OOOOOO OOOOOO OOOOOO OOOOOOO OOOOOO OOOOOO OOOOOOO OO
E você também terá um número inteiro como entrada. Você deve produzir a arte ASCII ampliada pela quantidade especificada com o número inteiro. Por exemplo, se você usasse um segundo argumento de 3
, a saída seria
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOO OOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOO OOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOO OOOOOOOOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO OOOOOO OOOOOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO OOOOOO OOOOOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO OOOOOO OOOOOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOO
Especificamente, cada personagem deve se transformar em um n
por n
caixa desse personagem, onde n
é o argumento inteiro. Por exemplo, uma entrada de
ab
cd
e 3 resultará em
aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd
Isso é código-golfe , então o código mais curto em bytes vence.
Respostas:
APL, 7 caracteres / bytes *
Função que usa o número e a string de entrada como parâmetros e retorna o resultado:
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
*: APL pode ser escrito na sua própria (legado) de conjunto de caracteres de byte único que mapeia símbolos APL para os 128 valores de bytes superiores. Portanto, para fins de pontuação, um programa de N caracteres que usa apenas caracteres ASCII e símbolos APL pode ser considerado como N bytes.
fonte
/
função (para não ser confundido com o/
operador ... sim, mesmo símbolo ) duplica e / ou remove colunas de uma matriz de acordo com o argumento do lado esquerdo. Se esse é um escalar (número simples), é replicado para todas as colunas de entrada. Portanto,2/m
é uma matriz com todas as colunas dobradas. A⌿
variante faz o mesmo, mas para linhas (ou planos de primeiro eixo no caso geral).GolfScript, 20 caracteres
Pega toda a entrada do STDIN, a primeira linha é o fator de escala e o restante a entrada de múltiplas linhas. Você pode tentar o exemplo online .
Entrada
Resultado
Código
fonte
1/
. Eu também preciso usarvalue function +
mais.golfscript.rb
não esteja marcado como executável ou que a primeira linha tenha o caminho errado para o intérprete Ruby para o seu sistema. Ah, eecho
presumivelmente deveria sercat
. Tentecat inputFile | ruby golfscript.rb scriptFile
(ou apenasruby golfscript.rb scriptFile < inputFile
) e veja se isso funciona.J,
2017 caracteresDefine um verbo
f
que faz o que é necessário. Uso:onde
a
é a string de entrada.No Windows, é necessário um caractere extra para remover
\r
:Explicação :
];._2
divide a string de entrada em partes com base no último caractere da string, que neste caso será a\n
. Windows foi\r\n
por isso precisamos usar}:
para cortar um caractere extra off:}:;._2
. Recortar documentação de verbosO restante do código (com exceção da atribuição
f=.
) é uma bifurcação .Ele se divide assim:
[ #&.|: #
Se
a
for nossa string de entrada, o cálculo será3 # a
(chamaremos esse resultadox
) e, em seguida3 [ a
(chamaremos esse resultadoy
)y #&.|: x
.3 # a
apenas faz três cópias de cada membro doa
. Copiar documentação do verboIsso vira
para dentro
3 [ a
just return 3. Documentação do verbo esquerdoFinalmente
y #&.|: x
éy
copiar em transposiçãox
. As#
obras de antes, mas o&.|:
diz J para transpor a entrada em primeiro lugar e, em seguida, transpô-la de volta quando terminar. Na documentação conjunta , transponha a documentação do verbo .A transposição gira
para dentro
então a cópia muda para
e transpor de volta dá a você
fonte
[##"1
além disso, não tenho certeza sobre as regras não escritas do golfe em J, mas eu diria que a divisão de cordas e a atribuição podem ser omitidas, dados os requisitos frouxos da pergunta. Certamente o fiz na minha resposta da APL. Exemplo:2 ([##"1) 'abcde',:'fghij'
Haskell, 49 bytes
A função de aumento é
e
, que recebe uma contagem e uma sequência e retorna uma sequência:fonte
APL, 11 caracteres
@Gareth fez essencialmente a mesma coisa primeiro, em J, então essa inscrição no APL é apenas para exibição, não para competição - ele é o vencedor.
Uso: ampliação em arg esquerdo (⍺), arte na forma de uma matriz de 2d caracteres em arg direito (⍵).
⍺ / ⍵ replicará elementos em cada linha de um vetor ou matriz (2 / 'OO' se torna 'OO OO').
⍉⍺ / ⍉ irá transpor isso, replicar os elementos, transpor isso.
(Se buscássemos clareza em vez do tamanho do programa, o código poderia ser E ← {⍺ / [1] ⍺ / ⍵})
fonte
Script Bash / sed, 48 caracteres
Salve como um script
chmod +x
e execute:Como funciona?
A carne disso está no
sed
comando. Por exemplo, se n = 3, o comando sed será expandido para algo como:Este
sed
comando composto pode ser dividido em:s/./&&&/g
- este comando substituto corresponde a cada caractere e o substitui pelo caractere repetido 3 vezesp
Comandos 3x - apenas imprime todo o espaço do padrão (ou seja, a linha atual) 3 vezesPassamos
-n
ao sed para dizer a ele para não imprimir nada, a menos que seja explicitamente solicitado, para que tenhamos controle total do que é impresso e quantas vezes.Não consegui descobrir uma maneira rápida de gerar seqüências repetitivas de comprimento arbitrário diretamente
sed
, então usei algunsbash
truques:Isso imprime uma string (não especificada, ou seja, vazia), com 3 espaços à esquerda, e atribui o resultado à
bash
variávelr
.Em seguida, usamos a
bash
expansão de parâmetro para transformar essa sequência de espaços no que precisamos substituir nased
expressão:Consegui me livrar da remoção de aspas em torno do
printf
especificador de formato e dased
expressão, pois nenhum dos caracteres dentro precisa escapar nobash
shell.Contador de caracteres:
fonte
$1
e removern=3;
, você ainda salvará 4 caracteres e talvez também{}
na impressão.printf
de argumentos 's não são necessários, reduzindo-a a 52 caracteres:r=`printf %$1s`;sed -n "s/./${r// /&}/g${r// /;//p}"
.PERL,
41 39 2522 caracteresPERL, simples e eficaz - criado para a tarefa. Quando chamado com
-pi3
, onde3
está o parâmetron
:Solução clássica (39 caracteres):
A solução clássica precisa
n
ser especificada na primeira linha de entrada, por exemploObrigado @manatwork pelo
$&
truque.fonte
s/./$&x$n/ge
.Ruby:
6449 caracteresTodos os dados recebidos no STDIN: primeira linha do fator de escala, depois a arte ASCII.
Exemplo de execução:
Ruby:
4441 caracteresSupondo que cada linha de entrada seja finalizada com separador de linhas. Graças a @Ventero.
Exemplo de execução:
fonte
n
:$.<2?n=$_.to_i: $><<$_.gsub(/./){$&*n}*n
(infelizmente, o espaço após os dois pontos é necessário, caso contrário, o analisador fica confuso). Corra comruby -n
.Python 3- 84
Não é a resposta mais curta, mas uma resposta diferente, no entanto. Um one-liner interessante.
Coloque primeiro um número, depois a arte ASCII como uma lista Python, por exemplo:
fonte
GolfScript, 29 caracteres
Isso define um bloco
f
que, quando chamado, produzirá a saída desejada. Ele assume que os argumentos estão na pilha (porque é basicamente assim que os argumentos são passados no GolfScript).Ungolfed (isso faz algum sentido?: P):
fonte
Golfscript, 23 caracteres
Eu decidi escrever um programa inteiro porque ele tem menos sobrecarga do que uma função anônima:
~(:i;
- avalie a entrada e depois diminua o multiplicador, armazene-o comoi
e descarte-o.n/{...}%n*
- divida por novas linhas, mapeie cada linha, junte-se por novas linhas{...}:c%c
, - pegue um bloco, aplique-o no mapa - cada elemento e aplique-o a toda a linha.{.}i*
- duplicar esse elementoi
vezesDemonstração ao vivo: http://golfscript.apphb.com/?c=OyciYWJjCmRlZiIzJwp%2BKDppO24ve3t7Ln1pKn06YyVjfSVuKg%3D%3D
Exemplo de uso:
fonte
Python
3-10910793Primeiro, insira o número e a sequência. Deve ser auto-explicativo ...
Agradecemos a Waleed Khan por sugerir a remoção do[]
Obrigado ao Volatility por sugerir
a
uma lista.fonte
a
uma lista, façaa+=[''.join(c*n for c in s)]*n
e façaprint('\n'.join(a))
no final. Isso deve funcionar.Java - 217
Primeira tentativa de golfe. Parece que Java não é a linguagem para fazê-lo.
No Windows, você precisa substituir "\ n" por "\ r \ n".
fonte
aaabbb
e 3 linhascccddd
no exemplo de saída acima).for
; 8 caracteres usando a em vez de x (a=a[1].split("\n")
e altere todos os x com a).main
use mais bytes do que programas inteiros em outros idiomas, os concorrentes receberão truques.enum M{;public static void main(String[]a){int f=Integer.valueOf(a[0]),i=-1,j,k;a=a[1].split("\n");for(;++i<a.length*f;System.out.println())for(j=0;j<a[i/f].length();j++)for(k=0;k++<f;)System.out.print(a[i/f].charAt(j));}}
Integer.valueOf(a[0])
->new Integer(a[0])
(Edit: Esta solução agora é inválida porque a semântica da
銻
instrução foi alterada. Eu não sabia que já tinha feito uso da instrução quando a mudei. Você pode, no entanto, corrigir o programa simplesmente alterando-o para as instruções mais recentes壹
.)Sclipting , 19 caracteresEspera que a entrada seja separada por
\n
(não\r
) e a primeira linha para conter o fator de multiplicação.Explicação
No final, a pilha ficará assim:
Tudo acima da marca é automaticamente concatenado e emitido, o restante descartado.fonte
i
é pronunciada [iː], não [ɑi]; como você escreveria em chinês agora?J, 7 caracteres
Exatamente a mesma coisa que na resposta APL do @ Tobia, mas em caracteres ascii.
fonte
Powershell (96)
Pensei que eu daria uma chance no PS. Usando a tubulação no foreach (%) para mantê-lo curto aqui, mas o
function
eToCharArray
está fazendo com que seja preciso um pouco de brevidade.Para usá-lo, você o chama na linha de comando, assim:
Aqui está a versão não minimizada:
fonte
function m($n,$s){-split$s|%{,(-join($_-split''|%{$_*$n}))*$n}}
para 63 bytesJulia, 74 caracteres / bytes
7 menos se eu apenas devolver a corda.
julia>
é o prompt interativo.fonte
Tela , 2 bytes
Experimente aqui!
fonte
Powershell, 54 bytes
Script de teste:
Explicação:
$s-replace'.',('$0'*$n)
repete cada símbolo, exceto uma nova linha.-split'``n'
divide a cadeia larga por nova linha|%{,$_*$n}
repete cada linha como um elemento da matriz e retorna a matrizO resultado é uma matriz de seqüências amplas e repetidas.
fonte
R , 83/72 bytes
Abordagem Alt usando regexps
Se for permitida uma nova linha à direita, 72 bytes:
Experimente online!
Caso contrário, 83 bytes:
Experimente online!
fonte
K, 20
.....
fonte
BrainFuck estendido : 158
Acontece em:
Brainfuck: 185
Requer um intérprete que tenha 0 ou nenhuma alteração como marcador EOF.
beef
, disponível nos repositórios Ubuntu, funciona swell:Código EBF não destruído:
fonte
Rebol -
8779Versão bem formatada:
Exemplo de uso:
NB Esse código funciona apenas no Rebol 2 no momento (a função INPUT usada ainda não está totalmente implementada no Rebol 3).
fonte
R , 125 bytes
Experimente online!
Converte a string em UTF8, coloca em uma matriz cujas colunas são linhas de texto (removendo novas linhas) e repete cada caractere e as linhas geradas antes de imprimir separado por novas linhas.
fonte
R - 89
fonte
cat
para imprimi-la como stdout? Além disso, cada elemento da cadeia de caracteres não deve apenas ser repetido n vezes, mas também em largura.<-
pode ser=
,paste0
pode ser substituído aqui,paste
pois você está usando o argumento de recolhimento de qualquer maneira e o argumentoeach
pode ser reduzido parae
. Veja aqui algumas idéias básicas sobre golfe com R.stringr
MATLAB: 20 caracteres
Esta solução pressupõe que a imagem seja armazenada em um arquivo chamado
startup.m
e que seja permitido atribuir a quantidade de replicações ao matlab ao chamá-lo, isso pode ser feito por meio de:!matlab -r "n=3"&
MATLAB, chamada sem argumento: 23 caracteres
Diferentemente da primeira solução, as duas últimas assumem que a quantidade de replicações pode não ser esperada na chamada. Para essas soluções, a seqüência e o número originais são esperados em um arquivo chamado
matlab.mat
em seu diretório atual.MATLAB, alternativa matemática: 27 caracteres
fonte
C # (177)
Espera a sequência de entrada "i" contendo novas linhas "\ n" como delimitador.
Formatado
fonte
CJam, 14 bytes
O CJam é mais recente que esse desafio (e o principal recurso que estou usando é realmente muito recente), portanto, essa resposta não seria elegível para ser aceita - mas, de qualquer maneira, não está superando o APL, então ...
Teste aqui.
Explicação
Com o novo
e*
que repete cada caractere em uma string, isso é realmente simples:fonte
{N/1$fe*e*N*}
RProgN 100 bytes (Windows) não concorrentes
O RProgN não possui escapes de caracteres desde a gravação, o que faz com que qualquer tratamento de novas linhas exija uma nova linha física. Como tal, esta resposta (e qualquer entrada) deve usar CRLFs, em vez de apenas LFs. :(
Além disso, a função 'rep' foi adicionada apenas depois que esse desafio foi lançado, portanto, isso não é concorrente.
fonte
Vim, 39 pressionamentos de tecla (excluindo entrada, não competindo)
a pegadinha e a razão pela qual isso não está competindo é porque a entrada deve ser inserida duas vezes. Substitua ambos
2
por sua própria entrada.Explicação
qayl2phxl@aquu
grava uma macro que puxa um caractere, cola-o e passa para o próximo e, em seguida, se reproduz novamente. Em seguida, desfaz as alterações. Como queremos que o loop não seja infinito, não excluímos o caractere, o que significa que precisamos excluir o estranho, mas ainda finalizamos com um movimento que falha no último caractere.:%norm @a<cr>
executa a macro em todas as linhasgg0
retorna ao começoqbyy2P2jkddj@bq@b
usa a mesma técnica@a
para copiar todas as linhas, mas com uma macro recursiva.Sei que isso pode ser mais complicado, por exemplo, retrocedendo para duplicação de linha, mas devido ao requisito de entrada múltipla de entrada, pararei por aí e marcarei esta resposta como não concorrente.
Resposta anterior (32 pressionamentos de tecla, apenas dobra)
Explicação
qaylpl@aqu
grava uma macro que puxa um caractere, cola-o e passa para o próximo e, em seguida, se reproduz novamente. Desfazer a alteração.:%norm @a<cr>
executa a macro em todas as linhas:%s/.*/&\r&<cr>
dobra cada linhaEu queria fazer uma macro aninhada, mas a interna (caracteres) para a externa (linhas) ... Então, eu tenho que executar dois comandos, adicionando algumas teclas para uma solução simples.
fonte