W szkole podstawowej dzieci uczą się o właściwych ułamkach, gdzie licznik jest mniejszy niż mianownik, a zatem wartość ułamka jest mniejsza niż jeden. Później uczy się ich o frakcjach, w których wartość frakcji jest większa niż jeden, oraz o dwóch różnych sposobach wyrażania tych frakcji: ułamki mieszane i ułamki niewłaściwe.
Biorąc pod uwagę ułamek mieszany, określ, czy jest on równoważny z ułamkiem niewłaściwym, w którym wartość całkowita i licznik są łączone razem. Na przykład dla danych wejściowych 1 3/4
niewłaściwy ułamek to 13/4
.
Przypadki testowe
1 3/4 -> falsey
1 3/10 -> truthy
6 6/7 -> falsey
55 55/100 -> truthy
4 9/100 -> falsey
40 9/100 -> falsey
7 49/1000 -> falsey
9 1/2 -> falsey
999 999/1000 -> truthy
1 21/200 -> falsey
1 21/101 -> falsey
W przypadku danych wejściowych można traktować część całkowitą i część ułamkową jako osobne dane wejściowe, ale nie można traktować ułamka jako danych wejściowych w dwóch częściach i nie można go traktować jako wartości dziesiętnej. Możesz upuścić część całkowitą (nie przyjmować jej jako danych wejściowych), jeśli nie musisz jej używać.
54/100
upraszcza to27/50
55/100
można to również uprościć11/20
, więc pojawia się tam to samo pytanie postawione przez @JoKing./
robi: /Odpowiedzi:
MATL , 7 bajtów
Dane wejściowe to ciąg znaków. Wyjście jest
1
dla prawdy,0
dla falsey.Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
Perl 6 ,
1612 bajtówWypróbuj online!
Pobiera dane wejściowe jako ciąg reprezentujący ułamek. Okazuje się, że dynamiczne pisanie w Perlu 6 może obsłużyć ciągi do racjonalnych ułamków, kto wiedział? Tak więc ciąg
"1/10"
po wymuszeniu na liczbę zwraca0.1
Anonimowy blok kodu po prostu sprawdza, czy ułamek plus jeden równa się jednemu połączonemu z ułamkiem. Dzięki odpowiedzi Python na xnor za pokazanie mi, że część całkowita nie ma znaczenia.
Stare rozwiązanie,
2726 bajtówWypróbuj online!
Pobiera dane wejściowe jako wymierną frakcję mieszaną i zwraca wartość prawda lub fałsz. Zwraca false dla czwartego przypadku testowego, ponieważ można go uprościć.
Wyjaśnienie:
.nude
zwraca listę[numerator, denominator]
.źródło
.nude
nazwa pochodzi od nu merator + de nominator, ale ktoś prawdopodobnie czerpał wielką przyjemność z tego, jak to nazwać.'1 3/10'
{S/\s//==.words.sum}
Retina 0.8.2 ,
1716 bajtówWypróbuj online! Wymaga tylko części ułamkowej, więc połączony zestaw testów usuwa liczbę całkowitą z przypadków testowych. Objaśnienie: Nieprawidłowa konkatenacja jest równa liczbie mieszanej tylko wtedy, gdy mianownik ma potęgę 10, a licznik ma jedną cyfrę na każde zero w mianowniku. Grupy równoważące .NET są używane do sprawdzenia, czy istnieje wystarczająca liczba cyfr. Edycja: Zapisano 1 bajt dzięki @sundar.
źródło
1 11/10
. Wydaje się, że jest to problem z twoją implementacją, a nie metodą^
, więc to nie pomaga./
sprawia, że jednoznaczne jest to, co pasujesz, więc nie sądzę, że potrzebujesz tam kotwicy (przestrzegając zwykłych reguł dopasowywania wyrażeń regularnych, tutaj nie ma specjalistycznej wiedzy Retina). Wygląda na to, że i tak działa: Wypróbuj online! .Łuska , 8 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Python 2 , 43 bajty
Wypróbuj online!
źródło
R ,
7865 bajtówWypróbuj online!
-13 bajtów dzięki Giuseppe i JayCe!
źródło
sub
jest w porządku tutaj. Możesz także użyćt=
zamiasttext=
Stax , 5 bajtów
Uruchom i debuguj
Wyjaśnienie:
źródło
Python 3 , 26 bajtów
Wypróbuj online!
Na przykład dane wejściowe
3/4
dają3/4+1==13/4
. Zamiast brać całą część ułamka, po prostu ustawiliśmy go1
do testowania równości ułamków mieszanych. Walizki testowe od Chas Brown.źródło
Brachylog , 15 bajtów
Wypróbuj online!
Traktuje część ułamkową jako ciąg znaków.
Pośrednio używa tego samego pomysłu, co moja odpowiedź Julii - „mianownik to 10 ^ {długość licznika}” można powiedzieć jako „mianownik jest potęgą dziesięciu, a długość mianownika jest równa długości licznika + długość „/” (tj. 1).
Starsza odpowiedź:
1520 bajtówWypróbuj online!
(-1 bajt dzięki @Fatalize, ale niestety +6 bajtów, odkąd odkryłem błędy w starszej metodzie).
Ten sam pomysł, co moja odpowiedź Julii .
źródło
A
wyjściową.
(a tym samym usunąć ostatnią,A
ponieważ zmienna wyjściowa jest niejawnie na końcu)61/10
(używając tylko 6 jako licznika / prefiksu)2/110
(używając tylko 10 jako mianownika / sufiksu). Próbowałem to naprawić, ale nie jestem pewien, czy to najlepszy sposób, aby to zrobić.Julia 0.6 , 29 bajtów
Wypróbuj online!
Oparty na założeniu, że wyjście powinno być prawdziwe tylko wtedy, gdy mianownik jest potęgą dziesięciu z tyloma zerami, ile cyfr w liczniku. Pobiera dane wejściowe jako
Rational
typ, sprawdza, czy mianownik jest równy 10 podniesiony do liczby cyfr w liczniku.źródło
Czysty , 57 bajtów
Wypróbuj online!
Ten jest nieco krótszy, ale łamie się w przypadku dużych liczników / mianowników.
Czysty ,
77616058 bajtów-1 dzięki wskazówkom OMᗺ na moją drugą odpowiedź
Wypróbuj online!
Wykorzystuje metodę Neila , jest nieco krótsza niż robienie tego bezpośrednio.
Jest pewne oszustwo z przeciążeniem konwersji, gdzie
1<+[48\\_<-:u]
konwertuje się[Int]
na,[Char]
a następnie na{#Char} (:== String)
, aleInt
bezpośrednio naString
.Czysty ,
9189 bajtówWypróbuj online!
Definiuje funkcję,
$ :: String String -> Bool
która wyodrębnia licznik i mianownik, łańcuch-konkatenuje część całkowitą i licznik oraz sprawdza równoważność.źródło
05AB1E , 7 bajtów
Pobiera tylko ułamki jako dane wejściowe.
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Lub bardziej ogólne wyjaśnienie:
Musimy zweryfikować dwie rzeczy:
1, 10, 100, 1000
itp.)?PS: Jeśli moglibyśmy wziąć licznik i mianownik jako oddzielne wejścia, zaledwie 3 bajty byłby wystarczająco:
g°Q
.źródło
JavaScript, 26 bajtów
Pobiera dane wejściowe w składni curry (
f(x)(y)
), gdziex
jest liczbą całkowitą iy
ułamkiem jako ciągiem znaków.Wypróbuj online
źródło
Java 10,
107706757 bajtówWitamy w świecie bez
eval
…-40 bajtów, tworząc port odpowiedzi @ChasBrown w Python 2 .
-10 bajtów dzięki @Shaggy (powinienem był lepiej przeczytać odpowiedź @ChasBrown i jego użycie
find
(indexOf
) ..)Wypróbuj online.
Wyjaśnienie:
źródło
Haskell ,
47 lat40 bajtów-7 dzięki OMᗺ
Wypróbuj online!
Część mojej czystej odpowiedzi przy użyciu metody Neila.
źródło
Perl 5- p, 23 bajty
Wypróbuj online!
Bierze część ułamkową sam jako dane wejściowe (na co pozwala OP), zwraca 1 dla wartości true i nic dla wartości false.
Część dziesiętna sama w sobie byłaby dokładnie równa licznikowi tylko wtedy, gdy mianownik jest bezpośrednią następną potęgą dziesięciu większą niż licznik, co jest warunkiem, który musimy sprawdzić.
źródło
Noether, 17 bajtów
Wypróbuj online!
Wyjaśnienie
Jak to działa? Cóż, jeśli spojrzysz na przypadki testowe, jedynymi prawdziwymi przypadkami są przypadki, gdy mianownik ma potęgę dziesięciu,10za , gdzie za to długość licznika plus jeden (a = ⌊ log10n ⌋ + 1 , gdzie n jest licznikiem i ⌊ x ⌋ reprezentuje funkcję podłogi).
źródło
TeaScript , 25 bajtów
Pierwsze wejście to ułamek, drugie to liczba całkowita.
Właśnie zacząłem w TeaScript, więc może być bardzo golfowy
Wypróbuj online!
źródło
R , 53 bajty
Wypróbuj online!
Bierze tylko część ułamkową jako dane wejściowe. Jak wspomniano w komentarzu xnor:
Odpowiedź Roberta S. jest mniej golfowa, ale o wiele bardziej interesująca niż moja.
źródło
C (gcc) ,
675655 bajtówWypróbuj online!
źródło
r
? tio.run/…Excel, 52 bajty
Ignoruje wejście Integer. Gruntownie:
IS Denominator = 10^LEN(Numerator)
Dla mianowników ograniczonych do
<10^9
: 48 bajtów:Część logiki się rozdziela
/
. Jeśli dane wejściowe można pobrać osobno, 16 bajtów:źródło
Eliksir , 81 bajtów
Wypróbuj online!
Może uda ci się gdzieś dostać
{n,"/"<>d}=Integer.parse b
, ale nie jestem pewien, jak to zrobić .źródło
2DFuck , 86 bajtów
Wypróbuj online!
Pobiera dane wejściowe bez części całkowitej.
źródło
C (gcc / clang),
594947 bajtówOdpowiedź Pythona 2 Port of Chas Brown . Wypróbuj online tutaj .
Ignoruje całkowitą część wejścia. Dzięki Jonathana Frecha za grę w golfa 2 bajty.
Nie golfowany:
źródło
'/'
najprawdopodobniej może być47
.ForceLang,
8678 bajtówźródło