Коронна сотня коронна корона


26

Я помітив, що в певній грі був своєрідний життєвий лічильник, який замість того, щоб зупинятись 999набрав нову цифру - наступне число було коронною сотнею або 👑00. Після 👑99прийшла корона сотня кроти ( 👑👑0) і останнє число, після 👑👑9, було корона сотня краунтової корони або 👑👑👑, що буде 1110 в десятковій частині.

Ваше завдання - написати програму або функцію, яка виводить цей лічильник.

З огляду на ціле число з діапазону [0,1110](включно з обох кінців), виведіть рядок з трьома символами де

  • кожен персонаж зі списку 0123456789👑
  • корона (👑) може відображатися лише як крайній лівий символ або коли він знаходиться зліва від нього
  • коли це число читається у вигляді десяткового числа, але з коронним рахунком як 10, ви отримуєте назад початкове число

Тестові кейси

   0 → "000"
  15 → "015"
 179 → "179"
 999 → "999"
1000 → "👑00"
1097 → "👑97"
1100 → "👑👑0"
1108 → "👑👑8"
1110 → "👑👑👑"

Ви можете використовувати будь-який недесятковий символ замість вінця. Щоб заохотити гарне друкування, символ корони (послідовність байтів UTF8 "\ 240 \ 159 \ 145 \ 145") вважається одним байтом замість чотирьох. Вашій програмі не потрібно працювати для чисел, що не відповідають допустимому діапазону.

Це , тому найкоротша відповідь, виміряна в байтах, виграє!


4
О, Супер Маріо 3D Земля!
Деусови

2
@Deusovi Я насправді думав про подальшу гру, Super Mario 3D World, але добре здогадався!
Ангс

3
Це має бути номер ІМО для Boaty McBoatFace.
Містер Лістер

Бонус множиться на кількість корон у коді, правда?
Ерік Аутгольфер

3
@JeffZeitlin - це надмірна десяткова система, де число може мати більше ніж одне представлення (навіть не враховуючи провідні нулі). Тоді корона зарезервується як елемент несподіванки, використовується лише в разі необхідності.
Ангс

Відповіді:


2

05AB1E , 20 18 байт

₄‹i₄+¦ëTð.;„1 „  :

Використовує простір для корон.

Спробуйте в Інтернеті або перевірте всі тестові випадки .

Пояснення:

₄‹i               # If the (implicit) input is smaller than 1000:
   ₄+             #  Add 1000 to the (implicit) input
     ¦            #  And remove the leading 1 (so the leading zeros are added)
                  #   i.e. 17 → 1017 → "017"
  ë               # Else:
   Tð.;           #  Replace the first "10" with a space " "
                  #   i.e. 1010 → " 10"
                  #   i.e. 1101 → "1 1"
                  #   i.e. 1110 → "11 "
       1   :    #  Replace every "1 " with "  " (until it no longer changes)
                  #   i.e. " 10" → " 10"
                  #   i.e. "1 1" → "  1"
                  #   i.e. "11 " → "   "


9

JavaScript (ES6),  62 46  44 байт

Збережено 2 байти завдяки @nwellnhof

Виводить корони як xсимволи.

n=>(n+1e4+'').replace(/1+0/,'xxx').slice(-3)

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

Як?

Ми додаємо до введення, примушуємо його до рядка, шукаємо шаблон і замінюємо його . Нарешті, ми повертаємо 3 слідуючих символи.10000/1+0/xxx

Приклади:

0 "10000" "xxx000" "000"123 "10123" "xxx123" "123"1023 "11023" "xxx23" "x23"1103 "11103" "xxx3" "xx3"1110 "11110" "xxx" "xxx"


s.replace(/./g,`#`)акуратний ... У мене був Array(s.length+1).join`#`, і мій регекс теж довший! Приємна робота, +1
Містер Xcoder

@ Mr.Xcoder Це була насправді жахлива ідея. Але це зайняло не один рік, щоб виправити це. : D
Арнольд

8

Мова програмування Шекспіра , 763 692 690 689 683 байт

,.Ajax,.Ford,.Page,.Act I:.Scene I:.[Enter Ajax and Ford]Ford:Listen tothy!Ajax:You big big cat.Scene V:.Ajax:Remember the remainder of the quotient betweenI twice the sum ofa cat a big big cat.Ford:You be the quotient betweenyou twice the sum ofa cat a big big cat.Ajax:You be the sum ofyou a pig.Be you nicer zero?If solet usScene V.Ford:You big big cat.[Exit Ajax][Enter Page]Page:Recall.Ford:You be I.Scene X:.Page:Recall.Am I nicer zero?If notopen heart.If notlet usScene L.Ford:You big big big big big cat.Speak thy.Am I worse a cat?If soyou zero.Scene L:.[Exit Page][Enter Ajax]Ford:You be the sum ofyou a pig.Is you nicer a cat?[Exit Ajax][Enter Page]Ford:If solet usScene X.

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

