Jimmy potrzebuje twojej pomocy!

17

Wydaje się, od niedawna, nie było dużo a Jimmys spada do ich śmierci, jak widać tu , i tu , gdzie zadano celu ustalenia, czy Jimmy spadnie. Czas położyć kres temu szaleństwu i spróbować ocalić Jimmy'ego.

Jimmy trzy części ciała /, ooraz \umieszczony tak

/o\

Platformy są reprezentowane przez -. Jimmy spadnie z platformy, jeśli mają dwie lub więcej części ciała, które nie znajdują się bezpośrednio nad platformą.

Kilka przykładów:

   /o\
- -------

Jimmy zrównoważy się, ponieważ wszystkie ich części ciała znajdują się powyżej -.

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

Jimmy zbalansuje się, ponieważ dwie części ciała są powyżej -s.

 /o\
-- ----  --

Jimmy zrównoważy się, mimo że są podzielone na dwie platformy

  /o\
   -

Jimmy nie zbalansuje się, ponieważ dwie części ciała nie znajdują się nad platformą.


Ponieważ podaż mojej platformy jest na wyczerpaniu, mam tylko platformy o długości 5 i ważne jest, abyśmy używali jej jak najmniej.

Twoim zadaniem jest pobranie danych wejściowych Jimmys i wygenerowanie ciągu platform, który zapisze wszystkie dane Jimmys w danych wejściowych. Twój wynik musi korzystać z jak najmniejszej liczby platform, ale każda platforma musi mieć -szerokość 5.

Zauważ, że zasada, że ​​platforma ma -szerokość 5 , oznacza, że ​​każda platforma musi mieć odstęp między nimi. ----------nie jest poprawny w danych wyjściowych, ponieważ będzie uważany za platformę o długości 10, a nie za dwie platformy o długości 5.

Przypadki testowe

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

Obowiązują standardowe zasady.

To jest golf golfowy, może wygra najkrótsza odpowiedź!

Quinn
źródło
2
@Veskah tak długo, jak wszystkie Jimmys są zapisywane przy użyciu jak najmniejszej liczby platform, pozycja nie ma znaczenia, więc dla każdego wejścia będzie wiele poprawnych wyników. Nie ma warunku, ile Jimmysów będzie na wejściu, pusty łańcuch będzie prawidłowym wejściem.
Quinn,
3
Przypadek testowy 4 wygląda jak przerażająca twarz
Data ważności wygasła
2
Kontynuacja: umieść jak najwięcej Jimmys na platformach w taki sposób, aby nie spadły.
val mówi Przywróć Monikę
2
@val to właściwie jedno z powiązanych pytań - po tym śledziłem: P
Quinn
7
W przyszłości mogę zobaczyć tak wiele Jimmy'ego.
connectyourcharger

Odpowiedzi:

2

Węgiel drzewny , 17 15 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

W‹ⅈLθ«

Powtarzaj, gdy pozycja kursora jest mniejsza niż długość wejścia.

×⁵№o\§θⅈ

Jeśli znakiem w tej pozycji na wejściu jest a olub \a, wydrukuj 5 -s.

Przejdź do następnej postaci, gwarantując w ten sposób przynajmniej jedną przestrzeń między platformami.

Poprzednie 17-bajtowe rozwiązanie to IMHO więcej „Charcoal-y”.

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

Wypróbuj online! Link jest do pełnej wersji kodu. Dane wyjściowe obejmują dane wejściowe, co pokazuje poprawność rozwiązania. Wyjaśnienie:

θ⸿

Wydrukuj dane wejściowe i przejdź na początek następnego wiersza.

Fθ«

Pętla nad każdą postacią wejścia, aby upewnić się, że żaden Jimmy nie zostanie pominięty.

×⁵¬№ /⊟KD²↑

Spójrz na znak nad kursorem. Jeśli nie ma, lub jest to spacja, lub /nic nie rób, w przeciwnym razie wydrukuj 5 -s.

Przejdź do następnej postaci, gwarantując w ten sposób przynajmniej jedną przestrzeń między platformami.

Neil
źródło
7

Python 2 , 70 67 bajtów

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

Wypróbuj online!

-3 bajty dzięki Kevin Cruijssen i Neil

