Mahkota seratus mahkota mahkota

26

Saya perhatikan permainan tertentu memiliki penghitung kehidupan yang aneh, yang bukannya berhenti 999, memperoleh angka baru - angka berikutnya adalah mahkota seratus atau πŸ‘‘00. Setelah itu πŸ‘‘99datang mahkota ratus mahkota ( πŸ‘‘πŸ‘‘0) dan angka terakhir, setelahnya πŸ‘‘πŸ‘‘9, adalah mahkota seratus mahkota atau πŸ‘‘πŸ‘‘πŸ‘‘, yang akan menjadi 1110 dalam desimal.

Tugas Anda adalah menulis program atau fungsi yang menghasilkan penghitung ini.

Diberikan bilangan bulat dari rentang [0,1110](inklusif pada kedua ujungnya), menghasilkan string karakter tiga di mana

  • setiap karakter dari daftar 0123456789πŸ‘‘
  • mahkota (πŸ‘‘) hanya dapat muncul sebagai karakter paling kiri atau ketika ada mahkota di sebelah kiri itu
  • ketika angka ini dibaca sebagai angka desimal tetapi dengan mahkota yang menghitung 10, Anda mendapatkan kembali nomor aslinya

Uji kasus

   0 β†’ "000"
  15 β†’ "015"
 179 β†’ "179"
 999 β†’ "999"
1000 β†’ "πŸ‘‘00"
1097 β†’ "πŸ‘‘97"
1100 β†’ "πŸ‘‘πŸ‘‘0"
1108 β†’ "πŸ‘‘πŸ‘‘8"
1110 β†’ "πŸ‘‘πŸ‘‘πŸ‘‘"

Anda dapat menggunakan karakter non-desimal alih-alih mahkota. Untuk mendorong pencetakan yang cantik, karakter mahkota (urutan byte UTF8 "\ 240 \ 159 \ 145 \ 145") dihitung sebagai satu byte alih-alih empat. Program Anda tidak harus bekerja untuk angka di luar rentang yang valid.

Ini adalah , jadi jawaban tersingkat, diukur dalam byte, menang!

Angs
sumber
4
Oh, Super Mario 3D Land!
Deusovi
2
@Deusovi Saya benar-benar berpikir tentang permainan tindak lanjut, Super Mario 3D World, tetapi sudah bisa ditebak!
Angs
3
Ini harus menjadi nomor IMO untuk Boaty McBoatFace.
Tn. Lister
Bonus dikalikan dengan jumlah mahkota dalam kode, kan?
Erik the Outgolfer
3
@JeffZeitlin itu adalah sistem desimal yang redundan, di mana angka mungkin memiliki lebih dari satu representasi (bahkan mengabaikan nol terkemuka). Mahkota kemudian dicadangkan sebagai elemen kejutan, hanya digunakan saat benar-benar dibutuhkan.
Angs

Jawaban:

2

05AB1E , 20 18 byte

β‚„β€Ήiβ‚„+¦ëTΓ°.;β€ž1 β€ž  :

Menggunakan spasi untuk mahkota.

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

β‚„β€Ή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
sumber
12

JavaScript (Node.js) , 50 byte

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

Cobalah online!

TIO didasarkan pada jawaban Arnauld. Tampilkan πŸ‘‘ sebagai #.

tsh
sumber
3
Pendekatan rekursif yang bagus!
Arnauld
9

JavaScript (ES6), Β 62 46Β  44 byte

Disimpan 2 byte berkat @nwellnhof

Output mahkota sebagai xkarakter.

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

Cobalah online!

Bagaimana?

10000/1+0/xxx

Contoh:

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

Arnauld
sumber
s.replace(/./g,`#`)rapi ... saya punya Array(s.length+1).join`#`, dan regex saya juga lebih lama! Kerja bagus, +1
Mr. Xcoder
@ Mr.Xcoder Sebenarnya itu ide yang buruk. Tapi butuh lebih dari satu tahun untuk memperbaikinya. : D
Arnauld
8

Bahasa Pemrograman Shakespeare , 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.

Cobalah online!

Gunakan " "bukan mahkota. Dengan biaya 4 byte lebih, ini dapat dimodifikasi untuk menunjukkan karakter "terlihat" sebagai gantinya.

Penjelasan:

,.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
sumber
683 byte
Halo Selamat Tinggal
@ HaloGoodbye Terima kasih, saya lupa menyingkirkan beberapa spasi.
JosiahRyanW
5

Python 2 , 53 byte

Angkat topi ke Arnauld untuk -22 byte . Rekursi masih menang.

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

Cobalah online!

Python 2 , 51 byte

Ini sebagai gantinya menerapkan metode rekursif tsh . Disimpan 2 byte berkat ovs .

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

Cobalah online!

