Tâche
- L'utilisateur saisit une phrase - mots uniquement. Toute entrée autre que des lettres ou des espaces, y compris des entiers et des signes de ponctuation, doit lever une exception: "La phrase ne doit utiliser que des lettres".
- La sortie a un modèle, où certains mots sont inversés et d'autres mots sont normaux.
- Le motif commence comme un mot normal, les deux mots suivants sont inversés, puis les deux mots suivants sont normaux et le motif continue.
- Un exemple où les mots devraient être normaux et où les mots inversés est ci-dessous:
Normal - Inversé - Inversé - Normal - Normal - Inversé - Inversé - Normal ...
Exemple d'entrée
Elle vend des coquillages sur le bord de la mer
Exemple de sortie
Elle slles aeS shells on eht aeS shore
Règles supplémentaires
- Si des majuscules sont utilisées, elles doivent rester sur la lettre sur laquelle elles ont été initialement affichées.
- Tous les espaces multiples initialement affichés en entrée doivent être réduits à un espace. Par exemple
Programming Puzzles and Code Golf
devientProgramming selzzuP dna Code Golf
Le code le plus court gagne !!
Bon codage ...
code-golf
string
word
permutations
Belfield
la source
la source
Any input other than letters or spaces, including integers and punctuation, should throw an exception: "Sentence must only use letters".
Cela signifie implémenter une tâche secondaire sans aucun rapport avec le défi de renverser les mots, de supprimer les langues qui n'ont pas d'exceptions, et nécessite le codage en dur ou la compression d'une longue chaîne qui occupe une grande partie de la nombre d'octets.Réponses:
TeaScript , 55 octets
58 60 69 76 78 80 87 89C'est extrêmement court, j'en suis très content.
Les 20 derniers caractères peuvent ressembler à du charabia, mais c'est "La phrase ne doit utiliser que des lettres" encodée. Tous les caractères ont des codes de caractères inférieurs à 256, chacun étant donc d'un octet
Explication
la source
Haskell, 141 octets
Près des 2/3 du code sont destinés à la vérification des erreurs. Semble être le premier défi du monde réel.
Le travail est effectué par
unwords$zipWith($)(cycle[id,reverse,reverse,id])$words x
lequel divise l'entrée en une liste de mots, la zippe avec la liste cyclique des fonctions[id,reverse,reverse,id,id,reverse...]
et à joindre le résultat avec des espaces à une seule chaîne.Merci à @Christian Irwan pour 2 octets.
la source
r=reverse
?reverse
etr=reverse
j'avais la même longueur, à cause du manquef=
. Je n'ai pas vérifié à nouveau lors du passage en non sans point).JavaScript (ES6) 122
la source
Rétine , 103 octets
Il devrait y avoir un seul espace sur la deuxième ligne, que SE semble avaler. Exécutez le code à partir d'un seul fichier avec l'
-s
indicateur.Retina n'a pas de concept d'exceptions, donc la sortie est simplement remplacée par
Sentence must only use letters
s'il y a des caractères non blancs et non blancs dans l'entrée.la source
Pyth, 61 octets
Essayez-le en ligne.
la source
Python,
163160157145Suppression de 15 caractères, merci Mego !!
la source
Bash + coreutils, 108
Le dernier caractère de ce programme est un espace.
L'entrée provient de la ligne de commande:
la source
Pyth, 72
Ne bat pas l'autre réponse Pyth, mais j'ai déjà investi du temps pour l'écrire. Il s'agit essentiellement d'une traduction de ma réponse Python .
Essayez-le en ligne
la source
Julia, 109 octets
i=0
et(i+=1)%4>1
sont utilisés pour décider si chaque mot obtientreverse
d ou non.isalpha
s'applique aux mots après avoir été divisé en utilisantsplit(s)
pour déterminer s'il existe ou non des caractères qui ne sont pas des lettres (les espaces ont déjà été supprimés à ce stade).join
restaure la chaîne après la manipulation, sauf si leerror
est levé.la source
Julia,
150134 octetsNon golfé:
16 octets enregistrés grâce à Glen O!
la source
r
le résultat? Autrement dit,r=ismatch(...)||error(...)
- va raser quelques caractères et inverser le conditionnel qui utiliser
. Je commenterai à nouveau avec, je suppose, quelques économies supplémentaires||
gérer la négation, puis j'ai réalisé que la négation n'était pas nécessaire. Retournez-le à&&
. Et encore mieux, utilisez?:
plutôt pour le faire encore mieux.s->(r=ismatch(r"[^a-z ]"i,s))?error("Sentence must only use letters"):join([(iseven(i)&&(r=!r);r?reverse(w):w)for(i,w)=enumerate(split(s))]," ")
pour 144 octets. Et je pense que je peux faire mieux à l'intérieurjoin
...s->ismatch(r"[^a-z ]"i,s)?error("Sentence must only use letters"):(i=3;join([(i+=1;isodd((i+1)i÷2)?reverse(w):w)for w=split(s)]," "))
Pyth, 55 octets
%%k4 3
J'ai emprunté le morceau à Pietu1998. Un octet supplémentaire enregistré.Essayez-le en ligne: démonstration ou suite de tests
Explication
la source
Perl 5
-ap
, 80 octetsEssayez-le en ligne!
la source
Java, 215 octets
Regex est amusant
Essayez-le en ligne!
la source
She slles aeS shells no the aeS shore
, mais cela devrait être à laShe slles aeS shells on eht aeS shore
place (d'abord normal, puis en alternant par paires de 2 inversées ou non). Deux problèmes en sont la cause. Vous augmentez maintenanti
même si un élément est vide, eti++%2<1
devrait l'être à lai++%4>1
place. Voici une version fixe de 211 octets .Gelée , 39 octets
Essayez-le en ligne!
Merci à Erik l'Outgolfer. Il m'a sauvé de quelques octets supplémentaires et de nombreuses heures de frustration.
Voici une solution de 46 octets
Il génère en fait une erreur de syntaxe python lorsque l'entrée contient des caractères non valides.
Essayez-le en ligne!
la source
Japt v2.0a0
-S
, 41 octetsEssayez-le
la source
05AB1E , 36 octets
Essayez-le en ligne.
Lance l'erreur suivante lorsque l'entrée ne contient pas seulement
[A-Za-z ]
:Explication:
Voir cette astuce de la mine de 05AB1E (section Comment utiliser le dictionnaire? ) Pour comprendre pourquoi
“¸–ƒ—€É€Å™ê“
est"sentence must only use letters"
.la source
PHP , 147 octets
Essayez-le en ligne!
Ou si cela
die()
est acceptable comme "exception":PHP , 131 octets
Essayez-le en ligne!
la source