Befindet sich mein Repräsentant in Stapelaustauschform?

16

Prämisse:

Ihr Ruf hat die Form eines Stapelwechsels, wenn er dargestellt werden kann, indem Sie Ihre Medaillenzahlen (Gold, Silber und Bronze, die separat gezählt werden) in die 10er-Basisziffern zerlegen und mit ein paar Einschränkungen in einer bestimmten Reihenfolge zusammenfügen.

Während der Zersetzung jeweils

  • Goldmedaille Ziffer ist drei Ziffern wert.
  • Silber ist zwei Ziffern wert.
  • Bronze ist eine Ziffer.
  • Darüber hinaus wird keine Medaille Typ angezeigt werden, da SE , wenn Sie nicht haben, eine Zählung von 0 Medaillen für einen Typ wird nicht eine Ausbeute [0].

Beispiel:

  • [1 Gold, 2 Silvers, 3 Bronzes]wird zerfallen in [1,1,1,2,2,3]. 321112 und 213121 sind zwei Beispiele für eine SE-Form-Nummer für diese Medaillen.
  • [20 Golds, 0 Silvers, 20 Bronzes]wird zerfallen in [2,2,2,0,0,0,2,0]. 20002022 ist eine SE-Formularnummer.
  • [11 Golds, 0 Silvers, 0 Bronzes]wird zerfallen in [1,1,1,1,1,1]. 111111 ist die einzige SE-Formularnummer dafür.

Wenn eine SE-Nummer in Betracht gezogen wird, gibt es keine führenden Nullen. ZB im 2. Beispiel oben 00002222 -> 2222würde keine SE-Formularnummer für berücksichtigt [20,0,20].

Input-Output:

Die Eingabe ist eine Liste / Tupel / Array / was auch immer [reputation, gold_medals, silver_medals, bronze_medals]alle nicht-negative ganze Zahlen sind. Dies ist die angenommene Reihenfolge, kann aber geändert werden. Notieren Sie sich in Ihrer Antwort, wenn Sie dies tun.

Ausgabe sind zwei konsistente Werte für true und false.

Regeln:

  • Die Eingabe ist immer gültig
  • Sie werden immer mindestens 1 Rep haben
  • Sie können überhaupt keine Medaillen haben, was dann immer falsch sein sollte.
  • Die Medaillenzahlen haben keinen Einfluss auf die Realität. Es ist in Ordnung, mehrere hundert Goldstücke und keine Bronzen zu haben.
  • Dies ist also gewinnt die kürzeste Antwort in Bytes.

Testfälle:

#[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
quelle
Was genau macht Reputation im Kontext der Herausforderung?
OrangeCherries
3
@OrangeCherries Mechanisch nichts. Es inspirierte die Herausforderung, da ich zum Zeitpunkt des Schreibens 1447 Wiederholungen und 4 Silbermedaillen und 17 Bronzen hatte.
Veskah,
1
Ist der Eingang neben der Bestellung flexibel? Könnte ich zum Beispiel eine Eingabeliste [bronze, silver, gold]und eine getrennte zweite Eingabe nehmen reputation?
Kevin Cruijssen
1
@ KevinCruijssen Ja, das ist in Ordnung. Das Einzige, was ich als unzulässig bezeichnen würde, ist die Eingabe als Liste von Zeichen / Ziffern, aus denen jede Zahl besteht.
Veskah,
Sind für die Ausgabe Wahrheits- / Falschwerte zulässig oder müssen es zwei konsistente Werte sein?
Nick Kennedy

Antworten:

11

05AB1E , 16 14 13 11 10 Bytes

∞×0KJ‚€{íË

Nimmt die Medailleneingabe in der Reihenfolge [bronze, silver, gold]als erste Eingabe und reputationals zweite Eingabe.

-1 Byte dank @Grimy .

Probieren Sie es online aus oder überprüfen Sie alle Testfälle .

Erläuterung:

           # 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
quelle
1
3L-> für -1.
Grimmy
1
@Grimy Manchmal ist es nützlich, dass Listen auf die kleinste gekürzt werden. :) Vielen Dank!
Kevin Cruijssen
Dies sind 19 Bytes in utf-8, nicht 10 Bytes.
Lie Ryan
@LieRyan Du hast recht, es sind tatsächlich 19 Bytes in UTF-8. 05AB1E verwendet (nur zum Beispiel Jelly und Charcoal) eine benutzerdefinierte Codepage , bei der alle 256 bekannten Zeichen in jeweils 1 Byte codiert werden. Die Bytes in dieser 10-Byte-Version sind hexadezimal \x19\xd7\x30\x4b\x4a\x82\x80\x7b\xec\xcb: Es sollte möglich sein, diese hexadezimalen Bytes mit dem --osabieFlag auszuführen , aber ich bin mir nicht sicher, wie ich das in der 05AB1E Elixir-Version tun soll, um ganz ehrlich zu sein (aber ich werde einige fragen andere, um die Antwort zu bestätigen und sich mit Ihnen in Verbindung zu setzen).
Kevin Cruijssen
@LieRyan In 05AB1E (Legacy) Python - Version könnte es geschehen , wie dies (es ist ein anderes Programm für eine andere Herausforderung natürlich), aber es sollte Ihnen die Idee geben , wie das hexadezimale Bytes ausgeführt werden.
Kevin Cruijssen
7

