Ile Jimmys może zmieścić?

29

W tym prostym, ale zabawnym wyzwaniu poproszono Cię o ustalenie, czy Jimmy spadnie z platformy. 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ą.


Twoim zadaniem jest napisanie programu, który przyjmuje platformę jako wydłużony kontener zawierający tylko -s i s (np. Ciąg znaków) i wyświetla liczbę Jimmys, które można umieścić na platformie, tak aby żaden z nich nie spadł i żaden z nich nie spadł zakładka. Jimmy może mieć jedną z części ciała po lewej stronie początku struny lub po prawej stronie końca struny.

To jest więc odpowiedzi są punktowane w bajtach, a celem jest mniejsza liczba bajtów.

Przypadki testowe

Wejścia

-  -  -

- -
--
-- --
----
- -- --
------- -

Odpowiednie wyniki

0
0
1
1
2
2
2
3
Kreator pszenicy
źródło

Odpowiedzi:

15

JavaScript (ES6),  45 41  40 bajtów

Zaoszczędź 4 bajty dzięki @Shaggy

s=>(0+s+0).split(/.--|-.-|--./).length-1

Wypróbuj online!

Arnauld
źródło
1
41 bajtów
Kudłaty
7
@Shaggy Thanks! Wiedziałem, że coś jest nie tak, ale tymczasem musiałem pomóc mojej żonie na jakimś poziomie Super Mario Galaxy ... i był to również problem z uszkodzonymi platformami. : p
Arnauld
2
---nie siedział ze mną albo dobrze, dopóki nie działa na moim porcie i zorientował się, że nie były potrzebne. Myślę, że zadzwonię tu dzień, wezmę torbę puszek i sam rzucę SMG - nie grałem w nią od wieków.
Kudłaty
A teraz wszystkie inne odpowiedzi używają tego samego wyrażenia regularnego.
Cœur
8

Python 2 , 53 bajty

lambda s:len(re.findall('.--|-.-|--.',`s`))
import re

Wypróbuj online!

Na podstawie wyrażenia regularnego Arnaulda . Chciwie wyszukuje wszystkie nie nakładające się podciągi długości-3 z dwoma lub więcej -. Sztuczka polega na `s`umieszczeniu ciągu wejściowego w cudzysłowach jako wypełnienia, aby pozostawić miejsce dla Jimmys na zawieszenie się na obu końcach, jak

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

Python 2 , 57 bajtów

f=lambda s:'--'in s[:3]*2and-~f(s[3:])or s>''and f(s[1:])

Wypróbuj online!

Wymaga tandetnego formatu wejścia / wyjścia już w cudzysłowie. Wyjścia Falsedla 0.

Funkcja rekurencyjna, która umieszcza każdego Jimmy'ego na skrajnie lewej dozwolonej pozycji, albo umieszczając Jimmy'ego nad pierwszymi trzema postaciami, jeśli mogą one trzymać Jimmy, albo w inny sposób usuwając pierwszą postać. A cute Sztuką jest, aby sprawdzić, czy s[:3]zawiera dwa lub więcej -, wykonując '--'in s[:3]*2, który łączy dwa egzemplarze s[:3]i czeki dla dwóch sąsiednich -.

xnor
źródło
3

Japt , 16 bajtów

Oparty na oryginalnym rozwiązaniu JS firmy Arnauld. Wypróbowałem kilka różnych metod, aby uzyskać niezbędne wypełnienie po obu stronach wejścia, ale wszystkie pojawiły się w tej samej długości - wciąż szukając krótszej drogi ...

ûUÊÄÄ è".--|-."ê

Sprawdź to

ûUÊÄÄ è".--|-."ê     :Implicit input of string U
û                    :Centre pad with spaces to length
 UÊ                  :  Length of U
   ÄÄ                :  Add 1, twice
      è              :Count the occurrences of
       ".--|-."ê     :  ".--|-." palindromised, resulting in the RegEx /.--|-.-|--./g
Kudłaty
źródło
3

Excel, 96 bajtów

A1= platforma. Wprowadzony jako tablica Formula Ctrl+Shift +Enter

