Biorąc pod uwagę dowolny z następujących znaków (lub nowego wiersza):
`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:"zxcvbnm,./ZXCVBNM<>?
Twój program musi wypisać wiersz, który znajduje się na klawiaturze
Ponieważ moja klawiatura jest (prawie) rozładowana, twój kod musi być jak najkrótszy
Klawiatura, której powinien używać Twój program (do wyszukiwania wierszy), powinna wyglądać następująco:
Row 1:~` !1@2 #3$4 %5^6 &7*8 (9)0 _-+=
Row 2: Q W E R T Y U I O P {[ }] |\
Row 3: A S D F G H J K L :; "' ↵ return
Row 4: Z X C V B N M <, >. ?/
Row 5: space
Gdzie ↵ returnjest nowa linia. Puste klucze nic nie znaczą.
Przykłady
"$"
1
"R"
2
"a"
3
"?"
4
"\n"
3
" "
5
gdzie \n
jest znak nowej linii.
Dane techniczne
- W twoim programie nie jest rozróżniana wielkość liter
- Twój program musi obsługiwać tylko znaki na pokazanej klawiaturze
źródło
kbd
?Odpowiedzi:
Pyth,
626665 bajtówWypróbuj online.
Wykorzystuje pakowane ciąg reprezentujący liczbę w hex który, gdy pokrojone na kawałki dwóch bitów, reprezentujący rząd każdego znaku z wyjątkiem
i
!
jako wartość od 0 do 3. Wychodzimy na zewnątrzi
!
tak nie mamy do przechowywania 4 albo mieć 0 na początku tego numeru, a następnie dodaj ich wartości wiersza za pomocą+,4Z
. Po przekształceniu ciągu w wartości wierszy wystarczy użyć kodu wejściowego, aby zindeksować tablicę wartości, a następnie dodać 1.Newline jest obsługiwany osobno, ponieważ jest interpretowany przez Pyth jako pusty ciąg znaków, a zatem ma kod znakowy 0.
Byłoby to krótsze, gdybym mógł wymyślić, jak korzystać z bazy 256 w Pyth, ale nie jestem w stanie sprawić, żeby działała.
źródło
JavaScript (ES6),
105102101 bajtówWyjaśnienie
W JavaScript
test
zwraca wartość logiczną, która działa tak samo jak1
i0
tak pomnożyć im przez rząd. Testowanie rzędu 2 zajęło najwięcej bajtów, więc użyłem tego jako domyślnego, jeśli nie pasowało żadne inne.Test
Pokaż fragment kodu
źródło
c="q"
,++c
=NaN
,NaN*7
=NaN
,NaN^2
konwertuje argumentów do liczb całkowitych (uncastables lubięNaN
stać0
), a następnie robi0 XOR 2
co jest2
.Glava 1,5 , 164 bajty
Glava to dialekt języka Java, który powoduje, że kod Java jest krótszy. Ten kod jest niestety niekonkurencyjny, ponieważ zastosowane zostało zatwierdzenie (opóźnienie 2 godziny ...) po tym wyzwaniu, które naprawiło kilka istotnych błędów, które nie pozwalały na działanie tego programu.
Jest to pełny program, który pobiera dane wejściowe za pomocą argumentów wiersza polecenia. Działa, po prostu testując, dla którego wyrażenia regularnego pasuje, a następnie wyświetla odpowiednią liczbę.
źródło
Python 3, 142
Prawdopodobnie jest krótszy sposób, że przeoczam ¯ \ _ (ツ) _ / ¯
źródło
Pyth , 98
nie jestem pewien, jak uruchomić zakres 0–9 z jakiegoś powodu: |, zainspirowany odpowiedzią user81655
źródło
jkUT
ciągu z zakresem od 0 do 9, nie jestem pewien, czy istnieje krótszy sposób. Możesz także użyć spakowanych ciągów, aby zaoszczędzić kilka bajtów, np .."!~WÏù¹_(<]úÝ"
Dla"~`!@#$%^&*()_-=+"
.Bash, 108
Brak odpowiedzi Bash? Bash odpowiedź.
grep -Fin
jest zdecydowanie właściwym narzędziem do tego zadania.Ten program jest w dwóch plikach.
k
, 73 bajtyJest 5 linii, ostatnia to spacja. Jeśli masz problemy z odtworzeniem pliku, base64 to:
b
, 34 bajtyTo jest sam program, który pobiera dane wejściowe jako jedyny argument wiersza poleceń.
Wynik: 34 + 73 + 1 (dla
k
nazwy pliku) = 108 bajtówBez golfa
Wyjaśnienie
grep
- wyszukaj plik w poszukiwaniu linii pasujących do ciągu lub wyrażenia regularnego, wypisz tylko te linie-F
aka--fixed-strings
- wyłącz wyrażenia regularne, aby[
itd. były obsługiwane poprawnie-i
aka-y
aka--ignore-case
- dopasowanie bez rozróżniania wielkości liter-n
aka--line-number
- pokaż numer linii i: przed każdą linią (np.4:zxcvbnm,./<>?
)"$1"
- wyszukaj pierwszy argument wiersza polecenia skryptu, cudzysłowy są niezbędne do obsługi znaku nowej linii i spacjik
- szukaj w plikuk
grep
polecenie dopasuje wszystkie pięć wierszy, jeśli dane wejściowe to nowa linia, a tylko jedna linia w przeciwnym razie.|
- potok, wyślij standardowe wyjście jednego polecenia na standardowe wejście następnegotail
- wypisuje ostatnie N wierszy lub znaków standardowego wejścia-n3
aka--lines=3
- wypisuje ostatnie 3 linie-n
włączonej flagigrep
. W przeciwnym razie to polecenie pobiera tylko wiersze 3, 4 i 5 (ostatnie 3 wiersze).|
- rurahead
- wypisuje pierwsze N wierszy lub znaków standardowego wejścia-c1
aka--bytes=1
- wypisuje pierwszy znakźródło
Japt,
737066 bajtówWypróbuj online! (w tym przykładzie dane wejściowe to dosłownie nowa linia)
źródło
!1
jest coś, co pasuje do „false”, w końcu wiem, jak to zrobić, dzięki :)Java, 300 bajtów
Nie jestem ekspertem i to moja pierwsza próba gry w golfa, ale pomyślałem, co do cholery, dlaczego nie? Powyżej znajduje się pełna wersja programu, rzeczywisty kod, który do niej wejdzie, najprawdopodobniej usunąłby przyzwoitą liczbę znaków.
źródło
class A{public static void main(String[]a){int f="~'!1@2#3$4%5^6&7*8(9)0_-+=qQwWeErRtTyYuUiIoOpP[{]}\\|aAsSdDfFgGhHjJkKlL;:\'\"\r".indexOf(new java.util.Scanner(System.in).nextLine().charAt(0));System.out.print(f<0?4:f<26?1:f<53?2:f<76?3:5);}}
( 243 bajty ) Usunąłem niepotrzebne nawiasy; skróconeargs
; usuniętypublic
; bezpośrednio używał napisu i skanera; i usunąłem import, któryjava.util.Scanner
jest używany raz.Pyth, 105 bajtów
Wyjaśnienie:
Zdecydowałem się wybrać pierwszy rząd jako wiersz „musi być, jeśli nic innego”, ponieważ wymagał największej liczby bajtów do przedstawienia nawet po grze w golfa.
źródło
Perl 6, 128 bajtów
Tworzę listę wyrażeń regularnych zawierających klasy znaków wraz z ciągiem dosłownym. Następnie wywołuję
first
metodę z listy (która jest tylko wersją metody funkcjifirst
wyższego rzędu), używając smartmatch do porównania argumentu przekazanego do programu z bieżącym elementem na liście. Zauważ, że smartmatch robi „właściwą rzecz” zarówno dla wyrażeń regularnych, jak i literału ciągowego.:k
Opcjonalny parametr dofirst
przyczyn metoda zwraca indeks zgodnego elementu na liście, które następnie dodać 1 do i wyjście poprzezsay
.Zauważ, że podczas używania tego programu będziesz musiał poprawnie uciec od pewnych znaków, takich jak `i spacja w swojej powłoce. Na przykład: perl6 keyboard.p6 \ `
źródło
JavaScript ES6, 114 bajtów
Kolejne rozwiązanie JavaScript. Zasadą jest zwrócenie indeksu znaku wejściowego w tablicy wierszy plus 2 (tak jak wiersz 0-9 zwraca -1, tzn. Nie istnieje, -1 + 2 = 1.
q
Jest w pierwszym ciągu tablicy, więc zwraca 0 + 2 = 2. rząd).źródło
Perl,
967776 bajtówUruchom za pomocą
perl -p
. Upewnij się, że karmisz go tylko pojedynczymi postaciami; na przykład, aby uruchomić go z plikukey.pl
(aby uniknąć mijania się z sekwencjami ucieczki powłoki)echo -n q|perl -p key.pl
.Nadużywanie funkcji zakresu wyrażeń regularnych jest zabawne.
źródło
echo
do precyzyjnego sterowania wejściem - np.echo -n q|perl -n key.pl
, który poprawnie produkuje2
.chomp
wkładasz danych.chomp
edytował dane wejściowe, nie byłbym w stanie zwrócić „3” dla klawisza powrotu.$_=~
zapałek,m//
(co/.../
jest) działa$_
automatycznie! Również, jeśli używasz-p
zamiast-n
, możesz użyć$_=
zamiastprint
zaoszczędzić kilka dodatkowych bajtów. Użycie dosłownego nowego wiersza zamiast\n
może również zaoszczędzić kolejny bajt! To powinno znacznie zredukować twój kod! Warto też dodać przykładowe użycie, aby każdy testujący wiedział, że musisz użyćecho -n
:)PHP, 173 bajtów
Pomysł polegał na wykorzystaniu numeru grupy przechwytywania wyrażeń regularnych jako indeksu wiersza. Prawdopodobnie jeszcze więcej optymalizacji samego wyrażenia regularnego.
preg_match()
Wezwanie utworzy tablicę$m
zapałek, a gdybyśmy wydrukować, że to wyglądać mniej więcej tak (zakładającz
było wejście):Odwrócenie tej tablicy, poprzez zamianę klawiszy i wartości, przesuwa się od lewej do prawej i zachowuje tylko ostatni wyraźny klucz, więc otrzymujemy:
Następnie używamy znaku wejściowego jako indeksu w tablicy, aby uzyskać nasz wynik.
Wypróbuj tutaj .
źródło
C,
145 143 136 132 127106 bajtówTo używaZakłada się, że ASCII i 32-bitowe int.index()
z POSIX.1-2001 i jest przestarzałe w POSIX.1-2008.źródło
Python 3, 89 bajtów
Ponieważ nie mogę jeszcze komentować, ulepszenie dla bieżącej odpowiedzi w języku Python 3 publikuję osobno.
Edycja : Cały kod jest
print
teraz i dalej poprawiany.źródło
Rubin , 82 bajty
Wypróbuj online!
źródło
CJam, 125 bajtów
Wyjaśnienie
źródło
SpecBAS - 178 bajtów
Użyłem długiego łańcucha, w którym każdy wiersz ma 26 znaków (nr 34 to kod podwójnego cudzysłowu, a nr 13 to kod powrotu).
Następnie wydrukuj wynik zaokrąglenia pozycji / 26.
źródło
C # 6, 201 bajtów
Nic specjalnego. Okazało się, że tańsze jest pisanie obu przypadków zamiast używania ToUpper () ze względu na stałą szerokość łańcucha.
Zębaty:
źródło
Python 2, 146 bajtów
źródło
Excel, 132 bajty
=INT((FIND(A1,"`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:""aaa zxcvbnm,./ZXCVBNM<>?zzzzzz ")-1)/26)+1
Próby wykorzystania przypadek w wrażliwych
SEARCH()
zamiastFIND()
ujawniła, że Excel mecze~
,*
a?
do(tick). The matching of
?means we can't use
SEARCH () `, który ogoliłby masywne 5 bajtów ...źródło