Podczas pisania liczb zauważyłem po chwili, że moja klawiatura ma Shift wciśnięty i zablokowany klawisz, a wszystko, co napisałem, było jak $%&
znaki. Co gorsza, przełączałem się między układami klawiatury angielskiej i hiszpańskiej, więc nie wiem, którego użyłem dla każdego numeru.
Wyzwanie
Biorąc pod uwagę ciąg znaków zawierający znaki symboliczne, spróbuj zgadnąć, który numer napisałem. Po Shiftnaciśnięciu moja klawiatura wyświetla następujące cyfry dla liczb :
1234567890
----------
!"·$%&/()= Spanish layout
!@#$%^&*() English layout
- Dane wejściowe będą niepustym, niepustym łańcuchem złożonym z powyższych symboli.
- Wynik będzie liczbą pojedynczą, jeśli układ klawiatury można wywnioskować z ciągu (tj. Jeśli ciąg zawiera
@
układ w języku angielskim, a jeśli ciąg zawiera układ"
w języku hiszpańskim) lub jeśli liczba jest taka sama dla oba układy (tzn. dane wejściowe są!$
tłumaczone jak14
dla obu układów); w przeciwnym razie dane wyjściowe będą dwiema możliwymi liczbami dla obu układów, jeśli nie będzie można ich wywnioskować, a uzyskane liczby będą różne. - Ciąg wejściowy będzie zawsze zapisywany w jednym układzie. Więc nie musisz oczekiwać
"@
jako danych wejściowych.
Przykłady
Input --> Output
------------------
/() 789 (Spanish layout detected by the use of /)
$%& 456,457 (Layout cannot be inferred)
!@# 123 (English layout detected by the use of @ and #)
()&! 8961,9071 (Layout cannot be inferred)
((·)) 88399 (Spanish layout detected by the use of ·)
!$ 14 (Layout cannot be inferred but the result is the same for both)
!!$$%% 114455 (Layout cannot be inferred but the result is the same for both)
==$" 0042/42 (Spanish layout, if a number starts with 0 you can choose to
omit them in the result or not)
Single character translations:
------------------------------
! 1
" 2
· 3
$ 4
% 5
& 6,7
/ 7
( 8,9
) 9,0
= 0
@ 2
# 3
^ 6
* 8
To jest kod-golf , więc może wygrać najkrótszy kod dla każdego języka!
·
to trudne ...·
jest bezużyteczny dla hiszpańskiego, jest używany tylko w języku katalońskim.{(8, 9, 6, 1), (9, 0, 7, 1)}
(dla 4. przypadku testowego) są dopuszczalne?Odpowiedzi:
Galaretka ,
3231 bajtówWypróbuj online!
źródło
Python 3 , 76 bajtów
Wypróbuj online!
źródło
Perl 6 , 62 bajtów
Wypróbuj online!
Zwraca zestaw. (Można by zrobić dwa lub trzy bajty krótsze, gdyby nie było błędu w obsłudze Rakudo # na listach wyszukiwania.)
źródło
Java (JDK) , 173 bajtów
Grał w golfa
Wypróbuj online!
Nie golfił
Tablica wyszukiwania Magic Hashing
Po kilku eksperymentach z wartościami zdałem sobie sprawę, że każda z wartości ASCII znaków
!"·$%&/()=@#^*
modulo 16 zwraca unikalny numer. Te „magiczne mieszania lookup array” przechowuje numery angielskie związane z każdego znaku w tym unikatowy indeks, a każdy z numerów hiszpańskich w tym indeksie przesunięte o 16, co ściągam wymaganą liczbę z tablicy trywialne dla każdego języka. Hash jest przechowywany dla wartości, które są nieprawidłowe dla dowolnego języka.źródło
toCharArray()
i obliczenie wykładnika, który ma być zastosowany do wartości int, spowodowało, że była ona znacznie dłuższa niż obie.contains()
instrukcje.s.equals(e)|s.contains("#")
może byćs.matches(e+"|.*#.*")
.Japt, 38 bajtów
Najpierw wyprowadza tablicę ciągów z hiszpańskim układem.
Spróbuj
źródło
Galaretka , 38 bajtów
Wypróbuj online!
źródło
()
lub(())
jako dane wejściowe, ale twój kod nic nie zwraca. Przypuszczam, że to ograniczenie w tym, co Jelly otrzymuje jako wkład?'()'
i'(())'
. Tak, jeśli nie zacytujesz argumentu, zostanie on wprowadzony jako ciąg znaków tylko wtedy, gdy nie będzie można goeval
dopasować do wartości Python 3.Retina 0.8.2 , 60 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Zduplikuj dane wejściowe.
Spróbuj przetłumaczyć każdą linię zgodnie z innym układem klawiatury.
Deduplikuj wynik.
Zachowaj tylko wiersze zawierające tylko cyfry.
źródło
m
ostatnim etapie?JavaScript (ES6), 99 bajtów
Wypróbuj online!
W jaki sposób?
Funkcja pomocnikasol próbuje przekonwertować ciąg wejściowy przy użyciu danego układu.
Nieprawidłowe znaki są zastępowane przez- 1 , co powoduje albo prawidłowy, ale negatywnie wyglądający ciąg liczbowy (jeśli brakuje tylko pierwszego znaku), lub nieprawidłowy ciąg liczbowy. Tak czy inaczej, test
x >= 0
jest fałszywy.źródło
05AB1E ,
4241 bajtówPort @dylnan 's Jelly .
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (sekcja Jak skompresować listy liczb całkowitych? ), Aby zrozumieć, dlaczego tak
•Hhç₁d©u÷^Σ(“ðΣèõĆ\n-•184в
jest[33,34,183,36,37,38,47,40,41,61,33,64,35,36,37,94,38,42,40,41]
). Ten (wraz z2ä
) jest krótszy niż 1 bajt przyjmując wartości Unicode ciągu:'""!ÿ·$%&/()=""!@#$%^&*()"‚Ç
.źródło
!$
I!!$$%%
przypadki powinny wyjście tylko jeden numer jako wynik jest taki sam dla obu układów i nie ma dwuznaczności.Rubinowy , 68 bajtów
Wypróbuj online!
źródło
Czysty , 116 bajtów
Wypróbuj online!
Pobiera dane wejściowe i jest zakodowany w CP437. TIO obsługuje tylko UTF-8, więc w kodzie demonstracyjnym zastosowano znak ucieczki, aby uzyskać literalną wartość bajtu 250 odpowiadającą środkowej kropce (liczonej jako jeden bajt).
źródło
!$%
wejściowe powinny wypisywać tylko jedną liczbę, a nie dwie, ponieważ wynik jest taki sam dla obu układów.APL (Dyalog) , 40 bajtów
Anonimowa ukryta funkcja prefiksu. Chociaż nieużywany,
·
znajduje się w jednobajtowym zestawie znaków Dyalog . Zakłada indeksowanie oparte na 0 (⎕IO←0
), które jest domyślne w wielu systemach.Wypróbuj online!
⊂
cały argument'=!"·$%&/()' ')!@#$%^&*('⍳¨
indeksy znaków w każdym z tych ciągów{∪⍵/⍨~10∊¨⍵}
zastosuj następującą lambda (⍵
jest argumentem):10∊¨⍵
dla każdej listy cyfr, czy 10 (oznaczające „nie znaleziono”) jest jej członkiem~
lokalna negacja (tj. tylko te, w których znajdują się wszystkie cyfry)⍵/⍨
odfiltruj argument przez to∪
znaleźć unikalne elementy tegoźródło
Dart , 125 bajtów
Nie golfowany:
Wypróbuj na Dartpad!
źródło
T-SQL, 143 bajty
Dane wejściowe są pobierane za pośrednictwem istniejącej tabeli i z polem varchar v , zgodnie z naszymi standardami we / wy .
Łączy tabelę wprowadzania z dwoma różnymi ciągami znaków, a następnie używa nowej funkcji SQL 2017
TRANSLATE
do zamiany pojedynczych znaków iTRY_CAST
sprawdzenia, czy otrzymamy liczbę. Jeśli nie,TRY_CAST
zwracaNULL
.Ostateczny zewnętrzny
SELECT DISTINCT
łączy identyczne wyniki i odfiltrowujeNULLS
.źródło