Czy mój przedstawiciel jest w formie wymiany stosów?

16

Przesłanka:

Twoja reputacja jest w formie wymiany stosu, jeśli można ją przedstawić poprzez rozłożenie liczby medali (złoto, srebro i brąz liczone osobno) na ich 10 cyfr podstawowych i połączenie ich w dowolnej kolejności, z kilkoma zastrzeżeniami.

Podczas rozkładu każdy

  • Cyfra złotego medalu jest warta trzy cyfry.
  • Srebro jest warte dwie cyfry.
  • Brąz to jedna cyfra.
  • Dodatkowo, ponieważ SE nie wyświetla typu medalu, jeśli go nie masz, liczba 0 medali dla danego typu nie da wyniku [0].

Przykład:

  • [1 Gold, 2 Silvers, 3 Bronzes]rozpadnie się na [1,1,1,2,2,3]. 321112 i 213121 to dwa przykłady numeru w kształcie litery SE dla tych medali.
  • [20 Golds, 0 Silvers, 20 Bronzes]rozpadnie się na [2,2,2,0,0,0,2,0]. 20002022 to numer formularza SE.
  • [11 Golds, 0 Silvers, 0 Bronzes]rozpadnie się na [1,1,1,1,1,1]. 111111 jest jedynym numerem tego formularza SE.

Podczas rozważania numeru SE nie będzie żadnych początkowych zer. Np. W drugim przykładzie powyżej 00002222 -> 2222nie byłby uważany za numer formularza SE dla [20,0,20].

Wejście wyjście:

Dane wejściowe to lista / krotka / tablica / cokolwiek, z [reputation, gold_medals, silver_medals, bronze_medals]których wszystkie są liczbami całkowitymi nieujemnymi. Jest to przyjęta kolejność, ale można ją zmienić. Po prostu zanotuj odpowiedź.

Dane wyjściowe to dowolne dwie spójne wartości true i false.

Zasady:

  • Dane wejściowe zawsze będą prawidłowe
  • Zawsze będziesz mieć co najmniej 1 powtórzenie
  • Nie możesz w ogóle mieć medali, co zawsze powinno zwracać wartość false.
  • Liczenie medali nie ma wpływu na rzeczywistość. Posiadanie kilkuset złotych i brak brązów jest w porządku.
  • To jest więc wygrywa najkrótsza odpowiedź w bajtach.

Przypadki testowe:

#[Rep, Gold, Silver, Bronze] -> Output
[4, 0, 0, 4]       -> True
[1447, 0, 4, 17]   -> True
[74414, 4, 0, 17]  -> True
[4444, 4, 0, 4]    -> True
[4455, 0, 54, 0]   -> True
[5355, 5, 0, 3]    -> True
[53535, 5, 3, 0]   -> True
[4444, 0, 0, 4444] -> True
[444, 4, 0, 0]     -> True
[1234, 0, 0, 1234] -> True
[1234, 0, 0, 4321] -> True

[4444, 1, 0, 1]      -> False
[5555, 5, 0, 55]     -> False
[1234, 1, 23, 4]     -> False
[1, 0, 0, 0]         -> False
[1001001, 0, 10, 10] -> False
Veskah
źródło
więc co dokładnie robi reputacja w kontekście wyzwania?
OrangeCherries,
3
@OrangeCherries Mechanicznie, nic. Inspirowało to wyzwanie, ponieważ miałem 1447 powtórzeń i 4 srebrniki, 17 brązów w momencie pisania.
Veskah
1
Czy dane wejściowe są elastyczne oprócz zamówienia? Czy mogę na przykład wziąć listę wejść [bronze, silver, gold]i osobne drugie wejście reputation?
Kevin Cruijssen
1
@KevinCruijssen Tak, w porządku. Jedyne, co powiedziałbym, że jest zabronione, to przyjmowanie danych wejściowych jako listy list znaków / cyfr, które składają się na każdą liczbę.
Veskah
Czy dozwolone są jakieś wartości prawda / fałsz dla danych wyjściowych, czy też muszą to być dwie spójne wartości?
Nick Kennedy,

Odpowiedzi:

11

05AB1E , 16 14 13 11 10 bajtów

