Krone Hundertkrone

26

Ich bemerkte ein bestimmtes Spiel einen besonderen Lebenszähler hatte, die stattdessen bei Anhalten 999, eine neue Ziffer gewonnen - die nächste Nummer war Krone hundert 👑00. Danach 👑99kam Krone hundert ( 👑👑0) und die letzte Zahl 👑👑9war Krone hundert ( oder 👑👑👑1110 in Dezimalzahl).

Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben , die diesen Zähler ausgibt .

Geben Sie bei einer Ganzzahl aus dem Bereich [0,1110](einschließlich an beiden Enden) eine dreistellige Zeichenfolge aus

  • Jedes Zeichen ist aus der Liste 0123456789👑
  • Die Krone (👑) kann nur als das Zeichen ganz links angezeigt werden oder wenn sich links davon eine Krone befindet
  • Wenn diese Zahl als Dezimalzahl, aber mit der Krone als gelesen wird 10, erhalten Sie die ursprüngliche Zahl zurück

Testfälle

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

Sie können anstelle der Krone ein beliebiges Nicht-Dezimalzeichen verwenden. Um ein hübsches Drucken zu fördern, wird das Kronenzeichen (UTF8-Bytefolge "\ 240 \ 159 \ 145 \ 145") als ein Byte anstelle von vier Byte gezählt. Ihr Programm muss nicht für Zahlen außerhalb des gültigen Bereichs funktionieren.

Das ist , also gewinnt die kürzeste Antwort, gemessen in Bytes!

Angs
quelle
4
Oh, Super Mario 3D Land!
Deusovi
2
@Deusovi Ich habe tatsächlich über das Nachfolgespiel Super Mario 3D World nachgedacht, aber gut geraten!
Angs
3
Dies sollte die IMO-Nummer für Boaty McBoatFace sein.
Mr Lister
Der Bonus wird mit der Anzahl der Kronen im Code multipliziert, richtig?
Erik der Outgolfer
3
@ JeffZeitlin ist ein redundantes Dezimalsystem, bei dem eine Zahl mehr als eine Darstellung haben kann (sogar ohne Berücksichtigung von führenden Nullen). Die Krone wird dann als Überraschungselement reserviert und nur dann verwendet, wenn sie unbedingt benötigt wird.
Angs

Antworten:

2

05AB1E , 20 18 Bytes

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

Verwendet Leerzeichen für Kronen.

Probieren Sie es online aus oder überprüfen Sie alle Testfälle .

Erläuterung:

₄‹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 " → "   "
Kevin Cruijssen
quelle
12

JavaScript (Node.js) , 50 Byte

f=(n,p=1e3)=>n<p?(n+p+'').slice(1):'#'+f(n-p,p/10)

Probieren Sie es online!

TIO basierte auf Arnauld's Antwort. Zeige 👑 als #.

tsh
quelle
3
Schöner rekursiver Ansatz!
Arnauld
9

JavaScript (ES6),  62 46  44 Bytes

2 Bytes dank @nwellnhof gespeichert

Gibt Kronen als xZeichen aus.

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

Probieren Sie es online!

Wie?

Wir fügen der Eingabe 10000 , erzwingen eine Zeichenfolge, suchen das /1+0/Muster und ersetzen es durch xxx. Schließlich geben wir die 3 folgenden Zeichen zurück.

Beispiele:

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

Arnauld
quelle
s.replace(/./g,`#`)ist ordentlich ... ich hatte Array(s.length+1).join`#`und mein Regex war auch länger!
Gute
@ Mr.Xcoder Es war eigentlich eine schreckliche Idee. Aber es dauerte mehr als ein Jahr, um das Problem zu beheben. : D
Arnauld
8

Shakespeare Programming Language , 763 692 690 689 683 Bytes

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

Probieren Sie es online!

Verwendet " "anstelle von Kronen. Auf Kosten von 4 weiteren Bytes könnte dies geändert werden, um stattdessen ein "sichtbares" Zeichen anzuzeigen.

Erläuterung:

