Postado aqui .
Este desafio é altamente "destilado" desta questão. Agradecimentos especiais a @Akababa!
Nesta tarefa, você deve inserir um ponto de exclamação no início da sequência e após cada caractere.
Regras
- Sempre haverá uma entrada de sequência não vazia. A entrada também não conterá guias. Você pode assumir que a entrada contém apenas caracteres imprimíveis ASCII não estendidos e novas linhas.
- A entrada não conterá novas linhas à direita, desde que seu idioma não consiga detectar uma nova linha.
- Este é um concurso de código-golfe ; a resposta mais curta deve ganhar.
Exemplos
- 4 novas linhas resultam em 5 pontos de exclamação delimitados por novas linhas. É muito difícil colocar isso como um texto Markdown, portanto, isso é declarado.
1 2 3 4 5 6 129591 129012 129127 129582 0 0
Saídas
! 1! 2! ! 3! ! 4! ! 5! 6! ! 1! 2! 9! 5! 9! 1! ! 1! 2! 9! 0! 1! 2! ! 1! 2! 9! 1! 2! 7! ! 1! 2! 9! 5! 8! 2! ! 0!
asd afjoK também: e kPrLd fOJOE; KFO KFkepjgop sgpaoj faj
Saídas
! a! s! d! ! a! f! j! o! K! ! a! k!:! e! ! k! P! r! L! d! ! ! ! ! ! f! O! J! O! E!;! ! ! ! ! K! F! O! ! K! F! K! E! P! J! G! O! P! ! s! g! p! a! o! j! ! ! ! f! a! j!
Um caso de teste básico com apenas um caractere:
uma
Saídas
!uma!
(Preenchimento automático! Brincadeirinha, não existe isso.) Contém pontos de exclamação:
!! !! !! !! !!
Saídas:
!!!!! !!!!! !!!!! !!!!! !!!!!
a\n
ea
, podemos exigir que não haja novas linhas à direita?Respostas:
QuadR , 1 byte
Agradecimentos a A__ por reduzir pela metade a contagem de bytes!
Experimente online!
Não substitui nada por
!
fonte
Python 3 , 27 bytes
Experimente online!
Honestamente, espero que alguém possa me mostrar uma maneira legal de fazer isso com uma contagem menor de bytes.
fonte
!!
nesse caso, que é o que faz sentido para mim). Se você quer dizer a string\n
: sim, desde que a saída correta seja!\n!
.!\n!\n!
. bom trabalho.Python 3 , 26 bytes
Experimente online!
fonte
Retina 0.8.2 , 2 bytes
Experimente online! Por fim, um desafio em que a Retina está embutida!
fonte
Haskell, 18 bytes
-1 byte graças a @nimi
Experimente online!
fonte
('!':).
salva um byte.Python 2 , 27 bytes
Experimente online!
fonte
JavaScript (ES6), 19 bytes
Recebe a entrada como uma matriz de caracteres.
Experimente online!
JavaScript (ES6),
2320 bytesGuardado 3 bytes graças a @ShieruAsakoto
Recebe a entrada como uma sequência.
Experimente online!
JavaScript (ES6), 22 bytes
Sugerida por @tjjfvi
Recebe a entrada como uma sequência.
Experimente online!
fonte
.replace
, 22 bytess=>[,...s,,].join`!`
R , 25 bytes
Experimente online!
Uma função que aceita e retorna um vetor de caractere.
fonte
scan(,'')
, como tio.run/##K/r/P724NElDSUlHSVFJpzg5MU9DR11dU/O/…scan
(mas com a solução de Nick, pelo menos se você exibir a saídacat
).Código de máquina 8086, formato .COM (MS-DOS 2+), 32 bytes
(-1 dependendo do emulador: veja abaixo)
Para obter melhores resultados, redirecione a entrada padrão de um arquivo, pois a digitação fornece uma aparência estranha devido a nenhum buffer; Além disso, as novas linhas parecem um pouco estranhas porque são armazenadas como
CR LF
e aCR
parte atrapalha a saída.Esse programa se comporta bem em uma emulação real do MS-DOS (por exemplo, PCjs), mas o DOSBox parecia ter problemas com o Ctrl + Z EOF (consulte os comentários na lista de montagem), portanto NÃO tente inserir entradas usando o console no DOSBox, a menos que você adicione o cheque extra!
Alguns bits interessantes:
Economizei algum espaço de dados reutilizando a memória que já havia sido executada (o
21H
noINT 21H
passa a ser!
)Eu quase consegui usar um truque interessante que encontrei na página "O poder oculto das instruções do BCD" que me permitiria usar em
AAA
vez de um padrãoTEST
para compararAL
com 0, economizando um byte. Infelizmente, isso não está totalmente documentado, por isso não pude confiar nele: por exemplo, o PCjs não ajusta nada além das bandeiras carry e auxiliar. :-(Código de montagem (modo ideal TASM):
fonte
brainfuck ,
2422 bytes-2 bytes graças ao JoKing.
Experimente online!
fonte
Pepe , 47 bytes
Experimente online!
Explicação:
fonte
Labirinto ,
19 11 109 bytesExperimente online!
Quão?
Entramos no labirinto no canto superior esquerdo, com uma pilha infinita de zeros ...
Felizmente, não precisamos lidar com imprimíveis, caso contrário, o primeiro byte zero nos transformaria e causaria
,
estragos.fonte
sed , 12 bytes
Experimente online!
-3 bytes graças ao Cows Quack
fonte
s/\b\|\B/!/g
também funciona para 12 bytesZsh , 32 bytes
Experimente online!
(s::)
divide em caracteres,''
adiciona um elemento vazio ao início eecho -nE $c!
ecoa cada um seguido por um!
.fonte
Perl 5 -p0,
176 bytesExperimente online!
Minha resposta original foi
-p
e$_='!'.s,.,$&!,gr
. Agradecemos a @Nahuel Fouilleul por cortar 11 bytes e a @Grimy pela-p0
dica.fonte
-lp
fornece uma saída incorreta para o\n\n\n\n
caso de teste (retorna 4 separados por nova linha em!
vez dos 5 especificados).-p0
funciona corretamente.6502, 12 bytes (13 bytes se Apple II)
6502
O código da máquina pressupõe que um par de locais de zero páginas esteja conectado ao hardware de entrada de caracteres ($ FE) e saída (FF). Muitos sistemas baseados no 6502 facilitam a E / S dessa maneira, embora o endereço de E / S normalmente não esteja na página zero.
Para simplificar, usei o Py65 , um simulador de sistema de microcomputador 6502 escrito em Python.
Aqui está um despejo de memória do Py65. Você pode carregar o código a seguir em qualquer lugar na página zero, para que não se sobreponha a $ FE e $ FF.
Executando em uma janela de comando do Windows, você pode colar (Ctrl + V) qualquer texto que desejar ou simplesmente digitar. Se estiver digitando, pressione Ctrl + J para obter uma nova linha (o mesmo caractere ASCII). Pressione Ctrl + C para interromper o processador e retornar ao prompt de comando Py65.
Naturalmente, o código de montagem é mais fácil de ler.
Para maior clareza, aqui está o código de montagem no formato CBA65 .
Apple II
O código acima assume que um nulo indica que não há entrada; portanto, continua a pesquisa até que um valor não nulo seja retornado.
Para comparação, o Apple I e o Apple II sinalizam a disponibilidade de um novo caractere, definindo o bit 7 do endereço de E / S do teclado, que precisa ser limpo após a busca do caractere. Nesses sistemas, a E / S de caracteres geralmente é executada chamando as rotinas do monitor do sistema em vez de acessar o hardware diretamente.
Ao chamar RDKEY ($ FD0C) e COUT ($ FDED), o equivalente do Apple II acima pode ser codificado em 13 bytes e é executável em qualquer lugar da RAM. Aqui está o código que eu corri em um emulador da Apple // e, a2ix no Android 9.
Pressionar Return tem o mesmo efeito que uma nova linha.
Você notou que, em vez do valor ASCII normal # $ 21 para o ponto de exclamação, # $ A1 é usado? Isso ocorre porque o envio de valores ASCII padrão para COUT faz com que sejam exibidos no "modo inverso", em preto e branco. A exibição de ASCII em branco normal em preto requer a adição de $ 80 ao valor do caractere no acumulador antes de chamar COUT. Como RDKEY retorna caracteres com o conjunto de hi-bits, os programas de montagem geralmente limpam o bit do caractere para obter seu valor ASCII antes de usá-lo.
fonte
Bash , 36 bytes
Experimente online!
Isso conta com a nova linha encerrando a entrada pela última! marca.
fonte
!
no final da entrada.MarioLANG ,
9594908969 bytesExperimente online!
A primeira vez que experimentei o MarioLANG, foi muito divertido!
Agradecimentos a Jo King por -20 bytes
Explicação:
Assim, como o nome indica, MarioLANG é feito para executar como um jogo de Super Mario Bros. Opera de maneira semelhante ao BF, com memória disposta em uma fita de células. Existem operadores para incrementar, diminuir, imprimir (como ascii ou numéricos) e ler na célula de memória atual e operadores para mover para a esquerda ou direita ao longo da fita.
Mario (o ponteiro de instruções) sempre começa na célula superior esquerda do programa, com a direção do movimento pretendida definida à direita. Se Mario não tiver um objeto semelhante a um piso embaixo dele (=, "ou #), ele cairá até atingir um objeto semelhante a um piso. Se Mario deixar o espaço do programa, o programa será encerrado devido ao Game Over :(
Este programa específico pode basicamente ser dividido em duas partes: a instalação e o loop.
Na seção Configuração, estamos simplesmente incrementando a primeira célula de memória até atingir 33 - o valor ASCII para "!". Bastante fácil; se isso pode ser praticado, é puramente uma questão de forma. Mario começa no canto superior esquerdo, pega 10 moedas, começa a cair ao pegar o 11º, muda de direção e depois repete. Ele pega as últimas 11 moedas sem mudar de direção; ele termina a seção de configuração no canto inferior direito "+".
Na seção de loop, Mario começa alcançando um elevador. O "!" O operador o faz cessar o movimento, para que ele permaneça no elevador. No caminho, ele imprime o caractere ASCII correspondente no valor da célula de memória atual (este é sempre 33, "!") E depois muda para a próxima célula na memória. Mario chega ao topo e define sua direção para a direita. Ele cai e lê um caractere da entrada como seu valor ASCII (ou -1 se nenhum caractere). Aumentamos porque a única medida de controle no MarioLANG é pular uma instrução se a célula de memória atual tiver um valor 0. Se isso acontecer, pularemos a alteração da direção de Mario, para que ele ande do próximo andar até a sua desgraça. Caso contrário, definimos a direção para a esquerda; andar parado do piso abaixo diminui a célula atual de volta ao seu valor anterior,
Versão anterior (89 bytes):
fonte
Perl 6 ,
1611 bytesExperimente online!
Substitui todas as correspondências de largura zero por pontos de exclamação. Regexes nulas não são permitidas; portanto, usamos um marcador de captura para capturar nada.
fonte
C # (compilador interativo do Visual C #) , 28 bytes
Experimente online!
fonte
05AB1E , 4 bytes
E / S como uma lista de caracteres.
Experimente online.
Explicação:
fonte
Befunge-98 (PyFunge) , 7 bytes
Experimente online!
fonte
Triangular ,
1513 bytesExperimente online!
-2 bytes depois de lembrar que o Triangular possui um operador de parada condicional.
Acredito que seja o mais curto possível. Triangular faz tem operadores condicionais direção de mudança, mas, infelizmente, funcionam de forma diferente do que os outros condicionais. Enquanto todos os outros verificam se ToS <= 0, as condicionais de mudança de direção verificam ToS! = 0. Se não fosse esse o caso, teríamos 10 bytes no formato de
Bq3~#*/@<<
.Ungolfed:
Versão anterior (15 bytes):
fonte
SimpleTemplate , 23 bytes
Esta é uma linguagem que eu escrevi, e deveria ser para modelos, mas bem.
Deve ser quase auto-explicativo, depois de ver o código não-destruído:
E uma explicação:
!
- Imprime o!
caractere literal{@each argv.0 as char}
- Faz um loop em todos os caracteres, com o valor definido para a variávelchar
( opcional , a variável padrão é_
).argv.0
é o primeiro parâmetro passado para orender()
método do compilador.{@echo char}!
- gera achar
variável e um!
caractere literal .Para a versão golfed, a variável padrão
_
é usada.{@/}
- fecha o loop ( opcional )Solução Pure SimpleTemplate :
Cria uma função
x
que gera o mesmo resultado.Você pode usá-lo assim:
Você pode tentar tudo isso em: http://sandbox.onlinephpfunctions.com/code/f6baff8d411fc8227ece81eccf05b6e7d3586bfa
Na linha 908, você pode usar as variáveis
$golfed
,$ungolfed
e$fn
para testar todas as versões.No entanto, se for permitido usar uma matriz de caracteres, o código será simplificado (20 bytes):
E não destruído:
Basicamente, gera todos os itens da matriz, unidos por
"!"
, cercados por literal!
.Devido a limitações na classe do compilador, o espaço é obrigatório (na versão golfed).
Esse código também é extremamente difícil de usar no SimpleTemplate puro (usando a função como exemplo):
O
@call
pode chamar uma função que existe no PHP, o que significa que não é uma solução pura do SimpleTemplate .fonte
Ruby ,
1716 bytesExperimente online!
Agradecemos o valor de tinta por -1 byte
fonte
gsub
.Gema , 11 caracteres
Infelizmente,
!
inicia um comentário no Gema, portanto, deve ser evitado.Exemplo de execução:
Experimente online!
fonte
Gelatina , 5 bytes
Um programa completo que aceita uma string, que imprime o resultado.
Experimente online!
Quão?
fonte
Japonês , 4 bytes
Tente
fonte
'
se a substituição fosse um número.Japonês , 4 bytes
Tente
Japonês
-P
, 7 bytesInfelizmente,
!
é um caractere reservado, necessitando de aspas.Tente
Não há muito a explicar:
ï
é um produto cartesiano ei
precede.fonte
Perl 5 +
-p
, 11 bytesExperimente online!
fonte