Yüz kalabalığı taç taç


26

Belirli bir oyunun kendine özgü bir hayat sayacı olduğunu fark ettim, durmak yerine 999yeni bir rakam elde ettim - bir sonraki sayı taç yüzdü veya 👑00. Sonra taç yüz kalabalığı👑99 geldi ( ) ve son sayı, ardından taç yüz kalabalığı oldu ya da 1110 olacaktı.👑👑0👑👑9👑👑👑

Göreviniz bir yazmaktır program veya bir işlevi verir bu sayacı.

Aralıktan bir tamsayı alınca [0,1110](her iki ucunda da bulunur), üç karakterli bir dizge çıktılar

  • Her karakter listeden 0123456789👑
  • taç (👑) yalnızca en soldaki karakter olarak görünebilir veya solunda bir taç olduğunda
  • bu sayı ondalık sayı olarak okunduğunda ancak tacı sayarak 10, orijinal sayıyı geri alırsınız

Test durumları

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

Taç yerine herhangi bir ondalık olmayan karakter kullanabilirsiniz. Güzel yazdırmayı teşvik etmek için taç karakteri (UTF8 bayt sırası "\ 240 \ 159 \ 145 \ 145") dört yerine bir bayt olarak sayılır. Programınızın geçerli aralığın dışındaki numaralar için çalışması gerekmez.

Bu , yani bayt cinsinden ölçülen en kısa cevap kazanır!


4
Oh, Süper Mario 3D Arazi!
Deusovi

2
@Deusovi Aslında takip oyunu, Super Mario 3D World hakkında düşünüyordum ama iyi tahmin!
ANG'ler

3
Bu, Boaty McBoatFace için IMO numarası olmalıdır.
Bay Lister,

Bonus, koddaki kron sayısı ile çarpılır, değil mi?
Outgolfer Erik

3
@JeffZeitlin, bir sayının birden fazla gösterime sahip olabileceği (önde gelen sıfırları bile göz ardı ederek) fazlalık bir ondalık sistemdir. Bu durumda taç, yalnızca kesinlikle ihtiyaç duyulduğunda kullanılan bir sürpriz elemanı olarak saklanır.
20'de Angs

Yanıtlar:


2

05AB1E , 20 18 bayt

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

Taçlar için boşluk kullanır.

Çevrimiçi deneyin veya tüm test durumlarını doğrulayın .

Açıklama:

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

@Nwellnhof sayesinde 2 bayt kaydedildi

Kronları xkarakter olarak çıkarır.

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

Çevrimiçi deneyin!

Nasıl?

Girdiye 10000 ekleriz , dizeye zorlarız, /1+0/kalıbı ararız ve ile değiştiririz xxx. Sonunda, 3 sondaki karakteri döndürürüz.

Örnekler:

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


s.replace(/./g,`#`)temiz ... Ben vardı Array(s.length+1).join`#`ve regex de uzun oldu! Güzel iş, +1
Bay Xcoder

@ Mr.Xcoder Aslında korkunç bir fikirdi. Ancak düzeltilmesi bir yıldan fazla sürdü. : D
Arnauld

8

Shakespeare Programlama Dili , 763 692 690 689 683 bayt

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

Çevrimiçi deneyin!

Taçlar " "yerine kullanır . 4 bayt pahasına, bunun yerine "görünür" bir karakter gösterecek şekilde değiştirilebilir.

Açıklama:

,.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 Teşekkürler, bazı alanlardan kurtulmayı unuttum.
JosiahRyanW

5

Python 2 , 53 bayt

Şapka çıkartılacak Arnauld için -22 bayt . Özyineleme hala kazanıyor.

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

Çevrimiçi deneyin!

Python 2 , 51 bayt

Bu onun yerine tsh'ın özyinelemeli yöntemini uygular . Ovs sayesinde 2 bayt kaydedildi .

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

Çevrimiçi deneyin!


1. cevabı, JS cevabım ile aynı şekilde güncelleyerek 54 bayt . Yine de Python'da özyineleme hala kazanıyor gibi görünüyor.
Arnauld

1
@Arnauld Teşekkürler: D. Bu düzenleme gerçekten bir SGITW idi
Mr.

nwellnhof o zamandan beri 10000 eklemenin daha basit bir şablona yol açtığını belirtti 1+0. Dolayısıyla bu 53 bayt versiyonu.
Arnauld

@Arnauld Teşekkürler;) Bu oldukça etkileyici.
Bay Xcoder


3

Retina 0.8.2 , 41 bayt

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

Çevrimiçi deneyin! #S yerine 👑s kullanır . Link, test durumlarını içerir. Açıklama:

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

1 ve 2 basamaklı sayıları üç haneye getirin.

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

Değişim lider 1için 4 basamaklı sayı lar #s ve sonraki silme 0.


3

Jöle , 19 bayt - 0 = 19

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

Taç olarak boşluk karakteri kullanarak sonucu basan tam bir program.
(Monadik Bağlantı olarak, tamsayı sayıları ve boşluk karakterlerinden oluşan karışık bir liste elde edilir)

Çevrimiçi deneyin! Veya test odasına bakın .

... belki özyinelemeli bir uygulama daha kısa olacaktır.

Nasıl?

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

Temiz , 87 bayt

Kuronlar çıkarmaz (kullanır c).

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

Çevrimiçi deneyin!

$ 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

Temiz , 99 - 3 = 96 bayt

Bunda kron var.

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

Çevrimiçi deneyin!


İkinci cevap sadece 90 puan.
pppery

1

Japt, 20 bayt

Arnauld'un çözümünün saf (ve biraz sarhoş!) Limanı. "Taç için kullanır .

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

Dene



1

APL (Dyalog Unicode) , 32 bayt

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

Çevrimiçi deneyin!

Önek direkt işlevi.

@ Tsh'nin JS Cevap Limanı .

Nasıl:

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 bayt

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

Ctaç için yazdırır . Pipe ile çalıştırın -nRveya çevrimiçi deneyin .



1

C,  84  58 bayt

25 byte tasarruf için @tsh ve bir byte tasarruf için @ceilingcat sayesinde!

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

Çevrimiçi deneyin!


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



0

Temiz , 96 bayt

Süper Mario 3D Ülkesi, Yeni Süper Mao Bros.2 ve Süper Mario 3D Dünyası'nın bu hayat sayacı olduğunu düşünüyorum.

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

Clean ile aynı fikirdeyim .

Hile yapmadığımı doğrula.


3
Siteye Hoşgeldiniz. Bu hangi dil?
Buğday Sihirbazı
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.