Mã màu Hex tốt hơn cho Internet của bạn


46

Các bộ ba hex như #ffffff(trắng) hoặc #3764ef(xanh lam) thường được sử dụng để biểu thị màu RGB. Chúng bao gồm #sáu chữ số thập lục phân (0-f) hoặc đôi khi là ba chữ số trong đó màu thực có được bằng cách nhân đôi mỗi chữ số. Ví dụ, #fff#ffffff#1a8#11aa88.

Đáng buồn thay, tốc ký ba chữ số đó là golf tốt nhất mà Internet phải cung cấp, cho đến bây giờ .

Viết chương trình hoặc hàm có chuỗi từ 1 đến 7 ký tự:

  • Nhân vật đầu tiên sẽ luôn như vậy #.
  • Các ký tự khác sẽ luôn là các chữ số thập lục phân : 0123456789abcdef.

Đầu vào là một dạng tốc ký của bộ ba hex (hoặc dạng đầy đủ nếu có 7 ký tự). Bạn cần xuất ra một bộ ba hex đầy đủ để mở rộng tốc ký đầu vào dựa trên các mẫu sau:

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

Mỗi U, V, W, X, Y, và Zcó thể là bất kỳ chữ số thập lục phân. Đầu ra luôn là 7 ký tự.

Ví dụ:

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

Ghi chú

  • Đầu vào sẽ luôn bắt đầu bằng #và do đó phải đầu ra.

  • Bạn có thể giả sử tất cả các chữ cái đầu vào là chữ thường ( abcdef) hoặc chữ hoa ( ABCDEF) nếu muốn.

  • Chữ cái trong đầu ra có thể là một trong hai trường hợp bạn muốn. Bạn thậm chí có thể trộn các trường hợp.

  • Alpha / độ trong suốt không được xử lý ở đây (mặc dù có các phiên bản hex của màu RGBA).

Mã ngắn nhất tính bằng byte thắng.


11
" Đáng buồn thay, tốc ký ba chữ số đó là thứ tốt nhất mà internet phải cung cấp, cho đến tận bây giờ. " - Uh, không chính xác . HTML, 0 byte - nó hoạt động tốt
Bergi

11
Mặt trái của điều này cũng là một thử thách thú vị
Beta Decay

9
Tôi không hài lòng với #UVWXY -> #UVWXYYmục nhập vì nó cho phép biểu thị một giá trị duy nhất cho kênh Blue, nhưng không có biểu thức tương tự cho Red và Green (ví dụ: nếu tôi muốn #889071tôi không thể viết tắt, nhưng #907188có thể ... như #90718) Tất cả đều làm việc tuyệt vời.
Draco18

3
@ Draco18s tôi thích nó. Đó là một và #UVWX -> #UXVXWX. Đó là một hành vi không nhất quán và tùy tiện đến mức khó tin rằng không có một vài trình duyệt thực sự hiện đang thực hiện nó.
xDaizu

1
Đặc tả CSS @xDaizu có #RGBA#RRGGBBAA, vì vậy # 1234 nên được đọc làrgba(17, 34, 51, 0.25)
tsh

Câu trả lời:


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``)

chỉ cần tìm ra rằng loại bỏ đệ quy lưu 4 byte ...

ý tưởng từ @Arnauld lưu 4 byte, thêm +1 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+bcho 80 byte
Luke

@Luke Tôi vừa nhận đượcReferenceError: x is not defined
tsh

6

Thạch , 24 byte



x2
j0ị$
m0

0
Ḣ;LĿṁ6$$

Một chương trình đầy đủ (các dòng trống thực sự là các dòng trống).

Hãy thử trực tuyến! hoặc xem bộ kiểm tra *

Làm sao?

     - 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

* chương trình bộ thử nghiệm phải được thay đổi bằng cách hoán đổi thứ tự của cái gì Main linkLink 7, trong khi chân trang trở thành Main Link. Hơn nữa, #phải được thay thế bằng tay, vì chương trình như đang đứng đầu nó.



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;