,.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).
JosiahRyanW
quelle
683 Bytes
Hallo Auf Wiedersehen
@HelloGoodbye Danke, ich habe vergessen, einige Leerzeichen loszuwerden.
JosiahRyanW
5

Python 2 , 53 Bytes

Hut ab vor Arnauld für -22 Bytes . Die Rekursion gewinnt jedoch immer noch.

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

Probieren Sie es online!

Python 2 , 51 Bytes

Dies implementiert stattdessen die rekursive Methode von tsh . 2 Bytes dank ovs gespart .

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

Probieren Sie es online!

Mr. Xcoder
quelle
54 Bytes durch Aktualisieren der ersten Lösung wie bei meiner JS-Antwort. Scheint, als ob Rekursion in Python immer noch gewinnt.
Arnauld
1
@ Arnauld Danke: D. Diese Änderung war wirklich ein SGITW
Mr. Xcoder
nwellnhof hat seitdem darauf hingewiesen, dass das Hinzufügen von 10000 zu einem einfacheren Muster führt 1+0. Daher diese 53-Byte- Version.
Arnauld,
@ Arnauld Danke;) Das ist ziemlich beeindruckend.
Mr. Xcoder
3

Retina 0.8.2 , 41 Bytes

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

Probieren Sie es online! Verwendet #s anstelle von 👑s. Link enthält Testfälle. Erläuterung:

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

Füllen Sie 1- und 2-stellige Zahlen mit drei Ziffern.

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

Ändern Sie das führende 1s von 4-stelligen Zahlen in #s und löschen Sie das nächste 0.

Neil
quelle
3

Jelly , 19 Bytes - 0 = 19

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

Ein vollständiges Programm, das das Ergebnis mit einem Leerzeichen als Krone druckt.
(Als monadischer Link wird eine gemischte Liste von Ganzzahlen und Leerzeichen ausgegeben.)

Probieren Sie es online! Oder sehen Sie sich die Testsuite an .

... vielleicht ist eine rekursive Implementierung kürzer.

Wie?

<ȷ¬ȧ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"
Jonathan Allan
quelle
2

Sauber , 87 Bytes

Kronen werden nicht ausgegeben (verwendet c).

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

Probieren Sie es online!

$ 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

Sauber , 99-3 = 96 Bytes

Dieser hat Kronen.

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

Probieren Sie es online!

Οurous
quelle
Die zweite Antwort hat eine Punktzahl von nur 90.
pppery
1

Japt, 20 Bytes

Ein naiver (und leicht betrunkener!) Port von Arnauld's Lösung. Verwendet "für die Krone.

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

Versuch es

Zottelig
quelle
1

APL (Dyalog Unicode) , 32 Byte

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

Probieren Sie es online!

Präfix Direktfunktion.

Port von @ tsh's JS Answer .

Wie:

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
J. Sallé
quelle
1

PHP, 71 Bytes

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

druckt Cfür die Krone. Laufen Sie als Pipe mit -nRoder versuchen Sie es online .

Titus
quelle
1

C  84  58 Bytes

Danke an @tsh für das Speichern von 25 Bytes und danke an @ceilingcat für das Speichern eines Bytes!

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

Probieren Sie es online!

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

sed , 39

48 Bytes, aber Punktzahl ist 39, da jedes 👑 als 1 zählt.

/..../s/^1+0/👑👑👑/
s/^/00/
s/.*(...)/\1/

Probieren Sie es online!

Digitales Trauma
quelle
1

Perl 6 , 38 - 9 = 29 Bytes

-2 Bytes dank Jo King

{~m/...$/}o{S/1+0/👑👑👑/}o*+1e4

Probieren Sie es online!

Inspiriert von Arnauld's JavaScript-Lösung.

nwellnhof
quelle
0

Sauber , 96 Bytes

Ich denke, dass Super Mario 3D Land, New Super Mao Bros.2 und Super Mario 3D World diesen Lebenspunktestand haben.

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

Ich bin mit Clean einverstanden .

Stellen Sie sicher, dass ich nicht betrüge.

Löwe
quelle
3
Willkommen auf der Seite. Welche Sprache ist das?
Weizen-Assistent