Le but de ce défi est de recevoir une entrée et une sortie qui entrent mais avec l'ordre des phrases inversé. Exemple d'entrée:
Hello friend. What are you doing? I bet it is something I want to do too!
Exemple de sortie:
I bet it is something I want to do too! What are you doing? Hello friend.
Comme vous pouvez le voir dans les exemples, votre programme doit gérer les points d'interrogation, les points d'exclamation et les points. Vous pouvez supposer que chaque phrase a une ponctuation et un espace avant la phrase suivante. Les espaces / sauts de ligne sont corrects, tant qu'ils sont lisibles. Le code le plus court gagne.
Bonne chance!
EDIT: Vous pouvez supposer que les phrases n'ont pas de guillemets ou de parenthèses, mais si vous faites en sorte que votre code soit capable de gérer les deux, alors vous obtenez -5 octets Exemple de sortie pour les parens / guillemets:
"Hello, " she said. (I didn't know what she was talking about.) --> (I didn't know what she was talking about.) "Hello, " she said.
"Hello!" she said. (I hesitated. How should I respond? This is too much!) I responded, "Hi there. How are you? What is your cat's name?" without thinking any more about it.
Réponses:
Julia,
4542 octets - 5 bonus = 37Cela crée une fonction anonyme qui accepte une chaîne en entrée et renvoie la chaîne avec ses phrases inversées. Cela gère correctement tout caractère spécial, bien que les guillemets doubles et les signes dollar doivent être échappés, sinon ce ne sont pas des chaînes valides dans Julia.
Non golfé + explication:
Exemples:
Et si vous n'aimez pas regarder les guillemets échappés dans la sortie:
Sauvegardé 3 octets sur l'expression régulière grâce à Martin Büttner! Auparavant , ce a utilisé un lookbehind:
(?<=[.?!])
.la source
CJam,
2322 octetsJe ne sais pas si cela est admissible au bonus ou non, mais voici la solution:
Expansion de code (peu obsolète) :
Essayez-le en ligne ici
la source
J,
3532Il gère presque les entrées bonus, sauf que je dois échapper à des apostrophes simples, donc je suppose que cela ne compte pas. (Aussi, ma première soumission ici)
Usage:
la source
Perl, 27/25
Ou depuis la ligne de commande:
la source
perl -nE 'say reverse/ |[^.?!]*.\)?/g'
, ce qui porte votre nombre total à 23.PHP, 60
la source
[?!.]\K
place?Bash + coreutils, 40 octets
Cela lit à partir de STDIN donc l'entrée peut être redirigée depuis un fichier, ou simplement acheminée, par exemple:
la source
(foo bar.)
est échangé en tant qu'unité?Pip , 25 octets
Après avoir ajouté un espace à la chaîne d'entrée, on trouve tous les indices de
.
,?
et!
, ajouter 2 et utiliser les^@
opérateur split-at pour diviser la chaîne en phrases (chacune avec un espace de fin). Inversez la liste et elle sera imprimée automatiquement à la fin du programme. Voilà!Exemple montrant les étapes du calcul principal avec entrée
A! B? C. D!
:la source
Rétine ,
61343330 octetsCrédits à nutki pour avoir réduit cela de 24 octets.
Où
<empty>
représente une ligne vide. Cela suppose que cela#
ne fait pas partie de l'entrée, mais si ce n'est pas légitime, je pourrais l'échanger contre tout autre personnage, y compris"
(que je n'aurais besoin de gérer que pour le bonus) ou quelque chose d'imprimable. Vous pouvez exécuter le code comme ça dans un seul fichier si vous utilisez l'-s
indicateur, ou vous pouvez placer chaque ligne dans un fichier séparé et les transmettre à Retina.Inverser cela avec un seul remplacement d'expression régulière est possible, mais vraiment lourd. Même avec les groupes d'équilibrage .NET, j'avais besoin d'environ 90 octets, j'ai donc essayé de le faire en plusieurs étapes.
Dans la rétine, chaque paire de lignes est une étape de remplacement, où la première ligne est le motif et la deuxième ligne est le remplacement.
Cette étape prépare simplement la chaîne pour un traitement ultérieur. Il ajoute un
#
comme marqueur. Ce marqueur indique que tout ce qui se trouve devant lui a déjà été placé au bon endroit et que tout ce qu'il faut après doit encore être traité.Cette étape permute les phrases, en déplaçant à plusieurs reprises la dernière phrase devant le
#
(qui avance dans la chaîne dans le processus). Le+`
demande à Retina de répéter cette étape jusqu'à ce que la sortie cesse de changer. À titre d'exemple, voici commentfoo. bar! blah?
serait traitée l'entrée :Et enfin, nous supprimons simplement le marqueur:
la source
.+
=>$0 #
et répéter(.*?[.!?] )(.*#)
=>$2$1
?Java, 113
la source
JavaScript (ES6) 47
45Comme il est indiqué, il s'agit d'un simple exercice d'expression régulière. En javascript:
la source
Python 2, 62
Ne va pas s'améliorer pour le bonus, car il ne vaut probablement pas le coût en octets.
la source
Matlab (93 octets)
la source
Rubis 41
Les autres réponses Ruby n'ont pas assez de WTF.
Cela fonctionne au moins dans Ruby 2. Si le commutateur
a
etF
fonctionne en 1.8.7, je suppose que vous pourriez laisser tomber$_=
pour enregistrer trois caractères.Inverse chaque ligne sur stdin et imprime sur stdout:
la source
Ruby, 48 (42 sans les put) octets
reverse_sentence.rb
Usage:
Production:
La critique est plus que bienvenue.
la source
.join(" ")
=>*" "
k, 31
.
la source
C # - LINQPAD - 93 - 5 = 88 octets
Application console C # 189-5 = 184 octets
regex sans vergogne fouetté d'Alex A. :)
la source
namespace System
dans ceusing Linq;usingText.RegularExpressions
2x sauvegardesystem
.Clojure - 44
71caractèresRE amélioré et simplifié, éliminé les espaces inutiles.
La sortie est une séquence de phrases dans la chaîne d'origine, avec l'ordre des phrases inversé:
Entrée: "Bonjour ami. Que fais-tu? Je parie que c'est quelque chose que je veux faire aussi!" Sortie: ("Je parie que c'est quelque chose que je veux faire aussi!" "Que faites-vous?" "Bonjour ami.")
la source
Rubis, 47
crédits à Martin Büttner , pour avoir sauvé certains personnages.
la source
gets
pour enregistrer un octet, l'imprimer avec$><<
pour enregistrer l'octet (pas besoin d'espace) et joindre la chaîne avec*''
pour enregistrer deux octets.CJam, 21 octets
Cela fonctionne en transformant les espaces après
!
s,.
s et?
s en nombre 1 (pas le caractère 1 ni le caractère avec le point de code 1, de sorte que l'entrée peut toujours les contenir), en divisant par 1, en inversant l'ordre des morceaux résultants et en joignant par des espaces.Essayez-le en ligne dans l' interpréteur CJam .
Comment ça fonctionne
la source