Tôi không biết làm thế nào bạn có được ý tưởng này nhưng nó hoạt động. Làm việc _21422112233122444113355123456[6*$i+++strlen($argn|aa)-8]?
Jörg Hülsermann

1
bạn có thể vui lòng giải thích làm thế nào điều này làm việc?
Brian H.

Cái này hay đấy! Nó lưu trữ các bù đắp ở $argntrong 21422112233122444113355123456và chọn một trong những chính xác dựa trên strlen. aađệm chuỗi ít nhất 2 ký tự. Trên đầu vào #không có đầu ra $argn[1]như vậy ?:0a 0. Điều này cũng hoạt động trên 0trong chuỗi. Một trong những câu trả lời hay nhất tôi từng thấy! Đáng buồn thay, nó không trả quá nhiều (câu trả lời của Jorg đã giảm xuống còn 95).
Christoph

1
Haha, đây là sự lạm dụng tốt nhất các chuỗi tự động của PHP mà tôi đã thấy trong một thời gian. +1
Sản phẩm ETH

1
@Christoph Phiên bản thứ hai cần Phiên bản PHP dưới 7.1 và Phiên bản PHP trên 5.6 Tôi nghĩ thêm điều này sẽ làm cho điều này rõ ràng hơn
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);

Về cơ bản câu trả lời của @ JörgHülsermann nhưng bị đánh gục rất nhiều nên tôi quyết định đăng nó dưới dạng câu trả lời riêng biệt. Tôi coi câu trả lời này là một nỗ lực chung của tôi và Jörg.

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

Tôi xây dựng một danh sách các bộ dữ liệu thay thế regex cho mỗi mẫu và sau đó trích xuất bộ dữ liệu theo chỉ mục len(x)-1, cuối cùng là ghép ( *) nó vào các đối số của 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

đã lưu 8 byte bằng cách ghi nhớ r'\1'(cảm ơn, Gábor Fekete)


1
Sẽ không sử dụng r'\1'như một tham số có tên lưu một số byte?
Gábor Fekete

1
Bạn đã viết o=r'\1'nhưng sử dụng btrong mã của mình: D
Gábor Fekete

1
@ GáborFekete Rất tiếc: 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);}

Hãy thử trực tuyến.

Giải trình:

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

Yêu cầu ⎕IO←0mặc định trên nhiều hệ thống.

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

Hãy thử trực tuyến!

1↓⍞ thả ký tự đầu tiên (hàm băm)

{ áp dụng chức năng ẩn danh sau

(≢⍵)⊃ sử dụng độ dài của đối số để chọn một trong bảy giá trị sau:
  '0' a zero
   đối
   số
  2/⍵ hai ( 2) của mỗi ( /) của đối số ( ) đối số
  ∊⍵,¨⊃⌽⍵ flattened ( ) ( ) theo sau ( ) bởi đầu tiên ( ) của đối số ( ) đối số ( )
  ⍵,⌽⍵ đối số ( ,) được dự phòng ( ) đối với đối số ( ) đối số ( )
   đối số

6⍴ lặp lại các yếu tố từ đó cho đến khi đạt được độ dài sáu

} kết thúc chức năng ẩn danh

'#', thêm một hàm băm vào đó


2

Python 2, 167 165 byte

-2 byte nhờ 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]])

Nó tạo ra một danh sách các chuỗi và chọn dựa trên độ dài của chuỗi.


1
Bạn có thể lưu 2 byte bằng cách sử dụng z=zip.
Trelzevir

2

Sed, 119 (118 byte + -E)

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

Thay thế văn bản đơn giản.


2

PHP, 87 byte

sử dụng số 35 cơ sở

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

Hãy thử trực tuyến!

hoặc sử dụng số 33 cơ sở

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

Hãy thử trực tuyến!

PHP, 89 byte

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

Hãy thử trực tuyến!

