Haiku to wiersz z trzech linii, z 5/7/5 sylaby zliczania, odpowiednio.
Haiku-W jest wiersz z trzech linii, z 5/7/5 słowo zliczania, odpowiednio.
Wyzwanie
Napisz program, który zwróci true, jeśli dane wejściowe to haiku-w, a false, jeśli nie.
Prawidłowe wejście haiku-w musi składać się z 3 linii oddzielonych znakiem nowej linii.
- Wiersz 1 musi składać się z 5 słów, każde słowo oddzielone spacją.
- Wiersz 2 musi składać się z 7 słów, każde słowo oddzielone spacją.
- Wiersz 3 musi składać się z 5 słów, każde słowo oddzielone spacją.
Przykłady
The man in the suit
is the same man from the store.
He is a cool guy.
Wynik: prawda
Whitecaps on the bay:
A broken signboard banging
In the April wind.
Wynik: fałsz
Zasady
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
- Obowiązują standardowe luki w kodzie golfowym. Oszukiwanie jest zabronione.
- Inne zwracane wartości logiczne, takie jak
1
i0
, są dopuszczalne. - Dopuszczalna jest również lista ciągów o długości 3 jako danych wejściowych.
- Prawidłowe dane wejściowe haiku-w nie powinny mieć spacji wiodących ani końcowych ani wielu spacji oddzielających słowa.
code-golf
decision-problem
DomTheDeveloper
źródło
źródło
Odpowiedzi:
JavaScript (ES6),
73726463544239 bajtówDzięki Neil za uratowanie 13 bajtów
Wyjaśnienie
Jest to funkcja grubej strzałki, która przyjmuje jako argument tablicę ciągów. Zastępuje każdą linię liczbą słów. Jeśli jest to haiku-w,
a
teraz znowu zawiera tablicę pięciu, siedmiu i pięciu. Ponieważ JavaScript nie pozwala nam porównywać 2 tablic jednocześnie, tablica jest najpierw konwertowana na ciąg, a następnie porównywana. Powoduje to zwrócenie wartości logicznej.źródło
%
i*
mają ten sam priorytet, więc nie potrzebujesz tych()
, chociaż myślę, że(d*2|5)
może również działać. Możesz też uciec od pojedynczego&
, chociaż myślę, że możesz poprawić nawet za pomocą(b...).length==3>b.some(...length-...)
.a=>a.map(c=>c.split
.length)=='5,7,5'
.+''
-==
stringify, jeśli drugi argument jest łańcuchem.AWK (GNU Awk),
24,30,28, 20 bajtówGrał w golfa
Wypisuje „517253” dla wartości True , a pusty ciąg dla wartości False .
Podręcznik użytkownika GNU Awk
Jak to działa
Każda instrukcja (reguła) awk składa się ze wzorca (lub wyrażenia) z powiązaną akcją:
Awk będzie czytać dane wejściowe linia po linii (zapis po rekordzie) i ocenia wyrażenie wzorca, aby sprawdzić, czy ma zostać wywołana odpowiednia akcja.
Powyższy kod jest samodzielnym wyrażeniem (wzorcem) Awk bez bloku akcji, co
{print $0}
w takim przypadku sugeruje się .Należy go czytać od prawej do lewej:
q=q NF NR
Dołączenie N umbra z F ields (bity) i N umbra z R ecords (tj bieżący numer linii), na zmienną q .
W ten sposób, podczas przetwarzania właściwego Haiku-w, q zostanie ustawione na:
$0=q
Przypisz nowo obliczoną wartość q do 0 USD (która domyślnie przechowuje całą bieżącą linię / rekord).
517253==$0
Porównaj to z „sygnaturą” dla właściwego Haiku-w (517253), jeśli istnieje dopasowanie, całe wyrażenie zostanie ocenione na „prawda” i uruchomiona zostanie odpowiednia akcja (niejawna
print $0
), wysyłając „517253” na standardowe wyjście (prawda) , w przeciwnym razie dane wyjściowe będą puste (False).Zauważ, że rozpozna to poprawnie Haiku-w, nawet jeśli po nim następuje dowolna liczba linii śmieci, ale uważam, że jest to w porządku, ponieważ:
(tzn. możemy założyć, że dane wejściowe mają długość 3 linii)
Test
Wypróbuj online!
źródło
Python , 42 bajty
Wypróbuj online!
Pobiera dane wejściowe jako listę wierszy, a słowa są oddzielone pojedynczymi spacjami.
Ponieważ gwarantujemy, że nie będzie początkowych ani końcowych spacji, a tylko pojedyncze spacje oddzielą każde słowo, możemy zweryfikować w-haiku, po prostu zliczając spacje w każdym wierszu.
Robimy to w formie listy, aby utworzyć listę liczby miejsc. Jeśli jest to prawidłowe haiku, powinno to wyglądać
[4, 6, 4]
, więc porównujemy to z tym i zwrócimy wynik.źródło
map(str.count,l,' ')
.Galaretka ,
109 bajtówWypróbuj online!
Wyjaśnienie
źródło
ċ€⁶⁼4,6,4
iċ€⁶⁼464D¤
… Nie mogę znaleźć niczego krótszego. (Oh, można go odwrócić, zbyt:464D⁼ċ€⁶$
)ċ€⁶Ḍ=464
działa dobrze dla 8.Partia, 102 bajty
Wychodzi z niezerowym poziomem błędu, gdy tylko odczyta wiersz z niewłaściwą liczbą słów.
źródło
Mathematica, 21 bajtów
Nienazwana funkcja przyjmująca listę znaków jako dane wejściowe i zwracające
True
lubFalse
. Po prostu liczy, ile spacji jest na każdej liście znaków, które zgodnie z regułami wyzwania doskonale korelują z liczbą słów w każdej linii.Poprzednie zgłoszenie:
Mathematica, 31 bajtów
Nienazwana funkcja przyjmująca listę ciągów jako dane wejściowe i zwracające
True
lubFalse
.źródło
Haskell,
3433 bajtyWypróbuj online! .
Edycja: dzięki @xnor za bajt!
źródło
f l=[sum[1|' '<-c]|c<-l]==[4,6,4]
.Siatkówka , 12 bajtów
(po pierwszej linii jest spacja)
Wypróbuj online!
M%`
- Policz liczbę spacji w każdej linii.M
- Tryb dopasowania - drukuj liczbę dopasowań.%
- dla każdej linii`
- osobna konfiguracja i wzorzec wyrażeń regularnych^4¶6¶4$
- Powinny być 4, 6 i 4 spacje oraz dokładnie trzy linie.¶
dopasowuje nowe linie. Reszta to proste wyrażenie regularne.Drukuje
1
dla prawidłowego wejścia,0
dla nieprawidłowego.źródło
Python,
5844 bajtów-14 autor: tbodt
źródło
split("\n")
.lambda h:[len(l.split())for l in h]==[5,7,5]
Perl , 26 bajtów
24 bajty kodu + 2 bajty na
-ap
flagi.Wypróbuj online!
źródło
Pyth, 9 bajtów
Program, który pobiera dane z listy
"quoted strings"
i drukujeTrue
lubFalse
odpowiednio.Zestaw testowy
Jak to działa
źródło
Japt , 11 bajtów
Zaoszczędzono wiele bajtów dzięki produktom @ETH
To pobiera tablicę trzech ciągów jako danych wejściowych.
Uruchom to online!
źródło
PowerShell , 43 bajty
Wypróbuj online!
Wyjaśnienie
Pobiera dane wejściowe jako ciąg rozdzielany znakiem nowej linii.
Usuwa wszystkie spacje, a następnie sprawdza, czy dokładnie pasuje do „4 spacji, nowej linii, 6 spacji, nowej linii, 4 spacji nowej linii”, używając wyrażenia regularnego.
Grupa przechwytywania odpowiada 4 spacjom,
\1
odnosi się do tego odniesienie wsteczne . Nowe linie są osadzone w ciągu. Zauważ, że drugi wiersz wyrażenia regularnego zawiera dwie spacje po odwołaniu wstecznym.źródło
Pyke,
119 bajtówWypróbuj tutaj!
Po
u
bajcie są następujące bajty:0x03 0x04 0x06 0x04
źródło
J, 12 bajtów
Dane wejściowe to lista ciągów w ramkach.
Wyjaśnienie
To widelec ze stałym lewym palcem. To sprawdza wynik prawidłowego ustawienia zębów pod
#@;:@>
kątem równości z4 6 4
. Właściwy czas rozpakowuje each (>
), następnie (@
) konwertuje każdy ciąg znaków na słowa (;:
), a następnie (@
) przyjmuje długość każdego (#
).źródło
R, 48 bajtów
Odczytuje 3-długościowy wektor znaków ze standardowego wejścia i działa poprzez zliczanie spacji. Aby policzyć liczbę spacji używamy
str_count
odstringr
pakietu, który może liczyć wystąpienia w oparciu o wzorzec regex.Alternatywnym podejściem bez użycia pakietów może być:
źródło
el
wcześniej, dzięki za to.C 142 bajty
Wersja bez golfa:
Zwraca 1 dla sekwencji 5/7/5, w przeciwnym razie 0.
Pozytywny przypadek testowy:
źródło
C ++, 357 bajtów
Coś w rodzaju golfa kodowego, ale to najlepsze, co mogę zrobić szybko
źródło
Ruby 1.9.3
Nie grał w golfa, ale sam w sobie jest haiku-w
lub...
Niestety nie działa z wiodącymi białymi znakami w żadnych liniach, ale radzi sobie z końcowymi znakami.
źródło
Python 2 ,
5764 bajtówEdycja Poprawiono, dodając 7 bajtów po otrzymaniu opinii od @Dada. Dzięki!
Wypróbuj online!
Nie jest to najkrótsza odpowiedź Pythona, ale po prostu chciałem użyć nowej sztuczki, której nauczyłem się ostatnio,
input()
do wyświetlania danych wyjściowych i zapisywaniaprint
instrukcji. Pobiera na wejściu listę linii. Wymaga Ctrl C (lub dowolnego innego naciśnięcia klawisza w tym przypadku), aby zakończyć program (z wyjątkiem) w terminalu, ale działa dobrze bez TIO.źródło
MATL, 16 bajtów
Dane wejściowe to tablica komórek ciągów znaków i zwraca tablicę prawdy lub falseya .
Wypróbuj online
Wyjaśnienie
źródło
MATLAB / oktawa, 38 bajtów
To rozwiązanie przyjmuje tablicę komórkową ciągów jako dane wejściowe, zlicza liczbę spacji w każdym wierszu, a następnie porównuje wynik z tablicą
[4 6 4]
i zwraca tablicę prawdy (wszystkie wartości to 1) lub falsey (każda wartość wynosi zero).Demo online
źródło
Perl 6 , 25 bajtów
źródło
Clojure, 44 bajty
Dane wejściowe to lista ciągów. Funkcja wyszukuje tylko spacje i je zlicza. To wyjaśnienie jest haiku. :)
źródło
Java 7, 154 bajtów
Wymagania programu i potencjał posiadania mniej lub więcej niż trzech linii, nie wspominając o samej gadatliwości Javy, powoduje, że ten „golfowy” kod jest dość duży.
Nie golfowany:
Wypróbuj tutaj.
źródło
SimpleTemplate, 77 bajtów
Niestety podejście do wyrażenia regularnego jest najkrótsze.
Wymaga podania pierwszego tekstu z nowymi wierszami w stylu * NIX. To nie będzie działać z nowymi liniami w stylu Windows.
Nie golfowany:
Oparte na wyrażeniach regularnych, 114 bajtów
Wymaga to podania każdej linii jako argumentu funkcji.
Nie golfowany:
źródło
Ułożone, 22 bajty
Pobiera dane wejściowe z góry stosu jako listę ciągów znaków, takich jak:
Wyjaśnienie
źródło
Java (OpenJDK) , 82 bajty
-2 bajty dzięki @ corvus_192!
Wypróbuj online!
Wygląda tak golfowo, ale bez wbudowanej funkcji mapy nie mogę znaleźć dobrego sposobu. Iteracja po tablicy jest kilka bajtów dłuższa, podobnie jak pisanie funkcji mapy za pomocą strumieni.
Wyrażenie lambda pobiera tablicę ciągów i zwraca wartość logiczną.
źródło
Arrays.stream
wywołać funkcję mapy, jeśli zadzwonisz , ale jest to wystarczająco długo, aby nie była warta użycia (szczególnie, jeśli musisz zaimportowaćArrays
)&
zamiast&&
zapisać dwa bajtySmileBASIC,
9694 bajtówźródło
R, 100 bajtów
Jako argument przyjmuje listę ciągów o długości 3. Prawdopodobnie nie będzie już grał w golfa, ponieważ dalsze golfa zamieniają go w odpowiedź @ Billywob.
źródło