Mamy kilku nowych moderatorów szeryfa w mieście, Mego i DJMcMayhem . Potrzebujemy wyzwania, aby odpowiednio uhonorować ich za nowe stanowiska, więc proszę bardzo.
Oto coś, co przykuło moją uwagę podczas najechania kursorem na ich profile - ich identyfikatory użytkowników to i . Jeśli odejmiesz cyfrowo, zauważysz coś bardzo ekscytującego (oczywiście biorąc absolutne różnice):45941
3|1|7|1|6
4|5|9|4|1
-+-+-+-+- (-)
1|4|2|3|5
Liczba wygenerowana przez powyższy algorytm wynosi . Jest coś wyjątkowego w tej liczbie całkowitej: składa się tylko z następujących po sobie cyfr, posortowanych w porządku rosnącym, ale dokładnie jedna z cyfr nie jest poprawnie umieszczona - .4
Będziemy nazywać parę liczb całkowitych dodatnich para DJMcMego jeżeli różnice bezwzględne cyfra mądry są kolejnymi liczbami całkowitymi, sortowane w porządku rosnącym, ale dokładnie jeden z nich nie jest miejsce, gdzie należy. Oznacza to, że możliwe jest przeniesienie dokładnie jednej cyfry wyniku cyfrowego odejmowania do innej pozycji, tak że uzyskana liczba całkowita ma tylko kolejne cyfry, posortowane w porządku rosnącym.
W naszym powyższym przykładzie para jest parą DJMcMego , ponieważ jeśli zostanie przesunięte między a , wynik to , który spełnia kryteria. Zauważ, że cyfry wynikowej liczby nie muszą zaczynać się od , powinny być po prostu kolejne. Kiedy jeden nie jest pewien, jaką decyzję powinien podjąć, zawsze może polegać na pomocy drugiej strony, aby rozwiązać problem.4 3 5 12345 1
Twoim zadaniem jest wyprowadzenie wartości prawda / fałsz w zależności od tego, czy para liczb całkowitych dodatnich podana jako dane wejściowe jest parą DJMcMego.
Masz gwarancję, że i będą miały taką samą liczbę cyfr, zawsze co najmniej 4.b
Możesz wziąć liczby całkowite w dowolnym rozsądnym formacie (tj. Natywne liczby całkowite, ciągi znaków, listy cyfr itp.)
Możesz konkurować w dowolnym języku programowania i możesz przyjmować dane wejściowe i generować dane wyjściowe za pomocą dowolnej standardowej metody , zwracając uwagę, że te luki są domyślnie zabronione. To jest golf golfowy , więc wygrywa najkrótsze przesłanie (w bajtach) dla każdego języka .
Przypadki testowe
a, b -> Output
31716, 45941 -> Truthy
12354, 11111 -> Truthy
56798, 22222 -> Truthy
23564, 11111 -> Truthy
1759, 2435 -> Truthy
12345, 11111 -> Falsy
3333, 2101 -> Falsy
22354, 22222 -> Falsy
31717, 45941 -> Falsy
14325, 11111 -> Falsy
89789, 78865 -> Falsy
14954, 61713 -> Falsy
25631, 11114 -> Falsy
Lub w innym formacie .
źródło
25631, 11114
jako przykład. Różnice wprowadzają w błąd14523
kilka obecnych programówOdpowiedzi:
05AB1E , 18 bajtów
Wypróbuj online!
źródło
1
jest jedyną prawdziwą liczbą w 05AB1E; Gdyby pan Xcoder nie poinformował mnie o tym fakcie, zakwestionowałbym ważność tego rozwiązania. Czy możesz również dodać wyjaśnienie, gdy masz czas?C (gcc) ,
259258254253250248233 bajtówfor(...;l++)b*=B[l]==-~B[l-1];
w golfafor(...;b*=B[l]==-~B[~-l++]);
(najprawdopodobniej polegając na niezdefiniowanym zachowaniu, ponieważ wymaga to najpierw oceny,B[l]
a następnie-~B[~-l++]
).trzypięć bajtów.Wypróbuj online!
Objaśnienie (wersja 248 bajtów)
Wypróbuj online!
źródło
j=0
jak w 41 znakuj
wartości,0
która niekoniecznie ma miejsce po kilku rozmowach. Funkcja powinna jednak być dowolnie często wywoływana i nadal rozwiązywać wyzwanie ( odpowiedni meta post ).j
jako zero przed pętlą, a tym samym zaoszczędzić bajt.f(char*A,char*B){
->f(A,B)char*A,*B;{
.JavaScript (ES6), 130 bajtów
Pobiera dane wejściowe jako dwie tablice cyfr w składni curry
(a)(b)
. Zwraca wartość logiczną.Wypróbuj online!
źródło
SWI-Prolog, 157 bajtów
Nie bardzo krótki, ale problem wydawał się szczególnie odpowiedni dla deklaratywnych predykatów, zmiennych wiązania i rekurencji, tj. Prolog :)
Zadzwoń, np.
n([3,1,7,1,6],[4,5,9,4,1]).
Objaśnienie: przenieś element z obu list do nowej pozycji (za pomocą
nth0
wbudowanego programu SWI-Prolog ) i sprawdź, czy różnica między nowymi listami jest następująca po sobie.źródło
J , 27 bajtów
−8 bajtów dzięki FrownyFrog
Wypróbuj online!
Wstępne rozwiązanie:
J , 35 bajtów
Wypróbuj online!
Wyjaśnienie
Pobiera na wejściu listy cyfr
|@-
znajduje bezwzględną różnicę między cyframi list1=1#.0<2-/\]
Sprawdza, czy tylko jedna cyfra jest na swoim miejscu. Najpierw znajduję różnice między wszystkimi parami sąsiadujących cyfr i sprawdzam, czy tylko jedna z nich jest dodatnia.*
Pomnóż wynik z powyższego testu (1 lub 0) przez następujący test:1=[:*/2-/\\:~
Czy wszystkie cyfry są następujące po sobie? Sortuję listę, biorę różnice dla wszystkich par sąsiednich cyfr, mnożę je i sprawdzam, czy jest równa 1źródło
25634 11111
(podobnie jak wiele innych zgłoszeń)Galaretka , 14 bajtów
Wypróbuj online!
Jak to działa
źródło
Japt , 18 bajtów
Pobiera dane wejściowe jako 2-cyfrowe tablice, wyjścia
0
dlatrue
lub dowolną inną liczbę dlafalse
.Wypróbuj lub sprawdź wszystkie przypadki testowe
Wyjaśnienie
Aby przejść przez ten proces w kilku kolejnych przypadkach testowych:
źródło
25634 11111
(podobnie jak wiele innych zgłoszeń)Perl,
121118 bajtówTest w bash:
źródło
25634 11111
(podobnie jak wiele innych zgłoszeń)Java 8 ,
245227223194188 bajtówDzięki Kevinowi za oszczędność ~ 29 bajtów
Jeszcze raz dziękuję Kevinowi za kolejne 6 bajtów
Postępował zgodnie z tym samym wzorem, co Galen wymyślił dla swojej odpowiedzi J.
Wypróbuj online!
źródło
z->{int l=z.length/2,c[]=new int[l],i=0,j=0,d[];for(;i<l;)c[i]=Math.abs(z[i]-z[i+++l]);java.util.Arrays.sort(d=c.clone());for(i=0;i<l-1;j+=d[i+1]-d[i++]!=1?1:0)j+=c[i]-c[i+1]>0?1:0;return j==1;}
połączyłemint
iint[]
na początku; użytel=z.length/2
raz i ponownie użyćl
zamiast 4 razy; zmieniono na,if(...)j++
abyj+=...?1:0
można je było umieścić w pętlach, a nawiasy i drugi średnik można usunąć; usuniętoi++
i wykonaj++
bezpośrednio na ostatnieji
w pętli; itd.z->{int l=z.length/2,c[]=new int[l],i=0,j=0;for(;i<l;)c[i]=Math.abs(z[i]-z[i+++l]);java.util.Arrays.sort(z=c.clone());for(i=0;i<l-1;j+=z[i]-z[i-1]!=1?1:0)j+=c[i]-c[++i]>0?1:0;return j==1;}
. Usuniętod[]
i ponownie wykorzystanoz
niepotrzebne dane wejściowe ; Zmienionoj+=c[i]-c[i+1]?1:0;
ij+=d[i+1]-d[i++]!=1?1:0
naj+=c[i]-c[++i]?1:0;
ij+=z[i]-z[i-1]?1:0
. +1 ode mnie. Niezła odpowiedź! :)25634 11111
(podobnie jak wiele innych zgłoszeń)Siatkówka , 102 bajty
Wypróbuj online! Link zawiera przypadki testowe. Zwraca liczbę sposobów, w jakie cyfry mogą być przenoszone, aby osiągnąć rosnącą sekwencję, która wynosi 2 dla prostej zamiany, ponieważ w takim przypadku jedną cyfrę można przesunąć obok drugiej. Wyjaśnienie:
Sparuj cyfry.
Konwertuj na unary.
Weź różnicę, ale dodaj 1, ponieważ praca z zerem w Retina jest trudna ™.
Wymień wszystkie sekwencje cyfr uzyskane po przesunięciu dokładnie jednej cyfry.
Sprawdź kolejne cyfry.
źródło
Perl 5 , -F
878483 bajtówLiczenie w starym stylu: 86 bajtów (
+3
dla-F
)Podaj cyfry jako 2 linie na STDIN, ostatniej linii bez końcowego nowego wiersza.
Drukuje łańcuch różnicowy do 2 razy dla wartości true, nic dla wartości false
Długi
A0123456789
sznurek jest naprawdę denerwujący.Wypróbuj online!
Jestem pewien, że to się
79
liczy:Awaria dla prawidłowej pary, więc otrzymujesz niezerowy kod wyjścia. Nie robi nic, jeśli nie jest parą i wychodzi z kodem wyjścia 0. Wiem, że zwracanie wyniku za pomocą kodu wyjścia jest dozwolone, ale czy są one odpowiednio prawdziwe i fałszywe, czy w rzeczywistości odwrócone (bo powłoka
0
jest prawdziwa)?źródło
Rubin ,
124 113 9995 bajtówWypróbuj online!
źródło
25634 11111
(podobnie jak wiele innych zgłoszeń)+1
:-)Pyt ,
2018 bajtówWypróbuj online!
Wyjaśnienie:
źródło
25634 11111
(podobnie jak wiele innych zgłoszeń)Dodaj ++ , 105 bajtów
Wypróbuj online!
Definiuje funkcję lambda, która przyjmuje dwie listy cyfr jako dane wejściowe. Zwraca dodatnią liczbę całkowitą podzielną przez 24 1 dla par DJMcMego, 0 w przeciwnym razie.
1: Jeśli jest to zbyt restrykcyjne, wyświetla również dodatnią liczbę całkowitą dla par DJMcMego, a 0 w przeciwnym razie
Jak to działa
Tutaj przeprowadzamy 4 kontrole, aby ustalić, czy dane wejściowe są prawidłowe. Części kodu, które wykonują te kontrole, to
Tutaj bierzemy listę różnic cyfr bezwzględnych, a następnie policzymy liczbę nakładających się par, które są sortowane w kolejności malejącej. Każda para DJMcMego daje wynik 1 , ale nie są one unikalne pod tym względem. Przechowujemy również bezwzględne różnice cyfr na wejściach, aby później zapisać bajty. Ta tablica będzie przez cały czas określana jako A.
Następnie bierzemy posortowane różnice między A i A , zanim stwierdzimy, że przynajmniej jedna z tych różnic jest ujemna.
Po trzecie, należy sprawdzić, czy para [1, 2] zawarty jest w przednich przyrostach . To sprawdza, czy co najmniej jedna pozycja A jest sortowana, co jest kryterium dla par DJMcMego.
Jako naszej ostatniej kontroli, możemy stwierdzić, że drugi element A nigdy nie jest 0 . Aby para X i Y była parą DJMcMego, możemy założyć, że ich A jest zawsze unikatowe, ponieważ tablicy z duplikatami nigdy nie można utworzyć kolejno, zamieniając jedną wartość z inną.
Na koniec sprawdzamy, czy pierwsze trzy z tych testów zwróciły 1 , a czwarty zwrócił wartość x taką, że x ≠ 0
Krok krok po kroku przez kod jest następujący
źródło
R ,
110 10684 bajtówWypróbuj online!
@JayCe z absurdalnym 22-bajtowym zapisaniem!
Oto koń roboczy
adist
, który daje „uogólnioną odległość edycji Levenshteina” między dwoma łańcuchami. Domyślnie odległość to liczba minimalnej liczby wstawek, usunięć i podstawień wymaganych do przekształcenia jednego łańcucha w inny. Aleadist
pozwala na ważenie rzeczy tak, jak lubisz - więc ważę każdą substytucję, aby dodać 9 do odległości, a nie 1. To skutecznie zmusza algorytm do wyszukiwania tylko wstawień i usunięć.Ten kod akceptuje wektory liczb całkowitych, oblicza bezwzględne różnice elementarne i tłumaczy wynik na 1, wywołując go
w
.Następnie obliczana jest niestandardowa ważona odległość Levenshteina między
w
wklejonymi razem, aby utworzyć ciąg znaków i ciąg"1234..."
(właściwie utf-8"\001\002\003\004...
", aleadist
to nie obchodzi.) Z taką samą liczbą znaków jakw
.Jedynym sposobem, w jaki ciąg może mieć dokładnie jedną cyfrę na miejscu, jest wykonanie jednego usunięcia i jednego wstawienia, co daje odległość 2.
źródło
paste0
może tak być,paste
ponieważ jest tylko jeden wkład.p=intToUtf8
?w=z-min(z)+1)adist(p(1:max(w))
zw=z-min(z))adist(p(0:max(w))
ale to nie działa, ponieważintToUtf8(\000)
jest NULL.JavaScript,
137136135134132123 bajtówPobiera dane wejściowe jako dwie tablice cyfr w składni curry, wyjścia
0
dlatrue
i dowolnej innej liczby dlafalse
.Przypadki testowe
źródło
[...u].sort(y=0)
jest niepoprawny javascript, argumentem dla sortowania musi być funkcja25634 11111
(podobnie jak wiele innych zgłoszeń)” - Ton HospelPython 2 ,
116119106 bajtówDziękuję Panu Xcoderowi za
116->84
cięcie, ale stwierdziłem, że przeoczyłem kryteria „kolejnej liczby”, więc w tym celu dodano 26 bajtów :(Potem jeszcze -1 podziękowań, panie Xcoder i -13 podziękowań
Wypróbuj online!
Ten poniżej naprawia
25634 - 11111
problem, ale z podwójną długością (211206145142B) ... Gra w golfa ...Wypróbuj online!
I gratulacje dla nowych moderatorów :)
Wyjaśnienie:
Generuje listę bezwzględnych różnic cyfr.
Oblicza przesunięcie z właściwej pozycji.
Jeśli sekwencja nie jest ciągła, wówczas suma przesunięcia „zwykle” nie będzie wynosić 0. Ale nawet jeśli jest równa 0, następne będą ją blokować.
Tylko 0 lub 1 element będzie miał przesunięcie bezwzględne większe niż 1 (ten z niewłaściwą pozycją, a 0 jest w przypadku jak
1,2,3,5,4
)Blokuje przypadek, gdy wszystkie liczby znajdują się we właściwych pozycjach
źródło
m([3,3,3,3],[2,1,0,1])
(zwracaTrue
) Tio25634 11111
(podobnie jak wiele innych zgłoszeń)Haskell ,
182163162132 bajtyPobiera dane wejściowe jako listę cyfr. Funkcja pomocnicza,
p
która daje wszystkie możliwe sposoby podziału listy na dwie części, służy do wyjmowania elementu i ponownego wstawiania go w inne miejsce.Wypróbuj online!
źródło