รหัสสี Hex ที่ดีขึ้นสำหรับอินเทอร์เน็ตของคุณ


46

Hexts สามเท่าเช่น#ffffff(สีขาว) หรือ#3764ef(สีน้ำเงิน) มักใช้เพื่อแสดงสี RGB พวกเขาประกอบด้วย#ตามด้วยเลขฐานสิบหกหกหลัก (0-f) หรือบางครั้งตัวเลขสามหลักที่สีจริงจะได้รับโดยสองเท่าแต่ละหลัก ยกตัวอย่างเช่น#fffเป็น#ffffffและเป็น#1a8#11aa88

น่าเศร้าที่จดชวเลขสามหลักคือ golfiest อินเทอร์เน็ตมีการเสนอจนถึงขณะนี้

เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้สตริง 1 ถึง 7 ตัวอักษร:

  • #ตัวอักษรตัวแรกจะเป็น
  • ตัวละครอื่น ๆ 0123456789abcdefจะเป็นตัวเลขฐานสิบหก:

อินพุตเป็นรูปแบบชวเลขของ hex triplet (หรือแบบเต็มหากกำหนดอักขระ 7 ตัว) คุณจำเป็นต้องแสดงเอาต์พุต triplet hex แบบเต็มที่ขยายชวเลขอินพุตโดยยึดตามรูปแบบเหล่านี้:

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

แต่ละU, V, W, X, YและZอาจจะเป็นเลขฐานสิบหกหลักใด ๆ เอาต์พุตจะมี 7 ตัวอักษรเสมอ

ตัวอย่างเช่น:

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

หมายเหตุ

  • อินพุตจะเริ่มต้นด้วย#และจะต้องมีเอาต์พุต

  • คุณอาจจะถือว่าตัวอักษรทั้งหมดเป็นตัวพิมพ์เล็ก ( abcdef) หรือตัวพิมพ์ใหญ่ ( ABCDEF) ตามที่คุณต้องการ

  • ตัวอักษรในผลลัพธ์อาจเป็นได้ทั้งสองกรณีตามที่คุณต้องการ คุณสามารถผสมเคสได้

  • อัลฟ่า / ความโปร่งใสไม่ได้รับการจัดการที่นี่ (แม้ว่าจะมีรุ่น RGBA สีฐานสิบหก)

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ


11
" น่าเศร้าที่จดชวเลขสามหลักคือ golfiest อินเทอร์เน็ตมีให้จนถึงขณะนี้. " - เอ่อ, ไม่ตรง HTML, 0 ไบต์ - ทำงานนอกกรอบ
Bergi

11
การย้อนกลับของสิ่งนี้จะเป็นความท้าทายที่ยอดเยี่ยมเช่นกัน
Beta Decay

9
ฉันไม่พอใจกับ#UVWXY -> #UVWXYYรายการเพราะอนุญาตให้มีการแสดงค่าเดียวสำหรับช่องสีฟ้า แต่ไม่มีการแสดงออกที่คล้ายกันสำหรับสีแดงและสีเขียว (เช่นถ้าฉันต้องการ#889071ฉันไม่สามารถย่อ แต่#907188สามารถ ... ตาม#90718) คนอื่น ๆ ทำงานได้ดีมาก
Draco18s

3
@ Draco18s ฉันรักมัน #UVWX -> #UXVXWXที่หนึ่งและ มันเป็นเช่นนั้นไม่สอดคล้องกันและพฤติกรรมพลว่ามันเป็นเรื่องยากที่จะเชื่อว่ามีไม่ได้เป็นคู่ของเบราว์เซอร์ที่เป็นจริงในปัจจุบันใช้มัน
xDaizu

1
ข้อกำหนดคุณลักษณะ @xDaizu CSS มี#RGBAและ#RRGGBBAAดังนั้น # 1234 ควรอ่านเป็นrgba(17, 34, 51, 0.25)
tsh

คำตอบ:


13

JavaScript, 86 82 77 ไบต์

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

