Vương miện trăm vương miện


26

Tôi nhận thấy một trò chơi nào đó có một bộ đếm cuộc sống đặc biệt, thay vì dừng lại 999, đã đạt được một chữ số mới - số tiếp theo là vương miện hàng trăm hoặc 👑00. Sau khi 👑99đến vương miện trăm crownty ( 👑👑0) và số cuối cùng, sau đó 👑👑9, là vương miện trăm vương miện hoặc 👑👑👑, sẽ là 1110 trong số thập phân.

Nhiệm vụ của bạn là viết một chương trình hoặc một hàm tạo ra bộ đếm này.

Cho một số nguyên từ phạm vi [0,1110](bao gồm cả hai đầu), xuất ra một chuỗi ba ký tự trong đó

  • mỗi nhân vật là từ danh sách 0123456789👑
  • vương miện (👑) chỉ có thể xuất hiện dưới dạng ký tự ngoài cùng bên trái hoặc khi có vương miện ở bên trái của nó
  • khi số này được đọc dưới dạng số thập phân nhưng với vương miện được tính là 10, bạn sẽ lấy lại số ban đầu

Các trường hợp thử nghiệm

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

Bạn có thể sử dụng bất kỳ ký tự không thập phân thay vì vương miện. Để khuyến khích in ấn đẹp, ký tự vương miện (chuỗi byte UTF8 "\ 240 \ 159 \ 145 \ 145") được tính là một byte thay vì bốn. Chương trình của bạn không phải làm việc cho các số ngoài phạm vi hợp lệ.

Đây là , vì vậy câu trả lời ngắn nhất, được đo bằng byte, sẽ thắng!


4
Ôi, Super Mario 3D Land!
Deusovi

2
@Deusovi Tôi thực sự đã nghĩ về trò chơi tiếp theo, Super Mario 3D World, nhưng cũng đoán được!
Angs

3
Đây phải là số IMO cho Boaty McBoatFace.
Ông Lister

Phần thưởng được nhân với số lượng vương miện trong mã, phải không?
Erik the Outgolfer

3
@JeffZeitlin đó là một hệ thập phân dư thừa, trong đó một số có thể có nhiều hơn một đại diện (thậm chí không quan tâm đến các số 0 đứng đầu). Vương miện sau đó được dành riêng như một yếu tố bất ngờ, chỉ được sử dụng khi thực sự cần thiết.
Angs

Câu trả lời:


2

05AB1E , 20 18 byte

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

Sử dụng không gian cho vương miện.

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

₄‹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 byte

Đã lưu 2 byte nhờ @nwellnhof

Xuất ra vương miện dưới dạng xký tự.

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

Hãy thử trực tuyến!

Làm sao?

Chúng tôi thêm 10000 vào đầu vào, ép nó thành một chuỗi, tìm /1+0/mẫu và thay thế nó bằng xxx. Cuối cùng, chúng tôi trả lại 3 ký tự dấu.

Ví dụ:

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


s.replace(/./g,`#`)gọn gàng ... tôi đã có Array(s.length+1).join`#`, và regex của tôi cũng dài hơn! Làm tốt lắm, +1
Ông Xcoder

@ Mr.Xcoder Đó thực sự là một ý tưởng tồi tệ. Nhưng phải mất hơn một năm để sửa nó. : D
Arnauld

8

Ngôn ngữ lập trình Shakespeare , 763 692 690 689 683 byte

,.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.

Hãy thử trực tuyến!

Công dụng " " thay cho vương miện. Với chi phí thêm 4 byte, điều này có thể được sửa đổi để hiển thị một ký tự "hiển thị" thay thế.

Giải trình:

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


@Hellooodbye Cảm ơn bạn, tôi đã quên thoát khỏi một số không gian.
JosiahRyanW

5

Con trăn 2 , 53 byte

Ngả mũ với Arnauld cho -22 byte . Đệ quy vẫn thắng, mặc dù.

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

Hãy thử trực tuyến!

Con trăn 2 , 51 byte

