Kode Warna Hex yang Lebih Baik untuk Internet Anda


46

Triple triplet seperti #ffffff(putih) atau #3764ef(kebiru-biruan) sering digunakan untuk menunjukkan warna RGB. Mereka terdiri dari #diikuti oleh enam digit heksadesimal (0-f), atau kadang-kadang tiga digit di mana warna asli diperoleh dengan menggandakan setiap digit. Sebagai contoh, #fffadalah #ffffffdan #1a8sekarang #11aa88.

Sayangnya, steno tiga digit itu adalah golf yang paling banyak ditawarkan di internet, sampai sekarang .

Tulis program atau fungsi yang mengambil string 1 hingga 7 karakter:

  • Karakter pertama akan selalu seperti itu #.
  • Karakter lain akan selalu digit heksadesimal: 0123456789abcdef.

Input adalah bentuk singkatan dari hex triplet (atau bentuk lengkap jika 7 karakter diberikan). Anda perlu mengeluarkan hex triplet penuh yang memperluas singkatan input berdasarkan pola-pola ini:

Input   -> Output
#       -> #000000    (black)
#U      -> #UUUUUU
#UV     -> #UVUVUV
#UVW    -> #UUVVWW    (usual 3-digit shorthand)
#UVWX   -> #UXVXWX
#UVWXY  -> #UVWXYY
#UVWXYZ -> #UVWXYZ    (not shorthand)

Masing-masing U, V, W, X, Y, dan Zmungkin setiap heksadesimal digit. Output selalu 7 karakter.

Sebagai contoh:

Input -> Output
# -> #000000
#0 -> #000000
#4 -> #444444
#f -> #ffffff
#a1 -> #a1a1a1
#0f -> #0f0f0f
#99 -> #999999
#1a8 -> #11aa88
#223 -> #222233
#fff -> #ffffff
#1230 -> #102030
#d767 -> #d77767
#bbb5 -> #b5b5b5
#aabbc -> #aabbcc
#00000 -> #000000
#3764e -> #3764ee
#3764ef -> #3764ef
#123456 -> #123456
#f8f8f8 -> #f8f8f8

Catatan

  • Input akan selalu dimulai dengan #demikian juga output.

  • Anda dapat menganggap semua huruf input adalah huruf kecil ( abcdef) atau huruf besar ( ABCDEF) seperti yang Anda inginkan.

  • Huruf dalam output mungkin dalam kedua kasus sesuai keinginan Anda. Anda bahkan dapat mencampur case.

  • Alpha / transparansi tidak dibahas di sini (meskipun ada versi hex warna RGBA).

Kode terpendek dalam byte menang.


11
" Sedihnya, steno tiga digit itu adalah golf yang paling banyak ditawarkan internet, sampai sekarang. " - Uh, tidak persis . HTML, 0 byte - ini bekerja di luar kotak
Bergi

11
Kebalikan dari ini akan menjadi tantangan keren juga
Beta Decay

9
Saya tidak puas dengan #UVWXY -> #UVWXYYentri karena memungkinkan untuk representasi nilai tunggal untuk saluran Biru, tetapi tidak ada ekspresi yang sama untuk Merah dan Hijau (misalnya jika saya ingin #889071saya tidak dapat menyingkat, tetapi #907188dapat ... seperti #90718) yang lain semua bekerja dengan baik.
Draco18s

3
@ Draco18s Saya menyukainya. Yang itu dan yang itu #UVWX -> #UXVXWX. Ini adalah perilaku yang tidak konsisten dan sewenang-wenang sehingga sulit untuk percaya bahwa tidak ada beberapa browser yang benar - benar mengimplementasikannya.
xDaizu

1
@xDaizu Spesifikasi CSS memiliki #RGBAdan #RRGGBBAA, jadi # 1234 harus dibaca sebagairgba(17, 34, 51, 0.25)
tsh

Jawaban:


13

JavaScript, 86 82 77 byte

x=>([s,a=0,b=a,c,d,e,f]=x,f?x:e?x+e:[s,a,d||a,c?b:a,d||b,v=c||b,d||v].join``)

hanya mencari tahu bahwa menghapus rekursif menyimpan 4 byte ...