=SUM(IF(LEN(TRIM(MID(IF(MOD(LEN(A1),3)=1," ","")&A1,3*ROW(INDIRECT("A1:A"&LEN(A1)))-2,3)))>1,1))
remoel
źródło
3

05AB1E , 16 bajtów

ðì‚ε3ôʒ'-¢2@}g}à

Zdecydowanie można grać w golfa .. Czasami denerwujące jest zobaczenie wszystkich tych wyrażeń regularnych w wyzwaniu przy użyciu 05AB1E, w którym brakuje jakiegokolwiek wyrażenia regularnego. ;)

Wypróbuj online lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie:

ðì            # Prepend a space before the (implicit) input
             # Pair it with the unmodified (implicit) input
   ε          # Map both to:
    3ô        #  Split them into parts of size 3
      ʒ       #  Filter these parts by:
       '-¢   '#   Where the amount of "-"
          2@  #   Is larger than or equal to 2
      }g      #  After the filter: take the length to get the amount of items left
            # After the map: get the maximum of the two
              # (which is output implicitly as result)
Kevin Cruijssen
źródło
2

Java 8, 41 bajtów

s->(0+s+10).split(".--|--.|-.-").length-1

Wypróbuj online.

Port @Arnauld JavaScript odpowiedź „s , oprócz tego, że +0jest +10do przypadków testowych, jak naprawić ----. Jest to konieczne, ponieważ String#splitwbudowane oprogramowanie Java domyślnie usuwa końcowe ciągi znaków. Można to zmienić, dodając dodatkowy parametr do splitwbudowanego (który jest 0domyślnie wsplit -builtin z pojedynczym argumentem String). Aby zacytować użycie tego dodatkowego parametru z dokumentów:


nn1n
n
n zero, wówczas wzór zostanie zastosowany tyle razy, ile to możliwe, tablica może mieć dowolną długość,

Z tego powodu zwykle .split("...",-1)służy do zachowania WSZYSTKICH końcowych pustych ciągów, a ja mogłem go również użyć do tej odpowiedzi ( Wypróbuj online ). W tym zmieniającym przypadku +0aby +10zaoszczędzić dwa bajty ciągu ,-1, choć. :)

Kevin Cruijssen
źródło
0

Węgiel , 25 bajtów

Pθ↖Fθ¿›№KM-¹«⊞υωM³→»→⎚ILυ

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

Pθ↖

Wydrukuj platformę bez przesuwania kursora, a następnie przesuń kursor w górę i w lewo, ponieważ jest to pierwsza potencjalna pozycja Jimmy'ego.

Fθ

Poszukaj tyle Jimmies, ile jest pozycji na platformie.

¿›№KM-¹

Sprawdź, czy w tej pozycji jest więcej niż jeden kawałek platformy.

«⊞υω

Jeśli tak, zanotuj prawidłową pozycję Jimmy'ego ...

M³→»

... i przesuń trzy postacie w prawo, aby Jimmies się nie nakładały.

W przeciwnym razie następną potencjalną pozycją Jimmy'ego będzie jedna postać po prawej stronie.

⎚ILυ

Wyczyść platformę i wypisz liczbę wykrytych pozycji.

Neil
źródło
0

Wiąz 0,19, 108 bajtów

import Regex as R
f p=List.length<|R.find(Maybe.withDefault R.never<|R.fromString".--|-.-|--.")(" "++p++" ")

Oparte na regex w Arnauld JavaScript jest odpowiedź . Zweryfikować wszystkie przypadki testowe tutaj .

Alternatywne rozwiązanie bez wyrażenia regularnego, znacznie dłuższe przy 171 bajtach :

f p=(String.foldl(\z{x,y,s,c}->let(t,d)=if s<1&&List.length(List.filter((==)'-')[x,y,z])>1 then(2,c+1)else(max 0 s-1,c)in{x=y,y=z,s=t,c=d}){x=' ',y=' ',s=0,c=0}(p++" ")).c

Zweryfikować wszystkie przypadki testowe tutaj .

OOBalance
źródło