Tarefa
Sua tarefa é produzir uma sequência que contenha caracteres médios da sequência. O primeiro caractere do resultado seria o caractere médio do primeiro caractere (que é o primeiro caractere) e a média do segundo caractere de dois primeiros caracteres e assim por diante.
O que é caráter médio?
Strings são matrizes de bytes. O caractere médio da sequência pode ser encontrado calculando a média dos valores ASCII dos caracteres na sequência e utilizando o caractere ASCII correspondente.
Por exemplo, a string "Hello!"
pode ser escrita como sequência de bytes 72 101 108 108 111 33
. A média dos valores ascii é 533/6 = 88.833 ... e quando é arredondado para o número inteiro mais próximo, obtemos 89, que é o código ascii para a letra captial Y
.
Regras
- Você pode assumir que a entrada contém apenas caracteres ASCII imprimíveis
- A entrada pode ser lida no stdin ou como argumentos de linha de comando ou como argumentos de função
- A saída deve estar em stdout. Se o seu programa estiver funcionando, você também poderá retornar a string que, de outra forma, imprimiria.
- Deve ser um programa ou função inteira, não um trecho
- Aplicam-se brechas padrão
- Os números inteiros são arredondados por função
floor(x+0.5)
ou função semelhante.
Como eu ganho?
Este é o código-golfe , a resposta mais curta (em bytes) em vitórias.
Exemplos
Hello!
→HW^adY
test
→tmop
42
→43
StackExchange
→Sdccd_ccccddd
Respostas:
Brainfuck 106 bytes
Esta é a minha primeira participação em um código de golfe, por favor, seja gentil! Ele funciona, mas o cérebro não pode lidar com carros alegóricos (não que eu saiba), então o valor arredondado é sempre o mais baixo (pode corrigir meu algoritmo posteriormente).
Além disso, o algoritmo calcula a média dos valores 2 por 2, o que significa que pode ser impreciso em alguns pontos. E também preciso corrigir um erro que está imprimindo um número no final da saída.
fonte
Pitão, 16 bytes
Bem direto. Usando em
s+.5
vez de arredondamento, porque, por algum motivo,round(0.5, 0)
é 0 no Python.fonte
0.5
arredondado deve ser1
.Q,
1512 bytes12 bytes como uma expressão
ou 15 bytes como uma função
tira proveito de
fonte
"c"$avgs"i"$
? Não acho que uma solução possa ser muito mais direta do que isso. :)"c"
para `c e"i"
para` i.CJam, 19 bytes
Experimente online no intérprete CJam .
fonte
Perl:
3130 caracteres(Código de 29 caracteres + opção de linha de comando de 1 caractere.)
Exemplo de execução:
fonte
C #
189 135 134106 106 bytesPode ser visto aqui
Jogador de golfe pela primeira vez
fonte
K, 36 bytes
Uso:
_ci
e_ic
converta ascii em chars e vice-versa, respectivamente.{(+/x)%#x}
é um idioma K clássico para calcular uma média. Bem simples em geral.Edit: oh, interpretou mal as especificações. `0: é necessário para imprimir o resultado em stdout. À espera de esclarecimentos sobre a entrada re. A pergunta de Dennis.
fonte
{[s]`0:`c${_.5+(+/u)%#u:x#s}'1+!#s}
.`0:`c$_.5+{(+/x)%#x}'1_|(-1_)\
`c$_.5+{(+\x)%+\~^x}`i$
para 24. Poderia ser mais curto (`c$`i${(+\x)%+\~^x}`i$
), mas o seu REPL ( johnearnest.github.io/ok/index.html ) não está arredondando corretamente ao transmitir de float para int. Eu hesitaria em chamar essa solução ak desde então_ci
e_ic
não está na especificação do K5, tanto quanto eu posso dizer, enquanto0:
não imprime no stdout, mas lê um arquivo txt do disco._ci
e_ic
são totalmente substituídos no K5 pelos formulários como`c$
. A solução original que publiquei é compatível com o Kona, que é baseado no K2 / K3. Geralmente, tento não postar soluções com oK especificamente porque a semântica ainda está mudando e é parcialmente imprecisa.`0:_ci_0.5+{(+\x)%1.+!#x}_ic
Mathematica, 75 bytes
fonte
Julia,
8581 bytesIsso cria uma função sem nome que aceita uma string e cria um vetor de seus pontos de código ASCII. As médias são obtidas para cada grupo seqüencial, arredondadas para números inteiros, convertidas em caracteres, unidas em uma sequência e impressas em STDOUT.
fonte
Ruby, 46
ideone .
Pedindo desculpas ao w0lf, minha resposta acabou sendo diferente o suficiente para parecer valer a pena ser postada.
$<.bytes
itera sobre cada byte em stdin, por isso imprimimos a média móvel em cada loop. '% c' converte um float em um caractere arredondando para baixo e pegando o ASCII, então tudo o que precisamos fazer é adicionar 0,5 para torná-lo arredondado corretamente.$.
é uma variável mágica que começa inicializada como 0 - deve armazenar a contagem de linhas, mas como aqui queremos a contagem de bytes, apenas a incrementamos manualmente.fonte
Mathcad, 60 "bytes"
O Mathcad é um aplicativo matemático baseado em planilhas 2D compostas de "regiões", cada uma das quais pode ser texto, uma expressão matemática, programa, plotagem ou componente com script.
Uma instrução matemática ou de programação é selecionada em uma barra de ferramentas da paleta ou inserida usando um atalho de teclado. Para fins de golfe, uma operação ("byte") é considerada o número de operações do teclado necessárias para criar um nome ou expressão (por exemplo, para definir a variável a como 3, escreveríamos a: = 3. O operador de definição : = é um único pressionamento de tecla ":", como são ae 3, fornecendo um total de 3 "bytes". A programação para o operador requer digitar ctl-shft- # (ou um único clique na barra de ferramentas de programação) para que novamente seja equivalente a 1 byte.
No Mathcad, o usuário digita comandos da linguagem de programação usando atalhos de teclado (ou escolhendo-os na barra de ferramentas de programação) em vez de escrevê-los em texto. Por exemplo, digitar ctl-] cria um operador while-loop que possui dois "espaços reservados" para inserir a condição e uma única linha do corpo, respectivamente. Digitar = no final de uma expressão do Mathcad faz com que o Mathcad avalie a expressão.
(Contagem de bytes) Analisando-o da perspectiva de entrada do usuário e equiparando uma operação de entrada do Mathcad (teclado normalmente, clique com o mouse na barra de ferramentas se não houver atalho do kbd) a um caractere e interprete-o como um byte. csort = 5 bytes, pois é digitado char-by-char, assim como outros nomes de variáveis / funções. O operador for é uma construção especial que ocupa 11 caracteres (incluindo 3 "espaços reservados" em branco e 3 espaços), mas é inserida por ctl-shft- #, portanto = 1 byte (semelhante aos tokens em alguns idiomas). Digitar '(aspas) cria parênteses balanceados (geralmente) e conta como 1 byte. Indexação v = 3 bytes (tipo v [k).
fonte
Python 3, 66 bytes
Se eu usar em
round()
vez deint(.5+
etc., ele salvará um caractere, mas tecnicamente não está de acordo com o desafio: asround()
rodadas do Python são divididas pela metade até o número par mais próximo, e não para cima. No entanto, ele funciona corretamente em todas as entradas de amostra.Também me sinto um pouco suja por não terminar a saída com uma nova linha, mas o desafio não exige isso ...
fonte
print(end=chr(int(...))
para salvar alguns bytesJavaScript (ES6), 75 bytes
Eu não posso acreditar que ainda não há resposta JS com esta técnica ...
fonte
Python 2, 71
A cada novo caractere, atualiza a soma
s
e o número de caracteresi
para calcular e acrescentar o caractere médio.fonte
print
. Isso funcionará com o Python 2? Agora esqueço como suprimir novas linhas naprint
declaração ... a vírgula torna um espaço em vez disso, à direita)?print _,
para deixar um espaço em vez de nova linha, mas não há uma boa maneira de omitir o espaço. Boa ligação com oend
argumento do Python 3 , eu tinha esquecido disso.print'\b'+_,
Ruby 59
61Teste: http://ideone.com/dT7orT
fonte
c+=1;(s/c)
→(s/c+=1)
ideone.com/H2tB9WJava, 100
Bem como muitas outras respostas aqui, estou somando e calculando a média em um loop. Apenas aqui para representar Java :)
Meu código original é 97, mas retorna apenas o modificado em
char[]
vez de imprimi-lo:Agora, é apenas o tempo suficiente para as barras de rolagem aparecerem para mim, então aqui está uma versão com algumas quebras de linha, apenas porque:
fonte
test
é uma matriz de caracteres, basta usarf(test);
. Se for um objeto String, você usariaf(test.toCharArray());
. Os literais de string também são bons assim:f("Hello!".toCharArray());
toCharArray()
Me estúpido, tentei violá-lo com algum elenco. Obrigado.C, 62 bytes
(link ideone)
Os resultados são ligeiramente diferentes dos exemplos do OP, mas apenas porque esse código arredonda 0,5 para baixo em vez de para cima. Não mais!
fonte
R,
135127 bytesIsso ficou muito rápido e eu realmente entendi errado da primeira vez :) Preciso ler as perguntas corretamente.
Execução de teste
fonte
utf8ToInt
ajudará! Eu tenho um golfe de 68 bytes disso, se você quiser atualizar para ele.Perl 5, 41 bytes
correr como
fonte
TSQL, 118 bytes
Retornando caracteres na vertical
fonte
> <> , 30 bytes
&
registroVocê pode experimentá-lo no intérprete online, mas precisará usar a versão a seguir, porque o intérprete online encaixa a caixa de código em um retângulo e aplica
?
- se a espaços.fonte
05AB1E , 15 bytes [Não concorrente?]
Experimente online!
fonte
D
e}
, e substituindos
comy
..p
é um 1byter agora tambémη
xDJapt , 13 bytes (não concorrente)
Teste online!
Como funciona
fonte
Japonês , 11 bytes
Tente
fonte
PHP , 176 bytes
Exemplo:
A maior solução até agora, mas com base no php, não pode ficar muito menor, eu acho. 2 bytes podem ser salvos removendo as novas linhas.
fonte
JavaScript ES7, 122 bytes
Principalmente tudo está acontecendo neste pouco
O resto é loop / conversão de código de caracteres
Dividir:
Se as funções não forem permitidas:
133 bytes
Snippet ES5:
fonte
Python 2, 106 bytes
Não é curto o suficiente. Como é python, é muito detalhado, você pode até ler o que faz procurando código. Mas está funcionando.
fonte
Matlab, 43
Usando uma função anônima:
Exemplos:
fonte
JavaScript ES6, 111 bytes
Isso é irritantemente longo, em parte graças ao longo
String.fromCharCode
e àscharCodeAt
funções do JavaScript . O snippet da pilha contém código testado não comentado, comentado.fonte
Fator, 80 bytes
fonte