ide dari @Arnauld menyimpan 4 byte, +1 lebih banyak byte


([s,a=0,b=a,c,d,e,f]=x)=>f?x:e?x+e:d?s+a+d+b+d+c+d:c?s+a+a+b+b+c+c:s+a+a+a+b+b+buntuk 80 byte
Luke

@ Lukas saya baru sajaReferenceError: x is not defined
tsh

6

Jelly , 24 byte



x2
j0ị$
m0

0
Ḣ;LĿṁ6$$

Program lengkap (baris kosong sebenarnya adalah baris kosong).

Cobalah online! atau lihat test suite *

Bagaimana?

     - Link 1 (0 bytes), returns its input (e.g. "U" -> "U")
     - Link 2 (0 bytes), returns its input (e.g. "UV" -> "UV")
x2   - Link 3, doubles up (e.g. "UVW" -> "UUVVWW")
j0ị$ - Link 4, joins with final element (e.g. "UVWX" -> "UXVXWXX")
m0   - Link 5, reflects its input (e.g. "UVWXY" -> "UVWXYYXWVU")
     - Link 6 (0 bytes), returns its input (e.g. "UVWXYZ" -> "UVWXYX")
0    - Link 7, returns zero (link 7 is also link 0 since there are 7 links)
Ḣ;LĿṁ6$$ - Main link: string
Ḣ        - head (get the '#')
       $ - last two links as a monad:
   Ŀ     -   call link at index:
  L      -     length
      $  -   last two links as a monad:
    ṁ6   -     mould like 6 (e.g. "UVWXYYXWVU" -> "UVWXYY"
         -                    or  "UV" -> "UVUVUV")
 ;       - concatenate (prepend the '#' again)
         - implicit print

* program test-suite harus diubah dengan menukar urutan apa yang menjadi Main linkdan Link 7, sementara footer menjadi Main Link. Selanjutnya #harus diganti secara manual, karena program seperti apa adanya.



4

PHP 7.1, 88 byte

#<?for(;$i<6;)echo@$argn[_22222232532233423355224462[5*$i+++strlen($argn|aa)*.85]-1]?:0;

PHP 5, 90 88 byte

#<?for(;$i<6;)echo$argn[_10311001122011333002244012345[6*$i+++strlen($argn|aa)-8]+1]?:0;

Saya tidak tahu bagaimana Anda mendapatkan ide ini tetapi itu berhasil. Bekerja _21422112233122444113355123456[6*$i+++strlen($argn|aa)-8]?
Jörg Hülsermann

1
dapatkah Anda menjelaskan bagaimana ini bekerja?
Brian H.

Yang ini bagus! Ini menyimpan offset di $argndalam 21422112233122444113355123456dan memilih yang benar berdasarkan strlen. aabantalan string setidaknya 2 karakter. Pada input #tidak ada output $argn[1]jadi ?:0a 0. Ini juga berfungsi untuk di 0dalam string. Salah satu jawaban terbaik yang pernah saya lihat! Sayangnya itu tidak membayar terlalu banyak (mendapat jawaban Jorg turun ke 95).
Christoph

1
Haha, ini adalah penyalahgunaan string otomatis PHP terbaik yang pernah saya lihat. +1
ETHproduksi

1
@Christoph Versi Kedua membutuhkan Versi PHP di bawah 7.1 dan Versi PHP lebih dari 5.6 Saya pikir tambahkan ini harus membuat ini lebih jelas
Jörg Hülsermann

3

PHP, 95 93 89 87

<?=strtr(_1.intval([a6n,sot,c8c,lba,vf1,vf2][strlen($argn|aa)-2],33),_134256,$argn.=0);

Pada dasarnya jawaban JörgHülsermann tetapi sangat turun jadi saya memutuskan untuk mempostingnya sebagai jawaban terpisah. Saya akan menghitung jawaban ini sebagai upaya kolektif saya dan Jorg.

-4 bytes thanks to @JörgHülsermann
-1 bytes thanks to @JörgHülsermann's base 33 numbers

3

Python 3, 166 162 160 152 byte

