Jimmy ha bisogno del tuo aiuto!


17

Sembra di recente, ci sono stati molti Jimmy che cadevano a morte, come si può vedere qui , e qui dove è stato chiesto di determinare se Jimmy sarebbe caduto. È ora di porre fine a questa follia e provare a salvare Jimmy.

Jimmy ha tre parti del corpo /, oe \disposti come questa

/o\

Le piattaforme sono rappresentate con -. Jimmy cadrà dalla loro piattaforma se hanno due o più parti del corpo che non sono direttamente sopra una piattaforma.

Qualche esempio:

   /o\
- -------

Jimmy si bilancerà poiché tutte le loro parti del corpo sono sopra a -.

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

Jimmy sarà bilanciato poiché due parti del corpo sono al di sopra di -s.

 /o\
-- ----  --

Jimmy si bilancerà anche se sono divisi tra due piattaforme

  /o\
   -

Jimmy non si bilancerà poiché due parti del corpo non sono sopra una piattaforma.


Dato che la mia offerta di piattaforme sta per esaurirsi, ho solo piattaforme con una lunghezza di 5, ed è importante utilizzarne il meno possibile.

Il tuo compito è prendere un input di Jimmys e produrre una serie di piattaforme che salveranno tutti i Jimmys nell'input. L'output deve utilizzare il minor numero possibile di piattaforme, ma ogni piattaforma deve essere -larga 5 .

Si noti che la regola della piattaforma essendo -larga 5 , significa che ogni piattaforma deve avere uno spazio tra di loro. ----------non è valido nell'output poiché verrà considerato una piattaforma di lunghezza 10 e non due piattaforme di lunghezza 5.

Casi test

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

Si applicano le regole standard.

Questo è code-golf, che vinca la risposta più breve!


2
@Veskah fintanto che tutti i Jimmy vengono salvati utilizzando il minor numero possibile di piattaforme, la posizione non ha importanza, quindi ci saranno più output validi per ogni input. Non vi è alcuna condizione su quanti Jimmy ci saranno nell'input, una stringa vuota sarebbe un input valido.
Quinn,

3
Il caso di test 4 sembra una faccia spaventosa
Dati scaduti

2
Follow-up: posiziona il maggior numero possibile di Jimmy sulle piattaforme in modo che non cadano.
dice Val Reinstate Monica il

2
@val che in realtà è una delle domande collegate - ho seguito dopo quella: P
Quinn

7
Riesco a vedere così tanti follow-up di Jimmy in futuro.
connectyourcharger

Risposte:


2

Carbone , 17 15 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:

W‹ⅈLθ«

Ripetere mentre la posizione del cursore è inferiore alla lunghezza dell'input.

×⁵№o\§θⅈ

Se il carattere in quella posizione nell'input è un oo a, \quindi stampare 5 -s.

Passa al personaggio successivo, garantendo così almeno uno spazio tra le piattaforme.

La precedente soluzione a 17 byte è IMHO più "Charcoal-y".

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

Provalo online! Il collegamento è alla versione dettagliata del codice. L'output include input, dimostrando così la correttezza della soluzione. Spiegazione:

θ⸿

Stampa l'input e passa all'inizio della riga successiva.

Fθ«

Passa con il cursore su ogni personaggio dell'input per assicurarti che nessun Jimmy si perda.

×⁵¬№ /⊟KD²↑

Guarda il carattere sopra il cursore. Se non ce n'è, o se è spazio o /, quindi non fare nulla, altrimenti stampare 5 -s.

Passa al personaggio successivo, garantendo così almeno uno spazio tra le piattaforme.


7

Python 2 , 70 67 byte

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

Provalo online!

-3 byte grazie a Kevin Cruijssen e Neil

Non il più bello, non sono sicuro di come gestire meglio quelle barre rimanenti ...

Sfortunatamente, non possiamo sostituire entrambe le estremità di ciascuna piattaforma con spazi usando una sola re.subchiamata, perché nel caso in cui 2 piattaforme siano a uno spazio di distanza, lo spazio tra loro non può essere abbinato più di una volta. Un'asserzione lookahead / lookbehind non aiuta, perché tutto ciò che corrisponde a quelle asserzioni non viene sostituito.

Utilizzando un singolo re.subriferimento:

Python 3.8 (pre-release) , 78 byte

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

Provalo online!


69 byte sostituendo prima il /e poi il [^ ].
Kevin Cruijssen, l'

Il golf suggerito da Neil sulla mia risposta Retina funziona anche per te: 67 byte .
Kevin Cruijssen,

4

JavaScript (ES6),  56 55  54 byte

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

Provalo online!

O 47 byte se è accettabile la restituzione di una matrice di caratteri.


2

Python 3 , 158 164 160 byte

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)

Provalo online!

Questa è la mia prima risposta di golf in codice e sono felice che sia su una domanda di Jimmy!

Spiegazione:

  • a=input();r="": Accetta input e inizializza una nuova stringa r.

  • for i,c in enumerate(a):: Enumera sull'input.

  • try:r[i] ... except:: Vedi se r[i]esiste - in caso contrario, elabora il exceptblocco.

  • if c in"/o":: Controlla se il personaggio attuale è nelle prime due parti del corpo di Jimmy.

  • r+=(a[i+5<len(a)and i+5or len(a)-1]=="o"and" "or"")+"----- ": In tal caso, aggiungi un nuovo segmento. Aggiungi uno spazio prima del nostro nuovo segmento se è presente un'altra testa di Jimmy in cinque personaggi.

  • else:r+=" ": Altrimenti, aggiungi solo uno spazio.

  • print(r): Stampa il nostro risultato finale.


Abbastanza vicino, ma penso che questo in realtà non funziona per tutti i casi di test. Dovrebbe usare il minor numero possibile di piattaforme e il tuo ultimo esempio usa 2 quando potrebbe essere fatto con 1
Quinn,

@Quinn Shoot. Err, non competere fino a quando non lo aggiusto.
connectyourcharger

@connectyourcharger "non concorrente" non convalida una soluzione non valida. Ti consiglio di cancellarlo se non hai intenzione di ripararlo per un po 'di tempo (ad esempio i prossimi minuti).
Erik the Outgolfer,

@Quinn L'ho risolto ora.
connectyourcharger

@connectyourcharger Nice!
Quinn,

2

Retina , 23 21 byte

/

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

-2 byte grazie a @Neil .

Contiene un singolo spazio finale sulla seconda, quarta e sesta riga.

Porta della risposta Python 2 di @negativeSeven , quindi assicurati di votarlo!

Provalo online.

Spiegazione:

Sostituisci tutto "/"con un " ":

/
 

Aggiungi 5 spazi finali:

$
5* 

Sostituisci tutte le sottostringhe della dimensione sei che non iniziano con uno spazio con "----- ":

\S.{5}
5*- 

Puoi usare \Sinvece di [^ ]?
Neil,

@Neil Ah, certo. Grazie!
Kevin Cruijssen,


1

05AB1E , 25 24 byte

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

Porta della risposta Python 2 di @negativeSeven , quindi assicurati di votarlo!

Provalo online o verifica tutti i casi di test .

Spiegazione:

ð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 byte

Un porto della soluzione JS di Arnauld che sono troppo esausto per testare completamente. Se non è valido, un diamante può essere eliminato?

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

Provalo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.