intval(["8kn",gd8,"9ft",wqq,i3j,i3k][strlen($argn|aa)-2],36) + 3 byte sử dụng cơ sở 36

PHP, 102 byte

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

Hãy thử trực tuyến!

PHP, 180 byte

<?=[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)];

Hãy thử trực tuyến!


1
Tôi đã đánh golf phiên bản này xuống còn 95 byte nhưng tôi nghĩ nó khác biệt nên tôi đã đăng nó dưới dạng câu trả lời . Hy vọng bạn thích nó :)
Christoph

2
@Christoph Trong thời điểm tôi ở đây với phiên bản của mình Hãy thử trực tuyến!
Jörg Hülsermann

2
Cơ sở 33 là một ý tưởng tuyệt vời! Tôi đã ngồi đây một lúc nhưng không nghĩ ra được.
Christoph

1
@Christoph nó rất giống với việc chơi golf phiên bản đầu tiên của tôi. Thật không dễ dàng để đánh golf sự chấp thuận của tôi theo cách tiếp cận của bạn
Jörg Hülsermann

1
@Christoph Cảm ơn và hệ thống Số 35 cơ sở là cách tiếp cận của tôi trong Làm việc theo nhóm của chúng tôi
Jörg Hülsermann

2

Võng mạc , 90 byte

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

Hãy thử trực tuyến! Bao gồm các trường hợp thử nghiệm.

Giải thích: Bản dịch thứ nhất xử lý hai chữ số, số thứ hai ba, số thứ ba bốn và số thứ tư bằng không. Tuy nhiên, cả bản dịch thứ hai và thứ tư đều không lặp lại chữ số (cuối cùng), vì điều đó được thực hiện ở cuối dù sao để bao quát tất cả các trường hợp còn lại.


2

Haskell , 130 127 122 118 109 95 byte (bởi người dùng1472751 )

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

Hãy thử trực tuyến!


Có một không gian thừa phía sau g.
Laikoni

1
Cũng (x:r)!(y:t)=x:y:r!t;e!_=engắn hơn a!b=id=<<[[x,y]|(x,y)<-zip a b].
Laikoni

Vì char đầu tiên luôn là thứ #bạn có thể làmg(a:t)|l<-last t=a:[ ...
Laikoni

@Laikoni thực sự, đó là những cải tiến tuyệt vời!
bartavelle

Tôi tìm thấy một giải pháp 95 byte sử dụng một cách tiếp cận tương tự với bạn (những bộ óc vĩ đại nghĩ giống nhau, phải không?). Bạn có thể sử dụng nó hoặc tôi có thể gửi một câu trả lời riêng biệt.
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]]

Kịch bản kiểm tra giải thích:

$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"
}

Đầu ra:

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]

Chạy với perl -nE. Giả sử rằng đầu vào chính xác như được mô tả (cho kết quả không chính xác nếu đầu vào có dòng mới ở cuối).

Chuỗi "g + g + RÉ / Â [[" mã hóa 7 số 16 bit 11111,11111,21212,12233,42434,23455,23456dưới dạng 14 ký tự latin1. Đây là một hexdump cho rõ ràng:

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

Tôi đã thay thế chuỗi Latin-1 bằng lệnh gọi pack () và got : perl -nE 'say+(/./g,0)[0,1,(unpack+S7,pack "H*","672b672bdc52c92fc2a59f5ba05b")[y/#//c]=~/./g]'. Nhưng khi tôi gõ "#a", tôi nhận được "# a0a0a0" mà tôi nghĩ là sai. Nó phải là "#aaaaaa". (Có lẽ tôi đã phạm sai lầm trong gói () gọi.)
JL

Lần này, tôi đã thay thế các cuộc gọi unpack () & pack () bằng quần short theo nghĩa đen và nhận được : perl -nE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'. Nó vẫn có vẻ sai, vì "#a" vẫn mang lại câu trả lời không chính xác là "# a0a0a0" (thay vì "#aaaaaa").
JL