เพิ่งพบว่าลบ recursive save 4 ไบต์ ...

แนวคิดจาก @Arnauld บันทึก 4 ไบต์และอีก 1 ไบต์


([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+bสำหรับ 80 ไบต์
ลุ

@Luke ฉันเพิ่งได้ReferenceError: x is not defined
TSH

6

เยลลี่ 24 ไบต์



x2
j0ị$
m0

0
Ḣ;LĿṁ6$$

โปรแกรมเต็มรูปแบบ (บรรทัดว่างเปล่าเป็นบรรทัดว่างเปล่าจริง ๆ )

ลองออนไลน์! หรือดูชุดทดสอบ *

อย่างไร?

     - 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

* โปรแกรมการทดสอบในตัวจะต้องมีการเปลี่ยนแปลงโดยการเปลี่ยนคำสั่งของสิ่งที่เป็นที่Main linkและในขณะที่ส่วนท้ายกลายเป็นLink 7 Main Linkนอกจากนี้ยัง#จะต้องถูกแทนที่ด้วยตนเองเนื่องจากโปรแกรมตามที่เป็นหัวมัน


5

CJam, 45  44  42 40 36 35 ไบต์

q(\0se|_,("6* 3* 2e* )f+ _W=+ "S/=~

เรียกใช้ข้อมูลโค้ดต่าง ๆ ตามความยาวของอินพุต


1
การจัดรูปแบบ <s> ไม่ </s> บางรูปแบบจำเป็นต้องใช้ ....<s></s>
stevefestl


1
อ๊ะ! คุณมีฉัน! ฉันลืมไปแล้ว!
stevefestl

4

PHP 7.1, 88 ไบต์

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

PHP 5, 90 88 ไบต์

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

ฉันไม่มีความคิดว่าคุณจะได้รับความคิดนี้ แต่มันทำงานได้ ทำงาน_21422112233122444113355123456[6*$i+++strlen($argn|aa)-8]ไหม
JörgHülsermann

1
คุณช่วยอธิบายวิธีการทำงานของมันได้มั้ย
Brian H.

อันนี้ดีจัง! มันเก็บชดเชยใน$argnใน21422112233122444113355123456และเลือกที่ถูกต้องขึ้นอยู่กับ strlen aaวางสตริงให้มีอย่างน้อย 2 ตัวอักษร กับการป้อนข้อมูล#ที่ไม่มี$argn[1]ดังนั้นเอาท์พุต?:0 0สิ่งนี้ยังใช้งานได้ใน0ในสตริง หนึ่งในคำตอบที่ดีที่สุดที่ฉันเคยเห็น! น่าเศร้าที่มันไม่ได้จ่ายมากเกินไป (ได้คำตอบของJörgลงไปถึง 95)
Christoph

1
ฮ่าฮ่านี่เป็นการละเมิดสตริงอัตโนมัติของ PHP ที่ดีที่สุดที่ฉันเคยเห็นในขณะนี้ +1
ETHproductions

1
@Christoph รุ่นที่สองต้องการรุ่น PHP ต่ำกว่า 7.1 และรุ่น PHP มากกว่า 5.6 ฉันคิดว่าการเพิ่มนี้ควรทำให้ชัดเจนยิ่งขึ้น
JörgHülsermann

3

PHP, 95 93 89 87

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

โดยพื้นฐาน @ คำตอบของJörgHülsermann แต่ลงเล่นกอล์ฟอย่างมากดังนั้นฉันจึงตัดสินใจโพสต์เป็นคำตอบแยกต่างหาก ฉันจะนับคำตอบนี้เป็นความพยายามร่วมกันของฉันและ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 bytes

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)

ฉันสร้างรายการของ tuples ทดแทน regex สำหรับแต่ละรูปแบบแล้วแยก tuple ที่ดัชนีlen(x)-1ในที่สุด splatting ( *) มันลงในอาร์กิวเมนต์ของ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

บันทึก 8 ไบต์ด้วยการท่องจำr'\1'(ขอบคุณGábor Fekete)


1
จะไม่ใช้r'\1'เป็นพารามิเตอร์ที่มีชื่อบันทึกบางไบต์?
Gábor Fekete

1
คุณเขียนo=r'\1'แต่ใช้bในรหัสของคุณ: D
Gábor Fekete

1
@GáborFeketeอ้าว: D
L3viathan

3

Java 10, 228 227 224 182 ไบต์

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

ลองออนไลน์

คำอธิบาย:

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 ไบต์

ต้องใช้⎕IO←0ซึ่งเป็นค่าเริ่มต้นในหลาย ๆ ระบบ

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

ลองออนไลน์!

1↓⍞ วางอักขระตัวแรก (แฮช)

{ ใช้ฟังก์ชั่นที่ไม่ระบุชื่อต่อไปนี้

(≢⍵)⊃ ใช้ความยาวของการโต้แย้งเพื่อเลือกหนึ่งในเจ็ดค่าต่อไปนี้:  อาร์กิวเมนต์ที่
  '0' ศูนย์
  อาร์กิวเมนต์
   ที่
  2/⍵ สอง ( 2) ของแต่ละ ( /) ของการโต้แย้ง ( ) อาร์กิวเมนต์
  ∊⍵,¨⊃⌽⍵ ที่แบน ( ) อาร์กิวเมนต์ ( ) ตามแต่ละ ( ) โดยแรก ( ) ของ กลับ ( ) อาร์กิวเมนต์ ( )
  ⍵,⌽⍵ อาร์กิวเมนต์ ( ) ใช้ได้ ( ,) เพื่อย้อนกลับ (คน) อาร์กิวเมนต์ ( )
   อาร์กิวเมนต์

6⍴ ทำซ้ำองค์ประกอบจากนั้นจนกระทั่งความยาวหกสำเร็จ

} สิ้นสุดฟังก์ชั่นที่ไม่ระบุชื่อ

'#', เสริมแฮชที่


2

Python 2, 167 165 ไบต์

-2 ไบต์ขอบคุณ 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]])