Điều này thay vì thực hiện phương pháp đệ quy của tsh . Lưu được 2 byte nhờ vào ovs .

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

Hãy thử trực tuyến!


54 byte bằng cách cập nhật giải pháp thứ 1 giống như cách tôi đã làm với câu trả lời JS của mình. Dường như đệ quy vẫn thắng trong Python.
Arnauld

1
@Arnauld Cảm ơn: D. Bản chỉnh sửa này thực sự là một SGITW
Ông

nwellnhof đã chỉ ra rằng việc thêm 10000 dẫn đến mô hình đơn giản hơn 1+0. Do đó phiên bản 53 byte này .
Arnauld

@Arnauld Cảm ơn;) Điều đó khá ấn tượng.
Ông Xcoder


3

Võng mạc 0.8.2 , 41 byte

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

Hãy thử trực tuyến! Sử dụng #s thay vì 👑s. Liên kết bao gồm các trường hợp thử nghiệm. Giải trình:

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

Pad số 1- và 2 chữ số thành ba chữ số.

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

Thay đổi 1các số có 4 chữ số hàng đầu thành #s và xóa số tiếp theo 0.


3

Thạch , 19 byte - 0 = 19

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

Một chương trình đầy đủ in kết quả bằng cách sử dụng một ký tự khoảng trắng làm vương miện.
(Là một liên kết đơn, một danh sách hỗn hợp gồm các chữ số nguyên và ký tự khoảng trắng được tạo ra)

Hãy thử trực tuyến! Hoặc xem bộ thử nghiệm .

... có thể việc thực hiện đệ quy sẽ ngắn hơn.

Làm sao?

<ȷ¬ȧ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 byte

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

Hãy thử trực tuyến!

Thực hiện một ý tưởng tương tự như câu trả lời dựa trên regex của ông Xcoder nhưng không có biểu thức chính quy. Chúng tôi loại bỏ hàng đầu 1 10000+ncũng như ký tự tiếp theo, sau đó đệm khoảng trắng đến chiều dài 3. Kết quả tương tự như giải pháp của ovs sử dụng lstripnhưng không cần hai trường hợp.


2

Sạch , 87 byte

Không xuất mão (sử dụng c).

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

Hãy thử trực tuyến!

$ 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

Sạch , 99 - 3 = 96 byte

Cái này có vương miện.

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

Hãy thử trực tuyến!


Câu trả lời thứ hai có số điểm chỉ 90.
pppery

1

Japt, 20 byte

Một cảng ngây thơ (và hơi say!) Của giải pháp Arnauld. Sử dụng "cho vương miện.

U+A³ s r"^21*0"_çQÃÅ

Thử nó



1

APL (Unicode Dy) , 32 byte

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

Hãy thử trực tuyến!

Tiền tố chức năng trực tiếp.

Cảng trả lời JS @ tsh .

Làm sao:

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

1

PHP, 71 byte

for($n=$argn,$x=1e4;1<$x/=10;$n%=$n<$x?$x/10:$x)echo$n<$x?$n/$x*10|0:C;

in Ccho vương miện. Chạy như ống với -nRhoặc thử trực tuyến .



1

C,  84  58 byte

Cảm ơn @tsh vì đã lưu 25 byte và cảm ơn @ceilingcat vì đã lưu một byte!

f(n,p){for(p=1e3;p/=10;)n-=putchar(n/p>9?46:48+n/p)%12*p;}

Hãy thử trực tuyến!


1
f(n,p){for(p=1000;p/=10;)n-=putchar(n/p>9?46:48+n/p)%12*p;}
tsh



0

Sạch , 96 byte

Tôi nghĩ Super Mario 3D Land, Super Mao Bros.2 mới và Super Mario 3D World có bộ đếm cuộc sống này.

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

Tôi đồng ý với Clean .

Xác nhận rằng tôi không gian lận.


3
Chào mừng đến với trang web. Ngôn ngữ này là gì?
Phù thủy lúa mì
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.