Zadanie:
Podaj wartość dla x
, gdzie a mod x = b
dla dwóch podanych wartości a,b
.
Założenie
a
ib
zawsze będą dodatnimi liczbami całkowitymi- Nie zawsze będzie na to rozwiązanie
x
- Jeśli istnieje wiele rozwiązań, wypisz co najmniej jedno z nich.
- Jeśli nie ma żadnych rozwiązań, nie wypisuj nic lub wskazuj, że nie ma żadnych rozwiązań.
- Wbudowane są dozwolone (nie tak zabawne, jak inne podejścia matematyczne)
- Dane wyjściowe są zawsze liczbami całkowitymi
Przykłady
A, B >> POSSIBLE OUTPUTS
5, 2 >> 3
9, 4 >> 5
8, 2 >> 3, 6
6, 6 >> 7, (ANY NUMBER > 6)
8, 7 >> NO SOLUTION
2, 4 >> NO SOLUTION
8, 5 >> NO SOLUTION
10,1 >> 3, 9
To jest golf golfowy , więc wygrywa najmniej bajtów.
code-golf
math
number-theory
code-golf
number
integer
code-golf
string
code-golf
music
code-golf
arithmetic
array-manipulation
decision-problem
code-golf
math
rational-numbers
code-golf
code-golf
graphical-output
hardware
code-golf
math
number
code-golf
string
parsing
natural-language
code-golf
tips
brain-flak
code-golf
graph-theory
code-golf
number
polynomials
king-of-the-hill
code-golf
ascii-art
kolmogorov-complexity
animation
king-of-the-hill
code-golf
tips
code-golf
ascii-art
code-golf
string
array-manipulation
data-structures
code-golf
math
number
code-golf
string
base-conversion
binary
code-golf
decision-problem
graph-theory
code-golf
math
polynomials
code-golf
kolmogorov-complexity
physics
code-golf
sequence
number-theory
code-golf
math
integer-partitions
code-golf
array-manipulation
random
permutations
code-golf
string
decision-problem
Grawiton
źródło
źródło
Odpowiedzi:
JavaScript ,
2827262423 bajtówWypróbuj online!
false
wskazuje brak rozwiązania.-1 dzięki @Arnauld
źródło
f=...
, a potem zadzwońf(8)(3)
? To wydaje się trochę podstępne? Normalnym sposobem wywoływania funkcji byłobyf(8,3)
wydłużenie definicji funkcji?(8)(3)
, ale istnieje zgoda co do PPCG, co jest dozwolone . Nie musisz jednak nadawać mu nazwy.MATL , 6 bajtów
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
Rozważmy wejść
8
,2
jako przykład.źródło
Python 2 ,
4034 bajtów-6 bajtów dzięki Bubblerowi
Wypróbuj online!
źródło
lambda a,b:[(a==b)*-~a,a-b][a>b*2]
Galaretka , 5 bajtów
Zwraca minimalną prawidłową wartość x lub 0, jeśli jej nie ma.
Wypróbuj online!
źródło
Groovy, 48 bajtów (przy użyciu wbudowanego):
Eval.me(...+"g")
- Umieszcza „g” na wejściu, co czyni go BigInteger.modInverse(...)
- Wykonuje odwrotną operację modulo.Java 8, 70 bajtów
źródło
R ,
3328 bajtówWypróbuj online!
-4 bajty dzięki Jarko Dubbeldam.
-1 bajt dzięki Giuseppe.
Zwraca,
NA
jeśli nie ma rozwiązania. TIO nie ma zainstalowanej biblioteki pryr, więcfunction(a,b)
zamiast tego używa kodu w tym linku .źródło
pryr::f(which(a%%1:(a+1)==b))
jest o 4 bajty krótszy.match(b,a%%1:(a+1))
, co zwracaNA
brakującą wartość.Galaretka ,
1110 bajtówPełen program, biorąc dwie liczby całkowite dodatnie,
a
ib
, i drukując listę rozwiązań całkowitą pomiędzymin(a,b)+1
imax(a,b)+1
włącznie.Wypróbuj online!
źródło
Mathematica 36 bajtów
Wejście:
Wynik:
źródło
a_ ±b_
. Ale i tak jest krótszy w użyciuCases
zamiastSelect
nienazwanej funkcji:Cases[Range[9#],x_/;#~Mod~x==#2]&
Haskell , 33 bajty
Występuje awaria,
code.hs: out of memory (requested ??? bytes)
jeśli nie ma rozwiązania (wcześniej limit czasu na TIO):Wypróbuj online!
Dzięki dla Ørjan Johansen za wykrycie błędu!
źródło
b
podziała
.C # (kompilator Mono C #) ,
57 5626 bajtówOdpowiedź Port Pytona na Rod . Dzięki WW za -1 bajt.
Ogromne podziękowania dla Kevina Cruijssena za -30 bajtów.
Wypróbuj online!
źródło
return
.i=>{/*code here*/}
). W tym przypadku jednak, ponieważ masz 2 wejścia, może być funkcją curdowania lambda, aby zapisać dodatkowy bajt (a=>b=>{/*code here*/}
zamiast(a,b)=>{/*code here*/}
). Możesz także usunąć nawias wokół swoich sprawdzeń if. W sumie, bez zmiany żadnej funkcjonalności, staje sięa=>b=>a-b>b?a-b:a==b?a+1:0
26 bajtówPyth, 16 bajtów
Wypróbuj online!
Wszystkie przypadki testowe
Pobiera dane wejściowe jako
[a, b]
błędy, jeśli nie znaleziono rozwiązania. Skoryguje, jeśli błędy nie są dozwolone.źródło
APL (Dyalog Unicode) , 19 bajtów
Wypróbuj online!
Gra w golfa w toku ...
źródło
Mathematica, 28 bajtów
źródło
PHP> = 7,1, 51 bajtów
Wersja online
źródło
Aksjomat,
147128 bajtówrozkop go i przetestuj
To znalazłoby całe rozwiązanie, nawet rozwiązanie nieskończonego zestawu ...
źródło
Pip , 9 bajtów
Pobiera dwie liczby jako argumenty wiersza polecenia. Zwraca najmniejsze rozwiązanie lub zero, jeśli nie istnieje żadne rozwiązanie.Wypróbuj online!
Wyjaśnienie
Na przykład z danymi wejściowymi
8
i2
:Bazujący na 0 indeks pierwszego wystąpienia
2
na tej liście3
to nasze rozwiązanie.źródło
J , 14 bajtów
Wypróbuj online!
Tłumaczenie rozwiązania Rod's Python 2 .
Jak to działa
Rzadkie przypadki, w których kod J można bezpośrednio przetłumaczyć na język Python.
źródło
Japt , 13 bajtów
Wypróbuj online!
Tłumaczenie rozwiązania JS eush77 .
Kod jest po
(U-=V)?U>V&&U:-~V
przeniesieniu do JS, gdzieU
iV
są dwiema wartościami wejściowymi.źródło
Ruby , 31 bajtów
Wypróbuj online!
źródło
Japt , 7 bajtów
(Ostatecznie) Wyprowadza,
undefined
jeśli nie ma rozwiązania.Wypróbuj tutaj
źródło
Perl 6 , 23 bajtów
Wypróbuj online!
Anonimowy blok kodu, który zwraca listę możliwych wartości od
2
doa+1
źródło
ORK , 566 bajtów
Wypróbuj online!
O bjects R K schłodzić. Na szczęście jednak nie musiałem używać żadnych (oprócz wbudowanych) do tego zadania.
źródło
F #, 40 bajtów
Wypróbuj online!
Całkiem proste. Zgłasza a,
System.Collections.Generic.KeyNotFoundException
jeśli nie można znaleźć rozwiązania.Możesz także zmodyfikować go do
Seq.tryFind
, który zwróci anint option
,None
jeśli nie można znaleźć rozwiązania.źródło
05AB1E , 7 bajtów
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
Java 8, 26 bajtów
Port @Epicness 'C # odpowiedź , po ja grałem go nieco więcej.
Wypróbuj online.
źródło
> <> , 21 bajtów
Ta sama sztuczka, co większość opublikowanych rozwiązań. Najpierw przygotowujemy wszystkie niezbędne wartości na stosie, a następnie sprawdzamy porównania.
Wypróbuj online!
źródło
Whispers v2 , 128 bajtów
Wypróbuj online!
Zwraca zestaw wszystkich możliwych rozwiązań oraz pusty zestaw (tj∅ ), gdy nie ma rozwiązania.
Jak to działa
Nic dziwnego, że działa prawie identycznie jak większość innych odpowiedzi: generuje listę liczb i sprawdza każdą z nich pod kątem modułu odwrotności z argumentem.
Jeśli znasz się na strukturze programu Szeptów, możesz przejść do linii poziomej. Jeśli nie: zasadniczo Szepty działają w systemie odniesienia linia po linii, zaczynając od ostatniej linii. Każda linia jest sklasyfikowana jako jedna z dwóch opcji. Albo jest to linia Nilad , albo linia operatora .
Linie Nilad zaczynają się od{ 0 } .
>
, na przykład> Input
lub,> {0}
i zwracają dokładną wartość przedstawioną w tym wierszu, tj.> {0}
Zwraca zestaw> Input
zwraca następny wiersz STDIN, oceniany, jeśli to możliwe.Linie operatora zaczynają się odn → n2) ), więc 12) , zamiast tego zwraca kwadrat linii 1 , który w tym przypadku jest pierwszym wejściem.
>>
, na przykład>> 1²
lub>> (3]
i oznaczają uruchomienie operatora na jednej lub więcej wartości. W tym przypadku użyte liczby nie odnoszą się do tych wyraźnych liczb, lecz odnoszą się do wartości w tym wierszu. Na przykład²
to polecenie kwadratowe (>> 1²
nie zwraca wartościZazwyczaj linie operatora działają tylko przy użyciu liczb jako odniesień, ale być może zauważyłeś linie
>> L=2
i>> L⋅R
. Te dwie wartościL
iR
są używane w połączeniu zEach
instrukcjami.Each
instrukcje działają na podstawie dwóch lub trzech argumentów, ponownie jako odniesień numerycznych. Pierwszy argument (np.5
) Jest odniesieniem do linii operatora używanej funkcji, a pozostałe argumenty są tablicami. Następnie iterujemy funkcję po tablicy, gdzieL
iR
w funkcji reprezentują bieżący element (y) w tablicach, które są iterowane. Jako przykład:PozwolićA = [ 1 , 2 , 3 , 4 ] , B = [ 4 , 3 , 2 , 1 ] i fa( x , y) = x + y . Zakładając, że uruchamiamy następujący kod:
Następnie otrzymujemy demonstrację działaniado= [ ( 1 , 4 ) , ( 2 , 3 ) , ( 3 , 2 ) , ( 4 , 1 ) ] następnie mapuj fa( x , y) nad każdą parą, tworząc naszą ostateczną tablicę D = [ f( 1 , 4 ) , f( 2 , 3 ) , f( 3 , 2 ) , f( 4 , 1 ) ] = [ 5 , 5 , 5 , 5 ]
Each
oświadczeń. Po pierwsze, pracując z dwiema tablicami, spakujemy je do postaciWypróbuj online!
Jak działa ten kod
Pracując w sposób sprzeczny z intuicją, jak działa Szept, zaczynamy od dwóch pierwszych linii:
To zbiera nasze dwa wejścia, powiedzmyx i y i zapisuje je odpowiednio w wierszach 1 i 2 . Następnie przechowujemyx2) w linii 3 i utwórz zakresOdp . : = [ 1 . . . x2)] na linii 4 . Następnie przeskakujemy do sekcji
Pierwszą rzeczą tutaj jest wykonywany linia 7 ,B : = [ i%x|I ∈ ] , gdzie za%b is defined as the modulus of a and b .
>> Each 5 4
, który iteracje linii 5 na linię 4 . To daje tablicęWe then execute line 8,B , yielding an array C:=[(i%x)=y|i∈A] .
>> Each 6 7
, which iterates line 6 overFor the inputsx=5,y=2 , we have A=[1,2,3,...,23,24,25] , B=[0,1,2,1,0,5,5,...,5,5] and C=[0,0,1,0,0,...,0,0]
We then jump down to
which is our example of a dyadicA and C . We multiply each element in A with it's corresponding element in C , which yields an array, E , where each element works from the following relationship:
Each
statement. Here, our function is line 9 i.e>> L⋅R
and our two arrays areWe then end up with an array consisting of0 s and the inverse moduli of x and y . In order to remove the 0 s, we convert this array to a set ({0} , yielding, then outputting, our final result.
>> {10}
), then take the set difference between this set andźródło
C#, 53 bytes (83 with function heading)
Try It Online
First try at codegolf. Probably not the best language to use, nor the most efficient coding.
źródło