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!


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.


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!


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


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.


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*- 

Pouvez-vous utiliser à la \Splace de [^ ]?
— Neil

@Neil Ah, bien sûr. Merci!
— Kevin Cruijssen


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 "---- "

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.