มันสร้างรายการของสตริงและเลือกตามความยาวของสตริง


1
คุณสามารถบันทึก 2 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/^/#/

การทดแทนข้อความที่ไม่ซับซ้อน


2

PHP, 87 ไบต์

ใช้ตัวเลขฐาน 35

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

ลองออนไลน์!

หรือใช้หมายเลขฐาน 33

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

ลองออนไลน์!

PHP, 89 ไบต์

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

ลองออนไลน์!

intval(["8kn",gd8,"9ft",wqq,i3j,i3k][strlen($argn|aa)-2],36) + 3 ไบต์ใช้ 36 ฐาน

PHP, 102 ไบต์

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

ลองออนไลน์!

PHP, 180 ไบต์

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

ลองออนไลน์!


1
ผมแข็งแรงเล่นกอล์ฟลงรุ่นนี้ถึง 95 ไบต์ แต่ฉันคิดว่ามันคือการที่แตกต่างกันดังนั้นผมโพสต์ไว้เป็นของตัวเองคำตอบ หวังว่าคุณจะชอบ :)
Christoph

2
@Christoph ในขณะนี้ฉันอยู่ที่นี่กับรุ่นของฉันลองออนไลน์!
JörgHülsermann

2
ฐาน 33 เป็นความคิดที่ยอดเยี่ยม! ฉันนั่งที่นี่มาซักพัก แต่ก็ไม่ได้คิดอะไร
Christoph

1
@ Christoph มันคล้ายกันมากกับการเล่นกอล์ฟในเวอร์ชั่นแรกของฉัน มันไม่ใช่เรื่องง่ายเลยที่คุณจะเล่นกอล์ฟนักแสดงของฉันภายใต้แนวทางของคุณ
JörgHülsermann

1
@ Christoph ขอบคุณและฐาน 35 จำนวนระบบคือวิธีการของฉันในการทำงานเป็นทีมของเรา
JörgHülsermann

2