import re
lambda x,d='(.)$',b=r'\1':re.sub(*[('$','0'*6),(d,b*6),('(..)$',b*3),('(\w)',b*2),('.'+'(.)'*4,r'#\1\4\2\4\3\4'),(d,b*2),('','')][len(x)-1],x)

Saya membuat daftar tuple penggantian regex untuk setiap pola, dan kemudian mengekstrak tuple pada indeks len(x)-1, akhirnya menepuk ( *) ke dalam argumen re.sub:

lambda x, d='(.)$', b=r'\1':   # lambda expression, save often used strings
  re.sub(   # regex replacement of:
         *  # expand what follows into arguments, i.e. f(*(1,2)) -> f(1,2)
         [  # list of replacement patterns:
            # 1 character: replace the end with 6 zeroes
            ('$', '0'*6),
            # 2 chars: repeat the last character 6 times
            (d, b*6),
            # 3 chars: repeat the two non-#s 3 times.
            ('(..)$', b*3),
            # 4 chars: replace every non-# with twice itself
            ('(\w)', b*2),
            # 5 chars: has to be somewhat verbose..
            ('.'+'(.)'*4, r'#\1\4\2\4\3\4'), 
            # 6 chars: repeat the last character
            (d, b*2),
            # 7 chars: complete already, replace nothing with nothing
            ('', '')
         ][len(x)-1], # select the element from the list that has the right length
        x)  # replace in argument x

disimpan 8 byte dengan menghafal r'\1'(terima kasih, Gábor Fekete)


1
Bukankah menggunakan r'\1'sebagai parameter bernama menyimpan beberapa byte?
Gábor Fekete

1
Anda menulis o=r'\1'tetapi menggunakan bdalam kode Anda: D
Gábor Fekete

1
@ GáborFekete Whoops: D
L3viathan

3

Java 10, 228 227 224 182 byte

s->{var x="$1$1";int l=s.length();return l>6?s:l>5?s+s.charAt(5):l<2?"#000000":s.replaceAll(l>4?"(.)(.)(.)(.)$":l==3?"([^#]{2})":"([^#])",l>4?"$1$4$2$4$3$4":l>3?x:l>2?x+"$1":x+x+x);}

Cobalah online.

Penjelasan:

s->{                      // Method with String as both parameter and return-type
  var x="$1$1";         //  Create a temp String to repeat a match
  int l=s.length();     //  Length of the String
  return l>6?           //  If the length is 7:
    s                   //   Return the input-String as is
   :l>5?                //  Else-if the length is 6:
    s+s.charAt(5)       //   Return the input-String with the last character repeated
   :l<2?                //  Else-if the length is 1:
    "#000000";          //   Simply return the literal String #000000
   :                    //  Else (the length is 2, 3, 4, or 5):
    s.replaceAll(       //   Return the input-String after a regex replace:
                        //    With as match:
     l>4?               //     If the length is 5:
      "(.)(.)(.)(.)$",  //      Use a match for pattern #(A)(B)(C)(D)
     :l==3?             //     Else-if the length is 3:
      "([^#]{2})"       //      Use a match for pattern #(AB)
     :                  //     Else (the length is 2 or 4):
      "([^#])",         //      Use a match for pattern #(A) or #(A)(B)(C)
                        //    And as replacement: 
     l>4?               //     If the length is 5:
      "$1$4$2$4$3$4"    //      Change #ABCD to #ADBDCD
     :l>3?              //     Else-if the length is 4:
      x                 //      Change #ABC to #AABBCC
     :l>2?              //     Else-if the length is 3:
      x+"$1"            //      Change #AB to #ABABAB
     :                  //     Else (the length is 2):
      x+x+x);}          //      Change #A to #AAAAAA

2

APL (Dyalog) , 43 byte

Membutuhkan ⎕IO←0yang default pada banyak sistem.

'#',{6⍴(≢⍵)⊃'0' ⍵(2/⍵)(∊⍵,¨⊃⌽⍵)(⍵,⌽⍵)⍵}1↓⍞

Cobalah online!

1↓⍞ drop karakter pertama (hash)

