Niech sumują się do 10.000


26

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 A i B , obie w [1..9999] , takie, że A+B<10000 .

Zadanie

Twoim zadaniem jest dodanie jednej cyfry do jednej z tych liczb całkowitych lub jednej cyfry do obu, tak aby A+B=10000 . Dodanie cyfry zarówno do A jak i B , 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 A=923 obowiązują następujące przekształcenia:

192392739238

Ale te są nieprawidłowe :

09231092394273

Biorąc pod uwagę A=923 i B=72 , istnieją dwa możliwe rozwiązania:

9238+762=100009273+727=10000

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 .

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]]

4
Nie jest to proste wyzwanie, jeśli nie mogę go napisać i mieć pewność, że zadziała w moim samochodzie. ; p
Quintec

16
@Quintec Odradzam wpisywanie czegokolwiek w samochodzie. : p
Arnauld

1
@Arnauld Nie powiedział, że jest kierowcą. ;-) (Poważna uwaga: jak dotąd 4 komentarze nie na temat, mój handicap na 3 komentarze do tych celów głośno wydaje sygnał dźwiękowy: P)
Erik the Outgolfer

1
Gdy galaretki zajmują więcej niż 20 bajtów, jest to trudne wyzwanie!
Regis Portalez

output a list of all possible solutionsOch, 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!
Draco18s,

Odpowiedzi:


12

Haskell , 99 97 82 81 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)!

filter((==1e4).sum).mapM([read.(take n<>(c:).drop n)|c<-['0'..'9'],n<-[0..4]]<*>)

Wypróbuj online!



8

R , 96 bajtów

function(a,b)(w<-grep(gsub("",".?",a?b),1:1e4?9999:0)?r<-1e4-w)[w+a<2&r+b<2]
"?"=paste
"+"=adist

Wypróbuj online!

Wyjaśnienie (bez golfa)

function(a,b){
    # Regex inserting ".*": (998,3) => ".?9.?9.?8.? .?3.?"
  regex <- gsub("",".?",paste(a,b)) 
    # Positions matching in the whole vector of strings that add to 10K ("1 9999", "2 9998", "3 9997", "4 9996", ...)
  w <- grep(regex,paste(1:1e4,9999:0)) 
    # 10K minus these matching positions
  r <- 1e4-w 
    # Form position-string vector of ('pos1 10K-pos1', 'pos2 10K-pos2', ...)
  paste(w,r)[
  # Filter only those positions where the edit distance between the matched numbers and the originals are less than 2
    adist(w,a)<2 & adist(r,b)<2 
  ]
}

Przypisujemy ?do paste. To pozwala nam zrobić coś fajnego: a<-b?c<-dwykonuje wbudowane zadania w ramach pastepołą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 10których mogłyby mieć miejsce dwa wstawienia, takie jak 9100 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 Levenshteina adist które wiążą się +.


Dzięki za sprawdzenie! Odfiltrowuję teraz dopasowania, w których występuje więcej niż jedna wstawka na liczbę.
J.Doe

7

Pyth, 28 27 25 24 22 20 bajtów

fq^;4sT*FmvsmXLkdThl

Spró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.

fq^;4sT*FmvsmXLkdThldQ   Implicit: Q=eval(input()), T=10
                         Trailing d, Q inferred
         m           Q   Map each input string, as d, using:
                   ld      Take the length of d
            m     h        Map 0 to the above (inclusive), as k, using:
             X  d            Insert into d...
               k             ... at position k...
              L  T           ... each number [0-9]
           s               Flatten the result
          v                Convert each back to an integer
       *F                Take the cartesian product of the result
                         (this generates all possible pairs of mutated numbers)
f                        Keep the pairs, as T, where...
     sT                  ... the sum of the pair...
 q                       ... is equal to...
  ^;4                    ... 10,000 (; == 10 here, so this is 10^4)

Edycja 4: Zapisałem kolejne 2 bajty dzięki Mr Xcoderem - vdomyślnie wektoryzuje i Lużywa mpod 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:

fq^T4sT*FmvMsmXLkdUThl

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:

