มงกุฎร้อยมงกุฎ


26

ผมสังเกตเห็นบางเกมมีเคาน์เตอร์ชีวิตที่แปลกประหลาดซึ่งแทนที่จะหยุดที่999ได้รับหลักใหม่ - หมายเลขถัดไปเป็นมงกุฎ👑00ร้อยหรือ หลังจากที่👑99มาคราวน์ร้อยคราวน์ ( 👑👑0) และหมายเลขสุดท้ายหลังจาก👑👑9นั้นคือคราวน์ร้อยคราวน์คราวน์หรือ👑👑👑ซึ่งจะเป็นเลข 1110 ในรูปทศนิยม

งานของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นที่ส่งออกตัวนับนี้

รับค่าจำนวนเต็มจากช่วง[0,1110](รวมทั้งสองด้าน) ส่งออกสตริงอักขระสามตัวที่

  • ตัวละครทุกตัวมาจากรายการ 0123456789👑
  • crown (👑) สามารถปรากฏเป็นอักขระซ้ายสุดหรือเมื่อมีมงกุฎอยู่ทางซ้ายเท่านั้น
  • เมื่อตัวเลขนี้ถูกอ่านเป็นตัวเลขทศนิยม แต่ด้วยการนับเม็ดมะยมเป็น10คุณจะได้รับหมายเลขเดิม

กรณีทดสอบ

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

คุณสามารถใช้อักขระที่ไม่ใช่ทศนิยมแทนที่จะเป็นเม็ดมะยม เพื่อส่งเสริมการพิมพ์ที่น่ารักตัวอักษรมงกุฎ (ลำดับ UTF8 ไบต์ "\ 240 \ 159 \ 145 \ 145") นับเป็นหนึ่งไบต์แทนที่จะเป็นสี่ โปรแกรมของคุณไม่จำเป็นต้องใช้ตัวเลขนอกช่วงที่ถูกต้อง

นี่คือดังนั้นคำตอบที่สั้นที่สุดวัดเป็นไบต์ชนะ!


4
โอ้ Super Land 3D Land!
Deusovi

2
@Deusovi ฉันคิดจริงๆเกี่ยวกับเกมติดตามผล Super Mario 3D World แต่ก็เดาได้ดี!
อ่างทอง

3
นี่ควรเป็นหมายเลข IMO สำหรับ Boaty McBoatFace
นาย Lister

โบนัสจะถูกคูณด้วยจำนวนคราวน์ในโค้ดใช่ไหม?
Erik the Outgolfer

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)

ลองออนไลน์!

อย่างไร?

เราได้เพิ่ม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`#`และ regex ของฉันก็ยาวเกินไป! เยี่ยมมาก +1
Mr. Xcoder

@ Mr.Xcoder มันเป็นความคิดที่แย่จริงๆ แต่ใช้เวลามากกว่าหนึ่งปีในการแก้ไข : 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

Python 2 , 53 ไบต์

หมวกออกไปArnauldสำหรับ-22 ไบต์ การเรียกซ้ำยังคงเป็นสิ่งที่ดี

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

ลองออนไลน์!

Python 2 , 51 ไบต์

การดำเนินการนี้แทนวิธี recursive TSH ของ ที่บันทึกไว้ 2 ไบต์ขอบคุณที่OVS

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

ลองออนไลน์!


54 ไบต์โดยอัปเดตโซลูชันแรกเช่นเดียวกับที่ฉันทำกับคำตอบ JS ของฉัน ดูเหมือนว่าการเรียกซ้ำยังคงเป็นชัยชนะใน Python
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 หลักเป็นตัวเลขสามหลัก

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

เปลี่ยนชั้นนำ1ของหมายเลข 4 หลักเพื่อ#s 0และลบต่อไป


3

เยลลี่ , 19 ไบต์ - 0 = 19

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

โปรแกรมเต็มรูปแบบการพิมพ์ผลโดยใช้อักขระช่องว่างเป็นเม็ดมะยม
(ในฐานะที่เป็น monadic เชื่อมโยงรายการตัวเลขหลักจำนวนเต็มและอักขระเว้นวรรคผสมกัน)

ลองออนไลน์! หรือดูการทดสอบในตัว

... บางทีการใช้งานแบบเรียกซ้ำจะสั้นลง

อย่างไร?

<ȷ¬ȧ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:]

ลองออนไลน์!

ใช้ความคิดที่คล้ายกับคำตอบพื้นฐานของ Mr. Xcoderแต่ไม่มี regex เราลบอันดับ 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);}

ท่าเรือ@tsh 'คำตอบของ JavaScript

ลองออนไลน์


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

1

PHP, 71 ไบต์

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

พิมพ์Cสำหรับมงกุฎ ทำงานเป็นท่อที่มี-nRหรือลองออนไลน์



1

C,  84  58 ไบต์

ขอบคุณ @tsh สำหรับการบันทึก 25 ไบต์และขอบคุณ @ceilingcat สำหรับการบันทึกไบต์!

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

ลองออนไลน์!


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



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

ผมเห็นด้วยกับการทำความสะอาด

ตรวจสอบว่าฉันไม่ได้โกง


3
ยินดีต้อนรับสู่เว็บไซต์ นี่คือภาษาอะไร?
ข้าวสาลีตัวช่วยสร้าง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.