{ terapkan fungsi anonim berikut

(≢⍵)⊃ gunakan panjang argumen untuk memilih salah satu dari tujuh nilai berikut:
  '0' nol
   argumen
   argumen
  2/⍵ dua ( 2) dari masing-masing ( /) dari argumen ( ) argumen
  ∊⍵,¨⊃⌽⍵ diratakan ( ) ( ) diikuti masing-masing ( ) dengan yang pertama ( ) dari terbalik (yang ) argumen ( )
  ⍵,⌽⍵ argumen ( ) prepended ( ,) ke (terbalik ) argumen ( )
   argumen

6⍴ ulangi elemen dari itu sampai panjang enam tercapai

} akhir fungsi anonim

'#', tambahkan hash ke sana


2

Python 2, 167 165 byte

-2 byte berkat Trelzevir

z=zip
lambda s:'#'+''.join([reduce(lambda x,y:x+y,c)for c in['0'*6,s[1:2]*6,z(s[1:2],s[2:3])*3,z(*z(s[1:2],s[2:3],s[3:4]))*2,z(s[1:4],s[-1]*3),s+s[-1],s][len(s)-1]])

Itu membuat daftar string dan memilih berdasarkan panjang string.


1
Anda dapat menghemat 2 byte menggunakan z=zip.
Trelzevir

2

Sed, 119 (118 Bytes + -E)

s/#//
s/^$/0/
s/^.$/&&/
s/^..$/&&&/
s/^(.)(.)(.)$/\1\1\2\2\3\3/
s/^(.)(.)(.)(.)$/\1\4\2\4\3\4/
s/^....(.)$/&\1/
s/^/#/

Substitusi teks langsung.


2

PHP, 87 Bytes

gunakan Nomor Basis 35

<?=strtr(_2.intval([i4w,qdi,j1y,apg,ruu,ruv][strlen($argn|aa)-2],35),_234156,$argn.=0);

Cobalah online!

atau gunakan Nomor Basis 33

<?=strtr(_1.intval([a6n,sot,c8c,lba,vf1,vf2][strlen($argn|aa)-2],33),_134256,$argn.=0);

Cobalah online!

PHP, 89 Bytes

<?=strtr(_1.[11111,21212,12233,42434,23455,23456][strlen($argn|aa)-2],_123456,$argn."0");

Cobalah online!

intval(["8kn",gd8,"9ft",wqq,i3j,i3k][strlen($argn|aa)-2],36) + 3 Bytes menggunakan 36 Base

PHP, 102 Bytes

<?=strtr("01".substr("11111111112121212233424342345523456",5*strlen($argn)-5,5),str_split($argn."0"));

Cobalah online!

PHP, 180 Bytes

<?=[str_pad("#",7,($l=strlen($p=substr($argn,1)))?$p:0),"#$p[0]$p[0]$p[1]$p[1]$p[2]$p[2]","#$p[0]$p[3]$p[1]$p[3]$p[2]$p[3]","#$p[0]$p[1]$p[2]$p[3]$p[4]$p[4]",$argn][($l>2)*($l-2)];

Cobalah online!


1
Saya menurunkan versi ini ke 95 byte tetapi saya pikir itu berbeda jadi saya mempostingnya sebagai jawaban sendiri . Semoga Anda menyukainya :)
Christoph

2
@Christoph Saat ini saya di sini dengan versi saya Coba online!
Jörg Hülsermann

2
Basis 33 adalah ide yang luar biasa! Aku sudah duduk di sini sebentar tapi tidak mengatasinya.
Christoph

1
@Christoph sangat mirip dengan golf versi pertama saya. Tidak mudah untuk melakukan golf pendekatan saya di bawah pendekatan Anda
Jörg Hülsermann

1
@Christoph Terima kasih dan sistem Nomor 35 basis adalah pendekatan saya dalam Kerja Tim kami
Jörg Hülsermann

2

Retina , 90 byte

