Tâche
Votre tâche consiste à produire une chaîne contenant des caractères moyens de chaîne. Le premier caractère du résultat serait le caractère moyen du premier caractère (qui est le premier caractère) et la moyenne du deuxième caractère de deux premiers caractères et ainsi de suite.
Quel est le caractère moyen?
Les chaînes sont des tableaux d'octets. Le caractère moyen de la chaîne peut être trouvé en calculant la moyenne des valeurs ASCII des caractères de la chaîne et en prenant le caractère ASCII correspondant.
Par exemple, une chaîne "Hello!"
peut être écrite sous forme de séquence d'octets 72 101 108 108 111 33
. La moyenne des valeurs ascii est 533/6 = 88.833 ... et quand elle est arrondie à l'entier le plus proche, nous obtenons 89 qui est le code ascii pour la lettre captive Y
.
Règles
- Vous pouvez supposer que l'entrée ne contient que des caractères ASCII imprimables
- L'entrée peut être lue depuis stdin ou comme arguments de ligne de commande ou comme arguments de fonction
- La sortie doit être standard. Si votre programme est fonctionnel, vous pouvez également renvoyer la chaîne que vous auriez sinon imprimée.
- Il doit s'agir d'un programme ou d'une fonction dans son intégralité, et non d'un extrait
- Des échappatoires standard s'appliquent
- Les entiers sont arrondis par fonction
floor(x+0.5)
ou fonction similaire.
Comment gagner?
C'est le code-golf , donc la réponse la plus courte (en octets) en victoires.
Exemples
Hello!
→HW^adY
test
→tmop
42
→43
StackExchange
→Sdccd_ccccddd
Réponses:
Brainfuck 106 octets
C'est ma première participation à un code-golf, soyez gentil! Cela fonctionne, mais brainfuck ne peut pas gérer les flottants (pas que je sache), donc la valeur arrondie est toujours la plus basse (pourrait corriger mon algorithme plus tard).
De plus, l'algorithme fait la moyenne des valeurs 2 par 2, ce qui signifie qu'il pourrait être inexact à certains endroits. Et je dois aussi corriger un bug qui imprime un nombre à la fin de la sortie.
la source
Pyth, 16 octets
Assez simple. Utiliser
s+.5
au lieu d'arrondir, car pour une raison quelconque,round(0.5, 0)
c'est 0 en Python.la source
0.5
devrait être arrondi1
.Q,
1512 octets12 octets comme expression
ou 15 octets en fonction
profite de
la source
"c"$avgs"i"$
? Je ne pense pas qu'une solution pourrait être beaucoup plus simple que cela. :)"c"
en `c et"i"
en` i.CJam, 19 octets
Essayez-le en ligne dans l' interpréteur CJam .
la source
Perl:
3130 caractères(Code de 29 caractères + option de ligne de commande de 1 caractère.)
Exemple d'exécution:
la source
C #
189135134106octetsPeut être vu ici
Golfeur pour la première fois
la source
K, 36 octets
Usage:
_ci
et_ic
convertir ascii en caractères et vice versa, respectivement.{(+/x)%#x}
est un idiome K classique pour calculer une moyenne. Assez simple dans l'ensemble.Edit: oh, mal lu la spécification. `0: est nécessaire pour imprimer le résultat sur stdout. En attente de clarification sur l'entrée re. Question de Dennis.
la source
{[s]`0:`c${_.5+(+/u)%#u:x#s}'1+!#s}
.`0:`c$_.5+{(+/x)%#x}'1_|(-1_)\
`c$_.5+{(+\x)%+\~^x}`i$
pour 24. Il pourrait être plus court (`c$`i${(+\x)%+\~^x}`i$
) mais votre REPL ( johnearnest.github.io/ok/index.html ) ne s'arrondit pas correctement lors de la conversion de float en int. J'hésiterais à appeler cette solution ak depuis_ci
et_ic
ne suis nulle part dans la spécification K5 pour autant que je sache, alors0:
qu'il n'imprime pas sur stdout mais lit à la place un fichier txt à partir du disque._ci
et_ic
sont entièrement remplacés en K5 par les formulaires comme`c$
. La solution originale que j'ai publiée est compatible avec Kona, qui est basée sur K2 / K3. J'essaie généralement de ne pas publier de solutions avec oK spécifiquement parce que la sémantique change encore et est partiellement inexacte.`0:_ci_0.5+{(+\x)%1.+!#x}_ic
Mathematica, 75 octets
la source
Julia,
8581 octetsCela crée une fonction sans nom qui accepte une chaîne et crée un vecteur de ses points de code ASCII. Des moyennes sont prises pour chaque groupe séquentiel, arrondies à des entiers, converties en caractères, jointes en une chaîne et imprimées dans STDOUT.
la source
Rubis, 46
ideone .
Je m'excuse auprès de w0lf, ma réponse s'est avérée suffisamment différente pour que cela semble valoir la peine d'être publié.
$<.bytes
itère sur chaque octet dans stdin, nous imprimons donc la moyenne mobile dans chaque boucle. '% c' convertit un flottant en caractère en arrondissant et en prenant l'ASCII, donc tout ce que nous avons à faire est d'ajouter 0,5 pour le faire arrondir correctement.$.
est une variable magique qui commence initialisée à 0 - elle est censée stocker le nombre de lignes, mais comme nous voulons ici le nombre d'octets, nous l'incrémentons manuellement.la source
Mathcad, 60 "octets"
Mathcad est une application mathématique basée sur des feuilles de calcul 2D composées de "régions" dont chacune peut être du texte, une expression mathématique, un programme, un tracé ou un composant scripté.
Une instruction mathématique ou de programmation est sélectionnée dans une barre d'outils de palette ou saisie à l'aide d'un raccourci clavier. À des fins de golf, une opération ("octet") est considérée comme le nombre d'opérations au clavier nécessaires pour créer un nom ou une expression (par exemple, pour définir la variable a sur 3, nous écririons a: = 3. L'opérateur de définition : = est une simple pression sur la touche ":", de même que a et 3 donnant un total de 3 "octets". La programmation pour l' opérateur nécessite de taper ctl-shft- # (ou un simple clic sur la barre d'outils de programmation) donc à nouveau est équivalent à 1 octet.
Dans Mathcad, l'utilisateur entre des commandes de langage de programmation à l'aide de raccourcis clavier (ou en les sélectionnant dans la barre d'outils de programmation) plutôt que de les écrire dans du texte. Par exemple, taper ctl-] crée un opérateur de boucle while qui a deux "espaces réservés" pour entrer la condition et une seule ligne du corps, respectivement. En tapant = à la fin d'une expression Mathcad, Mathcad évalue l'expression.
(Nombre d'octets) En le regardant du point de vue de l'utilisateur et en assimilant une opération d'entrée Mathcad (clavier généralement, clic de souris sur la barre d'outils si aucun raccourci kbd) à un caractère et en l'interprétant comme un octet. csort = 5 octets car il est tapé char-by-char comme le sont les autres noms de variable / fonction. L'opérateur for est une construction spéciale qui occupe 11 caractères (dont 3 "espaces réservés" vides et 3 espaces) mais est entrée par ctl-shft- #, donc = 1 octet (similaire aux jetons dans certaines langues). Taper '(citation) crée des parenthèses équilibrées (généralement) et compte donc pour 1 octet. Indexation v = 3 octets (type v [k).
la source
Python 3, 66 octets
Si j'utilise à la
round()
place deint(.5+
etc., il enregistre un caractère, mais n'est techniquement pas conforme au défi: les arrondis de Python seround()
divisent en deux à l'entier pair le plus proche, pas vers le haut. Cependant, il fonctionne correctement sur toutes les entrées d'échantillon.Je me sens également un peu sale pour ne pas terminer la sortie avec une nouvelle ligne, mais le défi ne nécessite pas que ...
la source
print(end=chr(int(...))
pour économiser quelques octetsJavaScript (ES6), 75 octets
Je ne peux pas croire qu'il n'y ait pas encore de réponse JS avec cette technique ...
la source
Python 2, 71
Avec chaque nouveau caractère, met à jour la somme des caractères
s
et le nombre de caractèresi
pour calculer et ajouter le caractère moyen.la source
print
. Est-ce que cela fonctionnera avec Python 2? J'oublie tout à l'heure comment supprimer les retours à la ligne dans laprint
déclaration ... la virgule en fait un espace à la place, non?)print _,
pour laisser un espace plutôt qu'une nouvelle ligne, mais aucun bon moyen d'omettre l'espace. Bon appel avec l'end
argument de Python 3 , j'avais oublié ça.print'\b'+_,
Rubis 59
61Test: http://ideone.com/dT7orT
la source
c+=1;(s/c)
→(s/c+=1)
ideone.com/H2tB9WJava, 100
Tout comme beaucoup d'autres réponses ici, je fais la somme et la moyenne en boucle. Juste ici pour représenter Java :)
Mon code d'origine est un 97, mais il ne renvoie que le modifié
char[]
plutôt que de l'imprimer:Maintenant, c'est juste assez long pour que les barres de défilement apparaissent pour moi, alors voici une version avec quelques sauts de ligne, juste parce que:
la source
test
s'agit d'un tableau de caractères, utilisez simplementf(test);
. S'il s'agit d'un objet String, vous l'utiliseriezf(test.toCharArray());
. Les littéraux de chaîne sont bien comme ça aussi:f("Hello!".toCharArray());
toCharArray()
Moi stupide, j'ai essayé de la violer avec un casting. Merci.C, 62 octets
(lien idéone)
Les résultats sont légèrement différents des exemples de l'OP, mais uniquement parce que ce code arrondit 0,5 vers le bas au lieu de monter. Plus maintenant!
la source
R,
135127 OctetsCela est devenu très rapide et je me suis vraiment trompé la première fois :) Besoin de lire correctement les questions.
Essai
la source
utf8ToInt
va aider! J'ai un golf de 68 octets si vous voulez le mettre à jour.Perl 5, 41 octets
courir comme
la source
TSQL, 118 octets
Retour des caractères à la verticale
la source
> <> , 30 octets
&
registreVous pouvez l'essayer sur l' interpréteur en ligne, mais vous devez ensuite utiliser la version suivante, car l'interpréteur en ligne remplit la zone de code dans un rectangle et s'applique
?
aux espaces.la source
05AB1E , 15 octets [non concurrentiel?]
Essayez-le en ligne!
la source
D
et}
, et en remplaçants
pary
..p
est un 1byter maintenant aussiη
xDJapt , 13 octets (non concurrent)
Testez-le en ligne!
Comment ça marche
la source
Japt , 11 octets
Essayez-le
la source
PHP , 176 octets
Exemple:
La plus grande solution jusqu'à présent, mais basée sur php, elle ne peut pas être beaucoup plus courte je pense. 2 octets pourraient être enregistrés en supprimant les sauts de ligne.
la source
JavaScript ES7, 122 octets
Surtout tout se passe dans ce morceau
Le reste est en boucle / conversion de code de caractère
Séparer:
Si les fonctions ne sont pas autorisées:
133 octets
Extrait ES5:
la source
Python 2, 106 octets
Ce n'est pas assez court. Comme c'est python, c'est beaucoup trop verbeux, vous pouvez même lire ce qu'il fait en regardant du code. Mais ça marche.
la source
Matlab, 43
Utilisation d'une fonction anonyme:
Exemples:
la source
JavaScript ES6, 111 octets
C'est énormément long, en partie grâce au long
String.fromCharCode
et auxcharCodeAt
fonctions de JavaScript . L'extrait de pile contient du code testable non golfé, commenté.la source
Facteur, 80 octets
la source