Мой представитель в форме обмена стека?

16

Предпосылка:

Ваша репутация находится в форме обмена стека, если она может быть представлена ​​путем разложения количества ваших медалей (золото, серебро и бронза, подсчитанные отдельно) на их базовые 10 цифр и объединения их в любом заданном порядке с несколькими оговорками.

Разлагая, каждый

  • Цифра золотой медали стоит три цифры.
  • Серебро стоит две цифры.
  • Бронза это одна цифра.
  • Кроме того, поскольку SE не отображает тип медали, если у вас его нет, подсчет 0 медалей для типа не приведет к a [0].

Пример:

  • [1 Gold, 2 Silvers, 3 Bronzes]будет разлагаться на [1,1,1,2,2,3]. 321112 и 213121 являются двумя примерами номера SE-формы для этих медалей.
  • [20 Golds, 0 Silvers, 20 Bronzes]будет разлагаться на [2,2,2,0,0,0,2,0]. 20002022 - это номер SE-формы.
  • [11 Golds, 0 Silvers, 0 Bronzes]будет разлагаться на [1,1,1,1,1,1]. 111111 является единственным номером SE-формы для этого.

При рассмотрении номера SE не будет начальных 0. Например, во втором примере, приведенном выше, 00002222 -> 2222номер SE-формы для [20,0,20].

Ввод, вывод:

Входные данные представляют собой список / кортеж / массив / все, [reputation, gold_medals, silver_medals, bronze_medals]что является неотрицательными целыми числами. Это предполагаемый порядок, но его можно изменить. Просто запишите в своем ответе, если вы это сделаете.

Выходными данными являются любые два согласованных значения для true и false.

Правила:

  • Ввод всегда будет действительным
  • У вас всегда будет хотя бы 1 репутация
  • У вас не может быть никаких медалей, которые всегда должны возвращать ложь.
  • Подсчет медалей не имеет никакого отношения к реальности. Хорошо иметь несколько сотен золотых и без бронзы.
  • Это поэтому выигрывает самый короткий ответ в байтах.

Тестовые случаи:

#[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
источник
Так что же делает репутация в контексте проблемы?
OrangeCherries
3
@OrangeCherries Механически, ничего. Это вдохновило меня на вызов, потому что у меня было 1447 представителей и 4 серебра, 17 бронз на момент написания статьи.
Веска
1
Гибкий ли ввод помимо заказа? Так мог бы я, например, взять входной список [bronze, silver, gold]и отдельный второй вход reputation?
Кевин Круйссен
1
@KevinCruijssen Да, все в порядке. Единственное, что я бы сказал, не разрешено - это принимать входные данные в виде списка списков символов / цифр, составляющих каждое число.
Веска
Допускаются ли какие-либо значения истинности / ложности для вывода или они должны быть двумя последовательными?
Ник Кеннеди

Ответы:

11

05AB1E , 16 14 13 11 10 байт

∞×0KJ‚€{íË

Принимает входные медали в порядке [bronze, silver, gold]первого ввода и reputationвторого ввода.

-1 байт благодаря @Grimy .

Попробуйте онлайн или проверьте все контрольные примеры .

Объяснение:

           # 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-> для -1.
Grimmy
1
@Grimy Иногда полезно, чтобы списки урезались до самых маленьких. :) Благодарность!
Кевин Круйссен
Это 19 байтов в utf-8, а не 10 байтов.
Ли Райан
@LieRyan Вы правы, это действительно 19 байтов в UTF-8. 05AB1E использует (например, Jelly and Charcoal) пользовательскую кодовую страницу , где каждые 256 символов, которые он знает, кодируются в 1 байт каждая. Байты в этой 10-байтовой версии в шестнадцатеричной форме \x19\xd7\x30\x4b\x4a\x82\x80\x7b\xec\xcb: Должна быть возможность запуска этих шестнадцатеричных байтов с --osabieфлагом, но я не уверен, как это сделать в версии 05AB1E Elixir, чтобы быть полностью честным (но я спрошу некоторые другие проверят и свяжутся с вами с ответом).
Кевин Круйссен
@LieRyan В версии 05AB1E (прежняя версия) Python это можно сделать следующим образом (это, конечно, другая программа для другой задачи), но она должна дать вам представление о том, как выполняются шестнадцатеричные байты.
Кевин Круйссен
7