Tuan Xcoder
sumber
54 byte dengan memperbarui solusi 1 dengan cara yang sama seperti yang saya lakukan dengan jawaban JS saya. Sepertinya rekursi masih menang dengan Python.
Arnauld
1
@Arnauld Terima kasih: D. Hasil edit ini benar-benar SGITW
Tn. Xcoder
nwellnhof sejak itu menunjukkan bahwa menambahkan 10.000 mengarah ke pola yang lebih mudah 1+0. Oleh karena itu versi 53 byte ini.
Arnauld
@Arnauld Terima kasih;) Itu agak mengesankan.
Tn. Xcoder
4

Python 2 , 52 byte

lambda n:['%03d'%n,'%3s'%`n`.lstrip('1')[1:]][n>999]

Cobalah online!

ovs
sumber
3

Retina 0.8.2 , 41 byte

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

Cobalah online! Menggunakan #s bukannya πŸ‘‘s. Tautan termasuk kasus uji. Penjelasan:

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

Pad 1 dan 2 digit angka menjadi tiga digit.

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

Ubah 1s dari angka 4 digit menjadi #s dan hapus yang berikutnya 0.

Neil
sumber
3

Jelly , 19 byte - 0 = 19

<Θ·Β¬Θ§Di0Ι“βΆαΊ‹βΉαΈŠ;+Θ·DαΈŠαΉ«Κ‹

Program lengkap mencetak hasilnya menggunakan karakter spasi sebagai mahkota.
(Sebagai Tautan monadik daftar campuran angka integer dan karakter spasi dihasilkan)

Cobalah online! Atau lihat test-suite .

... mungkin implementasi rekursif akan lebih pendek.

Bagaimana?

<Θ·Β¬Θ§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
sumber
3

Python 2 , 40 byte

lambda n:'%3s'%`10000+n`.lstrip('1')[1:]

Cobalah online!

Menerapkan ide yang mirip dengan jawaban berbasis regex Mr. Xcoder tetapi tanpa regex. Kami menghapus memimpin 1 di dalam 10000+nserta karakter berikutnya, lalu pad dengan spasi hingga panjang 3. Hasilnya mirip dengan solusi ovs menggunakan lstriptetapi tanpa perlu dua kasus.

Tidak
sumber
2

Bersihkan , 87 byte

Tidak menampilkan mahkota (penggunaan c).

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

Cobalah 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

Bersih , 99 - 3 = 96 byte

Yang ini memiliki mahkota.

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

Cobalah online!

Suram
sumber
Jawaban kedua hanya memiliki skor 90.
pppery
1

Japt, 20 byte

Port solusi naif (dan sedikit mabuk!) Dari Arnauld. Penggunaan "untuk mahkota.

U+AΒ³ s r"^21*0"_Γ§QÃÅ

Cobalah

Shaggy
sumber
1

Java 10, 84 83 byte

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);}

Pelabuhan @tsh 'C komentar .
Gunakan .bukan mahkota.

Cobalah online.

Pendekatan alternatif (84 (87-3) byte):

n->f(n,1000)String f(int n,int p){return n<p?(n+p+"").substring(1):"πŸ‘‘"+f(n-p,p/10);}

Port dari jawaban JavaScript @tsh .

Cobalah online.

Kevin Cruijssen
sumber
1

APL (Dyalog Unicode) , 32 byte

1e3∘{⍡<⍺:1↓⍕⍡+⍺⋄'C',(⍡-⍺)βˆ‡β¨βΊΓ·10}

Cobalah online!

Awalan fungsi langsung.

Port dari Jawaban JS @ tsh .

Bagaimana:

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Γ©
sumber
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;

cetakan Cuntuk mahkota. Jalankan sebagai pipa dengan -nRatau coba online .

Titus
sumber
1

C, Β 84Β  58 byte

Terima kasih kepada @tsh untuk menghemat 25 byte dan terima kasih kepada @ceilingcat karena telah menghemat satu byte!

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

Cobalah online!

Steadybox
sumber
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 byte, tetapi skor adalah 39, karena setiap πŸ‘‘ dihitung sebagai 1.

/..../s/^1+0/πŸ‘‘πŸ‘‘πŸ‘‘/
s/^/00/
s/.*(...)/\1/

Cobalah online!

Trauma Digital
sumber
1

Perl 6 , 38 - 9 = 29 byte

-2 byte terima kasih kepada Jo King

{~m/...$/}o{S/1+0/πŸ‘‘πŸ‘‘πŸ‘‘/}o*+1e4

Cobalah online!

Terinspirasi oleh solusi JavaScript Arnauld.

nwellnhof
sumber
0

Bersihkan , 96 byte

Saya pikir Super Mario 3D Land, New Super Mao Bros.2, dan Super Mario 3D World memiliki counter kehidupan ini.

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

Saya setuju dengan Clean .

Verifikasi bahwa saya tidak curang.

Leo
sumber
3
Selamat datang di situs ini. Bahasa apa ini?
Wheat Wizard