Desafio
Dada uma string como Hello World!
, decompô-lo em seus valores de caracteres: 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33
.
Em seguida, calcular a diferença entre cada par consecutivo de caracteres: 29, 7, 0, 3, -79, 55, 24, 3, -6, -8, -67
.
Finalmente, somá-los e imprimir o resultado final: -39
.
Regras
- Aplicam-se brechas padrão
- Não é possível usar funções pré-criadas que executam essa tarefa exata
- Soluções criativas incentivadas
- Diverta-se
- Isso é marcado como código-golfe , a resposta mais curta em bytes vence, mas não será selecionada.
code-golf
string
number
arithmetic
array-manipulation
dkudriavtsev
fonte
fonte
Respostas:
Python, 29 bytes
A soma das diferenças forma uma série telescópica; portanto, a maioria das somas é cancelada e
(s 1 - s 0 ) + (s 2 - s 1 ) +… + (s n-1 - s n-2 ) + (s n - s n-1 ) = s n - s 0 .
Se utilizar uma sequência de bytes como entrada, é permitido
também funcionará para 19 bytes .
Teste ambos em Ideone .
fonte
MATL , 2 bytes
Experimente online!
Explicação:
d
obtém a diferença entre caracteres consecutivos es
soma a matriz resultante. Em seguida, o valor no topo da pilha é impresso implicitamente. Não há muito mais a dizer sobre isso.Curiosamente, mesmo que Dennis tenha descoberto um atalho incrível, usá-lo seria significativamente mais longo no MATL.
fonte
Geléia , 3 bytes
Experimente online!
Pegue os
O
rinais dos caracteres da string de entrada, depois osI
ncrementos dessa lista e, em seguida, oS
um dessa lista.fonte
MATLAB, 16 bytes
Isso cria uma função anônima chamada
ans
que pode ser chamado como:ans('Hello world!')
.Aqui está uma demonstração on - line no Octave que requer um byte adicional
+
para converter explicitamente a sequência de entrada em uma matriz numérica antes de calcular a diferença de elemento para elementofonte
Python, 63 bytes
Ideone it!
fonte
Cubix , 13 bytes
Cubix é uma linguagem bidimensional envolvida em um cubo.
Teste online! Isso é mapeado para a seguinte rede de cubos:
Onde o IP (ponteiro de instruções) começa no canto superior esquerdo da face esquerda.
Como funciona
Primeiro, o IP atinge o espelho
/
que o redireciona para ai
face superior. A face superior é um loop que insere códigos continuamente até que o EOF seja alcançado. Quando a entrada está vazia, o resultadoi
é -1; o IP vira à esquerda a partir do?
, pressionando o/
botão na extremidade direita e seguindo os seguintes comandos:;
- Pop o item superior (-1).#
- Empurre o comprimento da pilha.t
- Coloque o item superior e obtenha o item nesse índice na pilha. Isso puxa o item inferior.-
Subtrair.O
- Saída como um número inteiro./
- Desvia o IP para o@
, que finaliza o programa.fonte
C #, 22 bytes
Código fonte completo com caso de teste:
C # com LINQ, 17 bytes
Uma versão mais curta, usando LINQ, graças ao hstde :
No entanto, é necessária uma importação extra:
fonte
s=>s.Last()-s[0];
seria apenas 17 bytesRuby, 23 bytes
Atribua a uma variável como
f=->s{s[-1].ord-s[0].ord}
e chame comof["Hello World!"]
Usa a observação de Dennis sobre séries telescópicas.
fonte
$><<
.reticular, 12 bytes
Experimente online!
Usando a observação de Dennis , podemos reduzir um processo iterativo para outro mais simples.
fonte
Brain-Flak , 51 bytes
48 bytes de código mais três bytes para o
-a
sinalizador, o que habilita a entrada ASCII (mas a saída decimal. Como conveniente.: D)Experimente online!
Este é um pouco mais difícil do que minha outra resposta, haha. Vamos passear por ele.
fonte
05AB1E , 3 bytes
Experimente Online!
Usa a codificação CP-1252.
Explicação
fonte
Braquilog , 7 bytes
Experimente online!
Explicação
Como subtrair funciona apenas para uma entrada de dois números inteiros, será bem-sucedido quando o prefixo selecionado for
[33, 72]
.fonte
Haskell, 32 bytes
fonte
R,
69 4332 bytesUma resposta muito não competitiva, embora eu achasse divertido mostrar uma possível solução em R.
O único aspecto interessante desta resposta é o uso de
sapply
echarToRaw
. Primeiro, divido a string em um vetor de caracteres que desejo converter em suas representações inteiras ASCII. AcharToRaw
função não é vetorizada em R e, em vez de fazer um loop sobre cada valor no vetor mencionado acima,sapply
que efetivamente vetoriza a função. Posteriormente, pegue a 1ª diferença e depois some.Editar:
charToRaw
transforma uma string em um vetor, onde cada elemento é a representação bruta de cada caractere, portanto, não há necessidade de usarstrsplit
esapply
Edit2: Acontece que existe uma maneira ainda melhor, a função
utf8ToInt(x)
faz exatamente ostrtoi(charToRaw(x),16)
que significa que podemos salvar mais alguns bytes (idéia retirada da resposta de @ rturnbull para outra pergunta):fonte
Perl, 19 bytes
Inclui +1 para
-p
Dê entrada no STDIN sem nova linha final
slope.pl
:Se você tem certeza de que a string de entrada possui pelo menos 2 caracteres, esta versão de 17 bytes também funciona:
fonte
NodeJS, 82 bytes
Explicação:
JavaScript, 79 bytes
A mesma idéia acima com uma entrada de função em vez de um argumento.
fonte
x
é a entrada. Você realmente precisa obter informações.f=x=>{...;return t}
para salvar 2 bytes;)JavaScript ES6,
4239 bytesUsando a observação @Dennis sobre somas de telescópio.
Penso que, neste caso, a solução trivial é a mais curta.Economizou 3 bytes ao se livrar da
charCodeAt
repetição, conforme sugerido por @Neil.fonte
s=>s.slice(-1).charCodeAt()-s.charCodeAt()
o mesmo comprimento.charCodeAt
é bastante longo, provavelmente existe uma maneira de salvar bytes, evitando a repetição.f=s=>(s[1]?-f(s.slice(-1)):0)-s.charCodeAt()
Quarto, 28 bytes
Leva uma lista de caracteres na pilha (método padrão de obtenção de parâmetros de Forth). Os caracteres são usados de forma que a parte superior da pilha seja o primeiro caractere da string. Movo a parte inferior da pilha para o topo, troco, depois subtraio e imprimo. O lixo é deixado na pilha e a saída é impressa em stdout.
Se cada caractere fosse empurrado para a pilha em ordem e não na ordem inversa, o programa seria 2 bytes mais curto. Não tenho certeza se isso é permitido, porque normalmente você envia argumentos na ordem inversa.
Experimente online
Chamado assim:
fonte
Java, 42
Ungolfed:
Explicação:
Isso usa o mesmo princípio que o telescópio:
Generalizada para qualquer sequência de caracteres
n
, a resposta éc[n-1] - c[0]
porque todas as coisas no meio são canceladas.fonte
PHP 7.1,
3331 bytesUsa deslocamentos negativos de string implementados no PHP 7.1.
Execute assim:
Tweaks
$argn
fonte
RProgN , 142 Bytes, Não concorrente
Não concorrente, pois o comando 'tostack' foi adicionado após a descoberta desse desafio (mesmo que tenha uma contagem terrível de bytes)
Casos de teste
Explicação
RProgN é uma linguagem esotérica em que tenho trabalhado com a Notação Polonesa Reversa em mente. Atualmente, é bastante detalhado, com a atribuição de variáveis com 4 caracteres e, portanto, pretendo adicionar no futuro um pouco de açúcar sintático.
Além disso, RProgN acessa implicitamente argumentos da pilha e os retorna da mesma maneira. Quaisquer dados de sequência deixados na pilha após a conclusão do programa são impressos implicitamente.
fonte
~{bid☼[+
e isso é um pouco adorável.PHP, 36 bytes
→ soma das diferenças == diferença entre o primeiro e o último caractere
ord()
no PHP opera com o primeiro caractere de uma string→ não é necessário reduzi-la explicitamente para um único caractere
fonte
Brain-Flak ,
3432 + 3 = 35 bytes+3 por causa do
-a
sinalizador necessário para o modo ascii.Experimente online
Estranhamente, é mais eficiente usar a definição usada nas especificações em vez do "truque" de subtrair primeiro do último.
Isso funciona fazendo exatamente isso.
fonte
CJam ,
85 bytesMuito obrigado a Dennis por duas sugestões que removeram 3 bytes
Experimente online!
Explicação
Calcula o último valor menos o primeiro valor.
fonte
)
vez deW=
, não precisará do_
. Além disso,c
como um atalho para0=
.Haskell, 36 bytes
uso:
Haskell (Lambdabot), 31 bytes
fonte
sum.(tail>>=zipWith(-)).map fromEnum
por exemplo é uma função.Zsh , 22 bytes
Experimente online!
No modo aritmético,
#name
obtém o código de caractere do primeiro caracterename
. Definimosc
o último caractere e calculamos a diferença entre o primeiro e o último código.fonte
Haskell , 30 bytes
Experimente online!
Subtrai o valor ordinal do último caractere do primeiro.
fonte
Haskell, 61 bytes
fonte
Java 7,
10096 bytesUngolfed & código de teste:
Experimente aqui.
Resultado:
-39
fonte
Clojure, 31 bytes
Alguém já reduziu a tarefa a uma única operação.
fonte