Meu representante está no formulário Stack-Exchange?

16

Premissa:

Sua reputação está no formato Stack-Exchange, se puder ser representada decompondo suas contagens de medalhas (ouro, prata e bronze contadas separadamente) em seus dígitos de base 10 e juntando-as em qualquer ordem, com algumas ressalvas.

Enquanto se decompõe, cada

  • O dígito da medalha de ouro vale três dígitos.
  • A prata vale dois dígitos.
  • Bronze é um dígito.
  • Além disso, como o SE não exibe um tipo de medalha, se você não tiver nenhum, uma contagem de 0 medalhas para um tipo não produzirá a [0].

Exemplo:

  • [1 Gold, 2 Silvers, 3 Bronzes]irá se decompor em [1,1,1,2,2,3]. 321112 e 213121 são dois exemplos de um número de formulário SE para essas medalhas.
  • [20 Golds, 0 Silvers, 20 Bronzes]irá se decompor em [2,2,2,0,0,0,2,0]. 20002022 é um número do formulário SE.
  • [11 Golds, 0 Silvers, 0 Bronzes]irá se decompor em [1,1,1,1,1,1]. 111111 é o único número do formulário SE para isso.

Não haverá 0's iniciais ao considerar um número SE. Por exemplo, no segundo exemplo acima, 00002222 -> 2222não seria considerado um número de formulário SE para [20,0,20].

Entrada / Saída:

Input é uma lista / tupla / array / qualquer um dos [reputation, gold_medals, silver_medals, bronze_medals]quais são números inteiros não negativos. Esta é a ordem assumida, mas pode ser alterada. Basta fazer uma anotação na sua resposta, se o fizer.

Saída são quaisquer dois valores consistentes para verdadeiro e falso.

Regras:

  • A entrada sempre será válida
  • Você sempre terá pelo menos 1 representante
  • Você não pode ter medalhas, o que sempre deve retornar falso então.
  • A contagem de medalhas não tem influência na realidade. Ter várias centenas de ouros e sem bronzes é bom.
  • Este é o pelo que a resposta mais curta em bytes vence.

Casos de teste:

#[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
fonte
Então, o que exatamente a reputação faz no contexto do desafio?
OrangeCherries
3
@OrangeCherries Mecanicamente, nada. Ele inspirou o desafio porque eu tinha 1447 representantes e 4 pratas, 17 bronzes no momento em que escrevi.
Veskah
1
A entrada é flexível além do pedido? Então, eu poderia, por exemplo, pegar uma lista de entrada [bronze, silver, gold]e uma segunda entrada separada reputation?
Kevin Cruijssen
1
@KevinCruijssen Sim, tudo bem. A única coisa que eu diria que não é permitida é usar a entrada como uma lista de listas de caracteres / dígitos que compõem cada número.
Veskah
São permitidos quaisquer valores de verdade / falsidade para a saída ou devem ser dois consistentes?
Nick Kennedy

Respostas:

11

05AB1E , 16 14 13 11 10 bytes

∞×0KJ‚€{íË

Recebe a entrada de medalhas na ordem [bronze, silver, gold]como primeira entrada e reputationcomo segunda entrada.

-1 byte graças a @Grimy .

Experimente online ou verifique todos os casos de teste .

Explicação:

           # 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
fonte
1
3L-> para -1.
Grimmy
1
@ Grimy Às vezes é útil que as listas sejam truncadas para a menor. :) Obrigado!
Kevin Cruijssen
São 19 bytes em utf-8, não 10 bytes.
Lie Ryan
@LieRyan Você está correto, são de fato 19 bytes em UTF-8. O 05AB1E usa (apenas por exemplo Jelly and Charcoal) uma página de códigos personalizada , onde cada 256 caracteres que ele conhece é codificado em 1 byte cada. Os bytes nesta versão de 10 bytes em hexadecimal são \x19\xd7\x30\x4b\x4a\x82\x80\x7b\xec\xcb: Deve ser possível executar esses bytes hexadecimais com o --osabiesinalizador, mas não tenho certeza de como fazê-lo na versão 05AB1E Elixir para ser completamente honesto (mas vou perguntar a alguns outros para verificar e responder com a resposta).
Kevin Cruijssen 22/06/19
@LieRyan Na versão 05AB1E (legada) do Python, isso poderia ser feito assim (é um programa diferente para outro desafio, é claro), mas deve dar uma idéia de como os bytes hexadecimais são executados.
Kevin Cruijssen 22/06/19
7