fq10000+FT*FmvMsmXLk`dUThl`

1
@KevinCruijssen rzeczywiście tak jest, zwykle 10 T, ale w blokach funkcyjnych zmienne są ponownie przeznaczone do działania jako zmienne iteracyjne - w bloku filtra zmienna iteracyjna tak się dzieje T, więc nie można jej użyć. Oznacza to, że 10 ^ 4będzie ^10 4to 5 bajtów, więc niestety nie mniej
Sok

1
@Sok Ah ok. Tak więc Tw UTjeszcze 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...TTT4^
Kevin Cruijssen

2
Można wymienić 10000z ^;4.
FryAmTheEggman

2
;zawsze ma wartość zmiennej iteracyjnej w kontekście globalnym, w tym przypadku 10. Więc ^;4właśnie tego szukasz.
isaacg

1
20 bajtów: fq^;4sT*FmvsmXLkdThl. ( Pyth pokonuje Jelly? OO Hooray )
Mr. Xcoder

4

Perl 6 , 64 bajtów

->\a{grep {all (a Z~$_)X~~/^(.*)(.*)$0.?$1$/},(^1e4 Z(1e4...1))}

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!

->\a{grep {all ~<<a Z∈.map:{.comb.combinations(.comb-1..*)>>.join}},(^1e4 Z(1e4...1))}

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:

->\a{  # Anonymous code block that takes an argument a
     grep ... ,(^1e4 Z(1e4...1))    # Filter from all pairs that add to 10000
         {      ~<<a     # Stringify the contents of a
                     .map:{      # Map the pair to
                           .comb  # The digits of the number
                           .combinations(.comb-1..*)  # The combinations of the digits
                           >>.join  # Each combination joined
                           # Note that combinations preserve order
                           # "123" -> (12,13,123)
                          }
          all       Z   # Zip that each element of a is an element of the combination
         }
}

Ciekawe: czy nie możesz wykorzystać faktu, że pary można zapisać jako, (i,1e4-i)zamiast iterować je wszystkie (i,j)i filtrować?
Eric Duminil,

3

R , 179 161 150 144 bajtów

function(a,b,w=g(a),r=rep(g(b),e=1e4))paste(w,r)[w+r==1e4]
g=function(x,n=sum(x|1)){for(i in 0:n)for(j in 0:9)F=c(F,append(x,j,i)%*%10^(n:0));F}

Wypróbuj online!

35 bajtów zapisanych przez @JayCe i @Giuseppe.

Wyjaśnienie

Funkcja pomocnika g pobiera wszystkie możliwe wstawienia.

g <- function(x,            # Input vector of digits
              n=sum(x|1)    # Length of x
              ) {
  for(i in 0:n)             # i is the insertion point
    for(j in 0:9)           # j is a digit from 0 to 9
      # Dot product of vector of digits with insert and 10^(n:0) performs the
      # conversion to integer (and gets rid of the leading 0s)
      F=c(F,append(x,j,i)%*%10^(n:0))  # F is a non-reserved built-in alias to FALSE (numerically 0)
  F
}

Główna funkcja.

f <- 
function(a,                 # Input vectors of digits
         b,
         w=g(a),            # Get all possible insertions for a
         r=rep(g(b),e=1e4)  # Insertions for b replicated 1e4 times each
         )
  paste(w,r)[w+r==1e4]      # paste and w+r recycle w to match length of r
                            # Lots of duplication!

Zauważyłem po tym, że jest to w zasadzie ta sama logika, co odpowiedź Pytha .



@JayCe oszczędza ponad 10 bajtów! Deduplikacja może odbywać się poza kodem wyzwania.
ngm


zabijmy jeszcze kilka bajtów - nie potrzeba zewnętrznego, wystarczy powtórzenie
JayCe,

Myślę, że jesteśmy bliscy włożenia w to widelca!
ngm

3

Ruby , 93 91 bajtów

->a,b{(1..r=10000).map{|x|/^(.*)(.*:)\1.?\2(.*)(.*):\3.?\4$/=~[a,x,b,y=r-x]*?:&&[x,y]}-[p]}

