Niedawno osiągnęliśmy próg 10 000 pytań dotyczących PPCG. Brawo! Świętujmy to z prostym wyzwaniem.
Wkład
Dwie liczby całkowite i , obie w , takie, że .
Zadanie
Twoim zadaniem jest dodanie jednej cyfry do jednej z tych liczb całkowitych lub jednej cyfry do obu, tak aby . Dodanie cyfry zarówno do jak i , niekoniecznie musi być tą samą cyfrą.
Nowa cyfra może zostać dodana na początku, na końcu lub w dowolnym miejscu w środku oryginalnej liczby całkowitej. Nie można jednak dodać wiodącego zera.
Przykład:
Dla obowiązują następujące przekształcenia:
Ale te są nieprawidłowe :
Biorąc pod uwagę i , istnieją dwa możliwe rozwiązania:
Wydajność
Musisz wydrukować lub wydrukować listę wszystkich możliwych rozwiązań.
W powyższym przykładzie oczekiwany wynik to [[9238,762],[9273,727]]
.
Zasady
- We / wy można przetwarzać w dowolnym rozsądnym, jednoznacznym formacie. Zamiast liczb całkowitych możesz używać ciągów, list cyfr itp.
- Gwarantujemy, że dane wejściowe mają co najmniej jedno rozwiązanie.
- Nie wolno deduplikować danych wyjściowych. Byłoby jednak mile widziane, jeśli kod testowy deduplikuje go z pewną obróbką końcową, na przykład w sekcji stopki TIO.
- To wyzwanie dla golfa .
Przypadki testowe
Input --> Output
934, 654 --> [[9346,654]]
737, 628 --> [[7372,2628]]
9122, 88 --> [[9122,878]]
923, 72 --> [[9238,762],[9273,727]]
998, 3 --> [[9968,32],[9987,13]]
900, 10 --> [[9900,100],[9090,910]] NB: solutions such as [9000,1000] are NOT valid
(more than one digit added to 10)
363, 632 --> [[3673,6327],[3638,6362]]
288, 711 --> [[2881,7119],[2882,7118],[2883,7117],[2884,7116],[2885,7115],[2886,7114],
[2887,7113],[2888,7112],[2889,7111]]
365, 635 --> [[365,9635],[1365,8635],[2365,7635],[3365,6635],[4365,5635],[5365,4635],
[6365,3635],[7365,2635],[8365,1635],[9365,635],[3065,6935],[3165,6835],
[3265,6735],[3465,6535],[3565,6435],[3665,6335],[3765,6235],[3865,6135],
[3965,6035],[3605,6395],[3615,6385],[3625,6375],[3635,6365],[3645,6355],
[3655,6345],[3675,6325],[3685,6315],[3695,6305],[3650,6350]]
output a list of all possible solutions
Och, bummer. To byłoby trudne dla mojego języka Runicznego. Prawdopodobnie mógłbym napisać program, który mógł wyjście do rozwiązania!Odpowiedzi:
Haskell ,
99 97 8281 bajtów-16 bajtów dzięki Delfad0r (biorąc dane wejściowe jako listę, używając nadużyć, że nie musimy deduplikować -> n zawsze może być w [0,4] i używając sprytnej kombinacji formatu wejściowego i
ap
)!Wypróbuj online!
źródło
R , 96 bajtów
Wypróbuj online!
Wyjaśnienie (bez golfa)
Przypisujemy
?
dopaste
. To pozwala nam zrobić coś fajnego:a<-b?c<-d
wykonuje wbudowane zadania w ramachpaste
połączenia, czego nie mogliśmy zrobić z żadnym innym operatorem?
, ponieważ ma niższy priorytet niż<-
.Teraz, jak uprzejmie zauważył @JoKing, mogą zdarzyć się przypadki, w
900 10
których mogłyby mieć miejsce dwa wstawienia, takie jak9100 8100
. Więc odfiltrować mecze, w których liczba znaków w obu liczba wzrosła o ponad 1. szybki sposób na to jest z edycji odległości Levenshteinaadist
które wiążą się+
.źródło
Pyth,
282725242220 bajtówSpróbuj go online tutaj , lub sprawdzić wszystkie przypadki testowe tutaj - zestaw testów deduplikuje wynik, przygotowując plik
{
.Dane wejściowe są w postaci listy ciągów.
Edycja 4: Zapisałem kolejne 2 bajty dzięki Mr Xcoderem -
v
domyślnie wektoryzuje iL
używam
pod spodem, więc sugerowane jest mapowanie ponad zakresem, dzięki czemuU
niepotrzebnym równieżEdycja 3: Wprowadzono do globalnego użycia
;
operatora, aby zachować dostęp do 10, aby zaoszczędzić 2 bajty, dzięki FryAmTheEggman i issacg:Edycja 2: Zapomniałem, że operator sum istnieje, jak żenujące ...
Edycja 1: Poprzednia wersja przyjęła listę liczb całkowitych jako dane wejściowe, ręcznie wykonując konwersję ciągów znaków dla 27 bajtów:
źródło
T
, ale w blokach funkcyjnych zmienne są ponownie przeznaczone do działania jako zmienne iteracyjne - w bloku filtra zmienna iteracyjna tak się dziejeT
, więc nie można jej użyć. Oznacza to, że10 ^ 4
będzie^10 4
to 5 bajtów, więc niestety nie mniejT
wUT
jeszcze 10, dla[0,10)
zakresu. Ale w stała zmienna iteracji dla filtra. Dzięki za wyjaśnienie, to ma sens! Robiąc wcześniej, zapisanie go w zmiennej i użycie tej zmiennej w filtrze to (co najmniej) również 5 bajtów.f...T
T
T4^
10000
z^;4
.;
zawsze ma wartość zmiennej iteracyjnej w kontekście globalnym, w tym przypadku 10. Więc^;4
właśnie tego szukasz.fq^;4sT*FmvsmXLkdThl
. ( Pyth pokonuje Jelly? OO Hooray )Perl 6 , 64 bajtów
Wypróbuj online!
To jest port odpowiedzi GB za pomocą wyrażenia regularnego, aby sprawdzić, czy liczby są prawidłowe. Dzięki nwellnhof za przeniesienie go.
Stara odpowiedź,
127 110, 88 bajtów-22 bajty dzięki nwellnhof!
Wypróbuj online!
Anonimowy blok kodu, który pobiera listę dwóch liczb i zwraca listę par liczb.
Zamiast bawić się przy wstawianiu cyfr, to rozwiązanie sprawdza każdą kombinację liczb, które sumują się do 10000 i filtruje, że podane liczby są częścią pary.
Wyjaśnienie:
źródło
(i,1e4-i)
zamiast iterować je wszystkie(i,j)
i filtrować?R ,
179 161 150144 bajtówWypróbuj online!
35 bajtów zapisanych przez @JayCe i @Giuseppe.
Wyjaśnienie
Funkcja pomocnika g pobiera wszystkie możliwe wstawienia.
Główna funkcja.
Zauważyłem po tym, że jest to w zasadzie ta sama logika, co odpowiedź Pytha .
źródło
F
i%*%
Ruby ,
9391 bajtówWypróbuj online!
Wypróbuj każdą liczbę do 10000 i użyj wyrażenia regularnego, aby sprawdzić, czy liczby się zgadzają.
źródło
Galaretka , 30 bajtów
Wypróbuj online!
Niezdarne, ponieważ Jelly nie ma wstawek.
Wyjaśnienie
źródło
PHP,
162159 bajtówpiękny przykład funkcji generatora!
pobiera dane wejściowe z argumentów wiersza poleceń; drukuje duplikaty. Uruchom
-nr '<code>
lub wypróbuj online .źródło
Pyth, 18 bajtów
Demonstracja , pakiet testowy ( pakiet testowy jest deduplikowany z prowadzeniem
{
).Dane wejściowe mają postać listy dwóch ciągów.
XLRRTT
: L i R wykonują zagnieżdżone mapy. Ponieważ jest ich 3, wykonamy potrójnie zagnieżdżoną mapęX
funkcji. W takim przypadkuX
funkcja wstawi znak z wyznaczonej pozycji do łańcucha.Ciąg jest wejściem, które jest niejawne i umieszczane przez pierwsze
R
. Zakres znaków sięga0 ... 9
, więc mamy wszystkie możliwe wstawione cyfry i są umieszczane przezL
. Zakres jest podawany przezT
, który jest domyślnie ustawiony na10
, który jest domyślnie traktowany jako[0 ... 9]
. Pozycja rozciąga się0 ... 9
, co jest wystarczające, ponieważ wstawienie liczby po 10. pozycji nigdy nie będzie przydatne. Zduplikowane wyniki są w porządku. Zakres jest umieszczany przez sekundęR
, a podawany przez sekundęT
.v
: Zagnieżdżone ciągi rzutowania na ints.sM
: Spłaszcz drugi poziom list, pozostawiając nam listę wszystkich możliwych liczb po wstawieniu cyfry dla każdej z liczb wejściowych.*F
: Weź iloczyn kartezjański z dwóch list możliwych liczb.fqsT^;4
: Filtruj po parach, których produktem jest10000
.;
przyjmuje wartość10
tutaj, ponieważT
jest używana jako zmienna filtrująca, i;
zawsze jako wartość zmiennej, która jest używana.źródło
Japt ,
30292523 bajtówPobiera dane wejściowe jako tablicę ciągów, generuje tablicę tablic ciągów.
Spróbuj
Wyjaśnienie
źródło
JavaScript (węzeł) -
183136123 bajtów123 bajty dzięki Shaggy
136 bajtów dzięki Arnauldowi
Stary kod
Nie jestem z tego dumny, ale pomyślałem, że i tak się poddam. Tworzy prototypową funkcję łańcuchową podobną do mapy, która zajmuje większość bajtów. Funkcja po prostu iteruje obie kombinacje i znajduje, gdy 1000-ab wynosi 0. Pobiera dane wejściowe jako ciągi znaków.
Wypróbuj online!
Nie golfił
źródło
String.prototype
,function
,let
,this
) oraz z kilkoma innymi optymalizacje.map()
zamiast zewnętrznejfor
pętli. Uwaga: jedynym powodem, dla którego używamyj
jako pierwszego parametru funkcji zwrotnej jest to, że chcemy ją zdefiniować w tym zakresie.Galaretka , 23 bajty
Łącze monadyczne przyjmujące listę list cyfr
(np. Dla przykładu 923 i 72 wejście to
[[9,2,3],[7,2]]
)Wypróbuj online!(stopka sprawia, że I / O to para dwóch liczb całkowitych i [sformatowana] lista par liczb całkowitych)
Lub zobacz zestaw testowy .
W jaki sposób?
Sprawdza wszystkie pary „liczb” (list cyfr), które sumują się do 10000 dla ważności, tworząc wszystkie sposoby wyboru n-1 cyfr z tych „liczb” utrzymujących porządek; i zachowuje te, które są ważne (gdzie ważność pozwala również, aby „liczba” w teście była równa pierwotnej „liczbie”).
źródło
Stax , 24 bajty
Uruchom i debuguj
Program ten przyjmuje swoje dwa dane wejściowe jako tablicę ciągów, takich jak ten.
źródło
Węgiel drzewny , 33 bajty
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
W przypadku, gdy tego nie rozumiesz, przechodzi przez wszystkie pary wartości, które dodają do 10000 (jako ciągi), a następnie liczy, ile razy każde wejście pasuje do wyniku usunięcia do 1 znaku z odpowiedniej wartości. Jeśli minimalna liczba jest niezerowa, wówczas oba wejścia są dopasowane i jest to możliwe rozwiązanie.
źródło
Python 3,
165 160 153 125117 bajtówset
z wartości zwracanej, ponieważ dane wyjściowe mogą zawierać duplikaty.range(len(s))
wrange(5)
.itertools
je zagnieżdżonymi listami (i usunąć spację).KorzystanieAkceptuje ciągi jako dane wejściowe, zwraca zestaw liczb całkowitych jako dane wyjściowe.itertools
i prosta funkcja pomocnika.źródło
set
w ostatnim wierszu dla -5 bajtów.Rubin , 110 bajtów
Akceptuje ciągi jako dane wejściowe, zwraca tablicę liczb całkowitych.
Na podstawie wersji python . Dla danej liczby całkowitej
C
tworzy tablicę liczb, które można utworzyć, dodając cyfrę.Lambda iteruje każdą możliwą parę i wybiera tę, której suma wynosi 10000.
Wypróbuj online!
źródło
05AB1E (starsza wersja) , 36 bajtów
Można bez wątpienia znacznie zagrać w golfa. Szczególnie wstawianie cyfr, w tym wiodącej / końcowej.
Wypróbuj online lub sprawdź wszystkie przypadki testowe (
ê
w stopce jest Uniquify & Sort).Wyjaśnienie:
źródło
Galaretka , 25 bajtów
Wypróbuj online!
Nie jest to najkrótsze rozwiązanie Jelly, ale może ktoś może zagrać w golfa? Jestem zakłopotany
źródło