JavaScript (ES6),  92  74 байта

Принимает вход как (['gold','silver','bronze'])('rep'). Возвращает логическое значение.

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

Попробуйте онлайн!


JavaScript (ES6), 74 байта

Принимает вход как (gold, silver, bronze, 'rep'). Возвращает логическое значение.

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

Попробуйте онлайн!

Arnauld
источник
7

MATL , 28 байтов 20 байтов 16 байтов 13 байтов

Возвращает 0 для false и 1 для true. Это может определенно быть в гольфе.

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

Уменьшение до 16 байт, если оценка репутации может быть взята отдельно, а порядок [бронза, серебро, золото], репутация.
До 13 байтов благодаря Луису Мендо.

3:Y"XzVXzY@Um

Попробуйте онлайн!

OrangeCherries
источник
5

Japt , 14 13 12 байт

íp fn ¬á øUg

Принимает вход как [rep, bronze, silver, gold]

Попробуйте или проверьте все тесты

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? 
Воплощение невежества
источник
Я сделал несколько ударов по этому поводу с нескольких разных точек зрения, но не смог сделать лучше, чем 13.
Лохматый
@ Shaggy Оказывается, Åбыло ненужным, так fnкак избавился бы от первого значения. Удаление Åделает это 12 байтов
Воплощение Невежества
Это 16 байтов в utf-8, а не 12 байтов.
Ли Райан
@LieRyan Некоторые языки гольфа используют свои собственные кодировки; Джапт использует ISO-8859-1`
Воплощение неведения
@EmbodimentofIgnorance, Ах, черт возьми, почему я не заметил это ?! Я действительно чувствую себя не в своей тарелке с тех пор, как взял этот месяц в качестве открытой награды за Джапта.
Лохматый
4

Сетчатка 0.8.2 , 45 байт

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

Попробуйте онлайн! Ссылка включает тестовый набор. Объяснение:

,0
,

Удалить ноль баллов.

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

Разверните счетчики золота и серебра и преобразуйте разделитель в новую строку.

%O`.

Сортируйте репутацию и расширенные баллы отдельно.

^(.+)¶\1$

Сравните отсортированные цифры.

Нил
источник
4

Ракетка, 149 107 98 байт

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

Попробуйте онлайн!

Первый раз играю в гольф в ракетке, поэтому все еще ищу улучшения ...

Пояснение (оригинальной более длинной версии, но та же идея):

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

Древесный уголь , 24 байта

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

Попробуйте онлайн! Ссылка на подробную версию кода. Принимает вход в порядке повтор, бронза, серебро, золото и выводит, 1если ответ действителен. Объяснение:

1

Предположим, что ответ действителен.

F⁴F↨NχFι⊞υκ

Цикл по четырем входным значениям. Нажмите каждую цифру каждого значения iраз, где iнаходится индекс с 0 индексами значения. Числовое базовое преобразование используется здесь, поскольку оно преобразует 0в пустой массив.

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

Проверьте, что число каждой цифры в массиве совпадает со значением в первом входе. Если они отличаются, очистите холст.

Нил
источник
Это 60 байтов в utf-8, а не 24 байта.
Ли Райан
@LieRyan Я не говорил, что это были байты UTF-8.
Нил
2

Желе , 18 байт

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

Попробуйте онлайн!

это немного плохо

HyperNeutrino
источник
Это 37 байтов в utf-8, а не 18 байтов.
Ли Райан
@LieRyan Jelly (и многие другие языки гольфа) используют свою собственную кодовую страницу, так что все 256 однобайтовых кодов соответствуют одному из символов, используемых языком.
HyperNeutrino