Wyzwanie
Celem tego wyzwania jest ustalenie, czy dany ciąg może zostać wpisany przy użyciu tylko jednego wiersza standardowej klawiatury QWERTY w Wielkiej Brytanii.
To code golf
wygrywa najkrótsze rozwiązanie w bajtach!
IO
Dane wejściowe będą składać się z jednego ciągu zerowego lub większej liczby znaków w zakresie dziesiętnym ASCII 32-126 włącznie. Dla tego wyzwania możesz założyć, że pusty Ciąg nie wymaga wpisywania i dlatego można go pisać za pomocą pojedynczego wiersza.
Możesz wziąć dane wejściowe jako ciąg znaków, listę znaków lub równoważną formę dla swojego języka.
Dane wyjściowe powinny być prawdziwą wartością dla dowolnego ciągu znaków, który można wpisać za pomocą pojedynczej linii, lub falsey dla tego, który nie może.
Układ klawiatury
Aby wyjaśnić wszelkie niejasności dotyczące standardowego układu klawiatury poniżej, znajduje się lista klawiszy dostępnych w każdej linii, w tym alternatywne górne klawisze (dostępne za pomocą shift).
- Linia 1
- Standard:
`1234567890-=
- Standard:
- Linia 2
- Standard:
qwertyuiop[]
- Standard:
- Linia 3
- Standard:
asdfghjkl;'#
- Duże litery:
ASDFGHJKL
- Specjalne: Caps Lock
- Standard:
- Linia 4
- Standard:
\zxcvbnm,./
- Alternatywny:
|<>?
- Duże litery:
ZXCVBNM
- Specjalne: Shift
- Standard:
- Wiersz 5
- Specjalne: spacja
Alternatywne górne klawisze można nacisnąć tylko wtedy, gdy Shift jest również w tej samej linii, a do wielkich liter można uzyskać tylko za pomocą Caps Lock lub Shift. Naprawdę możesz użyć tylko jednej linii klawiatury!
Przypadki testowe
-> true (empty string)
45-2=43 -> true (line 1)
qwerty -> true (line 2)
tryitout -> true (line 2)
Qwerty -> false (no shift or caps on line 2)
#sad -> true (line 3)
AsDf -> true (caps lock used)
@sDF -> false (no shift for alternate upper)
zxcvbn? -> true (line 4)
zxc vbn -> false (spacebar on separate line)
123abc -> false (multiple lines)
-> true (just space bar)
!!! -> false (exclamation marks cannot be printed by a single line)
źródło
Odpowiedzi:
Python 2 ,
130123121115 bajtówWypróbuj online!
Python 3 , 111 bajtów
Wypróbuj online!
-4 bajty, dzięki nedla2004
źródło
Retina 0.8.2 ,
7271 bajtówWypróbuj online! Objaśnienie: Każda alternacja pasuje do innego rzędu klawiatury.
(?i)
W środku wzór powoduje, że cała reszta wzorca być dopasowane rozróżniana wielkość liter. Edycja: Zapisano 1 bajt dzięki @KirillL.źródło
opqr
można zmienićo-r
na -1. Czy zapomniałeś też znaku zwrotnego dla linii 1, nie widzę go?[][...
:)05AB1E ,
6647 bajtówPobiera dane wejściowe jako listę znaków.
-19 bajtów dzięki @Emigna . Zupełnie zapomniałem, że mamy wbudowane stałe qwerty-klawiatura. :RE
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
Perl 5
-pl
, 76 bajtówWypróbuj online!
Oczywiste podejście wyrażenia regularnego.
źródło
Rubin
-n
,8681 bajtówWypróbuj online!
źródło
JavaScript (Node.js) ,
999895 bajtówWypróbuj online!
-1 od komentarza @Kirill L. w odpowiedzi Retina.
-3 dzięki @Ismael Miguel i @Arnauld za ich wspólny wysiłek.
źródło
asdfghjkl
iASDFGHJKL
tam? Dlaczego nie użyjeszi
flagix=>/.../i.test(x)
?QWERTYUIOP
nie powinno być dopasowane. Dodatkowa kontrola kosztuje więcej niż kodowanie wielkich liter bezpośrednio w wyrażeniu regularnym.x=>/^([-`=\d]+|[wetyuio-r\[\]]+)$/.test(x)||/^([asdfghjkl;'#]+|[zxcvbnm,.\/<>?\\|]+| *)$/i.test(x)
ma taką samą długość|
oszczędza 1 bajt.\
,]
i-
(patrz ClassAtomNoDash w specyfikacji). Kreska może również wydawać się nieskalowana, jeśli jest to pierwszy lub ostatni znak (w przeciwnym razie jest interpretowany jako separator zakresu znaków).Perl 6 ,
102 101100 bajtów-1 bajt dzięki nwellnhof!
Wypróbuj online!
Całkiem standardowe wdrożenie. Prawdopodobnie istnieje krótsze rozwiązanie oparte na wyrażeniach regularnych, ale nie znam wystarczająco dobrze wyrażeń regularnych w Perlu 6, aby podjąć próbę.
źródło
max
zamiast?any
(imin
zamiast?all
).m:P5//
. Ale nie sądzę, aby któreś z nich było warte opublikowania jako odpowiedzi.Java 10,
209208 bajtów-1 bajt dzięki @TFeld .
Wypróbuj online.
Wyjaśnienie:
źródło
!!!
mimo że wykrzykników nie można wydrukować w żadnej linii. Właśnie dodałem to jako przypadek testowy(?i)
innych wielkich liter?p==" "
zamiastp.equals(" ")
PowerShell, 87 bajtów
Wyrażenie regularne Port of Neil's Retina .
źródło
Galaretka , 55 bajtów
Wypróbuj online!
Pierwszy wiersz zawiera listę wierszy klawiatury, a drugi sprawdza, czy dane wejściowe programu są zawarte w pojedynczych (lub zerowych) wierszach i czy nie ma znaków, których nie można wpisać (jak
QWE!@#
).źródło
C , 150 bajtów
Wypróbuj online!
Nie wygra żadnych nagród, ale jest to zabawne podejście: odwzorowujemy postacie w pięciu rzędach klawiatury
4 8 16 32 64
i na każdą nieprawidłową postać3
. Bitowo LUB wartość dla każdego znaku w ciągu razem i sprawdzamy, czy wynik jest satysfakcjonującyx&(x-1) == 0
, co jest prawdą, gdyx
potęga wynosi 2 lub zero, tj. Ilekroćx
ma ustawiony najwyżej jeden bit.źródło
LUA ,
282262259270 bajtówWypróbuj online!
źródło
PHP, 98 bajtów
Trochę mi smutno, że nie ma nic krótszego niż regex. Prawdopodobnie nie jest to najszybsze rozwiązanie.
Uruchom jako potok z
-F
lub spróbuj online .Najkrótsze rozwiązanie niebędące wyrażeniem regularnym, jakie znalazłem (124 bajty; podział linii i tab dla wygody czytania):
wychodzi z kodem
1
dla prawdy,0
dla fałszu. Uruchom jako potok za pomocą-R
.Wymaga PHP 5.4 lub nowszego; dla starszych PHP, użyj
array(...)
zamiast[...]
(+5 bajtów)lub użyj tych 123 bajtów
-nR
w PHP <7:źródło
AWK ,
163119113 bajtówTo jest odpowiedź AWK, zwraca łańcuch liczbowy 1 dla wartości true, 0 dla wartości false. (Zapisane jako wywołanie AWK jako plik awk -f do użytku interaktywnego).
Wypróbuj online!
Jednak nie obsługuje znaku TAB w formie napisanej (trywialne rozszerzenie), która nie jest częścią specyfikacji.
źródło
print
wystarczy jeden: Wypróbuj online!{print/^[-```1234567890=]*$/||/^[]qwertyuiop\[]*$/||/^[asdfghjkl;'#ASDFGHJKL]*$/||/^[zxcvbnm,.\/\|<>?ZXCVBNM]*$/||/^ *$/}
Bash , 119 bajtów
Zawiera echo zapewniające „czytelny” wynik. Jeśli umieścisz wokół niego odpowiednie opakowanie powłoki (do wyboru) w celu dołączenia wydruku / wydruku, możesz zaoszczędzić 8 bajtów. Mój odczyt wyzwania sugeruje, że rozwiązanie powinno wypisać odpowiednie wskazanie wyjścia, więc trzymam 119 bajtów.
Wypróbuj online!
źródło