#(..)$
#$1$1$1
#(.)(.)(.)$
#$1$1$2$2$3
#(.)(.)(.(.))$
#$1$4$2$4$3
#$
#0
+`#.{0,4}(.)$
$&$1

Cobalah online! Termasuk kasus uji.

Penjelasan: Terjemahan pertama menangani dua digit, yang ketiga tiga, yang ketiga empat, dan yang keempat nol. Namun, terjemahan kedua dan keempat tidak mengulangi digit (terakhir), seperti yang dilakukan pada akhirnya untuk mencakup semua kasus yang tersisa.


2

Haskell , 130 127 122 118 109 95 bytes (oleh user1472751 )

y a|l<-[last a]=[y"0",y$a++a,a++a++a,do c<-a;[c,c],(:l)=<<init a,a++l,a]!!length a
f(h:r)=h:y r

Cobalah online!


Ada ruang berlebihan di belakang g.
Laikoni

1
Juga (x:r)!(y:t)=x:y:r!t;e!_=elebih pendek dari a!b=id=<<[[x,y]|(x,y)<-zip a b].
Laikoni

Karena char pertama selalu #bisa kamu lakukang(a:t)|l<-last t=a:[ ...
Laikoni

@Laikoni memang, itu adalah peningkatan luar biasa!
bartavelle

Saya menemukan solusi 95 byte yang menggunakan pendekatan yang mirip dengan Anda (pikiran besar berpikir sama, ya?). Anda dapat menggunakannya atau saya dapat memposting jawaban terpisah.
user1472751

2

Powershell, 113 111 byte

param($s)-join($s+='0'*($s-eq'#'))[0,1+((,1*5),(2,1*2+2),(1,2,2,3,3),(4,2,4,3,4),(2..5+5),(2..6))[$s.Length-2]]

Script pengujian yang dijelaskan:

$f = {

param($s)           # parameter string
$s+='0'*($s-eq'#')  # append '0' if $s equal to '#'
$i=(                # get indexes from array
    (,1*5),         # $i = 1,1,1,1,1 if $s.length-2 = 0
    (2,1*2+2),      # $i = 2,1,2,1,2 if $s.length-2 = 1
    (1,2,2,3,3),    # $i = 1,2,2,3,3 if $s.length-2 = 2
    (4,2,4,3,4),    # $i = 4,2,4,3,4 if $s.length-2 = 3
    (2..5+5),       # $i = 2,3,4,5,5 if $s.length-2 = 4
    (2..6)          # $i = 2,3,4,5,6 if $s.length-2 = 5
)[$s.Length-2]
-join$s[0,1+$i]     # join chars from $s by indexes 0, 1 and $i


}

@(
    , ("#", "#000000")
    , ("#0", "#000000")
    , ("#4", "#444444")
    , ("#f", "#ffffff")
    , ("#a1", "#a1a1a1")
    , ("#0f", "#0f0f0f")
    , ("#99", "#999999")
    , ("#1a8", "#11aa88")
    , ("#223", "#222233")
    , ("#fff", "#ffffff")
    , ("#1230", "#102030")
    , ("#d767", "#d77767")
    , ("#bbb5", "#b5b5b5")
    , ("#aabbc", "#aabbcc")
    , ("#00000", "#000000")
    , ("#3764e", "#3764ee")
    , ("#3764ef", "#3764ef")
    , ("#123456", "#123456")
    , ("#f8f8f8", "#f8f8f8")
) |% {
    $s, $e = $_
    $r = &$f $s
    "$($e-eq$r): $r"
}

Keluaran:

True: #000000
True: #000000
True: #444444
True: #ffffff
True: #a1a1a1
True: #0f0f0f
True: #999999
True: #11aa88
True: #222233
True: #ffffff
True: #102030
True: #d77767
True: #b5b5b5
True: #aabbcc
True: #000000
True: #3764ee
True: #3764ef
True: #123456
True: #f8f8f8

1

JavaScript (ES6), 96 byte

s=>'#'+(c=[u,v,w,x,y,z]=s.slice(1)||'0',z?c:y?c+y:(x?u+x+v+x+w+x:w?u+u+v+v+w+w:c.repeat(v?3:6)))


1

Perl, 61 byte

say+(/./g,0)[0,1,(unpack+S7,"g+g+ÜRÉ/Â¥[ [")[y/#//c]=~/./g]

Jalankan dengan perl -nE. Mengasumsikan bahwa input persis seperti yang dijelaskan (memberikan hasil yang salah jika input memiliki baris tambahan).

String "g + g + ÜRÉ / Â ¥ [[" mengkodekan 7 angka 16-bit 11111,11111,21212,12233,42434,23455,23456sebagai 14 karakter latin1. Berikut hexdump untuk kejelasan:

0000001d: 672b 672b dc52 c92f c2a5 9f5b a05b       g+g+.R./...[.[

Aku menggantikan Latin-1 string dengan panggilan untuk berkemas (), dan mendapat: perl -nE 'say+(/./g,0)[0,1,(unpack+S7,pack "H*","672b672bdc52c92fc2a59f5ba05b")[y/#//c]=~/./g]'. Tetapi ketika saya mengetik "#a", saya mendapatkan "# a0a0a0" yang saya pikir salah. Itu harus "#aaaaaa". (Mungkin saya membuat kesalahan dalam panggilan paket ().)
JL

Kali ini saya menggantikan unpack () & pack () panggilan dengan celana pendek literal, dan mendapat: perl -nE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'. Tampaknya masih salah, karena "#a" masih menghasilkan jawaban yang salah dari "# a0a0a0" (bukan "#aaaaaa").
JL

Ah! Saya menemukan jawabannya! Saya perlu menggunakan -lswitch (yang ini "elo" seperti dalam "huruf L") dengan -nEswitch, seperti ini: perl -lnE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'. Sekarang berfungsi dengan benar.
JL

Peringatan yang mengatakan "(memberikan hasil yang salah jika input memiliki baris baru)" dapat dihilangkan dengan mengubah "Jalankan dengan perl -nE" menjadi "Jalankan dengan perl -lnE". (Bagian -ldari saklar menghilangkan jalur baru yang tertinggal untuk Anda.)
JL

Menggunakan -Fpada baris perintah memungkinkan Anda mengubahnya untuk say+(@F,0)[0,1,(unpack+S7,"g+g+ÜRÉ/Â¥[ [")[$#F]=~/./g]menyimpan 5 byte dalam kode.
Xcali

1

Windows batch, 389 372 362 349 231 byte

Saya benar-benar menyalin kode @Neil ...

@call:c %s:~1,1% %s:~2,1% %s:~3,1% %s:~4,1% %s:~5,1% %s:~6,1%
@exit/b
:c
@for %%r in (#%1%2%3%4%5%6.%6 #%1%2%3%4%5%5.%5 #%1%4%2%4%3%4.%4 %s%%1%2%3.%3 
%s%%1%2%1%2.%2 %s%%1%1%1%1%1.%1 #000000.0)do @if not %%~xr.==. @echo %%~nr&exit/b

1
mengganti% s% dengan% 1 akan menghemat beberapa byte.
satibel

2
%s:~3,1%%s:~4,1%dapat diganti dengan %s:~3,2%. Saya juga tidak yakin apakah ini berfungsi untuk masukan dari #.
Neil

2
Ngomong-ngomong, saya mencoba algoritma yang berbeda, dan keluar pada 243 byte.
Neil

1
Bolehkah saya tahu algoritma apa?
stevefestl

1
(Maaf, saya tidak melihat komentar Anda karena kurangnya @Neil.) Ada beberapa boilerplate tetapi dua garis yang menarik adalah call:c %s:~1,1% %s:~2,1% %s:~3,1% %s:~4,1% %s:~5,1% %s:~6,1%dan for %%r in (#%1%2%3%4%5%6.%6 #%1%2%3%4%5%5.%5 #%1%4%2%4%3%4.%4 %s%%1%2%3.%3 %s%%1%2%1%2.%2 %s%%1%1%1%1%1.%1 #000000.0)do if not %%~xr.==. echo %%~nr&exit/b.
Neil

1

Pyth, 35 byte

+\#@<R6[J|tQ\0K*6JKKs*R2JjeJJ+JeJ)l

Cobalah online di sini , atau verifikasi semua test case di sini .

+\#@<R6[J|tQ\0K*6JKKs*R2JjeJJ+JeJ)lQ   Implicit: Q=eval(input())
                                       Trailing Q inferred
          tQ                           Remove first char of input
         |  \0                         The above, or "0" if empty
        J                             *Store in J (also yields stored value)
              K*6J                    *Repeat J 6 times, store in K
                  KK                  *2 more copies of the above
                    s*R2J             *Duplicate each char of J in place
                         jeJJ         *Join chars of J on last char of J
                             +JeJ     *Append last char of J to J
       [                         )     Wrap the 5 starred results in an array
    <R6                                Trim each to length 6
   @                              lQ   Choose result at index of length of input
                                       (Modular indexing, so length 7 selects 0th element)
+\#                                    Prepend #, implicit print

1

Python 2 , 99 byte

def a(s):s=s[1:]or'0';l=len(s);print('#'+(l/4*s[-1]).join(i+i*(l==3)for i in(l<5)*6*s)+s+s[-1])[:7]

Cobalah online!


Posting pertama yang bagus. Selain itu, Cobalah online! adalah situs opsional tetapi disarankan yang menjalankan kode untuk dimasukkan dalam jawaban Anda. Itu dapat menghasilkan posting CG&CC dan memberikan jumlah byte yang akurat untuk boot.
Veskah

Sangat keren, terima kasih!
Jitse

0

Python 2 - 179 byte

n=raw_input()                                #prompts for string
t=len(n)                                     #the length of the string is stored to 't'
if t==1:n+="0"*6                             #if t is only one char long, it needs to be black, so n is assigned 6 zeroes
if t==2:n+=n[1]*5                            #if t is two chars long, it adds the last character times 5 at the end
if t==3:n+=n[1:3]*2                          #if t is 3 chars, it multiplies the last two digits times 3
if t==4:n="#"+n[1]*2+n[2]*2+n[3]*2           #if t is 4 chars, it multiplies each char by two
if t==5:n=n[:2]+n[4]+n[2]+n[4]+n[3]+n[4]     #if t is 5 chars, it makes it work
if t==6:n+=n[t-1]                            #if t is 6 chars, it adds the last character to the end
print n                                      #it prints out n

Adakah yang bisa membantu saya menyimpan beberapa byte? Semua pernyataan seakan-akan bisa disingkat menjadi sesuatu yang lebih pendek, saya hanya tidak tahu apa.


1
Coba masukkan setiap cuplikan dalam daftar dan pengindeksan. Juga, beralih ke Python 3 kemungkinan besar akan menghemat byte dan list[len(list)-x]sama dengan list[-x].
CalculatorFeline

Jika Anda ingin memeras beberapa byte, pertimbangkan if t==1:untuk mengonversikan ke if t<2:(dan if t==2:ke if t<3:, dll.). Ini kurang dapat dibaca, tentu saja, tetapi lebih banyak kode-golf!
JL

0

TXR Lisp: 171 byte

Bertakuk:

(do let ((s (cdr @1)))
  (caseql (length s)
    (0 "#000000") 
    (1 `#@s@s@s@s@s@s`)
    (2 `#@s@s@s`)
    (3 `#@[mappend list s s]`)
    (4 `#@[s 0]@[s 3]@[s 1]@[s 3]@[s 2]@[s 3]`)
    (5 `#@s@[s 4]`)
    (6 `#@s`))))