Ah! Tôi đã hiểu rồi! Tôi cần sử dụng công -ltắc (đó là "ell" như trong "chữ L") với công -nEtắc, như thế này : perl -lnE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'. Bây giờ nó hoạt động chính xác.
JL

Cảnh báo có nội dung "(đưa ra kết quả không chính xác nếu đầu vào có dòng mới)" có thể được loại bỏ bằng cách thay đổi "Chạy với perl -nE" thành "Chạy với perl -lnE". (Phần -lcủa công tắc sẽ thoát khỏi dòng mới cho bạn.)
JL

Sử dụng -Ftrên dòng lệnh cho phép bạn thay đổi điều này để say+(@F,0)[0,1,(unpack+S7,"g+g+ÜRÉ/Â¥[ [")[$#F]=~/./g]tiết kiệm 5 byte trong mã.
Xcali

1

Lô Windows, 389 372 362 349 231 byte

Tôi hoàn toàn sao chép mã @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
thay thế% s% bằng% 1 sẽ giúp bạn tiết kiệm một vài byte.
satibel

2
%s:~3,1%%s:~4,1%có thể được thay thế bằng %s:~3,2%. Ngoài ra tôi không chắc chắn rằng điều này hoạt động cho một đầu vào #.
Neil

2
Nhân tiện, tôi đã thử một thuật toán khác, và nó xuất hiện ở mức 243 byte.
Neil

1
Tôi có thể biết thuật toán là gì không?
stevefestl

1
(Xin lỗi, tôi không thấy bình luận của bạn do thiếu @Neil.) Có một số bản tóm tắt nhưng hai dòng quan tâm là call:c %s:~1,1% %s:~2,1% %s:~3,1% %s:~4,1% %s:~5,1% %s:~6,1%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

Bình thường, 35 byte

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

Dùng thử trực tuyến tại đây , hoặc xác minh tất cả các trường hợp thử nghiệm ở đây .

+\#@<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]

Hãy thử trực tuyến!


Đẹp bài đầu tiên. Như một bên, Hãy thử trực tuyến! là một trang web tùy chọn nhưng được đề xuất chạy mã để đưa vào câu trả lời của bạn. Nó có thể tạo các bài đăng CG & CC và đưa ra số byte chính xác để khởi động.
Veskah

Rất tuyệt, cảm ơn!
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

Bất cứ ai có thể giúp tôi lưu một số byte? Tất cả các câu lệnh nếu có vẻ như chúng có thể được rút ngắn thành một cái gì đó ngắn hơn, tôi chỉ không biết những gì.


1
Hãy thử đặt từng đoạn trong một danh sách và lập chỉ mục. Ngoài ra, chuyển sang Python 3 rất có thể sẽ lưu byte và list[len(list)-x]giống như list[-x].
Máy

Nếu bạn muốn vắt kiệt một số byte, hãy xem xét chuyển đổi if t==1:thành if t<2:(và if t==2:sang if t<3:, v.v.). Chắc chắn là nó ít đọc hơn, nhưng có thể chơi nhiều mã hơn!
JL

0

TXR Lisp: 171 byte

Thụt lề:

(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`))))

Đây là một hàm ẩn danh: domacro tạo một (lambda ...)biểu mẫu.

Đó là phong cách mã hóa thành ngữ, phù hợp cho sản xuất; việc chơi golf duy nhất là xóa sạch khoảng trắng:

(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$_&@|;

Hãy thử trực tuyến!

Đây thực sự là tương đương với trường hợp chuyển đổi của Braingolf về số lượng ký tự sau #đầu vào.

Giải trình

Những thứ luôn luôn chạy:

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

Nếu #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

Nếu như #XX

Cái này có thể chơi được một chút, tôi có thể nhìn vào nó khi về nhà

.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

Nếu như #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

Bạn có ý tưởng




0

05AB1E , 24 byte

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

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

ć           # 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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.