Wypróbuj online!

Wypróbuj każdą liczbę do 10000 i użyj wyrażenia regularnego, aby sprawdzić, czy liczby się zgadzają.


2

Galaretka , 30 bajtów

DµJṬ€k€jþ9Ż¤;9R¤;€$ḌF)ŒpS=ȷ4ƊƇ

Wypróbuj online!

Niezdarne, ponieważ Jelly nie ma wstawek.

Wyjaśnienie

                                   Given [a, b].
Dµ                   )             Get [digits(a), digits(b)] then map:
  JṬ€k€jþ9Ż¤;9R¤;€$ḌF                Generate all the insertions.
                      Œp           Cartesian product: get all pairs.
                        S=ȷ4ƊƇ     Filter for: sum equal to ȷ4 (10000).

                       Given e.g. [6,3,5]:
J                      Get [1,2,3].
 Ṭ€                    Get [[1], [0,1], [0,0,1]].
   k€                  Split input with these: gets us
                         [[6],[3,5]] , [[6,3],[5]] , [[6,3,5],[]]
     jþ9Ż¤             Join table-wise with [0..9]
                         → [[[6,0,3,5], [6,3,0,5], [6,3,5,0]],
                            [[6,1,3,5], [6,3,1,6], [6,3,5,1]], …]
          ;9R¤;€$      Append the prefixings of the input by [1..9].
                           [[1,6,3,5], [2,6,3,5], [3,6,3,5]]…
                 ḌF    Undigits all, and flatten.

2

PHP, 162 159 bajtów

piękny przykład funkcji generatora!

function f($n){for($n+=.1;$n>=1;$n/=10)for($d=-1;$d++<9;)yield strtr($n,".",$d)/10|0;}foreach(f($argv[1])as$x)foreach(f($argv[2])as$y)$x+$y-1e4||print"$x+$y\n";

pobiera dane wejściowe z argumentów wiersza poleceń; drukuje duplikaty. Uruchom -nr '<code>lub wypróbuj online .


2

Pyth, 18 bajtów

fqsT^;4*FsMvXLRRTT

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ę Xfunkcji. 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ęga 0 ... 9, więc mamy wszystkie możliwe wstawione cyfry i są umieszczane przez L. Zakres jest podawany przez T, który jest domyślnie ustawiony na 10, 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 jest 10000. ;przyjmuje wartość 10tutaj, ponieważ Tjest używana jako zmienna filtrująca, i ;zawsze jako wartość zmiennej, która jest używana.


2

Japt , 30 29 25 23 bajtów

Pobiera dane wejściowe jako tablicę ciągów, generuje tablicę tablic ciągów.

£L²ôs f_à øX
rï k@L²aXx

Spróbuj


Wyjaśnienie

£L²ôs f_à øX
£                :Map each X
 L               :  100
  ²              :  Squared
   ô             :  Range [0,L²]
    s            :  Convert each to a string
      f_         :  Remove elements that return false
        à        :    All combinations of current element
          øX     :    Contains X?
rï k@L²aXx
r                :Reduce by
 ï               : Cartesian product
   k@            :Remove each X that returns true (not 0)
     L²          :  100 squared
      a          :  Absolute difference with
        Xx       :   X reduced by addition

2

JavaScript (węzeł) - 183 136 123 bajtów

123 bajty dzięki Shaggy

a=>b=>(o={},g=(s,h)=>[...s+0].map((y,x)=>{for(y=10;y--;)h(s.slice(0,x)+y+s.slice(x))}))(a,x=>g(b,y=>1e4-x-y?0:o[+x]=+y))&&o

136 bajtów dzięki Arnauldowi

e=(h,c,i=h.length+1,j)=>{for(;i--;)for(j=10;j--;)c(h.slice(0,i)+j+h.slice(i))}
f=(a,b,c=[])=>e(a,n=>e(b,m=>1E4-n-m||c.push([+n,+m])))||c

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.