Ini adalah fungsi anonim: domakro menghasilkan (lambda ...)formulir.

Ini adalah gaya pengkodean idiomatik, cocok untuk produksi; satu-satunya golf adalah squashing space:

(do let((s(cdr @1)))(caseql(length s)(0"#000000")(1`#@s@s@s@s@s@s`)(2`#@s@s@s`)(3`#@[mappend list s s]`)(4`#@[s 0]@[s 3]@[s 1]@[s 3]@[s 2]@[s 3]`)(5`#@s@[s 4]`)(6`#@s`))))

0

Braingolf , 95 byte

l1-.1e$_!&@4>[!@]|.2e$_!&@!@2!@2|.3e$_<@V2[R<!@!@v]|.4e$_<@VRM&,2>[@v!@R]|.5e$_<@!&@@|.6e$_&@|;

Cobalah online!

Ini secara efektif setara dengan huruf Switching pada jumlah karakter setelah #input.

Penjelasan

Hal-hal yang selalu berjalan:

l1-.1  Implicit input to stack
l      Push length of stack
 1-    Decrement last item in stack
   .   Duplicate last item in stack
    1  Push 1

Jika #X:

e$_!&@4>[!@]|
e              If last 2 items (input length - 1 and 1) are equal..
 $_            ..Pop last item silently
   !&@         ..Print entire stack as chars without popping
      4>       ..Push 4 and move it to start of stack
        [..]   ..While loop, decrements first item in stack when it reaches ]
               ..If first item in stack is 0 when reaching ], exit loop
               ..This loop will run 5 times
         !@    ....Print last char without popping
            |  endif