∞×0KJ‚€{íË

Pobiera dane medali w kolejności [bronze, silver, gold]jako pierwsze wejście i reputationdrugie wejście.

-1 bajt dzięki @Grimy .

Wypróbuj online lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie:

           # Push an infinite positive list: [1,2,3,...]
 ×          # Repeat the values in the (implicit) input-list that many times as string
            # (since the input-list contains just 3 values, the rest of the infinite
            #  list is ignored)
  0K        # Remove all 0s (so all "0", "00" and "000")
    J       # Join the strings in the list together
           # Pair this string with the (implicit) second input
      €{í   # Sort the digits in both strings in descending order
         Ë  # And check if both are now equal
            # (after which the result is output implicitly as result)
Kevin Cruijssen
źródło
1
3L-> dla -1.
Grimmy,
1
@Grimy Czasami przydatne jest, aby listy były skracane do najmniejszej. :) Dzięki!
Kevin Cruijssen
Jest to 19 bajtów w utf-8, a nie 10 bajtów.
Lie Ryan
@LieRyan Masz rację, w rzeczywistości jest to 19 bajtów w UTF-8. 05AB1E używa (tylko na przykład Jelly i Charcoal) niestandardowej strony kodowej , w której każde znane 256 znaków jest zakodowane w 1 bajcie. Bajty w tej 10-bajtowej wersji szesnastkowej to \x19\xd7\x30\x4b\x4a\x82\x80\x7b\xec\xcb: Powinno być możliwe uruchomienie tych bajtów szesnastkowych z --osabieflagą, ale nie jestem pewien, jak to zrobić w wersji Elixir 05AB1E, aby być całkowicie uczciwym (ale poproszę o trochę inne osoby w celu weryfikacji i odpowiedzi z odpowiedzią).
Kevin Cruijssen
@LieRyan W wersji 05AB1E (starszej) wersji języka Python można to zrobić w ten sposób (jest to oczywiście inny program do innego wyzwania), ale powinno dać ci wyobrażenie o tym, jak uruchamiane są bajty szesnastkowe.
Kevin Cruijssen
7

JavaScript (ES6),  92  74 bajty

Pobiera dane wejściowe jako (['gold','silver','bronze'])('rep'). Zwraca wartość logiczną.

b=>r=>[...b.map((n,i)=>n.repeat(+n&&3-i)).join``].sort()+''==[...r].sort()

Wypróbuj online!


JavaScript (ES6), 74 bajty

Pobiera dane wejściowe jako (gold, silver, bronze, 'rep'). Zwraca wartość logiczną.

(g,s,b,r)=>(F=s=>[...s].sort()+0)(r)==F([g,g,g,s,s,b].filter(x=>x).join``)

Wypróbuj online!

Arnauld
źródło
7

MATL , 28 bajtów 20 bajtów 16 bajtów 13 bajtów

Zwraca 0 dla wartości false i 1 dla wartości true. Można to zdecydowanie pograć w golfa.

[1,3,2,1]Y"t2:7)XzVXzY@Ums0>

Do 16 bajtów, jeśli wynik reputacji można wziąć osobno, a kolejność to [brąz, srebro, złoto], reputacja
Do 13 bajtów dzięki Luisowi Mendo

3:Y"XzVXzY@Um

Wypróbuj online!

Wiśnie Pomarańczowe
źródło
6

Rubinowy , 69 bajtów

->r,g,s,b{([g,g,g,s,s,b]-[0]).flat_map(&:digits).sort==r.digits.sort}

Wypróbuj online!

Wartość tuszu
źródło
5

Japt , 14 13 12 bajtów

íp fn ¬á øUg

Pobiera dane wejściowe jako [rep, bronze, silver, gold]

Wypróbuj lub Zweryfikuj wszystkie przypadki testowe

Sample input: U = [1447, 17, 4, 0]
íp            Repeats each value of U by it's index amount e.g. ["","17","44","000"]
  fn          Remove all falsy values when converted to a number e.g. ["17","44"]
    ¬         Concatenate e.g. "1744"
     á        All permutations e.g. ["1744","1744","1474","1447","1474","1447","7144","7144","7414","7441","7414","7441","4174","4147","4714","4741","4417","4471","4174","4147","4714","4741","4417","4471"]
      øUg     Does it contain the first item of the input? 
Wcielenie ignorancji
źródło
Zrobiłem kilka ciosów pod różnymi kątami, ale nie mogę też zrobić lepiej niż 13.
Kudłaty
@Shaggy Okazuje się, że Åbył niepotrzebny, ponieważ pozbyłby się fnpierwszej wartości. Usunięcie Åpowoduje, że powstaje 12 bajtów
Embodiment of Ignorance
Jest to 16 bajtów w utf-8, a nie 12 bajtów.
Lie Ryan,
@LieRyan Niektóre języki gry w golfa używają własnych kodowań; Japt używa ISO-8859-1 '
of Ignorance
@EmbodimentofIgnorance, Ach, cholera, dlaczego tego nie zauważyłem ?! Tak naprawdę nie czuję się tak dobrze, ponieważ wziąłem ten miesiąc wolnego za moją otwartą nagrodę za Japt.
Shaggy
4

Retina 0.8.2 , 45 bajtów

,0
,
,(\d*),(\d*),
¶$1$1$1$2$2
%O`.
^(.+)¶\1$

Wypróbuj online! Link zawiera pakiet testowy. Wyjaśnienie:

,0
,

Usuń zero wyników.

,(\d*),(\d*),
¶$1$1$1$2$2

Rozwiń złote i srebrne wyniki i przekonwertuj separator na nowy wiersz.

%O`.

Posortuj osobno reputację i wyniki rozszerzone.

^(.+)¶\1$

Porównaj posortowane cyfry.

Neil
źródło
4

Rakieta, 149 107 98 bajtów

(λ(r b s g[h(λ x(sort(string->list(apply ~a(remq*'(0)x)))char<?))])(equal?(h r)(h b s s g g g)))

Wypróbuj online!

Po raz pierwszy gra w golfa w Rakiety, więc wciąż szukam ulepszeń ...

Objaśnienie (oryginalnej dłuższej wersji, ale ten sam pomysł):

(λ(r b                              ; take rep and badges as arguments
     [g(λ(x)                        ; helper function g which takes a string
         (sort                      ; and returns the sorted
           (string->list x)         ; list of characters
           char<?))])               ; (sort by ascii code)
  (equal?                           ; compare...
    (g(~a r))                       ; g called on the rep converted to string
    (g                              ; and g called on...
      (string-join                  ; the concatenation of
        (map ~a                     ; the stringified elements of
             (append*               ; the flattened list given by
               (filter              ; the elements of the following list where
                 (λ(x)(>(car x)0))  ; the badge count is nonzero:
                 (map make-list     ; repeat the badge counts
                      '(1 2 3)b)))) ; 1, 2, and 3 times respectively
        ""))))
Klamka
źródło
2

Węgiel drzewny , 24 bajty

1F⁴F↨NχFι⊞υκFχ¿⁻№υι№θIι⎚

Wypróbuj online! Link jest do pełnej wersji kodu. Pobiera dane wejściowe w powtórzeniu zamówienia, brązie, srebrze, złocie i wyjściach, 1jeśli powtórzenie jest ważne. Wyjaśnienie:

1

Załóż, że powtórzenie jest prawidłowe.

F⁴F↨NχFι⊞υκ

Zapętlić cztery wartości wejściowe. Naciśnij każdą cyfrę każdej wartości irazy, gdzie ijest indeksowany indeks wartości. Stosuje się tutaj liczbową konwersję podstawową, ponieważ konwertuje 0ona na pustą tablicę.

Fχ¿⁻№υι№θIι⎚

Sprawdź, czy liczba każdej cyfry w tablicy odpowiada tej z pierwszego wejścia. Jeśli coś się różni, wyczyść płótno.

Neil
źródło
To jest 60 bajtów w utf-8, a nie 24 bajty.
Lie Ryan,
@LieRyan Nie powiedziałem, że to bajty UTF-8.
Neil
2

Galaretka , 18 bajtów

DẋṠƊ€ẋ"3RU¤FṢ⁼⁴DṢ¤

Wypróbuj online!

to jest trochę złe

HyperNeutrino
źródło
Jest to 37 bajtów w utf-8, a nie 18 bajtów.
Lie Ryan,
@LieRyan Jelly (i wiele innych języków gry w golfa) używają własnej strony kodowej, tak aby wszystkie 256 1-bajtowych kodów odpowiadało jednemu ze znaków używanych przez język.
HyperNeutrino
1

Python 2 , 80 79 77 68 bajtów

lambda r,g,s,b:S((g>0)*3*`g`+(s>0)*2*`s`+(b>0)*`b`)==S(`r`)
S=sorted

Wypróbuj online!

Pobiera dane wejściowe jako rep, gold, silver, bronze.

Chas Brown
źródło
1

Perl 5 -lF , 62 bajty

map{@r=sort/./g,@r if($_=<>x$_)>0}1..3;@F=sort@F;say"@r"eq"@F"

Wypróbuj online!

Pobiera dane w osobnych wierszach jako

reputation
bronze
silver
gold
Xcali
źródło