JavaScript (ES6),  92  74 bytes

Toma entrada como (['gold','silver','bronze'])('rep'). Retorna um valor booleano.

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

Experimente online!


JavaScript (ES6), 74 bytes

Toma entrada como (gold, silver, bronze, 'rep'). Retorna um valor booleano.

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

Experimente online!

Arnauld
fonte
7

MATL , 28 bytes 20 bytes 16 bytes 13 bytes

Retorna 0 para falso e 1 para verdadeiro. Definitivamente, isso pode ser praticado.

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

Até 16 bytes, se a pontuação da reputação puder ser obtida separadamente, e o pedido for [bronze, prata, ouro], reputação
Até 13 bytes, graças a Luis Mendo

3:Y"XzVXzY@Um

Experimente online!

OrangeCherries
fonte
6

Ruby , 69 bytes

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

Experimente online!

Value Ink
fonte
5

Japonês , 14 13 12 bytes

íp fn ¬á øUg

Aceita entrada como [rep, bronze, silver, gold]

Experimente ou verifique todos os casos de teste

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? 
Modalidade de ignorância
fonte
Eu levei algumas facadas nisso de dois ângulos diferentes, mas também não posso fazer melhor que 13.
Shaggy
@Shaggy Acontece que o Åera desnecessário, pois fnse livraria do primeiro valor. A remoção Åfaz com que seja 12 bytes
Modalidade de ignorância
São 16 bytes em utf-8, não 12 bytes.
Lie Ryan
@LieRyan Alguns idiomas de golfe usam suas próprias codificações; O Japt usa a ISO-8859-1`
Modalidade de ignorância
@EmbodimentofIgnorance, Ah, droga, por que não vi isso ?! Eu realmente me sinto tão fora de prática desde que tirei aquele mês de folga para minha recompensa aberta por Japt.
Shaggy
4

Retina 0.8.2 , 45 bytes

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

Experimente online! O link inclui o conjunto de testes. Explicação:

,0
,

Excluir zero pontuação.

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

Expanda as pontuações de ouro e prata e converta o separador em uma nova linha.

%O`.

Classifique a reputação e as pontuações expandidas separadamente.

^(.+)¶\1$

Compare os dígitos classificados.

Neil
fonte
4

Raquete, 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)))

Experimente online!

Golfe pela primeira vez em Racket, ainda está procurando melhorias ...

Explicação (da versão original mais longa, mas com a mesma ideia):

(λ(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
        ""))))
Maçaneta da porta
fonte
2

Carvão , 24 bytes

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

Experimente online! Link é a versão detalhada do código. Recebe entrada no representante de pedidos, bronze, prata, ouro e saídas, 1se o representante for válido. Explicação:

1

Suponha que o representante seja válido.

F⁴F↨NχFι⊞υκ

Faça um loop sobre os quatro valores de entrada. Empurre cada dígito de cada valor ivezes onde iestá o índice indexado 0 do valor. A conversão numérica de base é usada aqui, pois é convertida 0em uma matriz vazia.

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

Verifique se a contagem de cada dígito na matriz corresponde à da primeira entrada. Se houver alguma diferença, limpe a tela.

Neil
fonte
São 60 bytes em utf-8, não 24 bytes.
Lie Ryan
@LieRyan Eu não disse que eram bytes UTF-8.
Neil
2

Geléia , 18 bytes

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

Experimente online!

isso é um pouco ruim

HyperNeutrino
fonte
São 37 bytes em utf-8, não 18 bytes.
Lie Ryan
O @LieRyan Jelly (e muitos outros idiomas de golfe) usa sua própria página de códigos, de forma que todos os códigos de 256 bytes de 1 byte correspondam a um dos caracteres usados ​​pelo idioma.
HyperNeutrino 22/06/19
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

Experimente online!

Aceita entrada como rep, gold, silver, bronze .

Chas Brown
fonte
1

Perl 5 -lF , 62 bytes

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

Experimente online!

Recebe entrada em linhas separadas como

reputation
bronze
silver
gold
Xcali
fonte