Jika #XX

Yang ini mungkin sedikit golf, saya mungkin melihatnya ketika saya pulang

.2e$_!&@!@2!@2|
.2               Duplicate last item and push 2
  e              If last 2 items (input length - 1 and 2) are equal..
   $_            ..Pop last item silently
     !&@         ..Print entire stack as chars without popping
        !@2      ..Print last 2 items as chars without popping
           !@2   ..Print last 2 items as chars without popping
              |  Endif

Jika #XXX

.3e$_<@V2[R<!@!@v]|
.3                   Duplicate last item and push 3
  e                  If last 2 items (input length - 1 and 3) are equal..
   $_                ..Pop last item silently
     <@              ..Move first item in stack to the end, then pop and print
       V2            ..Create new stack and push 2 to it
         [.......]   ..While loop, see above for explanation
          R<         ....Switch to stack1 and move first item to end of stack
            !@!@     ....Print last item on stack twice without popping
                v    ....Move to stack2 for loop counting
                  |  Endif

Anda mendapatkan idenya


0

Ruby , 127 byte

c=~/#(.)?(.)?(.)?(.)?(.)?(.)?/
$6?c:'#'+($5?$1+$2+$3+$4+$5*2:$4?$1+$4+$2+$4+$3+$4:$3?$1*2+$2*2+$3*2:$2?($1+$2)*3:$1?$1*6:"0"*6)

