Vous obtenez une chaîne et deux caractères. Vous devez imprimer la chaîne entre ces caractères à partir de la chaîne.
Contribution
L'entrée contiendra d'abord une chaîne (non vide ou null
). Dans la ligne suivante, il y aura deux caractères séparés par un espace.
Défi
Renvoie la chaîne entre les deux caractères
Exemple
Hello! What's your name?
! ?
devrait entraîner la sortie:
" What's your name"
Règles
- La chaîne ne dépassera pas 100 caractères et ne contiendra que des caractères ASCII dans la plage
(espace) à
~
(tilde) (codes de caractères 0x20 à 0x7E, inclus). Voir le tableau ASCII pour référence. - Vous devez prendre connaissance de
stdin
(ou de l'alternative la plus proche). - La sortie doit être entourée de guillemets (
"
). - Vous pouvez écrire un programme complet ou une fonction qui prend en entrée et sort la chaîne finale
- Les deux caractères ne contiendront que des caractères ASCII dans la plage
(espace) à
~
(tilde) (codes de caractères 0x20 à 0x7E, inclus). Voir le tableau ASCII pour référence. - Il n'y a aucune garantie que les deux caractères seront dans la chaîne.
- Si aucun des caractères n'est trouvé dans la chaîne, imprimez
"null"
. - Si l'un des caractères est trouvé plusieurs fois (sauf si les deux caractères sont identiques) dans une chaîne, imprimez
"null"
. - Si les deux caractères sont le même caractère, imprimez la chaîne
"null"
.
Cas de test
1)
<HTML>code</HTML>
> < --> "null"
2)
What's what?
' ' --> "null"
3)
abcdefghijklmnopqrstuvwxyz
n k --> "lm"
4)
Testing...
e T --> ""
5)
Last test-case
- --> "test"
Notation
Il s'agit du code golf, donc la soumission la plus courte (en octets) l'emporte.
"
? Faut-il simplement l'entourer d'une autre paire de citations et ne pas s'en soucier?one"two-three \n" -
sortie:"two"
(\n
est une nouvelle ligne)Réponses:
CJam,
343332 octetsEssayez-le en ligne dans l' interpréteur CJam .
Idée
Supprimez le deuxième caractère de la ligne 2.
Formez une chaîne composée d'une seule copie de tous les caractères communs aux deux lignes.
Répétez la chaîne résultante deux fois et supprimez ses deux premiers caractères.
Il en résulte une chaîne de deux caractères (si les caractères de la ligne 2 sont différents et se produisent tous les deux à la ligne 1) ou une chaîne vide.
Remplacez les caractères de la chaîne résultante à la ligne 1 par des sauts de ligne.
Séparez la ligne 1 aux sauts de ligne.
Le deuxième élément du tableau résultant sera la chaîne souhaitée si le tableau contient exactement trois morceaux.
Remplacez le premier élément du tableau par la chaîne null .
Récupérez le deuxième élément du tableau si sa longueur est 3 et le premier sinon.
Ajoutez et ajoutez un guillemet double.
Code
la source
CJam, 38 octets
Trop long...
Explication
la source
Pyth,
373634 octetsMerci à @isaacg pour la sauvegarde de deux octets.
Essayez-le en ligne: Pyth Compiler / Executor
Explication:
la source
*2]1
est plus court que[1 1)
, et- ... 1
est encore plus court.-...1
ne fonctionne pas, car je dois également vérifier qu'il y a exactement deux nombres.[1 1)
:jT9
.Python 3, 149 octets
Version non golfée:
Ceci est ma première réponse ici, donc les conseils et les critiques sont très appréciés.
la source
Rubis,
1089594Et pour la version non golfée
la source
->s,f,l{begin a,b=[f,l].map{|u|raise if f==l||s.count(u)>1;s.index u}.minmax;p s[a+1...b];rescue;p'null'end}["<html>test</html>",?>,?<]
Le[...]
à la fin est ce qui appelle la fonction.->s,f,l{begin a,b=[f,l].map{|u|raise if f==l||s.count(u)>1;s.index u}.minmax;p s[a+1...b];rescue;p'null'end}["Last test-case"," ","-"]
raise
, vous pouvez remplacerraise
par une variable non définie telle que_
ouy
. Cela déclenche une NameError. Aussi, je pense que vous pourriez économiser quelques octets de plus sans sauvetage explicite:->s,f,l{a,b=[f,l].map{|u|(f==l||s.count(u)!=1)&&p('null')&&exit;s.index u}.minmax;p s[a+1...b]}
C, 192 octets
Code non golfé:
Testez-le ici
la source
Python 3, 172 octets
la source
Javascript ( ES6 ),
125123 octetsIdée volée massivement dans la solution de @ edc65.
la source
[a,,b]=
, je l'utiliserai la prochaine fois. Comme les regex sont un problème, voici une solution sans regex:[a,,b]=(P=prompt)(s=P()), P((s=s.split(a)).length==2& (s=[].concat(...s.map(s=>s.split(b)))).length==3 ?``"${s[1]}"``:null)
Python, 161 octets
La solution utilise principalement une expression régulière pour extraire la chaîne. Pour tenir compte du fait que les lettres peuvent correspondre dans les deux sens, le début et la fin de la partie correspondante autorisent l'une ou l'autre lettre. Vérifier que les lettres qui correspondaient réellement à différentes exclut la même lettre étant appariée deux fois, ainsi que les deux lettres dans l'entrée étant identiques.
C'est ma première tentative d'utilisation de Python pour une réponse ici. Les commentaires sur les améliorations possibles sont donc les bienvenus. J'ai particulièrement le sentiment qu'il doit y avoir un moyen de raccourcir la condition dans la déclaration d'impression.
la source
Python 3, 155 octets
Essayez-le en ligne
la source
golflua, 132 octets
Réponse assez moche. Le bit d'entrée est un peu approximatif (et nécessite deux lignes, d'abord avec la chaîne et ensuite avec les caractères de tranche). Trouver l'emplacement des drapeaux est simple, mais trop long pour rivaliser avec d'autres réponses. La sortie est assez simple. Un programme Lua équivalent serait
la source
Perl, 65
Cela nécessite qu'il n'y ait pas de caractère de nouvelle ligne dans la deuxième ligne de l'entrée.
la source
null
affaire.