Niedawno miałem test z matematyki i zauważyłem, że pewna liczba w teście odpowiada interesującemu wzorowi. Liczba ( 28384
) pasowała do ogólnej sekwencji cyfr, która wygląda następująco
(n)(x)(n+1)(x)(n+2)(x)(n+3) etc...
gdzie n
i x
są liczbami całkowitymi jednocyfrowymi. Sekwencja może rozpocząć albo x
czy n
i kończą albo x
albo n+y
.
Twoim zadaniem jest, biorąc pod uwagę wielocyfrową dodatnią liczbę całkowitą, wygenerowanie wartości true lub falsey, w zależności od tego, czy dane wejściowe pasują do wzorca. Dane wejściowe będą miały długość od 4 do 18 cyfr. Możesz wziąć dane wejściowe jako ciąg znaków reprezentujący liczbę całkowitą. Wprowadzanie nie rozpocznie się od 0, ale może zawierać lub kończyć się na 0.
n+y
będzie zawsze liczbą jednocyfrową (dlatego limit długości wynosi 18).
Przypadki testowe
Powinny one generować prawdziwą wartość
182838485868788898
4344
85868
12223242526
I te powinny być falsey
12345
6724013635
36842478324836
1222232425
5859510511
Jak w przypadku wszystkich golfów kodowych, wygrywa najkrótszy kod! Powodzenia i oby szanse zawsze były na twoją korzyść!
x
in
niezerowe numery, które pasują tę regułę?Odpowiedzi:
Python 2 ,
84818079 bajtów-1 bajt dzięki ovs
Wypróbuj online!
Python 3 ,
82797877 bajtówWypróbuj online!
Nieco krótszy w Pythonie 3, ale nie sądziłem, że zasługuje na własną odpowiedź.
Wyjaśnienie
Ustawiamy funkcję,
g
która pobiera ciąg znaków i indeks (1 lub 0).g
następnie zwraca, czylen(set(x[a::2]))
liczba unikalnych cyfr w każdej innej pozycji jest równa(x[a==0::2]in"123456789")
, czy pozostałe cyfry są w porządku rosnącym. Jeśli cyfry są w porządku rosnącym, to zwraca, czy wszystkie są takie same, jeśli nie, zapyta, czy zestaw jest pusty, co nie może być, dlatego zawsze zwraca false.źródło
x[a<1::2]in"123456789"
może być"0"<x[a<1::2]<":"
(porównując znaki porównuje znaki)a<1
? Wygląda na to, że to może być sprawiedliwea
.Galaretka ,
1311 bajtówWypróbuj online!
Wyjaśnienie:
źródło
05AB1E , 15 bajtów
Wypróbuj online!
Wyjaśnienie
Powinno to działać (sprawdziły się przypadki testowe), ale jeśli znajdziesz jakieś wady, daj mi znać.
14 bajtów, jeśli żaden wynik nie jest liczony jako fałsz:
źródło
D, 117 bajtów
Zdecydowanie nieoptymalne, ale działa dobrze
Wypróbuj online!
źródło
Haskell,
1081139795 bajtówPrzykładowe wywołanie:
f "182838485868788898"
wydajnośćTrue
Wersja bez golfa z objaśnieniami:
źródło
isPrefixOf
nie ma w Preludium, więc musisz dołączyć doimport Data.List
kodu lub użyć alternatywy, npand(zipWith(==)(n:r)[n..])
.x/=y
może tak być,1>0
ponieważ jeśli nie,x/=y
tox==y
pierwsza sprawa go złapie.where
definiowaniac
id
jako funkcji pomocniczych pozaf
jest w porządku.f
można następnie skrócić dof s@(_:n:_)=c s||c(n:s)
.;
. Jest to ta sama liczba bajtów, ale poprawia czytelność kodu.JavaScript (ES6),
666360 bajtówPobiera dane wejściowe jako ciąg.
Przypadki testowe
Pokaż fragment kodu
źródło
C (gcc), 123 bajty
Wypróbuj online!
źródło
Python 3 ,
99 9689 bajtówall()
funkcji&
|
i zastąp dodatkową zmienną przezk<1
Wypróbuj online!
Wyjaśnienie:
Najpierw podziel ciąg na dwie listy: jedną z elementami o nieparzystym indeksowaniu, a drugą z elementami o parzystym indeksowaniu. Dwie listy A i B powinny być takie, aby:
LUB wręcz przeciwnie
Kolejny warunek jest sprawdzany przez:
a in '123456789'
Warunek o tym samym numerze jest sprawdzany przez:
all(i=a[x] for i in a)
źródło
i
zk<1
i upuśći
argumentu razem.&
zamiast niegoand
. Twójor
może być również zastąpiony|
.PHP , 68 bajtów
Wypróbuj online!
Wyjściowa część ciągu wyszukiwania zaczynająca się od pierwszego wystąpienia danych wejściowych na końcu ciągu wyszukiwania i od niego jako wartość zgodna z prawdą i bez fałszu
dla 2 bajty więcej można zastąpić
echo$s;
z!!echo$s;
dostać1
jako wartość truthyZnajdź wystąpienie danych wejściowych w jednym z poniższych ciągów w tablicy
źródło
JavaScript (ES6), 54 bajty
Pobiera dane wejściowe jako ciąg.
źródło
MATL , 15 bajtów
Wypróbuj online!
Z pomocą @LuisMendo na czacie. Zauważ, że jeśli puste wyjście + błąd jest również uważane za „fałsz”,
X
można je pominąć , zwiększając wynik do 14 bajtów .źródło
Mathematica, 121 bajtów
źródło
Pyth , 20 bajtów
Wyprowadzane,
[]
gdy liczba pasuje do wzorca cyfry, wszystko inne.Wypróbuj online!
Objaśnienia (przykład z wejściem
85868
)źródło
Pyth, 17 bajtów
Wypróbuj tutaj
Ten sam algorytm jak moja odpowiedź na galaretkę.
Wyjaśnienie:
źródło
Python 3 ,
167 161 157 131106 bajtów-55 bajtów dzięki sugestiom @ WheatWizard
Wypróbuj online!
źródło
set(c)
jest taka sama jak{*c}
. (przynajmniej w python 3)[t[z]for z in range(0,len(t),2)]
jest także tylko splotem listy. Możesz to zrobić po prostu za pomocąt[::2]
. Jeśli nie znasz tej składni, sugeruję przejrzenie dokumentacji, ponieważ jest ona bardzo przydatna.Java (OpenJDK 8) ,
128119118108107104 bajtówWypróbuj online!
Wyjaśnienie:
źródło
Siatkówka , 47 bajtów
Wypróbuj online!
Zwraca 1, jeśli pasuje do wzorca, 0, jeśli nie
Wyjaśnienie
Konwertuj każdą cyfrę n na n + 1 w jedności, oddzielone średnikami
(Końcowy znak nowej linii) konwertuje każdą cyfrę na różnicę między nią a jedną 2 punktami przed nią
(Końcowy znak nowej linii) usuwa pierwsze 2 cyfry
Liczy liczbę dopasowań tego wzorca, który sprawdza naprzemienne zera i jedynki
źródło