Nous définirons le chiffre impair / pair ASCII via le pseudocode ci-dessous:
Define 'neighbor' as the characters adjacent to the current letter in the string
If the one of the neighbors is out of bounds of the string, treat it as \0 or null
Take an input string
For each letter in the string, do
If the 0-based index of the current letter is even, then
Use the binary-or of the ASCII codes of both its neighbors
Else
If the ASCII code of the current letter is odd, then
Use the binary-or of itself plus the left neighbor
Else
Use the binary-or of itself plus the right neighbor
In all cases,
Convert the result back to ASCII and return it
If this would result in a code point 127 or greater to be converted, then
Instead return a space
Join the results of the For loop back into one string and output it
Par exemple, pour l'entrée Hello
, la sortie est emmol
, puisque
- Les
H
virages vers\0 | 'e'
lesquelse
- Les
e
virages vers'e' | 'l'
, ou101 | 108
, qui est109
oum
- Le premier
l
se tourne également vers101 | 108
oum
- Le second se
l
tourne vers108 | 111
, qui est111
ouo
- Les
o
virages en108 | \0
, oul
Contribution
- Une phrase composée uniquement de caractères ASCII imprimables, dans tout format approprié .
- La phrase peut avoir des points, des espaces et d'autres signes de ponctuation, mais ne comportera jamais qu'une seule ligne.
- La phrase comportera au moins trois caractères.
Production
- Le chiffrement résultant, basé sur les règles décrites ci-dessus, est retourné sous forme de chaîne ou de sortie.
Les règles
- Un programme complet ou une fonction sont acceptables.
- Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
Exemples
Entrée sur une ligne, sortie sur ce qui suit. Des lignes vides séparent les exemples.
Hello
emmol
Hello, World!
emmol, ww~ved
PPCG
PSWG
Programming Puzzles and Code Golf
r wogsmmoonpuu ~ meannncoooeggonl
abcdefghijklmnopqrstuvwxyz
bcfefgnijknmno~qrsvuvw~yzz
!abcdefghijklmnopqrstuvwxyz
aaccgeggoikkomoo qsswuww yy
Test 123 with odd characters. R@*SKA0z8d862
euutu133www|todddchizsscguwssr`jS{SK{z~|v66
o
modifications apportées aul
premier exemple, je suis presque sûr que vos spécifications garantissent que le premiero
ne change pasl
dans le deuxième exemple. Cela devrait changer'l' | ','
, quoi que ce soit, non?'l' | ','
, qui est108 | 44 --> 1101111 | 0101100
, qui devient108
, qui estl
. Le,
arrive à s'aligner avec lel
, donc il n'y a pas de changement lorsque le binaire ou a lieu.Réponses:
Gelée ,
3331 octetsUne approche directe qui peut sûrement être raccourcie.
Essayez-le en ligne!
la source
Perl,
6362 octetsComprend +4 pour
-lp
Donnez votre avis sur STDIN
oddeven.pl
:Cela fonctionne comme indiqué, mais pour obtenir le score revendiqué, cela doit être mis dans un fichier sans final
;
et newline et les\xhh
échappements doivent être remplacés par leurs valeurs littérales. Vous pouvez le faire en mettant le code ci-dessus dans le fichier et en exécutant:la source
Python 2,
138131 octetsEssayez-le en ligne (contient tous les cas de test)
Moins golfé:
Essayez-le en ligne (non golfé)
J'ajoute
\x00
aux deux côtés de la chaîne afin de ne pas avoir à m'en soucier pendant le bit-oring. Je boucle le long des caractères d'origine de la chaîne, en effectuant des opérations au niveau du bit et en les ajoutant au résultat, en suivant les règles de parité.la source
|=
... l'équivalent dans PowerShell serait$a=$a-bor$b
a?b:c
comme JS.C - 101 octets
Nous n'avons même pas besoin de vérifier s'il s'agit du dernier élément de la chaîne car les chaînes en C sont terminées par null.
Explication
Assez simple:
Utilisez & 1 pour tester les expressions impaires / planes et ternaires pour remplacer if / elses. Incrémentez le caractère * p pour réduire le nombre de crochets requis.
la source
Mathematica, 152 octets
Explication
Convertit une chaîne en codes ASCII
Partitionne les codes ASCII en longueur 3, décalez 1 partition, avec des 0 remplis.
Applique une fonction pour chaque partition.
If...else if... else
en Mathematica .Vérifie si l'index (# 2) est impair. (
Max
est pour l'aplatissement); puisque l' index Mathematica commence à 1, je l'ai utiliséOddQ
ici, pasEvenQ
Prend les codes ASCII des voisins gauche et droit.
Vérifie si le code ASCII du caractère correspondant est impair.
Prend les codes ASCII du caractère et du voisin gauche.
Prend les codes ASCII du caractère et du bon voisin.
Applique ou opération.
Remplace tous les nombres supérieurs à 126 par 32 (espace).
Convertit le code ASCII en caractères et les joint.
la source
From/ToCharacterCode
fonctions. Il ressemble alors à votreDrop
pouvez utiliser la notation infixe:#~Drop~{2}
. Et il semble que vous appliquezBitOr
à toutes les sorties possibles de la,Which
alors pourquoi ne pas l'appliquer ensuite et une seule fois?Ruby
133128108106 octetsJordan m'a aidé à économiser 20 octets et cia_rana m'a aidé à économiser 2 octets :)
s
est prise comme chaîne d'entrée.Exemple de sortie avec
s="Test 123 with odd characters. R@*SKA0z8d862"
:Explication
Le code ci-dessus est très illisible, voici donc une explication. Le code est un peu hacky, je suis nouveau sur Ruby, donc je parie qu'il y a un moyen plus court de le faire :)
la source
print
place dep
: p->s{p s[-i=-1]+s.bytes.each_cons(3).map{|x,y,z|i+=1;a=i%2>0?x|z :y%2>0?y|x :y|z;a>126?' ':a.chr}*""+s[-2]}
J, 42 octets
Utilise la propriété selon laquelle les verbes en J peuvent être appliqués de manière alternée en utilisant un gérondif
`
pour certains adverbes tels que infix\
.Usage
Explication
la source
JavaScript (ES6),
125118114 octetsEmbarrassant de temps, mais
charCodeAt
etString.fromCharCode
seuls sont 29 octets. : - /Comment ça fonctionne
Chaque caractère à la position
i
est traduit avec la formule suivante, qui couvre toutes les règles à la fois:où
C(n)
renvoie le code ASCII du nième caractère de la chaîne d'entrée.Démo
la source
PHP,
10797 octetsprobablement golfable.
la source
C #, 145 octets
Programme complet avec méthode non golfée et cas de test:
Cela s'est avéré plus long que je ne le pensais ...
la source