String.prototype.e=function(c){let h=this,L=h.length,i,j;for(i=0;i<=L;i++)for(j=0;j<=9;j++)c(h.slice(0,i)+j+h.slice(i,L));}
f=(a,b,c=[])=>a.e(n=>b.e(m=>1E4-n-m?c:c.push([+n,+m])))?c:c

Wypróbuj online!

Nie golfił

String.prototype.e=function(c) {
  let h=this,L=h.length,i,j;
  for(i=0;i<=L;i++)
    for(j=0;j<=9;j++)
      c(h.slice(0,i)+j+h.slice(i,L));
}
f=(a, b, c=[]) =>
  a.e(n =>
    b.e(m =>
      1E4-n-m ? c : c.push([+n,+m])
    )
  ) ? c : c

Oto kilka szybkich wygranych . Jest to w zasadzie ten sam kod bez „golf nieprzyjazny” sprawozdaniach ( String.prototype, function, let, this) oraz z kilkoma innymi optymalizacje.
Arnauld

Stamtąd możesz zapisać 4 dodatkowe bajty , używając map()zamiast zewnętrznej forpętli. Uwaga: jedynym powodem, dla którego używamy jjako pierwszego parametru funkcji zwrotnej jest to, że chcemy ją zdefiniować w tym zakresie.
Arnauld

@Arnauld dzięki Naprawdę to doceniam, jesteś legendą. Opublikuj swoją odpowiedź, nie chcę brać twojej, robię to dla zabawy.
Asleepace

1
Nie zamierzam odpowiadać na moje własne wyzwanie, a ten kod jest tylko modyfikacją twojego, więc możesz go używać. Bez obaw!
Arnauld

Powalono sugestie @ Arnaulda do 123 bajtów
Kudłaty

1

Galaretka , 23 bajty

œcL’$$€ċ"⁹o⁼"Ạ
ȷ4ḶṚĖDçƇ

Łą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”).

œcL’$$€ċ"⁹o⁼"Ạ - Link 1, is piar valid?: pairToCheck, originalInputPair
      €        - for each list of digits in pairToCheck: e.g. [9,2,3]
     $         -   last two links as a monad:
    $          -     last two links as a monad:
  L            -       length                                 3
   ’           -       decremented                            2
œc             -     choices of that many items               [[9,2],[9,3],[2,3]]
         ⁹     - chain's right argument (originalInputPair)
        "      - zip with: (i.e. apply the following f(x,y) *respectively* across the results above and the originalInputPair)
       ċ       -   count occurrences
            "  - zip with (this time with an implicit right argument of originalInputPair)
           ⁼   -   equal (non-vectorising version)
          o    - locgical OR (vectorising version) i.e. we now have: [OR(isOneDigitLonger(item1),isEqual(item1)), OR(isOneDigitLonger(item2),isEqual(item2))]
             Ạ - all?

ȷ4ḶṚĖDçƇ - Main Link: list (pair) of lists of digits
ȷ4       - literal 10^4 -> 10000
  Ḷ      - lowered range -> [0,1,2,...,9998,9999]
   Ṛ     - reversed -> [9999,9998,...,2,1,0]
    Ė    - enumerate -> [[1,9999],[2,9998],...,[9998,2],[9999,1],[10000,0]] (N.B. last is redundant, but this does not matter)
     D   - to decimals -> [[[1],[9,9,9,9]],[[2],[9,9,9,8]],...,[[9,9,9,8],[2]],[[9,9,9,9],[1]],[[1,0,0,0,0],[0]]]
       Ƈ - filter keep those for which this is truthy:
      ç  -   call last link as a dyad (with a right argument of the pair of lists of digits)


1

Węgiel drzewny , 33 bajty

ΦE×χφI⟦ι⁻×χφι⟧⌊Eι№E⊕LλΦλ⁻ξρ§⟦θη⟧μ

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

   χ                                10
    φ                               1000
  ×                                 Multiply
 E                                  Map over implicit range
       ι    ι                       Current value
        ⁻×χφ                        Subtract from 10000
      ⟦      ⟧                      Pair of values
     I                              Cast to string