เรติน่า 90 ไบต์

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

ลองออนไลน์! รวมถึงกรณีทดสอบ

คำอธิบาย: การแปลครั้งแรกจัดการสองหลักหนึ่งสองสามสามหนึ่งสี่และหนึ่งสี่ศูนย์ อย่างไรก็ตามการแปลครั้งที่สองและครั้งที่สี่จะทำซ้ำตัวเลข (สุดท้าย) ตามที่ทำในตอนท้ายอย่างไรก็ตามเพื่อครอบคลุมกรณีที่เหลือทั้งหมด


2

Haskell , 130 127 122 118 109 95 ไบต์ (โดยผู้ใช้1472751 )

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

ลองออนไลน์!


gมีที่อยู่เบื้องหลังพื้นที่ฟุ่มเฟือยคือ
Laikoni

1
นอกจากนี้ยังจะสั้นกว่า(x:r)!(y:t)=x:y:r!t;e!_=e a!b=id=<<[[x,y]|(x,y)<-zip a b]
Laikoni

ในฐานะที่เป็นคนแรกที่#คุณสามารถทำได้g(a:t)|l<-last t=a:[ ...
Laikoni

@Laikoni แน่นอนว่าเป็นการปรับปรุงที่ยอดเยี่ยม!
bartavelle

ฉันพบโซลูชัน 95 ไบต์ที่ใช้วิธีการคล้ายกับของคุณ (จิตใจที่ดีคิดเหมือนกันใช่มั้ย) คุณสามารถใช้มันหรือฉันสามารถโพสต์คำตอบแยกต่างหาก
user1472751

2

Powershell, 113 111 ไบต์

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

สคริปต์ทดสอบที่อธิบายแล้ว:

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

เอาท์พุท:

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 ไบต์

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 ไบต์

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

perl -nEทำงานด้วย สมมติว่าอินพุตเป็นแบบตรงตามที่อธิบายไว้ (ให้ผลลัพธ์ที่ไม่ถูกต้องหากอินพุตมีบรรทัดใหม่ต่อท้าย)

สตริง "g + g + ÜRÉ / Â¥ [[" เข้ารหัสตัวเลข 16 บิตจำนวน11111,11111,21212,12233,42434,23455,234567 ตัวเป็นอักขระละติน 14 ตัว นี่คือ hexdump เพื่อความชัดเจน:

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

ฉันแทนที่สตริง Latin-1 ด้วย call to pack () และได้รับ: perl -nE 'say+(/./g,0)[0,1,(unpack+S7,pack "H*","672b672bdc52c92fc2a59f5ba05b")[y/#//c]=~/./g]'. แต่เมื่อฉันพิมพ์ "#a" ฉันจะได้รับ "# a0a0a0" ซึ่งฉันคิดว่าผิด ควรเป็น "#aaaaaa" (บางทีฉันอาจทำผิดพลาดในแพ็ค () โทร)
JL

เวลานี้ฉันแทนที่การเรียก unpack () & pack () ด้วยกางเกงขาสั้นตัวอักษรและได้รับ: perl -nE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'. ดูเหมือนว่าจะผิดเนื่องจาก "#a" ยังคงให้คำตอบที่ไม่ถูกต้องของ "# a0a0a0" (แทนที่จะเป็น "#aaaaaa")
JL

Ah! ฉันคิดออก! ฉันต้องการที่จะใช้-lสวิทช์ (ว่า "ell" ใน "ตัวอักษร L") กับสวิทช์เช่นนี้-nE perl -lnE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'ตอนนี้มันทำงานได้อย่างถูกต้อง
JL

คำเตือนที่ระบุว่า "(ให้ผลลัพธ์ที่ไม่ถูกต้องหากอินพุตมีบรรทัดใหม่ต่อท้าย)" สามารถกำจัดได้โดยเปลี่ยน "Run with perl -nE" เป็น "Run with perl -lnE" ( -lส่วนหนึ่งของสวิตช์กำจัดการขึ้นบรรทัดใหม่สำหรับคุณ)
JL

