Чи є мій представник у формі обміну стеками?


16

Приміщення:

Ваша репутація є у формі Stack-Exchange, якщо її можна представити, розклавши підрахунки медалей (золото, срібло та бронзу окремо) на основні 10 цифр та з'єднавши їх у будь-якому заданому порядку з кількома застереженнями.

Поки розкладаються, кожен

  • Розмір золотої медалі коштує три цифри.
  • Срібло коштує дві цифри.
  • Бронза - це одна цифра.
  • Крім того, оскільки SE не відображає тип медалі, якщо у вас її немає, підрахунок 0 медалей за тип не дасть а [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 для цього.

Не буде провідних 0, якщо розглядати номер SE. Наприклад, у другому прикладі вище, 00002222 -> 2222це не вважатиметься числом форми SE [20,0,20].

Введення-виведення:

Вхід - це список / кортеж / масив / що б не було з [reputation, gold_medals, silver_medals, bronze_medals]усіх негативних чисел. Це припущений порядок, але його можна змінити. Просто зробіть замітку у своїй відповіді, якщо це зробити.

Вихід - це будь-які два послідовних значення для істинного та хибного.

Правила:

  • Введення завжди буде дійсним
  • Ви завжди матимете щонайменше 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

так що саме репутація робить у контексті виклику?
OrangeCherries

3
@OrangeCherries Механічно нічого. Це викликало виклик, тому що я мав 1447 реп і 4 срібних, 17 бронз на момент написання.
Веска

1
Чи є вхід гнучким, крім замовлення? Так я можу, наприклад, взяти список вхідних даних [bronze, silver, gold]та відокремлений другий вхід reputation?
Кевін Круїйсен

1
@KevinCruijssen Так, це добре. Єдине, що я б сказав, заборонено - це введення списку символів / цифр, що складають кожне число.
Веська

Чи допускаються будь-які значення truthy / falesy для виведення чи це повинні бути два послідовних?
Нік Кеннеді

Відповіді:


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 Іноді корисно, щоб списки були усічені до найменшого. :) Спасибі!
Kevin Cruijssen

Це 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``)

Спробуйте в Інтернеті!


7

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

Повертає 0 для помилкових та 1 для істинних. Це, безумовно, можна пограти в гольф.

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

До 16 байт, якщо оцінка репутації можна взяти окремо, а порядок [бронза, срібло, золото], репутація
Вниз до 13 байт завдяки Луїсу Мендо

3:Y"XzVXzY@Um

Спробуйте в Інтернеті!




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 Деякі мови для гольфу використовують власні кодування; Japt використовує ISO-8859-1`
ігнорування

@EmbodimentofIgnorance, Ах, чортове, чому я цього не помітив ?! Я справді відчуваю себе таким, що не в практиці, оскільки я взяв цей місяць у відпустці для своєї відкритої виграші для Japt.
Кошлатий

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Ṣ¤

Спробуйте в Інтернеті!

це трохи погано


Це 37 байт у utf-8, а не 18 байт.
Лежать Раян

@LieRyan Jelly (та багато інших мов для гри в гольф) використовують власну кодову сторінку, щоб усі 256 1-байтових кодів відповідали одному з символів, які використовуються цією мовою.
HyperNeutrino


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.