Φ                                   Filter
                ι                   Current pair
               E                    Map
                     λ              Current value
                    L               Length
                   ⊕                Increment
                  E                 Map over implicit range
                       λ            Current value
                      Φ             Filter over characters
                         ξ          Range value
                          ρ         Character index
                        ⁻           Subtract
                            ⟦θη⟧    Original inputs as a list
                                μ   Index of current value
                           §        Get input at that index
                 №                  Count matching values
              ⌊                     Minimum
                                    Implicitly print each pair double-spaced

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.


1

Python 3, 165 160 153 125 117 bajtów

  • Zaoszczędzono 5 bajtów dzięki sugestii @JackBrounstein do usunięcia set z wartości zwracanej, ponieważ dane wyjściowe mogą zawierać duplikaty.
  • Zapisano 7, zastępując range(len(s)) wrange(5) .
  • Zaoszczędzono 23 bajty dzięki sugestii @Erica Duminila, aby zastąpić itertools je zagnieżdżonymi listami (i usunąć spację).
  • Zaoszczędzono 8 dzięki sugestii @Jo Kinga, aby zastąpić rozumienie listy zagnieżdżonej operatorem pojedynczej pętli i modułu.

Korzystanie itertoolsi prosta funkcja pomocnika. Akceptuje ciągi jako dane wejściowe, zwraca zestaw liczb całkowitych jako dane wyjściowe.

c=lambda s:[int(s[:i%5]+str(i//5)+s[i%5:])for i in range(50)]
lambda a,b:{(i,j)for i in c(a)for j in c(b)if i+j==1e4}

1
Ponieważ dane wyjściowe mogą zawierać duplikaty, nie trzeba wywoływać setw ostatnim wierszu dla -5 bajtów.
Jack Brounstein,

@JackBrounstein, Dzięki. Brakowało mi tej części zasad.
user2699,

@EricDuminil, dzięki. Nie wiedziałem o ustalonych zrozumieniach, to fajna sztuczka.
user2699,


1
@JoKing Clever. Po tych wszystkich sugestiach rozwiązanie ledwo przypomina to, od czego zacząłem.
użytkownik2699

1

Rubin , 110 bajtów

Akceptuje ciągi jako dane wejściowe, zwraca tablicę liczb całkowitych.

Na podstawie wersji python . Dla danej liczby całkowitejC 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.

C=->n{(0..49).map{|i|([n[0...i%5],i/5,n[i%5..-1]]*'').to_i}}
->(a,b){C[a].product(C[b]).select{|i,j|i+j==1e4}}

Wypróbuj online!


1

05AB1E (starsza wersja) , 36 bajtów

0ìε.œʒg3‹}εU9ÝεXDgiìësý}}}˜}`âʒOT4mQ

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:

0ì                            # Prepend a 0 before each of the input numbers
  ε                        }  # Map each to:
                            #  Take all possible partitions
     ʒg3‹}                    #  Only keep those of length 1 or 2
          ε              }    #  Map each partition to:
           U                  #   Pop and store the partition in variable `X`
            9Ý                #   List in the range [0, 9]
              ε         }     #   Map each of those digits to:
               X              #    Get the variable `X`
                Dgi           #    If it's a single number (length == 1):
                   ì          #     Prepend `X` before this digit
                  ë           #    Else (length == 2):
                   sý         #     Join both numbers in `X` with the current digit
                  }           #    Close the if-else
                          ˜   #   Flatten the list of lists
`                             # Now push both lists to the stack
 â                            # Create all possible pairs (cartesian product)
  ʒ                           # Filter this list of pairs by:
   O                          #  Take the sum of the two numbers
    T4m                       #  Push 10000 (10^4)
       Q                      #  And check if they are equal

0

Galaretka , 25 bajtów

LŻœṖ€z⁶ZjþØDVẎṢḊ)p/S⁼ȷ4ƊƇ

Wypróbuj online!

Nie jest to najkrótsze rozwiązanie Jelly, ale może ktoś może zagrać w golfa? Jestem zakłopotany

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.