Corona cento corona incoronata


26

Ho notato un certo gioco ha avuto un contatore di vita peculiare, che invece di fermarsi a 999, ha guadagnato una nuova cifra - il numero successivo è stato corona centinaio 👑00. Dopo 👑99vennero incoronate cento coronate ( 👑👑0) e l'ultimo numero, dopo 👑👑9, fu corone cento coronate o 👑👑👑, che sarebbe 1110 in decimale.

Il tuo compito è scrivere un programma o una funzione che emetta questo contatore.

Dato un numero intero dall'intervallo [0,1110](inclusivo su entrambe le estremità), genera una stringa di tre caratteri dove

  • ogni personaggio è dalla lista 0123456789👑
  • la corona (👑) può apparire solo come il personaggio più a sinistra o quando c'è una corona alla sua sinistra
  • quando questo numero viene letto come un numero decimale ma con la corona che conta come 10, si ottiene il numero originale

Casi test

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

È possibile utilizzare qualsiasi carattere non decimale al posto della corona. Per incoraggiare una stampa carina, il carattere della corona (sequenza di byte UTF8 "\ 240 \ 159 \ 145 \ 145") conta come un byte anziché quattro. Il tuo programma non deve funzionare per numeri al di fuori dell'intervallo valido.

Questo è , quindi la risposta più breve, misurata in byte, vince!


4
Oh, Super Mario 3D Land!
Deusovi,

2
@Deusovi In realtà stavo pensando al gioco di follow-up, Super Mario 3D World, ma ho indovinato!
Angs

3
Questo dovrebbe essere il numero IMO per Boaty McBoatFace.
Lister,

Il bonus viene moltiplicato per il numero di corone nel codice, giusto?
Erik the Outgolfer,

3
@JeffZeitlin è un sistema decimale ridondante, in cui un numero può avere più di una rappresentazione (anche ignorando gli zeri iniziali). La corona viene quindi riservata come elemento a sorpresa, utilizzata solo quando assolutamente necessario.
Angs

Risposte:


2

05AB1E , 20 18 byte

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

Utilizza spazi per corone.

Provalo online o verifica tutti i casi di test .

Spiegazione:

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

Salvato 2 byte grazie a @nwellnhof

Emette corone come xcaratteri.

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

Provalo online!

Come?

10000/1+0/xxx

Esempi:

0 "10000" "Xxx000" "000"123 "10123" "Xxx123" "123"1023 "11023" "Xxx23" "X23"1103 "11103" "Xxx3" "Xx3"1110 "11110" "Xxx" "Xxx"


s.replace(/./g,`#`)è pulito ... ho avuto Array(s.length+1).join`#`, e anche il mio regex era più lungo! Bel lavoro, +1
Mr. Xcoder

@ Mr.Xcoder In realtà è stata un'idea terribile. Ma ci è voluto più di un anno per ripararlo. : D
Arnauld

8

Shakespeare Programming Language , 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.

Provalo online!

Utilizza " "invece di corone. Al costo di altri 4 byte, questo potrebbe essere modificato per mostrare invece un carattere "visibile".

Spiegazione:

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


@CiaoGoodbye Grazie, ho dimenticato di liberarmi di alcuni spazi.
JosiahRyanW il

5

Python 2 , 53 byte

Tanto di cappello ad Arnauld per -22 byte . Tuttavia, la ricorsione vince ancora.

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

Provalo online!

Python 2 , 51 byte

Questo invece implementa il metodo ricorsivo di tsh . Salvato 2 byte grazie a ovs .

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

Provalo online!


54 byte aggiornando la prima soluzione come ho fatto con la mia risposta JS. Sembra che la ricorsione vince ancora in Python, comunque.
Arnauld

1
@Arnauld Grazie: D. Questa modifica è stata davvero una SGITW
Mr. Xcoder il

Da allora nwellnhof ha sottolineato che l'aggiunta di 10000 porta a un modello più semplice 1+0. Da qui questa versione da 53 byte .
Arnauld,

@Arnauld Thanks;) È piuttosto impressionante.
Mr. Xcoder,


3

Retina 0.8.2 , 41 byte

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

Provalo online! Usa #s invece di 👑s. Il link include casi di test. Spiegazione:

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

Pad numeri da 1 e 2 cifre a tre cifre.

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

Cambia le 1s iniziali di numeri a 4 cifre in #s ed elimina la successiva 0.


3

Gelatina , 19 byte - 0 = 19

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

Un programma completo che stampa il risultato usando un carattere spaziale come corona.
(Come collegamento monadico viene prodotto un elenco misto di cifre intere e caratteri di spazio)

Provalo online! Oppure vedi la suite di test .

... forse un'implementazione ricorsiva sarà più breve.

Come?

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

Pulito , 87 byte

Non genera corone (usa c).

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

Provalo 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

Pulito , 99-3 = 96 byte

Questo ha le corone.

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

Provalo online!


La seconda risposta ha un punteggio di soli 90.
pepery

1

Japt, 20 byte

Un porto ingenuo (e leggermente ubriaco!) Della soluzione di Arnauld. Utilizza "per la corona.

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

Provalo



1

APL (Dyalog Unicode) , 32 byte

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

Provalo online!

Prefisso funzione diretta.

Port of @ tsh's JS Answer .

Come:

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;

stampe Cper la corona. Esegui come pipe -nRo provalo online .



1

C,  84  58 byte

Grazie a @tsh per aver salvato 25 byte e grazie a @ceilingcat per aver salvato un byte!

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

Provalo online!


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



0

Pulito , 96 byte

Penso che Super Mario 3D Land, New Super Mao Bros.2 e Super Mario 3D World abbiano questo contatore di vita.

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

Sono d'accordo con Clean .

Verifica che non stia tradendo.


3
Benvenuti nel sito. Che lingua è questa?
Wheat Wizard
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.