การใช้-Fบนบรรทัดคำสั่งให้คุณเปลี่ยนสิ่งนี้เป็นการsay+(@F,0)[0,1,(unpack+S7,"g+g+ÜRÉ/Â¥[ [")[$#F]=~/./g]บันทึก 5 ไบต์ในรหัส
Xcali

1

ชุด Windows, 389 372 362 349 231 ไบต์

ฉันคัดลอก @Neil code ทั้งหมด ...

@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
การแทนที่% s% ด้วย% 1 ควรช่วยคุณสองสามไบต์
satibel

2
%s:~3,1%%s:~4,1%%s:~3,2%สามารถถูกแทนที่ด้วย #นอกจากนี้ผมไม่แน่ใจว่างานนี้สำหรับการป้อนข้อมูลของ
Neil

2
โดยวิธีการที่ฉันลองอัลกอริทึมที่แตกต่างและมันออกมาที่ 243 ไบต์
Neil

1
ฉันขอทราบอัลกอริทึมได้อย่างไร
stevefestl

1
(ขออภัยผมไม่ได้เห็นความคิดเห็นของคุณเนื่องจากการขาดการ @Neil.) มีต้นแบบบางเรื่อง แต่ทั้งสองเส้นที่น่าสนใจและ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

Pyth, 35 ไบต์

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

ลองออนไลน์ได้ที่นี่หรือตรวจสอบกรณีทดสอบทั้งหมดที่นี่

+\#@<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 ไบต์

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]

ลองออนไลน์!


โพสต์แรกที่ดี เช่นกันลองออนไลน์! เป็นเว็บไซต์เสริมที่ได้รับการแนะนำ แต่ให้รันโค้ดเพื่อรวมไว้ในคำตอบของคุณ มันสามารถสร้างโพสต์ CG&CC และให้นับไบต์ที่ถูกต้องในการบูต
Veskah

เจ๋งมากขอบคุณ!
Jitse

0

Python 2 - 179 ไบต์

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

ใครสามารถช่วยฉันบันทึกบางไบต์? ข้อความทั้งหมดหากดูเหมือนว่าพวกเขาจะถูกทำให้สั้นลงฉันก็ไม่รู้ว่าอะไร


1
ลองวางตัวอย่างข้อมูลในรายการและจัดทำดัชนี นอกจากนี้การเปลี่ยนไปใช้งูหลาม 3 ส่วนใหญ่มีแนวโน้มที่จะลดขนาดและเป็นเช่นเดียวกับlist[len(list)-x] list[-x]
CalculatorFeline

หากคุณต้องการบีบไบต์ให้พิจารณาแปลงif t==1:เป็นif t<2:(และif t==2:เพื่อif t<3:เป็นต้น) มันอ่านได้น้อยกว่าเพื่อให้แน่ใจ แต่รหัสมากขึ้นสามารถกอล์ฟ!
JL

0

TXR Lisp: 171 ไบต์

เยื้อง:

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

นี่คือฟังก์ชันที่ไม่ระบุชื่อ: doแมโครสร้าง(lambda ...)ฟอร์ม

มันเป็นรูปแบบการเข้ารหัสสำนวนเหมาะสำหรับการผลิต; การเล่นกอล์ฟเพียงอย่างเดียวคือการบีบพื้นที่ว่าง:

(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 ไบต์

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

ลองออนไลน์!

นี่คือ Braingolf ที่เทียบเท่ากับสวิตช์แบบตัวเรือนในปริมาณของตัวละครหลังจากที่#อยู่ในอินพุต

คำอธิบาย

สิ่งที่มักจะทำงาน:

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

ถ้า#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

ถ้า #XX

อันนี้อาจเล่นกอล์ฟได้นิดหน่อยฉันอาจมองเมื่อฉันกลับถึงบ้าน

.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

ถ้า #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

คุณได้รับความคิด




0

05AB1E , 24 ไบต์

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

ลองมันออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย:

ć           # 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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.