(zainspirowany tym postem na łamigłówkach. PRZESTROGA: SPOILERY DLA TEJ PUZZLE SĄ PONIŻEJ).
Standardowa klawiatura telefoniczna koreluje litery z cyframi w następujący sposób:
1 ->
2 -> ABC
3 -> DEF
4 -> GHI
5 -> JKL
6 -> MNO
7 -> PQRS
8 -> TUV
9 -> WXYZ
0 ->
Dane słowo wejściowe jest definiowane jako Słowo Uporządkowane, jeśli po przetłumaczeniu na naciśnięcia klawiatury za pomocą powyższego, wynikowa liczba nie zmniejsza się lub nie rośnie. Innymi słowy, wynikowa liczba nie może zarówno zwiększać, jak i zmniejszać.
Na przykład słowo to CAT
tłumaczy się na słowo 228
, które nie maleje, a zatem Słowo uporządkowane. Jednak słowo DOG
to 364
, które zarówno wzrasta, jak i maleje, a zatem nie jest Słowem uporządkowanym.
Wyzwanie
Biorąc pod uwagę słowo, wypisz, czy jest to Uporządkowane, czy nie.
Wkład
- Słowo (niekoniecznie słowo słownikowe) składające się wyłącznie z alfabetu ASCII (
[A-Z]
lub[a-z]
), w dowolnym odpowiednim formacie . - Twój wybór, jeśli dane wejściowe są pisane wielkimi lub małymi literami, ale muszą być spójne.
- Słowo będzie miało co najmniej 3 znaki.
Wydajność
Spójne truthy / falsey wart, czy słowo wejściowe jest zamawiany (truthy) lub nie zamówione (falsey).
Zasady
- Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je wydrukować.
- Jeśli to możliwe, dołącz link do internetowego środowiska testowego, aby inni mogli wypróbować Twój kod!
- Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
Przykłady
Oto kilka uporządkowanych słów (tzn. Prawdomównych), a więcej na temat powiązanych łamigłówek.
CAT
TAC
AAA
DEMONS
SKID
LKJONMSRQP
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Oto kilka słów nieuporządkowanych (np. Falsey)
DOG
GOD
ROSE
COFFEE
JKLMNOGHI
abc->t9
tym wyzwaniem jest sprawdzenie monotoniczności?abc->t9
.AAA
Odpowiedzi:
Python 2 ,
16414813277 bajtów-16 bajtów dzięki sugestii Roda w innym miejscu . Cholera - 55 bajtów dzięki Arnoldowi Palmerowi.
Wypróbuj online!
Dane wejściowe muszą być pisane wielkimi literami. Wyjścia
True
lubFalse
na podstawie ich uporządkowania.Wyjaśnienie
Pierwszy wiersz odwzorowuje każdą literę na liczbę.
Działa to w oparciu o:
* Wartości są zaokrąglone. : P
Drugi wiersz jest wyprowadzany, jeśli lista liczb jest w porządku rosnącym lub malejącym.
źródło
JavaScript (ES6),
83 ... 7170 bajtówZwraca wartość logiczną.
Przypadki testowe
Pokaż fragment kodu
W jaki sposób?
Konwersja liter
Używamy
parseInt(c, 35)
do konwersji każdej litery ciągu wejściowego na pewną liczbę w [ 10 .. 34 ]. Ponieważ jest to base-35, zamiast tego konwertowane jest „Z”NaN
.Wyrażenie
* .32 | 0
odwzorowuje tę liczbę na przedział [ 3 .. 10 ], prowadząc do 8 poprawnych grup liter dla „A” do „Y” . Musimy|| 10
uzyskać prawidłową wartość dla „Z” .Zamów test
Śledzimy oznaki różnic między kolejnymi liczbami w masce bitów v , początkowo ustawionej na 3 (0b11):
Poprzednia wartość jest przechowywana w tej samej zmiennej x co dane wejściowe. Zapewnia to, że pierwsza iteracja - tam, gdzie faktycznie nie istnieje żadna poprzednia wartość - nie zostanie skasowana, ponieważ łańcuch zawierający tylko litery nie jest ani większy, ani mniejszy niż dowolna liczba:
Słowo jest uporządkowane, chyba że napotkane zostaną oba znaki, co prowadzi do v = 0 i powoduje
every()
błąd.źródło
Galaretka ,
28, 27, 25, 23, 22, 21, 19,18 bajtówWypróbuj online!
Pisanie to była świetna zabawa!
Wyjaśnienie:
Dzięki @ErikTheOutgolfer, @leakynun i @BusinessCat za wszystkie zapisane bajty. :)
źródło
05AB1E , 36 bajtów
Wypróbuj online!
źródło
.•1нJ©½è`ÇHø¹á₂N¸°…ÈáÀ•#
przezA•22ā₂•S£
.MATL ,
2625 bajtówWprowadzanie odbywa się dużymi literami. Dane wyjściowe to
1
lub0
.Wypróbuj online!
Wyjaśnienie
źródło
Łuska ,
22 21 1918 bajtówZwraca
1
za prawdziwe dane,0
za fałszywe. Dane wejściowe muszą być pisane wielkimi literami. Przechodzi wszystkie przypadki testowe. Wypróbuj online!Wyjaśnienie
źródło
Python 2 , 60 bajtów
Wypróbuj online!
Akceptuje wprowadzanie małymi literami.
Jak to działa
⌊3681 / x ⌋ maleje od
a
;c
id
;f
ig
;i
ij
;l
im
;o
ip
;s
it
;v
iw
;z
.źródło
C ++,
375199195194 bajtówDzięki odpowiedzi Shaggy na JavaScript:
-5 bajtów dzięki Zacharýmu
źródło
int j=1,i=0,d=0
do pętli for?i
id
są używane poza blokiem pętli, nie mogęi==0||d==0
==>i*d==0
.!(i*d)
zadziała? (usunięcie spacji poreturn
)05AB1E , 30 bajtów
Wypróbuj online!
-1 dzięki Magic Octopus Urn .
źródło
¥0K0.SË
ponieważ¥0‹Ë
nie jest poprawny? Nie wiem, czy0.S
jest to potrzebne.¥0K0‹Ë
wydaje się działać.Siatkówka , 65 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Zmień pierwszą literę na każdym przycisku na cyfrę. (Jest to wyłączone o 1, ale to nie ma znaczenia dla czeku rosnącego / malejącego. Z drugiej strony, zera utrudniłyby mi życie, więc zostawiłem jeden znak wypełniający.)
Przetasuj wszystkie pozostałe litery w górę o 1 i powtarzaj, aż wszystkie zostaną zamienione na cyfry.
Konwertuj cyfry na jednoargumentowe, ale tylko raz na ciąg identycznych cyfr. Jednostkowe wartości są oddzielone
<
...... ale jeśli LHS okaże się większy niż RHS, popraw
<
to>
.Usuń te,
1
które nie są już potrzebne.Sprawdź, czy słowo jest uporządkowane. (Końcowy znak
>
pochodzi od ostatniej cyfry, która zawsze porównuje większą niż pusta spacja po nim).źródło
Pyth , 23 bajty
Jedna z moich pierwszych nietrywialnych odpowiedzi na Pythona! Zaoszczędź 6 bajtów dzięki @LeakyNun. Wstępne rozwiązanie znajduje się poniżej.
Pakiet testowy.
Pyth , 29 bajtów
Pakiet testowy.
Wyjaśnienie
źródło
05AB1E ,
2117 bajtówKod
Wykorzystuje kodowanie 05AB1E .
Wypróbuj online! lub Zweryfikuj wszystkie przypadki testowe!
Wyjaśnienie
Teraz zasadniczo mapuje następujące litery na następujące liczby:
źródło
JavaScript (ES6),
1079795928885 bajtówDziała z ciągami o małych i wielkich literach. Zwraca
1
za prawdę lub0
falsey.Spróbuj
źródło
Math.min((parseInt(c,36)-3)/3.13|0,9)
zamiast tego,"2..9"[parseInt(c,36)-10]
aby zaoszczędzić trochę bajtówAAA
.Gaia ,
29272517 bajtówWypróbuj online!
Wyjaśnienie
źródło
05AB1E , 13 bajtów
Ilekroć widzę pytanie na klawiaturze numerycznej, muszę odpowiedzieć na podstawie pi.
Wypróbuj online lub sprawdź wszystkie przypadki testowe
źródło
Galaretka , 32 bajty
Wypróbuj online!
źródło
32222323
więc oszczędza tylko 2 bajty.C # (.NET Core) , 133 bajty
Wypróbuj online!
Wydaje mi się, że jest miejsce na oszczędzanie, ale C # nie jest zwięzłym językiem, więc może nie. Nie golfowany:
W szczególności myślę, że istnieje krótszy sposób na wyrażenie ostatecznej kontroli ważności, być może sposób na powiązanie go z
Zip
. Znalezienie sposobu wyrażeniaZip
bez potrzeby tymczasowego przechowywaniaSkip
również by coś uratowało, ale wątpię, żeby było coś bardziej zwięzłego.źródło
Python 3 ,
143147148149130 bajtówNa razie mogę to zrobić najlepiej. Funkcja surowa zamienia literę w liczbę opartą na kodzie ascii. Z pewnością należy wprowadzić pewne ulepszenia. 0 to prawda, 1 to falsey (przepraszam). Zaoszczędź 10 bajtów dzięki Rodowi, kolejne 3 dzięki Mr. Xcoder.
Wypróbuj online!
źródło
x=[f(a)-f(b)for a,b in zip(s,s[1:])]
aby zaoszczędzić trochę bajtówmin(int((ord(c)-58)/3.13),9)
jest krótszy sposobem konwersji charPython 2 ,
111103 bajtów-8 bajtów dzięki @Arnold Palmer: nie jest
lower()
potrzebnyWypróbuj online!
źródło
.lower()
ponieważ dane wejściowe mogą być w każdym określonym przez Ciebie przypadku.PHP 7,
98 + 1 95 + 184 + 1 bajtówport golfowy odpowiedzi Arnaulda .
akceptuje wielkie litery; puste wyjście dla fałszu,
1
dla prawdy.Uruchom jako potok z
-nR
lub spróbuj online .oryginalny post:
źródło
CJam,
37313027 bajtówWypróbuj online
Oczywiście brzydka wersja jest krótsza ...
źródło
C (gcc) ,
183 169 153117 bajtówWypróbuj online!
Stare rozwiązanie:
Zaoszczędź 8 bajtów dzięki ThePirateBay.
Stare stare rozwiązanie:
Stare stare stare rozwiązanie:
źródło
TI-Basic,
9266 bajtówKonwertuje każdy znak w ciągu na liczbę całkowitą od 0 do 7 i przyjmuje różnicę między każdym kolejnym elementem; następnie sprawdza, czy minimalne i maksymalne różnice mają ten sam znak (lub jedno z nich to 0).
źródło
ΔList(int(4^-1seq(inString("DEF GHI JKL MNO PQRSTUV WXYZ",sub(Ans,I,1))+3,I,1,length(Ans
oszczędza jeden bajt.Zsh ,
73 6957 bajtów-12 bajtów przy użyciu
3681/code
konwersji @ anders-kaseorg .Wypróbuj online! Wypróbuj online!Wypróbuj online!Kilka rzeczy, których nadużywamy:
((statement,statement,...))
jest sekwencją wyrażeń arytmetycznych, która zwraca prawdę, jeśli ostatnia instrukcja jest niezerowa.tylko jedna parabez nawiasów były używane. Jeden bajt mógłby zostać zapisany, gdyby był!
związany mniej ściśle niż&
.0
arytmetycznych.Funkcja, której używamy do mapowania na numer klawiatury toponieważ potrzebujemy tylko zmiany między kodami, nie wykonujemy liniowej regulacji.CODE / 3.2 - 18
(ze specjalnym przypadkiemZ
), aleMożna zapisać 2 bajty, jeśli można zamienić wartości true / falsey.
źródło