Couronne cent couronne couronne


26

J'ai remarqué qu'un certain jeu avait un compteur de vie particulier, qui au lieu de s'arrêter 999, gagnait un nouveau chiffre - le nombre suivant était cent couronne👑00 . Après 👑99est venu la couronne cent couronne ( 👑👑0) et le dernier nombre, après 👑👑9, était la couronne cent couronne ou 👑👑👑, qui serait 1110 en décimal.

Votre tâche consiste à écrire un programme ou une fonction qui génère ce compteur.

Étant donné un entier de la plage [0,1110](inclus aux deux extrémités), affichez une chaîne de trois caractères où

  • chaque personnage est de la liste 0123456789👑
  • la couronne (👑) ne peut apparaître que comme le caractère le plus à gauche ou quand il y a une couronne à gauche
  • lorsque ce nombre est lu comme un nombre décimal mais avec la couronne comptant comme 10, vous récupérez le nombre d'origine

Cas de test

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

Vous pouvez utiliser n'importe quel caractère non décimal au lieu de la couronne. Pour encourager une jolie impression, le caractère couronne (séquence d'octets UTF8 "\ 240 \ 159 \ 145 \ 145") compte comme un octet au lieu de quatre. Votre programme n'a pas besoin de fonctionner pour des nombres en dehors de la plage valide.

C'est le , donc la réponse la plus courte, mesurée en octets, gagne!


4
Oh, Super Mario 3D Land!
Deusovi

2
@Deusovi Je pensais en fait au jeu de suivi, Super Mario 3D World, mais bien deviné!
2018

3
Ce devrait être le numéro OMI de Boaty McBoatFace.
M. Lister

Le bonus est multiplié par le nombre de couronnes dans le code, non?
Erik the Outgolfer le

3
@JeffZeitlin c'est un système décimal redondant, où un nombre peut avoir plus d'une représentation (même sans tenir compte des zéros de tête). La couronne est alors réservée comme élément surprise, uniquement utilisée en cas de nécessité absolue.
Angs

Réponses:


2

05AB1E , 20 18 octets

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

Utilise des espaces pour les couronnes.

Essayez-le en ligne ou vérifiez tous les cas de test .

Explication:

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

2 octets enregistrés grâce à @nwellnhof

Produit des couronnes sous forme de xcaractères.

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

Essayez-le en ligne!

Comment?

Nous ajoutons 10000/1+0/xxx

Exemples:

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


s.replace(/./g,`#`)est bien ... j'ai eu Array(s.length+1).join`#`, et mon regex était plus long aussi! Beau travail, +1
M. Xcoder

@ Mr.Xcoder C'était en fait une idée terrible. Mais il a fallu plus d'un an pour le réparer. : D
Arnauld

8

Langage de programmation Shakespeare , 763 692 690 689 683 octets

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

Essayez-le en ligne!

Les usages " " place des couronnes. Au prix de 4 octets supplémentaires, cela pourrait être modifié pour afficher un caractère "visible" à la place.

Explication:

,.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 Merci, j'ai oublié de me débarrasser de certains espaces.
JosiahRyanW

5

Python 2 , 53 octets

Chapeau à Arnauld pour -22 octets . Cependant, la récursivité gagne toujours.

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

Essayez-le en ligne!

Python 2 , 51 octets

Cela implémente à la place la méthode récursive de tsh . Enregistré 2 octets grâce aux ovs .

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

Essayez-le en ligne!


54 octets en mettant à jour la 1ère solution de la même manière que je l'ai fait avec ma réponse JS. Il semble que la récursivité gagne toujours en Python.
Arnauld

1
@Arnauld Merci: D. Cette édition était vraiment une SGITW
M. Xcoder

nwellnhof a depuis souligné que l'ajout de 10000 conduit à un schéma plus simple 1+0. D'où cette version de 53 octets .
Arnauld

@Arnauld Merci;) C'est assez impressionnant.
M. Xcoder


3

Retina 0.8.2 , 41 octets

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

Essayez-le en ligne! Utilise #s au lieu de 👑s. Le lien inclut des cas de test. Explication:

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

Tapez les nombres à 1 et 2 chiffres à trois chiffres.

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

Remplacez 1s par des nombres à 4 chiffres en tête #et supprimez le suivant 0.


3

Gelée , 19 octets - 0 = 19

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

Un programme complet imprimant le résultat en utilisant un caractère espace comme couronne.
(En tant que lien monadique, une liste mixte de chiffres entiers et de caractères d'espace est produite)

Essayez-le en ligne! Ou consultez la suite de tests .

... peut-être qu'une implémentation récursive sera plus courte.

Comment?

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

Nettoyer , 87 octets

Ne produit pas de couronnes (utilise c).

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

Essayez-le en ligne!

$ 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

Nettoyer , 99-3 = 96 octets

Celui-ci a des couronnes.

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

Essayez-le en ligne!


La deuxième réponse a un score de seulement 90.
pppery

1

Japt, 20 octets

Un port naïf (et légèrement ivre!) De la solution d'Arnauld. Utilise la "couronne.

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

Essayez-le



1

APL (Dyalog Unicode) , 32 octets

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

Essayez-le en ligne!

Fonction directe de préfixe.

Réponse JS du port de @ tsh .

Comment:

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 octets

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

impressions Cpour la couronne. Exécuter en tant que pipe avec -nRou l' essayer en ligne .



1

C,  84  58 octets

Merci à @tsh pour avoir sauvé 25 octets et merci à @ceilingcat pour avoir sauvé un octet!

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

Essayez-le en ligne!


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



0

Nettoyer , 96 octets

Je pense que Super Mario 3D Land, New Super Mao Bros.2 et Super Mario 3D World ont ce compteur de vie.

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

Je suis d'accord avec Clean .

Vérifiez que je ne triche pas.


3
Bienvenue sur le site. Quelle langue est-ce?
Wheat Wizard
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.