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

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)

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!


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!




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? 

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.



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
        ""))))

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.


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


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.