Jimmy a besoin de votre aide!

17

Il semble que récemment, il y a eu beaucoup de Jimmys qui sont morts, comme on peut le voir ici , et ici où on vous a demandé de déterminer si Jimmy tomberait. Il est temps de mettre un terme à cette folie et d'essayer de sauver Jimmy.

Jimmy a trois parties du corps /, oet \disposées comme ceci

/o\

Les plateformes sont représentées par -. Jimmy tombera de sa plate-forme s'il a deux parties du corps ou plus qui ne sont pas directement au-dessus d'une plate-forme.

Quelques exemples:

   /o\
- -------

Jimmy s'équilibrera puisque toutes leurs parties du corps sont au-dessus de a -.

   /o\
    ------   ---

Jimmy sera équilibré puisque deux parties du corps sont au-dessus de l' -art.

 /o\
-- ----  --

Jimmy s'équilibrera même s'ils sont répartis entre deux plates-formes

  /o\
   -

Jimmy ne sera pas équilibré car deux parties du corps ne sont pas au-dessus d'une plate-forme.


Étant donné que mon offre de plates-formes est faible, je n'ai que des plates-formes d'une longueur de 5, et il est important que nous en utilisions le moins possible.

Votre tâche consiste à prendre une entrée de Jimmys et à sortir une chaîne de plates-formes qui enregistrera tous les Jimmys dans l'entrée. Votre sortie doit utiliser le moins de plates-formes possible, mais chaque plate-forme doit avoir -une largeur de 5 pouces.

Notez que la règle de la plate-forme étant de 5 de -large, cela signifie que chaque plate-forme doit avoir un espace entre elles. ----------n'est pas valide en sortie car il sera considéré comme une plateforme de longueur 10 et non deux plateformes de longueur 5.

Cas de test

/o\  /o\/o\    // input
----- -----    // output
/o\           /o\
-----       -----
/o\           /o\      // same input as above
-----          -----   // this is also valid output
    /o\ /o\
     -----

Des règles standard s'appliquent.

C'est le code-golf, que la réponse la plus courte gagne!

Quinn
la source
2
@Veskah tant que tous les Jimmys sont enregistrés en utilisant le moins de plates-formes possibles, la position n'a pas d'importance, il y aura donc plusieurs sorties valides pour chaque entrée. Il n'y a aucune condition sur le nombre de Jimmys qu'il y aura dans l'entrée, une chaîne vide serait une entrée valide.
Quinn
3
Le cas de test 4 ressemble à un visage effrayant
Expired Data
2
Suivi: placez autant de Jimmys que possible sur les plateformes de manière à ce qu'ils ne tombent pas.
val dit Réintégrer Monica le
2
@val qui est en fait l'une des questions liées - j'ai suivi après celle-ci: P
Quinn
7
Je peux voir tant de suivis Jimmy à l'avenir.
connectyourcharger le

Réponses:

2

Fusain , 17 15 octets

W‹ⅈLθ«×⁵№o\§θⅈ→

Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:

W‹ⅈLθ«

Répétez l'opération lorsque la position du curseur est inférieure à la longueur de l'entrée.

×⁵№o\§θⅈ

Si le caractère à cette position dans l'entrée est un oou un \alors imprimez 5 -s.

Passez au personnage suivant, garantissant ainsi au moins un espace entre les plates-formes.

La solution précédente de 17 octets est à mon humble avis plus "Charcoal-y".

θ⸿Fθ«×⁵¬№ /⊟KD²↑→

Essayez-le en ligne! Le lien est vers la version détaillée du code. La sortie comprend une entrée, démontrant ainsi l'exactitude de la solution. Explication:

θ⸿

Imprimez l'entrée et passez au début de la ligne suivante.

Fθ«

Parcourez chaque caractère de l'entrée pour vous assurer qu'aucun Jimmy ne soit raté.

×⁵¬№ /⊟KD²↑

Regardez le caractère au-dessus du curseur. S'il n'y en a pas, ou s'il s'agit d'espace ou /alors, ne faites rien, sinon imprimez 5- s.

Passez au personnage suivant, garantissant ainsi au moins un espace entre les plates-formes.

Neil
la source
7

Python 2 , 70 67 octets

lambda s:S('/',' ',S("\S.{5}","----- ",s+' '*5))
import re;S=re.sub

Essayez-le en ligne!

-3 octets grâce à Kevin Cruijssen & Neil

Pas le plus joli, je ne sais pas comment mieux gérer ces restes ...

Malheureusement, nous ne pouvons pas remplacer les deux extrémités de chaque plate-forme par des espaces utilisant un seul re.subappel, car dans le cas où 2 plates-formes sont séparées par un espace, l'écart entre elles ne peut pas être égalé plus d'une fois. Une assertion lookahead / lookbehind n'aidera pas, car tout ce qui correspond à ces assertions n'est pas remplacé.

En utilisant une seule re.subréférence:

Python 3.8 (pré-version) , 78 octets