Використовує " "замість вінців. Ціною ще 4-х байт це можна змінити, щоб натомість показати «видимий» символ.

Пояснення:

,.Ajax,.Ford,.Page,.Act I:.Scene I:.[Enter Ajax and Ford]

    Boilerplate, introducing the characters.

Ford:Listen tothy!

    Input a value to Ajax.

Ajax:You big big cat.

    Set Ford's value to 4 (we will be pushing 4 digits from Ajax onto Ford's personal stack).

Scene V:.Ajax:Remember the remainder of the quotient betweenI twice the sum ofa cat a big big cat.Ford:You be the quotient betweenyou twice the sum ofa cat a big big cat.

    DIGIT-PUSHING LOOP: Push Ajax's last digit onto Ford's stack; divide Ajax by 10.

Ajax:You be the sum ofyou a pig.Be you nicer zero?If solet usScene V.

    Decrement Ford; loop until Ford is 0.

Ford:You big big cat.

    Set Ajax's value to 4 (we will pop 3 digits from Ford's stack in the next loop).

[Exit Ajax][Enter Page]Page:Recall.Ford:You be I.

    Pop the top value off Ford's stack, and store that into Page.
    Here, Page will contain 0 if there are no crowns to be drawn,
    and 1 if there are crowns to be drawn.

Scene X:.Page:Recall.Am I nicer zero?If notopen heart.If notlet usScene L.

    DIGIT-DRAWING LOOP: Pop the top value off of Ford's stack and set Ford equal to that value.
    If there are no crowns to be drawn, output Ford's literal value here, and skip the crown-drawing section.

Ford:You big big big big big cat.Speak thy.Am I worse a cat?If soyou zero.

    Draw crown.
    If we are drawing crowns, and Ford contains 0 here, then we are now done drawing crowns, and thus we store 0 into Page.
    (Put in one more "big" for the crown to look like an @ symbol.)

Scene L:.[Exit Page][Enter Ajax]Ford:You be the sum ofyou a pig.Is you nicer a cat?[Exit Ajax][Enter Page]Ford:If solet usScene X.

    Decrement Ajax; loop until Ajax is 1 (i.e. 3 times).


@HelloGoodbye Дякую, я забув позбутися деяких просторів.
JosiahRyanW

5

Python 2 , 53 байти

Капелюхи відправляються в Арнольд на -22 байти . Рекурсія все ж перемагає.

lambda k:re.sub("1+0","CCC",`k+10000`)[-3:]
import re

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

Python 2 , 51 байт

Це натомість реалізує рекурсивний метод tsh . Збережено 2 байти завдяки ов .

f=lambda n,p=1000:n/p and'C'+f(n-p,p/10)or`n+p`[1:]

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


54 байти , оновивши 1-е рішення так само, як я зробив свою відповідь JS. Схоже, рекурсія все ще перемагає в Python.
Арнольд

1
@Arnauld Дякую: D. Ця редакція справді була SGITW
Містер Xcoder

nwellnhof відтоді вказує, що додавання 10000 призводить до більш прямої моделі 1+0. Звідси ця 53-байтна версія.
Арнольд

@Arnauld Спасибі;) Це досить вражаюче.
Містер Xcoder


3

Сітківка 0,8,2 , 41 байт

\b((.)|..)\b
$#2$*00$&
T`d`_#`(?=....)1+0

Спробуйте в Інтернеті! Використовує #s замість 👑s. Посилання включає тестові випадки. Пояснення:

\b((.)|..)\b
$#2$*00$&

Прокладка 1- і 2-значні числа до трьох цифр.

T`d`_#`(?=....)1+0

Змініть провідні 1s чотиризначних чисел на #s та видаліть наступне 0.


3

Желе , 19 байт - 0 = 19

<ȷ¬ȧDi0ɓ⁶ẋ⁹Ḋ;+ȷDḊṫʋ

Повна програма, що друкує результат, використовуючи пробіл як символ корони.
(Як монадичне посилання виводиться змішаний список цілих цифр і пробілів)

Спробуйте в Інтернеті! Або дивіться тестовий набір .

... можливо, рекурсивна реалізація буде коротшою.

Як?

