크라운 백 크라운 크라운


26

특정 게임에 특이한 생활 카운터가 있다는 것을 알았습니다.이 카운터는에 멈추지 않고 999새로운 숫자를 얻었습니다. 다음 숫자는 백 또는 크라운 이었습니다 👑00. 후 👑99크라운 백 crownty ( 👑👑0)와 마지막 번호를 후 👑👑9였다 크라운 백 crownty 왕관 또는 👑👑👑진수로 1110 것입니다.

당신의 임무는 이 카운터 를 출력 하는 프로그램이나 함수 를 작성하는 것 입니다.

범위의 정수 [0,1110](양쪽에 포함)가 주어지면 3 개의 문자열을 출력합니다.

  • 모든 캐릭터는 목록에서 0123456789👑
  • 크라운 (👑)은 맨 왼쪽 문자로 나타나거나 왼쪽에 크라운이있을 때만 나타날 수 있습니다.
  • 이 숫자를 10 진수로 읽지 만 용두를로 계산 10하면 원래 숫자가 다시 나타납니다.

테스트 사례

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

크라운 대신 10 진수가 아닌 문자를 사용할 수 있습니다. 예쁘게 인쇄하기 위해 크라운 문자 (UTF8 바이트 시퀀스 "\ 240 \ 159 \ 145 \ 145")는 4 개 대신 1 바이트로 계산됩니다. 유효 범위를 벗어난 숫자에 대해서는 프로그램이 작동하지 않아도됩니다.

이것은 이므로 바이트 단위로 측정 된 가장 짧은 대답이 승리합니다!


4
오, 슈퍼 마리오 3D 랜드!
Deusovi

2
@Deusovi 나는 실제로 후속 게임 Super Mario 3D World에 대해 생각하고 있었지만 잘 추측했습니다!
Angs

3
Boaty McBoatFace의 IMO 번호 여야합니다.
Mr Lister

보너스에는 코드의 크라운 수가 곱해집니다.
Outgolfer Erik

3
@JeffZeitlin 중복 된 십진법으로 숫자가 둘 이상의 표현을 가질 수 있습니다 (선행 0을 무시하더라도). 크라운은 깜짝 요소로 예약되어 있으며 절대적으로 필요할 때만 사용됩니다.
Angs

답변:


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

자바 스크립트 (ES6),  62 46  44 바이트

@nwellnhof 덕분에 2 바이트 절약

용두를 x문자 로 출력 합니다.

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

온라인으로 사용해보십시오!

방법?

입력 에 10000 을 더하고 문자열로 강제 변환하고 /1+0/패턴을 찾아서 바꿉니다 xxx. 마지막으로 3 개의 후행 문자를 반환합니다.

예 :

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
Mr. Xcoder September

@ Mr.Xcoder 실제로 끔찍한 아이디어였습니다. 그러나 문제를 해결하는 데 1 년 이상이 걸렸습니다. : D
Arnauld

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

파이썬 2 , 53 바이트

오프 모자 Arnauld 에 대한 -22 바이트 . 그래도 재귀가 이깁니다.

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

온라인으로 사용해보십시오!

파이썬 2 , 51 바이트

대신 tsh의 재귀 메서드 를 구현 합니다. ovs 덕분에 2 바이트가 절약되었습니다 .

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

온라인으로 사용해보십시오!


내 JS 답변과 동일한 방식으로 첫 번째 솔루션을 업데이트하여 54 바이트 . 그래도 재귀는 여전히 파이썬에서 승리하는 것처럼 보입니다.
Arnauld

1
@Arnauld 감사합니다 : D. 이 편집은 실제로 SGITW였습니다
Mr. Xcoder

nwellnhof는 이후 10000을 추가하면보다 간단한 패턴이된다고 지적했다 1+0. 따라서이 53 바이트 버전입니다.
Arnauld

@Arnauld 감사합니다;) 그것은 인상적입니다.
Mr. Xcoder


3

레티 나 0.8.2 , 41 바이트

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

온라인으로 사용해보십시오! #s 대신 s를 사용합니다 👑. 링크에는 테스트 사례가 포함됩니다. 설명:

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

1 자리 및 2 자리 숫자를 3 자리 숫자로 채 웁니다.

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

14 자리 숫자의 선행을로 변경 #하고 다음을 삭제합니다 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"


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

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 바이트

Super Mario 3D Land, 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
사이트에 오신 것을 환영합니다. 이것이 무슨 언어 지?
밀 마법사
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.