Ciąg uważa się za kwadratowy, jeśli spełnione są następujące warunki:
- Każda linia ma taką samą liczbę znaków
- Liczba znaków w każdej linii jest równa liczbie linii.
Twoim zadaniem jest napisanie programu lub funkcji, która określa, czy dany ciąg wejściowy jest kwadratem, czy nie.
Możesz wymagać ograniczenia danych wejściowych przez wybór LF, CR lub CRLF.
Znaki nowego wiersza nie są uważane za część długości linii.
Możesz wymagać, aby na wejściu pojawiał się znak nowej linii, ale nie jest to dodatkowy wiersz.
Dane wejściowe to tablica znaków lub 1D; nie jest to lista ciągów.
Możesz założyć, że dane wejściowe są niepuste i zawierają tylko drukowalny kod ASCII, w tym spacje.
Musisz podać prawdziwą wartość dla ciągów kwadratowych i fałsz dla innych ciągów.
Prawdziwe przypadki testowe:
bla bar baz
.
.s. .ss .s. (s oznacza spację)
ss ss (s oznacza spację)
aaaaa aaaaa aaaaa aaaaa aaaaa
Przypadki testowe Falsy:
.. .
.
.
.... ....
4444 333 22
333 333
abc.def.ghi
Zwróć uwagę na dodatkowe puste linie w niektórych przypadkach fałszowania.
To jest golf golfowy - wygrywa najmniej bajtów!
Odpowiedzi:
Brachylog (2), 3 bajty
Wypróbuj online!
Pełny program Wyjścia
true.
dla truthy,false.
dla falsey.Wyjaśnienie
Byłem nieco sceptycznie nastawiony do użyteczności
ṁ
wbudowanego, kiedy został dodany, ale tak naprawdę nie mogę zaprzeczyć, że jest on pomocny tutaj…Brachylog (2), 7 bajtów
Wypróbuj online!
Niezintegrowane rozwiązanie.
Nadal bije wszystkie inne wpisy, w momencie pisania.EDYCJA: Niezupełnie, wpis Jelly o równej długości wszedł, kiedy to pisałem, i pokonał go za pomocą znacznika czasu.Wyjaśnienie
źródło
ṁ
= "Potwierdź, że wynik jest kwadratowy" :(.\l~l
w tamtym czasie byłoby to coś podobnego , z wyjątkiem tego, że polecenie odwrotnego ukośnika, które między innymi twierdzi, że jego wejście jest prostokątem , zostało przerwane; Zauważ, że nawet jeśli zastąpiṁ
się.\l~l
, to nadal najkrótszy program, tutaj, jeśli pomyśleć o tym, dodam, że na stanowisko). Polecenie odwrotnego ukośnika zostało naprawione, ale autor języka postanowił dodać jednocześnie kwadrat assert. Myślałem „z pewnością już nigdy więcej się nie pojawi”. Najwyraźniej się myliłem.Python 2 , 52 bajty
Wypróbuj online! lub Wypróbuj wszystkie przypadki testowe
źródło
'\n'
, po prostu zostaw to puste (ponieważ na wejściu nie ma spacji i tabulatorów).JavaScript (ES6),
4645 bajtówWyjaśnienie
true
kwadrat ifalse
nie.Spróbuj
źródło
s=>!(s=s.split`\n`).some(x=>x.length-s.length)
!some
z ręki, po prostu dlatego, że ma taką samą długość jakevery
.05AB1E ,
108 bajtówWypróbuj online!
-2 dzięki Rileyowi, to w zasadzie jego odpowiedź ._.
źródło
s
. W ten sposób¶¡€gDgQP
Galaretka ,
75 bajtówWypróbuj online!
Dzięki FryAmTheEggman za -2
źródło
Haskell,
3834 bajtówWypróbuj online!
Wersja punktowa
f s = all ((==length (lines s)).length) (lines s)
, tzn. Podziel dane wejściowe na linie i sprawdź, czy długość każdej linii jest równa liczbie linii.Edycja: Dzięki @xnor za 4 bajty.
źródło
all
domap
celu wyciąćand.
.Galaretka , 7 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Japt , 9 bajtów
Przetestuj online!
Wyjaśnienie
W przypadku niektórych funkcji zaimplementowanych wkrótce po opublikowaniu tego wyzwania może to być 6 bajtów:
Przetestuj online!
Wyjaśnienie
źródło
y
to rozwiązanie, ale moje przychodziło z jeszcze kilkoma bajtami.Retina ,
3331 bajtówWypróbuj online! Objaśnienie: Pierwszy etap po prostu zmienia wszystkie drukowalne ASCII w ten sam znak, aby ułatwić dopasowanie. (Można to zrobić bez, ale jest to kod golfowy, a nie kodowy.) Drugi etap dopasowuje następnie co najmniej jeden znak w pierwszej linii. Jednak dla każdego dodatkowego znaku w pierwszym wierszu opcjonalnie dopasowuje nowy wiersz, a następnie kopię pierwszego wiersza. Ostatnia część wyrażenia powoduje niepowodzenie dopasowania, jeśli jest więcej kolumn niż wierszy.
źródło
\S\n;
zamiast pierwszego wiersza pozwala zaoszczędzić jeden bajt.
przez.
zapisuje dwa, ale dzięki.Łuska , 6 bajtów
Bierze ciąg i drukuje albo
1
albo0
. Wypróbuj online! Pierwszy wiersz przechodzi przez przypadki testowe; usuń go, jeśli chcesz przetestować jedną wartość.Wyjaśnienie
Husk to nowy funkcjonalny język golfa stworzony przeze mnie i Leo . Brakuje wielu funkcji, a prace rozwojowe trwają. Jego główną cechą jest sztywny system typu, który pozwala nam przeciążać funkcje wyższego rzędu.
Na wysokim poziomie program działa w następujący sposób:
Funkcja
≡
faktycznie sprawdza, czy dwie tablice mają ten sam kształt i taki sam rozkład elementów zgodnych z prawdą. W Husk wszystkie znaki z wyjątkiem bajtu zerowego są zgodne z prawdą i nie pojawią się w naszych danych wejściowych. Ponadto,S
jest S-syntezatora , funkcja, która przyjmuje jako wejścia dwóch funkcji, tu≡
iT'a
i zwraca nową funkcję, która mapujex
się≡(x)(T'a x)
. WynikS
składa się z¶
, a funkcja ta jest domyślnie stosowana do danych wejściowych.Skąd Husk wie, że powinien mieć zastosowanie
S
do następnej funkcji, ale¶
powinien być złożony z funkcją po lewej? Proste: po prostu wypróbowuje każdą interpretację i wybiera tę, w której typy mają sens. Jest to wyjaśnione bardziej szczegółowo w dokumentacji Łuski .źródło
Pure Bash (bez narzędzi), 55
mapfile
wczytuje dane wejściowe do tablicya
Odwrotne znaczenie jest zwracane jako kod powrotu powłoki (sprawdzaj za pomocą
echo $?
) - idealny kwadrat to 1, wszystko inne to 0.Wypróbuj online (prawda) .
Wypróbuj online (falsy) .
Poprzednia odpowiedź przy użyciu eval-escape-extension hell, 78:
Wypróbuj online (prawda) .
Wypróbuj online (falsy) .
źródło
Perl 6 , 27 bajtów
Sprawdza, czy liczba wierszy w ciągu wejściowym jest równa liczbie znaków w każdej linii.
źródło
.lines
metodę.Pyth, 7 bajtów
Wypróbuj tutaj
Nie wymaga końca nowej linii. Zastępuje dane wejściowe tablicą 2D z 1s, gdzie 1 oznacza dowolny znak z oryginalnego wejścia. Następnie sprawdzamy, czy tablica nie uległa zmianie po transponowaniu (zastępując kolumny wierszami). Tylko kwadrat zwróci wartość true w takiej sytuacji.
źródło
Java (OpenJDK 8) ,
96919087 bajtów-5 bajtów dzięki @KevinCruijssen
-1 bajtów dzięki @TheLethalCoder
-2 bajtów dzięki @ OlivierGrégoire
Wypróbuj online!
źródło
String[]s
i możesz usunąć,0
w.split("\\n");
dla -3 bajtów. I średnik /;
na samym końcu nie będziesz musiał liczyć, aby kolejne -1. Och, i obawiam się , że musisz podaćjava.util.
przed siebieArrays
. Import / wykorzystanie jest również częścią liczby bajtów.java.util.
, zwykła pętla forfor(String x:s)if(x.length()!=s.length)return 0>1;return 1>0;
wydaje się być krótsza niżreturn java.util.Arrays.stream(s).anyMatch(l->l.length()!=s.length);
.\n
?a.split("\n")
jest w rzeczywistości krótsze!a->java.util.Arrays.stream(a.split("\n")).allMatch(x->x.length()==a.split("\n").length)
leng
ith()
. Najwyraźniej pojawiają się najpierw po 60 znaku, a następnie co 20 znaków.05AB1E , 7 bajtów
Wypróbuj online!
źródło
n
danych wejściowych zamiast 1 i dlaczego moja pierwotna odpowiedź nie zadziałała.|
oznacza „weź resztę danych wejściowych i podziel według nowych linii”, co w żaden sposób nie wymaga wielu danych wejściowych. Musisz traktować STDIN jako pojedyncze wejście.R , 57 bajtów
Anonimowa funkcja; Dzieli na nowe linie, oblicza długość każdej linii i sprawdza, czy wszystkie są takie same jak liczba linii.
Wypróbuj online!
źródło
MATL ,
1412 bajtówŁańcuch wejściowy jest definiowany za pomocą konkatenacji łańcucha (
[...]
) i za pomocą punktu kodowego10
reprezentującego LF. Na przykład['aaa' 10 'bb']
jest interpretowany w MATL jako ciąg'aaa'
połączony ze znakiem z punktem kodowym10
połączonym z ciągiem'bb'
.Wyjście jest niepustym wektorem liczbowym, co jest prawdą wtedy i tylko wtedy, gdy wszystkie jego wpisy są niezerowe.
Wypróbuj online!
Wyjaśnienie
Rozważ wejście
['4444' 10 '333' 10 '22']
.źródło
R, 35 bajtów
Pobiera dane wejściowe ze standardowego wejścia. Sprawdza, czy liczba znaków w każdym wierszu jest równa całkowitej liczbie wierszy. Zwraca
TRUE
lubFALSE
odpowiednio.źródło
JavaScript (ES6), 48 bajtów
źródło
CJam, 11 bajtów
Wypróbuj online!
źródło
OCaml , 56 bajtów
Wypróbuj online!
źródło
Pyth,
1210 bajtówZaoszczędź 2 bajty dzięki @FryAmTheEggman.
Wypróbuj online
Wyjaśnienie
źródło
QBIC , 43 bajty
Ja jestem zadowolony z tego, jak krótka pochodna QBasic mogła podjąć to wyzwanie.
Wyjaśnienie:
źródło
Pyth, 7 bajtów
Demonstracja
Dwukrotnie transponuj dane wejściowe ze obcięciem, a następnie sprawdź, czy wynik jest taki sam jak oryginał.
źródło
Rubinowy, 50 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
.split($/,-1);
->.split $/,-1;
lines
zamiast,read
a potemsplit
(ale wtedy musisz dodać 1,size
ponieważ linie zawierają końcowy znak nowej linii)Cheddar , 39 bajtów
Wypróbuj online!
źródło
Clojure, 58 bajtów
Wymaga końca nowej linii, nie mogę się doczekać, aby zobaczyć coś bardziej magicznego.
źródło
APL (Dyalog) , 17 bajtów
Wymaga
⎕ML←3
ustawienia domyślnego w wielu systemach. Używa CR.Wypróbuj online!
↓∘⎕FMT
[to] podział na linie F lub m a t ted-do-A-kwadrat argumentu≡
identyczny z⎕TC[2]∘≠
znaki w grupach nie-nowej linii *⊂
podzielony na partycje⊢
argument?* Drugi element listy T erminal c znaków kontroli twoj ego.
W wersji 16.0 można pisać za
↓∘⎕FMT≡⎕TC[3]∘≠⊆⊢
pomocą⎕ML←1
.źródło
⎕ML
?⎕ML
, podczas gdy ludzie, którzy zaczynali z innymi APL mają tendencję do biegania z niskim⎕ML
.PowerShell, 64 bajty
To samo podejście (podział, długości linii, liczba linii) jak w innych odpowiedziach w języku innym niż golf, ale nie ma fajnego odpowiednika map (), więc jest to tablica długości linii z liczbą linii oznaczonych na końcu, a następnie ta tablica jest zgrupowane. Kwadraty wychodzą jak
3,3,3,3 -> 1 group, all line lengths and line count were equal
i nie-kwadraty wychodzą jak3,2,1 -> 3 groups
, coś było nierówne na kwadracie:Wymaga zakończenia nowej linii w stylu Linux, bez końcowego znaku nowej linii. na przykład
(I możesz zrobić podobnie dla fałszywych testów, ale nie umieszczę tego tutaj, ponieważ jest ich więcej). Kilka
@
symboli jest wymaganych, gdy wejście jest pojedynczym, w'.'
przeciwnym razie rozdzielenie nie tworzy tablicy jednego łańcucha, tylko jeden łańcuch, a następnie konkatenacja tablicy nie1,1
generuje danych wyjściowych2
.Miałem nadzieję, że krótsze może być zastąpienie wszystkich znaków „a”, a następnie brutalna siła od 1 do długości wejściowej wszystkich kwadratów „a” i sprawdzenie, czy jakikolwiek pasuje do danych wejściowych. Po przejściu przez param () i .Length oraz -join i -replace kończy się to znacznie dłużej na 81 bajtach:
źródło
Brud , 11 bajtów
Wydruki
1
na kwadraty i0
na kwadraty. Wypróbuj online!Wyjaśnienie
Szczegółowe wyjaśnienie można znaleźć na stronie samouczka Grime , która zawiera przykładowy program.
źródło