Pojęcie
Zapamiętywanie liczb może być trudne. Zapamiętywanie słowa może być łatwiejsze. Aby zapamiętać duże liczby, stworzyłem sposób ich wymawiania w sposób przypominający leetspeak.
Zasady
Każda cyfra jest najpierw zastępowana odpowiednią literą:
0 => O
1 => I
2 => R
3 => E
4 => A
5 => S
6 => G
7 => T
8 => B
9 => P
Po zamianie wykonywane są dwie dodatkowe czynności w celu poprawy wymowy:
Pomiędzy dwiema spółgłoskami
U
dodaje się a.Pomiędzy dwiema samogłoskami
N
dodaje się a.
Przykłady / przypadki testowe
512431 => SIRANENI
834677081 => BENAGUTUTOBI
3141592 => ENINANISUPUR
1234567890 => IRENASUGUTUBUPO
6164817 => GIGABIT
Co jest niemożliwe
- Litery i cyfry mieszane w tym samym słowie
- Dwie kolejne spółgłoski lub dwie kolejne samogłoski
- Listy, których nie ma na powyższej liście
- Inne postaci
Zasady
Celem tego golfa jest stworzenie dwukierunkowego tłumacza tej koncepcji.
- Twój program musi najpierw zrozumieć sam, czy jest to tłumaczenie litery na cyfrę lub cyfrę na literę.
- Musi sprawdzić, czy wpis został poprawnie utworzony.
- Jeśli wszystko jest w porządku, wyświetl tłumaczenie.
- W przeciwnym razie wyświetl komunikat o błędzie, nic, zwróć wartość falsey lub awarii programu.
Detale
- Numer / ciąg wejściowy można wprowadzić w dowolnym formacie (standardowe, argument, ...)
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź.
- Standardowe luki są zabronione.
GIGATESTER
byćGIGATESUTER
?AB23
;AEI
;BB
;Z
;ACE
;giga
;!@#$
;-123
; itd. Ponadto, w oparciu o reguły sprawdzania poprawności, możemy przekonwertować6164735732 => GIGATESTER
, aleGIGATESTER
spowoduje to fałszywą wartość z powoduST
(dwóch kolejnych reguł spółgłosek). Sposób, w jaki obecnie konfigurujesz wyzwanie, jego główną częścią jest walidacja zamiast konwersji. Nie przeszkadza mi to, ale w takim przypadku walidację należy zdefiniować nieco lepiej.Odpowiedzi:
JavaScript (ES6), 130 bajtów
Pobiera dane wejściowe jako ciąg znaków na oba sposoby tłumaczenia. Zwraca tłumaczenie jako ciąg znaków lub
false
w przypadku nieprawidłowego wprowadzenia.Próbny
Pokaż fragment kodu
źródło
Japt ,
6159928584 bajtówPobiera dane wejściowe jako ciąg znaków dla obu operacji i zwraca ciąg znaków zarówno dla, jak i
false
dla danych wejściowych niepoprawnych. Sumy liczbowe zawsze będą zawierać wiele cyfr, dodaj 1 bajt, zastępującUÉ
je,Un<space>
jeśli to nie jest poprawne. Zwracafalse
przypadek testowy,GIGATESTER
ale zgodnie z regułami, powinno to być nieprawidłowe wejście.Spróbuj: Liczby -> Litery lub Litery -> Liczby
24 bajty zaoszczędzone dzięki obarakonowi , który również przekonał mnie do wzięcia tego ponownie po tym, jak wcześniej go porzuciłem. Chciałbym, żeby tego nie zrobił!332625 (!) Bajtów poświęcono na wdrożenie szybkiej poprawki (tj. Jeszcze do pełnej gry w golfa), aby sprawdzić poprawność danych wejściowych.Wyjaśnienie
(Jeszcze do aktualizacji do najnowszej wersji)
źródło
AEI
Python 3 , 147 bajtów
Wypróbuj online!
źródło
Java (OpenJDK 8) ,
416410399382376370 bajtów-2 bajty dzięki @Cyoce
-17 dodatkowych bajtów dzięki pomysłowi @Cyoce
-6 bajtów dzięki @KevinCruijssen
Wypróbuj online!
Ugh, zastąpienie Java jest takie pełne.
Funkcja, która pobiera ciąg znaków i zwraca ciąg przetłumaczony z liczby -> litera lub odwrotnie. Występuje awaria przy nieprawidłowym wprowadzeniu (można to zobaczyć w przykładzie tio, w którym wyświetla prawidłowe wartości dla pierwszych 10 przypadków testowych, a następnie ulega awarii z błędem dzielenia przez zero, który jest wyświetlany w widoku debugowania)
Ungolfed (pierwszy i ostatni termin pętli for są wyciągane dla zapewnienia czytelności)
Wyrażenie regularne dla dopasowania liczb jest proste, ale oto regex dla dopasowania liter do cyfr
źródło
(s)->
if
instrukcji są przypisaniami (które zwracają wartość), spróbuj zastąpićif
...else if
...else
operatorem warunkowym?:
, zastępując go,Object _=
aby stała się poprawną instrukcją. Nie jestem pewien, czy to rzeczywiście pomogłoby w liczeniu bajtów, ale myślę, że tak.t
, ponieważ używasz go tylko raz. Takt.charAt(i)+""
staje się"OIREASGTBP".charAt(i)+""
( -4 bajty ). I możesz umieścić ostatni wiersz w pętli for poi<9;
deklaracji for-loop. Więc staje sięfor(;i<9;s=b?s.replace(v,c):s.replace(c,v)){
( -1 bajt ). Aha, i możesz umieścić to,s=b?...
co pojawia się zaraz point i=-1;
wewnętrznej pętli for:for(s=b?...;i<9;...
( -1 bajt ).PHP;
129 127 267 259228 bajtówUruchom jako potok z
-nR
lub spróbuj online .awaria
źródło
Java 8,
312308304301294290 bajtów-4 bajty (308 → 304) na naprawę błędu (nie zdarza się często, że liczba bajtów zmniejsza się, gdy naprawiam błąd w moim kodzie ..: D)
EDYCJA: Używa innego podejścia niż odpowiedź Java @ PunPun1000 najpierw tworząc ciąg znaków return w pętli for nad znakami, a następnie używa bardziej abstrakcyjnego wyrażenia regularnego do sprawdzenia poprawności w trójce zwrotnej (dane wejściowe to albo wszystkie cyfry, lub podane są samogłoski i spółgłosek na przemian (więc bez sąsiadujących samogłosek i spółgłosek).
Wyjaśnienie:
Wypróbuj tutaj.
Wyrażenie regularne sprawdzania poprawności:
źródło
05AB1E , 76 bajtów
Wypróbuj online!
Zwraca wartość fałszowania
0
dla nieprawidłowych danych wejściowych.źródło
Grzmotnąć ,
241 238235 bajtówWypróbuj online!
Mniej golfa:
źródło
PHP, 268 bajtów
Wypróbuj online!
źródło
Perl, 127 bajtów
126 bajtów + 1 bajt wiersza poleceń
Stosowanie:
Powinny być zgodne ze wszystkimi regułami wyzwania - mogą przyjmować litery lub cyfry i będą błędne (dzielenie przez zero), jeśli walidacja się nie powiedzie
źródło
NO
iUS
.Rubin , 205 + 1 = 206 bajtów
Używa
-p
flagi dla bajtu +1. Teraz z wyczerpującym systemem sprawdzania poprawności danych wejściowych.Wypróbuj online!
źródło
Python 3, 741 bajtów
Wypróbuj online!
Wiem, że jest dużo miejsca na ulepszenia.
źródło
sed, 123 bajty
Wyjaśnienie
Po pierwsze, otaczamy cyfry
_
(dla samogłosek) lub=
(dla spółgłosek).Jeśli nie dokonaliśmy żadnych podstawień, konwertujemy litery na cyfry, więc jest to proste zastąpienie, a także usuwanie
U
iN
. Potem wyjdź.W przeciwnym razie rozgałęziamy się do etykiety
a
, gdzie mamy do czynienia z kolejnymi samogłoskami, a następnie kolejnymi spółgłosek. Następnie zamień cyfry na litery i usuń znaki znaczników, które wprowadziliśmy w pierwszym kroku.źródło
Python3, 246 bajtów
wyjaśnienie:
dictoraz element bieżącyDICTkrotka jest stół prawda opiera się na dwóch elementach, będąc samogłoskę lub nieźródło
JavaScript (ES6), 120
Funkcja przyjmująca dane wejściowe jako ciąg. Zwraca poprawnie przetłumaczony ciąg, jeśli dane wejściowe są prawidłowe, w przeciwnym razie false lub funkcja ulega awarii.
Mniej golfa
Test
źródło