Nie najładniejszy, nie wiem, jak lepiej poradzić sobie z resztkami cięć ...

Niestety nie możemy zastąpić obu końców każdej platformy spacjami za pomocą pojedynczego re.subwywołania, ponieważ w przypadku 2 platform znajdujących się w jednym miejscu, odstępu między nimi nie można dopasować więcej niż jeden raz. Asercja lookahead / lookbehind nie pomoże, ponieważ nic pasującego do tych asercji nie zostanie zastąpione.

Za pomocą jednego re.subodwołania:

Python 3.8 (wersja wstępna) , 78 bajtów

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

Wypróbuj online!

ujemna siódemka
źródło
69 bajtów , najpierw zastępując, /a następnie [^ ].
Kevin Cruijssen
@ Sugerowany przez Neila golf na mojej odpowiedzi Retina również działa dla ciebie: 67 bajtów .
Kevin Cruijssen
4

JavaScript (ES6),  56 55  54 bajtów

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

Wypróbuj online!

Lub 47 bajtów, jeśli zwracanie tablicy znaków jest dopuszczalne.

Arnauld
źródło
2

Python 3 , 158 164 160 bajtów

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)

Wypróbuj online!

To jest moja pierwsza odpowiedź na pytanie w golfa i cieszę się, że dotyczy pytania Jimmy'ego!

Wyjaśnienie:

  • a=input();r="": Wprowadź dane wejściowe i zainicjuj nowy ciąg r.

  • for i,c in enumerate(a):: Wylicz na podstawie danych wejściowych.

  • try:r[i] ... except:: Sprawdź, czy r[i]istnieje - jeśli nie, przetworz exceptblok.

  • if c in"/o":: Sprawdź, czy obecna postać znajduje się w pierwszych dwóch częściach ciała Jimmy'ego.

  • r+=(a[i+5<len(a)and i+5or len(a)-1]=="o"and" "or"")+"----- ": Jeśli tak, dodaj nowy segment. Dodaj miejsce przed naszym nowym segmentem, jeśli inna głowa Jimmy'ego jest obecna w pięciu postaciach.

  • else:r+=" ": W przeciwnym razie po prostu dodaj spację.

  • print(r): Wydrukuj nasz wynik końcowy.

podłącz ładowarkę
źródło
Całkiem blisko, ale myślę, że to naprawdę nie działa dla wszystkich przypadków testowych. Powinien używać jak najmniejszej liczby platform, a twój ostatni przykład używa 2, gdy można to zrobić z 1
Quinn
@Quinn Shoot. Err, nie konkuruje, dopóki tego nie naprawię.
connectyourcharger
@connectyourcharger „niekonkurujący” nie sprawdza poprawnego rozwiązania. Zalecam usunięcie go, jeśli nie zamierzasz go naprawić przez jakiś czas (np. Przez kilka następnych minut).
Erik the Outgolfer,
@Quinn Naprawiłem to teraz.
connectyourcharger
@connectyourcharger Nice!
Quinn
2

Siatkówka , 23 21 bajtów

/

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

-2 bajty dzięki @Neil .

Zawiera jedno końcowe miejsce w drugim, czwartym i szóstym wierszu.

Port odpowiedzi @negativeSeven w Pythonie 2 , więc upewnij się, że go głosujesz!

Wypróbuj online.

Wyjaśnienie:

Zamień wszystko "/"na " ":

/
 

Dodaj 5 spacji końcowych:

$
5* 

Zastąp wszystkie podciągi rozmiaru szóstego, które nie zaczynają się spacją, przez "----- ":

\S.{5}
5*- 
Kevin Cruijssen
źródło
Czy możesz użyć \Szamiast [^ ]?
Neil
@Neil Ah, oczywiście. Dzięki!
Kevin Cruijssen
1

05AB1E , 25 24 bajtów

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

Port odpowiedzi @negativeSeven w Pythonie 2 , więc upewnij się, że go głosujesz!

Wypróbuj online lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie:

ð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
źródło
1

Japt , 23 22 bajtów

Port rozwiązania JS firmy Arnauld, który jestem zbyt wyczerpany, aby w pełni przetestować. Jeśli jest nieważny, czy Diament może usunąć?

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

Spróbuj

Kudłaty
źródło