lambda s:[s:=re.sub(".[^/ -].{5}"," ----- ",s+"  ",1)for c in s][-1]
import re

Essayez-le en ligne!

sept négatif
la source
69 octets en remplaçant d'abord le /puis le [^ ].
Kevin Cruijssen
@ Le golf suggéré par Neil sur ma réponse Retina fonctionne aussi pour vous: 67 octets .
Kevin Cruijssen
4

JavaScript (ES6),  56 55  54 octets

s=>[...s+1e4].map(c=>(s--?s:s=c>{}&&5)?'-':' ').join``

Essayez-le en ligne!

Ou 47 octets si le retour d'un tableau de caractères est acceptable.

Arnauld
la source
2

Python 3 , 158 164 160 160 octets

a=input();r=""
for i,c in enumerate(a):
 try:r[i]
 except:
  if c in"/o":
   r+=(a[i+5<len(a)and i+5or len(a)-1]=="o"and" "or"")+"----- "
  else:r+=" "
print(r)

Essayez-le en ligne!

Ceci est ma première réponse de golf de code, et je suis heureux que ce soit sur une question Jimmy!

Explication:

  • a=input();r="": Prendre en entrée et initialiser une nouvelle chaîne r.

  • for i,c in enumerate(a):: Énumérer sur l'entrée.

  • try:r[i] ... except:: Voir s'il r[i]existe - sinon, traiter le exceptbloc.

  • if c in"/o":: Vérifiez si le personnage actuel se trouve dans les deux premières parties du corps de Jimmy.

  • r+=(a[i+5<len(a)and i+5or len(a)-1]=="o"and" "or"")+"----- ": Si oui, ajoutez un nouveau segment. Ajoutez un espace avant notre nouveau segment si une autre tête Jimmy est présente en cinq caractères.

  • else:r+=" ": Sinon, ajoutez simplement un espace.

  • print(r): Imprimez notre résultat final.

Branchez votre chargeur
la source
Assez proche, mais je pense que cela ne fonctionne pas pour tous les cas de test. Il devrait utiliser le moins de plates-formes possible et votre dernier exemple utilise 2 alors que cela pourrait être fait avec 1
Quinn
@Quinn Shoot. Euh, pas de compétition jusqu'à ce que je corrige ça.
connectyourcharger
@connectyourcharger "non concurrent" ne valide pas une solution invalide. Je recommande de le supprimer si vous n'allez pas le réparer pendant un certain temps (par exemple les prochaines minutes).
Erik the Outgolfer le
@Quinn, je l'ai corrigé maintenant.
connectyourcharger
@connectyourcharger Nice!
Quinn
2

Rétine , 23 21 octets

/

$
5* 
\S.{5}
5*- 

-2 octets grâce à @Neil .

Contient un seul espace de fin sur les deuxième, quatrième et sixième lignes.

Port de la réponse Python 2 de @negativeSeven , alors assurez-vous de lui donner un vote positif!

Essayez-le en ligne.

Explication:

Remplacez tout "/"par un " ":

/
 

Ajoutez 5 espaces de fin:

$
5* 

Remplacez toutes les sous-chaînes de taille six qui ne commencent pas par un espace par "----- ":

\S.{5}
5*- 
Kevin Cruijssen
la source
Pouvez-vous utiliser à la \Splace de [^ ]?
Neil
@Neil Ah, bien sûr. Merci!
Kevin Cruijssen
1

Gelée , 35 octets

;3x5¤;0;ṛṫ6ɗ
;⁶x5¤e€⁾o\œṡ1ç/$ÐLị⁾- 

Essayez-le en ligne!

Un lien monadique qui prend l'entrée sous forme de chaîne et renvoie une chaîne Jelly avec les plates-formes.

S'inspire de la réponse de @ negativeseven .

Nick Kennedy
la source
1

05AB1E , 25 24 octets

ð5׫'/ð:DŒ6ùʒнðÊ}'-5×ð«:

Port de la réponse Python 2 de @negativeSeven , alors assurez-vous de lui donner un vote positif!

Essayez-le en ligne ou vérifiez tous les cas de test .

Explication:

ð5׫                      # Append 5 trailing spaces to the (implicit) input-string
    '/ð:                 '# Replace all "/" with a space
        D                 # Duplicate the string
         Œ                # Get all substrings of this
          6ù              # Only leave those of length 6
            ʒ   }         # Filter it further by:
             нðÊ          #  Only keep those which do NOT start with a space
                 '-5×ð«  '# Push a string of 5 "-" appended with a space: "----- "
                       :  # Replace in the initially duplicated string all substrings 
                          # remaining in the list with this "---- "
Kevin Cruijssen
la source
1

Japt , 23 22 octets

Un portage de la solution JS d'Arnauld que je suis juste trop épuisé pour tester complètement. S'il n'est pas valide, un diamant peut-il être supprimé?

+L² £=U´?U:X>M©5)?'-:S

Essayez-le

Hirsute
la source