<ȷ¬ȧDi0ɓ⁶ẋ⁹Ḋ;+ȷDḊṫʋ - Main Link: integer, N    e.g. 1010       or   10
 ȷ                  - literal 1000                  1000            1000
<                   - less than?                    0               1
  ¬                 - logical not                   1               0
    D               - to decimal list               [1,0,1,0]       [1,0]
   ȧ                - logical and                   [1,0,1,0]       0
      0             - literal zero                  0               0
     i              - first index - call this I     2               1  (0 treated as [0] by i)
       ɓ            - new dyadic chain with swapped arguments - i.e. f(N, I)
        ⁶           - literal space character       ' '             ' '
          ⁹         - chain's right argument        2               1
         ẋ          - repeat                        [' ',' ']       [' ']
           Ḋ        - dequeue                       [' ']           []
                  ʋ - last four links as a dyad - i.e. f(N, I)
             +ȷ     -   add 1000                    2010            1010
               D    -   to decimal list             [2,0,1,0]       [1,0,1,0]
                Ḋ   -   dequeue                     [0,1,0]         [0,1,0]
                 ṫ  -   tail from index (I)         [1,0]           [0,1,0]
            ;       - concatenate                   [' ',1,0]       [0,1,0]
                    - implicit print                " 10"           "010"

3

Python 2 , 40 байт

lambda n:'%3s'%`10000+n`.lstrip('1')[1:]

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

Реалізує ідею, подібну до відповіді містера Xcoder, але без регексу. Видаляємо провідні позначки " 1" 10000+n, а також наступний символ, а потім прокладаємо пробіли з довжиною 3. Результат аналогічний використанню рішення ovs,lstrip але не потребує двох випадків.


2

Чисто , 87 байт

Не виводить коронки (використовує c).

import StdEnv,Text
$n#i=3-n/1000-n/1100-n/1110
=("ccc"+lpad(""<+n rem(10^i))i'0')%(i,9)

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

$ n                   // function $ of `n`
 # i =                // define `i` as (the number of digits that aren't crowns)
  3 -                 // three minus
  n / 1000 -          // 1 if first digit is crown
  n / 1100 -          // 1 if second digit is crown
  n / 1110            // 1 if third digit is crown
 = (                  // the string formed by
  "ccc" +             // prefixing three crowns to
  lpad (              // the padding of
   "" <+ n rem (10^i) // non-crown digits of `n`
  ) i '0'             // with zeroes
 ) % (i, 9)           // and removing the extra crowns

Чистота , 99 - 3 = 96 байт

У цього є коронки.

import StdEnv,Text
$n#i=3-n/1000-n/1100-n/1110
=("👑👑👑"+lpad(""<+n rem(10^i))i'0')%(i*4,99)

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


Друга відповідь має оцінку лише 90.
pppery


1

Java 10, 84 83 байти

n->{for(int p=100,t;p>0;n-=t%12*p,p/=10)System.out.printf("%c",t=n/p>9?46:48+n/p);}

Порт @tsh 'C коментар .
Використовує .замість вінців.

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

Альтернативний підхід (84 (87-3) байт):

n->f(n,1000)String f(int n,int p){return n<p?(n+p+"").substring(1):"👑"+f(n-p,p/10);}

Відповідь JavaScript на порт @tsh .

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


1

APL (Dyalog Unicode) , 32 байти

1e3∘{⍵<⍺:1↓⍕⍵+⍺⋄'C',(⍵-⍺)∇⍨⍺÷10}

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

Пряма функція префікса.

Порт відповіді @ tsh JS .

Як:

1e3∘{⍵<⍺:1↓⍕⍵+⍺⋄'C',(⍵-⍺)∇⍨⍺÷10}  Main function, arguments  and  (⍵  input,   1000).
     ⍵<⍺:                           If ⍵<⍺
         1                         Drop (↓) the first element (1) of
                                   Format (⍕); 'stringify'
            ⍵+⍺                     ⍵+⍺
                                   else
                'C',                Concatenate (,) the literal 'C' with
                         ∇⍨         Recursive call (∇) with swapped arguments (⍨)
                    (⍵-⍺)  ⍺÷10     New arguments;   ⍵-⍺;   ⍺÷10






0

Чисто , 96 байт

Я думаю, що 3D Mario Super Super, New Super Mao Bros.2 та Super Mario 3D World мають цю лічильник життя.

import StdEnv,Text
$n#i=3-n/1000-n/1100-n/1110
=("👑👑👑"+lpad(""<+n rem(10^i))i'0')%(i*4,99

Я погоджуюсь з Clean .

Переконайтесь, що я не обманюю.


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