Défi
Étant donné une chaîne telle que Hello World!
, décomposer en ses valeurs de caractères: 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33
.
Puis calculer la différence entre chaque paire consécutive de caractères: 29, 7, 0, 3, -79, 55, 24, 3, -6, -8, -67
.
Enfin, résumer les imprimer et le résultat final: -39
.
Règles
- Des échappatoires standard s'appliquent
- Aucune utilisation de fonctions prédéfinies qui effectuent cette tâche exacte
- Des solutions créatives encouragées
- S'amuser
- Ceci est marqué comme code-golf , la réponse la plus courte en octets gagne mais ne sera pas sélectionnée.
code-golf
string
number
arithmetic
array-manipulation
dkudriavtsev
la source
la source
Réponses:
Python, 29 octets
La somme des différences forme une série télescopique, donc la plupart des sommets s'annulent et
(s 1 - s 0 ) + (s 2 - s 1 ) +… + (s n-1 - s n-2 ) + (s n - s n-1 ) = s n - s 0 .
Si la prise d'une chaîne d'octets en entrée est autorisée
fonctionnera également pendant 19 octets .
Testez les deux sur Ideone .
la source
MATL , 2 octets
Essayez-le en ligne!
Explication:
d
obtient la différence entre les caractères consécutifs ets
additionne le tableau résultant. Ensuite, la valeur en haut de la pile est implicitement imprimée. Pas grand chose d'autre à dire à ce sujet.Chose intéressante, même si Dennis a découvert un raccourci génial, son utilisation serait considérablement plus longue en MATL.
la source
Gelée , 3 octets
Essayez-le en ligne!
Prenez les
O
rdinals des caractères de la chaîne d'entrée, puis lesI
ncrements de cette liste, puis leS
um de cette liste.la source
MATLAB, 16 octets
Cela crée une fonction anonyme nommée
ans
qui peut être appelé comme:ans('Hello world!')
.Voici une démo en ligne dans Octave qui nécessite un octet supplémentaire
+
pour convertir explicitement la chaîne d'entrée en un tableau numérique avant de calculer la différence d'élément à élémentla source
Python, 63 octets
Ideone it!
la source
Cubix , 13 octets
Cubix est un langage bidimensionnel enroulé autour d'un cube.
Testez-le en ligne! Cela correspond au réseau de cubes suivant:
Où l'IP (pointeur d'instruction) commence en haut à gauche de la face la plus à gauche.
Comment ça fonctionne
Tout d'abord, l'IP frappe le miroir
/
qui le redirige sur lai
face supérieure. La face supérieure est une boucle qui entre continuellement des codes de caractères jusqu'à ce que l'EOF soit atteint. Lorsque l'entrée est vide, le résultat dei
est -1; l'IP tourne à gauche de la?
, en frappant/
à l'extrême droite et en passant par les commandes suivantes:;
- Pop l'élément supérieur (-1).#
- Poussez la longueur de la pile.t
- Pop l'élément supérieur et obtenir l'élément à cet index dans la pile. Cela tire l'élément inférieur.-
- Soustraire.O
- Sortie sous forme d'entier./
- Dévie l'adresse IP vers@
, ce qui met fin au programme.la source
C #, 22 octets
Code source complet avec scénario de test:
C # avec LINQ, 17 octets
Une version plus courte, utilisant LINQ, grâce à hstde :
Cependant, une importation supplémentaire est nécessaire:
la source
s=>s.Last()-s[0];
ne serait que de 17 octetsRubis, 23 octets
Attribuer à une variable comme
f=->s{s[-1].ord-s[0].ord}
et appeler commef["Hello World!"]
Utilise l'observation de Dennis sur les séries télescopiques.
la source
$><<
.réticulaire, 12 octets
Essayez-le en ligne!
En utilisant l'observation de Dennis , nous pouvons raccourcir un processus itératif en un processus plus simple.
la source
Brain-Flak , 51 octets
48 octets de code plus trois octets pour le
-a
drapeau, ce qui permet l'entrée ASCII (mais la sortie décimale. Comme c'est pratique.: D)Essayez-le en ligne!
Celui-ci est un peu plus difficile que mon autre réponse, haha. Permet de le parcourir.
la source
05AB1E , 3 octets
Essayez-le en ligne!
Utilise l'encodage CP-1252.
Explication
la source
Brachylog , 7 octets
Essayez-le en ligne!
Explication
Puisque soustraire ne fonctionne que pour une entrée de deux entiers, il réussira une fois le préfixe sélectionné
[33, 72]
.la source
Haskell, 32 octets
la source
R,
69 4332 octetsUne réponse très non concurrente même si je pensais que ce serait amusant de présenter une solution possible dans R.
Le seul aspect intéressant de cette réponse est l'utilisation de
sapply
etcharToRaw
. J'ai d'abord divisé la chaîne en un vecteur de caractères que je souhaite convertir en ses représentations entières ASCII. LacharToRaw
fonction n'est pas vectorisée en R et au lieu de boucler sur chaque valeur dans le vecteur susmentionné que j'utilisesapply
qui vectorise efficacement la fonction. Prenez ensuite la 1ère différence puis additionnez.Edit: s'avère
charToRaw
transformer une chaîne en un vecteur où chaque élément est la représentation brute de chaque caractère, donc pas besoin d'utiliserstrsplit
etsapply
Edit2: Il s'avère qu'il existe un moyen encore meilleur, la fonction
utf8ToInt(x)
fait exactement cestrtoi(charToRaw(x),16)
qui signifie que nous pouvons économiser quelques octets de plus (idée tirée de la réponse de @ rturnbull à une autre question):la source
Perl, 19 octets
Comprend +1 pour
-p
Donnez votre avis sur STDIN sans nouvelle ligne finale
slope.pl
:Si vous êtes sûr que la chaîne d'entrée comporte au moins 2 caractères, cette version de 17 octets fonctionne également:
la source
NodeJS, 82 octets
Explication:
JavaScript, 79 octets
Même idée que ci-dessus avec une entrée de fonction au lieu d'un argument.
la source
x
c'est l'entrée. Vous devez réellement obtenir des informations.f=x=>{...;return t}
pour économiser 2 octets;)JavaScript ES6,
4239 octetsUtilisation de l'observation @Dennis sur les sommes du télescope.
Je pense que dans ce cas, la solution triviale est la plus courte.Enregistré 3 octets en se débarrassant de la
charCodeAt
répétition comme suggéré par @Neil.la source
s=>s.slice(-1).charCodeAt()-s.charCodeAt()
qui avait la même longueur.charCodeAt
c'est assez long, il y a probablement un moyen d'économiser des octets en évitant la répétition.f=s=>(s[1]?-f(s.slice(-1)):0)-s.charCodeAt()
Forth, 28 octets
Prend une liste de caractères sur la pile (méthode standard de Forth de prise de paramètres.) Les caractères sont pris de telle sorte que le haut de la pile est le premier caractère de la chaîne. Je déplace le bas de la pile vers le haut, permute, puis soustrais et imprime. Les déchets sont laissés sur la pile et la sortie est imprimée sur stdout.
Si chaque caractère était poussé dans la pile dans l'ordre au lieu de l'ordre inverse, le programme serait plus court de 2 octets. Je ne sais pas si c'est autorisé, car normalement, vous poussez les arguments dans l'ordre inverse.
Essayez-le en ligne
Appelé comme ceci:
la source
Java, 42
Non golfé:
Explication:
Celui-ci utilise le même principe que le télescopage:
Généralisée pour n'importe quelle séquence de caractères de longueur
n
, la réponse estc[n-1] - c[0]
parce que tout ce qui se trouve au milieu s'annule.la source
PHP 7.1,
3331 octetsUtilise des décalages de chaîne négatifs implémentés en PHP 7.1.
Courez comme ceci:
Tweaks
$argn
la source
RProgN , 142 octets, non concurrent
Non compétitif, car la commande 'tostack' a été ajoutée après la découverte de ce défi (même si le nombre d'octets est terrible)
Cas de test
Explication
RProgN est un langage ésotérique sur lequel j'ai travaillé avec la notation polonaise inversée à l'esprit. Il est actuellement assez verbeux, avec une affectation variable de 4 caractères, et je prévois toutefois à l'avenir d'ajouter un peu de sucre syntaxique.
En outre, RProgN accède implicitement aux arguments de la pile et les renvoie de la même manière. Toutes les données de chaîne laissées dans la pile après la fin du programme sont imprimées implicitement.
la source
~{bid☼[+
et c'est un peu adorable.PHP, 36 octets
→ somme des différences == différence entre le premier et le dernier caractère
ord()
en PHP fonctionne sur le premier caractère d'une chaîne→ pas besoin de le réduire explicitement à un seul caractère
la source
Brain-Flak ,
3432 + 3 = 35 octets+3 en raison du
-a
drapeau requis pour le mode ascii.Essayez-le en ligne
Étrangement, il est plus efficace d'utiliser réellement la définition utilisée dans les spécifications plutôt que le "truc" de soustraire du premier au dernier.
Cela fonctionne en faisant exactement cela.
la source
CJam ,
85 octetsUn grand merci à Dennis pour deux suggestions qui ont supprimé 3 octets
Essayez-le en ligne!
Explication
Calcule la dernière valeur moins la première valeur.
la source
)
au lieu deW=
, vous n'avez pas besoin de_
. Aussi,c
comme raccourci pour0=
.Haskell, 36 octets
usage:
Haskell (Lambdabot), 31 octets
la source
sum.(tail>>=zipWith(-)).map fromEnum
par exemple, est une fonction.Zsh , 22 octets
Essayez-le en ligne!
En mode arithmétique,
#name
obtient le code de caractère du premier caractèrename
. Nous définissonsc
le dernier caractère et prenons la différence entre le premier et le dernier code.la source
Haskell , 30 octets
Essayez-le en ligne!
Soustrait la valeur ordinale du dernier caractère du premier.
la source
Haskell, 61 octets
la source
Java 7,
10096 octetsCode non testé et testé:
Essayez-le ici.
Production:
-39
la source
Clojure, 31 octets
Quelqu'un a déjà réduit la tâche à une seule opération.
la source