JavaScript (ES6),  92 bis  74 Byte

Übernimmt die Eingabe als (['gold','silver','bronze'])('rep'). Gibt einen Booleschen Wert zurück.

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

Probieren Sie es online!


JavaScript (ES6), 74 Byte

Übernimmt die Eingabe als (gold, silver, bronze, 'rep'). Gibt einen Booleschen Wert zurück.

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

Probieren Sie es online!

Arnauld
quelle
7

MATL , 28 Bytes 20 Bytes 16 Bytes 13 Bytes

Gibt 0 für falsch und 1 für wahr zurück. Dies kann auf jeden Fall heruntergolfen werden.

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

Bis zu 16 Bytes, wenn der Reputationswert separat erfasst werden kann und die Reihenfolge [Bronze, Silber, Gold] ist. Reputation
Bis zu 13 Bytes dank Luis Mendo

3:Y"XzVXzY@Um

Probieren Sie es online!

Orangenkirschen
quelle
6

Ruby , 69 Bytes

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

Probieren Sie es online!

Wert Tinte
quelle
5

Japt , 14 13 12 Bytes

íp fn ¬á øUg

Übernimmt die Eingabe als [rep, bronze, silver, gold]

Probieren Sie es aus oder überprüfen Sie alle Testfälle

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? 
Verkörperung der Ignoranz
quelle
Ich habe ein paar Stiche aus verschiedenen Blickwinkeln gemacht, kann es aber auch nicht besser als 13 machen.
Shaggy
@Shaggy Stellt sich heraus, dass das Åunnötig war, da fnder erste Wert wegfallen würde. Entfernen Åmacht es 12 Bytes
Ausführungsform der Ignoranz
Dies sind 16 Bytes in utf-8, nicht 12 Bytes.
Lie Ryan
@LieRyan Einige Golfsprachen verwenden ihre eigenen Kodierungen. Japt verwendet ISO-8859-1
Verkörperung der Ignoranz
@EmbodimentofIgnorance, Ah, verdammt, warum habe ich das nicht bemerkt ?! Ich fühle mich wirklich so aus der Übung, seit ich diesen Monat frei genommen habe, um mein offenes Kopfgeld für Japt zu erhalten.
Shaggy
4

Retina 0,8,2 , 45 Bytes

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

Probieren Sie es online! Link enthält Testsuite. Erläuterung:

,0
,

Löschen Sie null Punkte.

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

Erweitern Sie die Punkte für Gold und Silber und wandeln Sie das Trennzeichen in eine neue Zeile um.

%O`.

Sortieren Sie die Reputation und die erweiterten Punktzahlen getrennt.

^(.+)¶\1$

Vergleichen Sie die sortierten Ziffern.

Neil
quelle
4

Schläger, 149 107 98 Bytes

(λ(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)))

Probieren Sie es online!

Zum ersten Mal Golf in Racket, also immer noch auf der Suche nach Verbesserungen ...

Erklärung (der ursprünglichen längeren Version, aber die gleiche Idee):

(λ(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
        ""))))
Türknauf
quelle
2

Kohle , 24 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Übernimmt Eingaben in der Reihenfolge rep, bronze, silber, gold und gibt aus, 1ob die rep gültig ist. Erläuterung:

1

Angenommen, die Wiederholung ist gültig.

F⁴F↨NχFι⊞υκ

Durchlaufen Sie die vier Eingangswerte. Schieben Sie jede Ziffer jedes Werts imal, wobei ider Index des Werts mit dem Index 0 angegeben ist. Die numerische Basiskonvertierung wird hier verwendet, da sie 0in ein leeres Array konvertiert .

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

Überprüfen Sie, ob die Anzahl der Ziffern im Array mit der Anzahl in der ersten Eingabe übereinstimmt. Wenn es Unterschiede gibt, löschen Sie die Leinwand.

Neil
quelle
Dies sind 60 Bytes in utf-8, nicht 24 Bytes.
Lie Ryan
@LieRyan Ich habe nicht gesagt, dass es UTF-8-Bytes sind.
Neil
2

Jelly , 18 Bytes

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

Probieren Sie es online!

das ist ein bisschen schlimm

HyperNeutrino
quelle
Dies sind 37 Bytes in utf-8, nicht 18 Bytes.
Lie Ryan
@LieRyan Jelly (und viele andere Golfsprachen) verwenden eine eigene Codepage, sodass alle 256 1-Byte-Codes einem der von der Sprache verwendeten Zeichen entsprechen.
HyperNeutrino
1

Python 2 , 80 79 77 68 Bytes

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

Probieren Sie es online!

Übernimmt die Eingabe als rep, gold, silver, bronze.

Chas Brown
quelle
1

Perl 5 -lF , 62 Bytes

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

Probieren Sie es online!

Übernimmt die Eingabe in separaten Zeilen als

reputation
bronze
silver
gold
Xcali
quelle