Biorąc pod uwagę ciąg drukowalnego tekstu ASCII (w tym znaki nowej linii i spacje), który zawiera co najmniej jeden znak, który nie jest ani nową linią, ani spacją, wypisz prawdziwą wartość, jeśli ciąg jest prostokątny, a w przeciwnym razie wartość falsey. Dodatkowo kod źródłowy twojego rozwiązania musi być prostokątny .
Ciąg jest prostokątny, jeśli spełnia wszystkie następujące warunki:
- Pierwszy wiersz i ostatni wiersz nie zawierają spacji.
- Pierwszy i ostatni znak każdej linii nie jest spacją.
- Wszystkie linie mają tę samą liczbę znaków.
Na przykład następujący tekst jest prostokątny:
abcd
e fg
hijk
Ten tekst nie jest jednak prostokątny (wymaganie nr 3):
1234
567
8900
Przypadki testowe
Prawda:
sdghajksfg
asdf
jkl;
qwerty
u i op
zxcvbn
1234
5 6
7890
abcd
e fg
hijk
Falsey:
a b c
123
456
7 9
12
345
qwerty
uiop
zxcvnm
1234
567
8900
To jest golf golfowy , więc wygrywa najkrótsze rozwiązanie w bajtach.
Odpowiedzi:
C (gcc) ,
127125124118 bajtówr*=!e&(!t|t==c);
w golfar>>=e||t&&t-c;
. (Ten golf był inspiracją dla mojej ostatniej odpowiedzi na C w odpowiedzi na aktualizację flagi odwrotnej ).*(_-2)
w golfa_[~1]
.*_++-10||(...)
w golfa*_++<11?...:0
i wykorzystując symbol zastępczy zero...:0
(który nie jest używany konstruktywnie), abyc++
zwiększyć przyrost. Te pola golfowe umożliwiły dalsze przetasowania w pętli.Wypróbuj online!
Układ źródłowy osiąga wyższy prostokąt.
Wyjaśnienie
Poniżej wyjaśniono wersję o długości 124 bajtów.
Wypróbuj online!
źródło
r,e,c,t
Java 10,
214176169152144139 bajtów-5 bajtów dzięki @Neil .
Używa
String[]a
zamiastvar a
;return-r<0;
zamiastreturn r>0;
; i dodał komentarz//
na samym końcu, więc nie ma spacji w pierwszym i ostatnim wierszu.Zauważ, że ten prostokąt jest krótszy niż wejście jednowierszowe, ponieważ
int r=1,...;
należy go zastąpićint[]v{1,...};
, a wtedy wszystkie zastosowania liczb całkowitych stają sięv[n]
(gdzie n jest indeksem zmiennej w tablicyv
).Wypróbuj online.
Wyjaśnienie:
Oto ten sam program podstawowy ze spacjami (
128126 bajtów ):-2 bajty dzięki @Neil .
Wypróbuj online.
źródło
T-SQL,
237207 bajtówWyjścia 1 dla prostokąta, w przeciwnym razie 0. Musiałem użyć ton dodatkowych parens i wsporników, aby wyeliminować spacje, jestem pewien, że jest wiele miejsca na ulepszenia.
Objaśnienie :
Zgodnie z naszymi dozwolonymi opcjami We / Wy i wyjaśnieniem w komentarzach do pytań dane wejściowe są traktowane jako osobne wiersze w istniejącej tabeli t . Ponieważ dane w SQL są z natury nieuporządkowane, ta tabela zawiera pole tożsamości „numer wiersza” i :
Zasadniczo mój SQL wykonuje 3 podkwerendy, z których każde zwraca
0
lub1
bazuje na 3 kryteriach kodu „prostokątnego”. Te 3 wartości są mnożone razem, zwracając tylko1
kod, który spełnia wszystkie 3.EDYCJA : Połącz kryteria 2 i 3 w ten sam WYBÓR, aby zaoszczędzić miejsce
Ta
TRIM(v)
funkcja jest obsługiwana tylko przez SQL 2017 i nowsze wersje. Potrzebne byłyby wcześniejsze wersjeLTRIM(RTRIM(v))
, które wymagałyby ponownego zrównoważenia wierszy.Jedna losowa uwaga:
LEN()
funkcja SQL ignoruje końcowe spacje, więcLEN('foo ') = 3
. Aby uzyskać „prawdziwą” długość, musisz przypiąć postać do końca, a następnie odjąć jedną: Pźródło
C ++,
199183181175 bajtówTa funkcja szablonu akceptuje wiersze jako zbiór ciągów (które mogą być ciągami szerokimi) przekazywanymi jako para iteratorów.
Podziękowania należą się użytkownikowi Błędnemu za przypomnienie mi
back()
członkastd::string
i wskazanie, żenpos+1
wynosi zero.Ekwiwalent nie golfa
Jedynym prawdziwym golfem jest połączenie pierwszej i ostatniej linii, abyśmy mogli wykonać jeden
find
dla miejsc w nich.Program testowy
źródło
.find(' ')+1==0
is.back()
zamiast*s.rbegin()
.JavaScript (Node.js) , 85 bajtów
Wypróbuj online!
źródło
NOR
operatora!Python 2 , 82 bajty
Wypróbuj online!
Wywołaj jako
f("abcd", "e fg", "hijk")
.źródło
Haskell ,
10610298110109102 bajtówDzięki @nimi i @Laikoni za bajt każdy!
Wypróbuj online!
źródło
Haskell , 79 bajtów
Wypróbuj online! Pobiera dane wejściowe jako listę linii.
Wzór
g(x:r)= ...
wiąże pierwszą linięx
z (ewentualnie pustą) listą pozostałych liniir
. Następnieall((==(0<$x)).(0<$))r
sprawdza, czy wszystkie linier
mają taką samą długość jakx
(Korzystanie z tej wskazówki ).Jeśli nie, to połączenie
&&
zwiera i wracaFalse
, w przeciwnym razie oceniana jest prawa strona. Tam budowany jest ciąg znaków, który składa się zx
pierwszego wiersza,last(x:r)
ostatniego wierszar
(lub pierwszego wiersza ponownie, jeślir
jest pusty) oraz(head<$>r)
pierwszego i(last<$>r)
ostatniego znaku każdego wiersza. W przypadku tego ciąguall(>='!')
sprawdza, czy nie zawiera spacji (nie możemy go użyć z(>' ')
powodu ograniczeń kodu źródłowego).źródło
contains at least one character that is neither a newline nor a space
, które pozwalają również na upuszczenie pustej listy.MATL , 13 bajtów
Dane wejściowe to tablica ciągów w formacie
{'abc' 'de'}
.Dane wyjściowe to tablica zawierająca tylko te, które są zgodne z prawdą , lub tablica zawierająca co najmniej zero, czyli falsey .
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe , w tym test na prawdziwość / fałszerstwo.
Wyjaśnienie
źródło
cO6Lt&(32=~
Wypróbuj online! Po prostu zeruje nieprzygraniczne części, a następnie sprawdza, czy są jakieś spacje.cF6Lt&(32=~
. Możesz go edytować, a jeśli nie, możemy zostawić go w komentarzach.JavaScript (ES6), 88 bajtów
Wypróbuj online!
źródło
Płótno ,
1715 bajtówWypróbuj tutaj!
Objaśnienie (ASCII-fied for monospace):
źródło
Perl 5 , 70 bajtów
Wypróbuj online!
Wyjścia
0
dla prawdy, każda inna liczba dla falsey.źródło
Czerwony ,
216191 bajtówWypróbuj online!
W pierwszym i ostatnim rzędzie umieściłem wiele niepotrzebnych nawiasów.
źródło
Galaretka , 17 bajtów
Wypróbuj online!
źródło
Does not seem to enforce equal line length
to wszystko, co mówiłem." \n "
Wypróbuj online!Galaretka , 15 bajtów
Korzysta z metody opracowanej przez Mnemonic w (obecnie - z powodu błędu krawędzi) usuniętym pytaniu. (jeśli teraz jest to naprawione, daj kredyt !)
Link monadyczny przyjmujący listę znaków, która zwraca 1 lub 0.
Wypróbuj online!
W jaki sposób?
źródło
Japt , 22 bajty
Odpowiedź niekonkurencyjna: w Japt znany jest błąd, w którym dwuwymiarowe obroty tablicy obcinają wyniki. Z powodu tego błędu poniższy kod działa tylko na wejściach, które są kwadratowe. Jeśli błąd nie był obecny, poniższy kod powinien działać całkowicie poprawnie.
Pobiera dane wejściowe jako tablicę ciągów. Używanie nawiasów zamiast spacji sprawia, że wymagania dotyczące kodu prostokątnego są dość łatwe.
Wypróbuj tutaj .
źródło
Ruby 2.5+, 63 bajty
Pobiera dane wejściowe jako tablicę ciągów. Brak linku testowego, ponieważ wersja na TIO (2.4) jest na to za stara. Zamiast tego jest tu nieco dłuższa (69 bajtów) wersja do testowania:
Wypróbuj online!
Różnica polega na tym, że ponieważ 2.5 Ruby obsługuje bezpośrednie przekazywanie wzorca Regex do
all?, any?, none?
metod, co oszczędza nam kilka bajtów. Sama metoda jest dość oczywista - testujemy:źródło
C (gcc) , 119 bajtów
Pobiera dane wejściowe jako listę (y) n ciągów.
Wypróbuj online!
źródło
C # (.NET Core) ,
145167 bajtówWypróbuj online!
źródło
S[0].IndexOf(" ")
szuka spacji w pierwszym wierszu iS[S.Count()-1].IndexOf(" ")
szuka w ostatnim wierszu. Jeśli nie ma spacji w pierwszym i ostatnim wierszu, to -2, co jest prawdą w-2 < -1
.True
po przekazaniu do programu. To dodatkowe ograniczenie w tym wyzwaniu.