Cobalah online!


0

Ruby , 118 byte

def f c
c.sub!'#',''
s=c.size
t=c[3]
s>5?'#'+c:f(s<1?'0':s<2?c*6:s<3?c*3:s<4?c*2:s<5?c[0]+t+c[1]+t+c[2]+t:c+c[-1])
end

Cobalah online!


0

05AB1E , 24 byte

ćU©0®Ð€D®S¤ý®¤«)JIgè6∍Xì

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

ć           # Extract the head of the (implicit) input-string;
            # pop and push remainder and head
 U          # Pop and store the head in variable `X`
  ©         # Store the remainder in variable `®` (without popping)
  0         # Push a 0
  ®Ð        # Push `®` three times
    D      # Duplicate each character in the last copy (which becomes a character-list)
  ®S        # Push variable `®` again, converted to a character-list
    ¤       # Get its last character (without popping the list itself)
     ý      # Join the list by this character
  ®         # Push variable `®` once again
   ¤        # Get its last character (without popping the string itself)
    «       # Append it to the string
  )         # Wrap all values into a list
   J        # Join the inner list from `€D` together to a list,
            # or in case of input `#`, join everything together to string "0"
            #  i.e. "#" → (["","0","","","",""] → ) "0"
            #  i.e. "#4" → ["4","0","4","4","44","4","44"]
            #  i.e. "#a1" → ["a1","0","a1","a1","aa11","a11","a11"]
            #  i.e. "#1a8" → ["1a8","0","1a8","1a8","11aa88","18a88","1a88"]
            #  i.e. "#abcd" → ["abcd","0","abcd","abcd","aabbccdd","adbdcdd","abcdd"]
            #  i.e. "#3764e" → ["3764e","0","3764e","3764e","33776644ee","3e7e6e4ee","3764ee"]
            #  i.e. #123456 → ["123456","0","123456","123456","112233445566","16263646566","1234566"]
    Ig      # Push the length of the input
      è     # Index (0-based) this into the list (with automatic wraparound for length=7)
       6   # Extend/shorten the string to length 6
         Xì # And prepend variable `X` (the "#")
            # (after which the result is output implicitly)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.