İnternetiniz İçin Daha İyi Hex Renk Kodları


46

#ffffff(Beyaz) veya #3764ef(mavimsi) gibi onaltılı üçüzler genellikle RGB renklerini belirtmek için kullanılır. Bunları #altı onaltılık rakam (0-f) veya bazen gerçek rengin her rakamı iki katına çıkarıldığı üç rakamdan oluşur . Örneğin, #fffbir #ffffffve #1a8bir #11aa88.

Ne yazık ki, bu üç basamaklı steno internet, teklife vardı golfiest oldu şimdiye kadar .

1 ila 7 karakterlik bir dizgede geçen bir program veya işlev yazın:

  • İlk karakter her zaman olacaktır #.
  • Diğer karakterler hep onaltılık basamak olacaktır: 0123456789abcdef.

Giriş, altıgen üçlünün kısa şeklidir (veya 7 karakter verilirse tam biçimdir). Bu kalıplara dayanarak giriş kısayolunu genişleten tam bir altıgen üçlüsü çıkmanız gerekir:

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

Her biri U, V, W, X, Y, ve Zherhangi bir onaltılı basamak olabilir. Çıktı her zaman 7 karakterdir.

Örneğin:

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

notlar

  • Girdi her zaman başlayacaktır #ve bu yüzden çıktı almalıdır.

  • Giriş harflerinin tamamının küçük harf ( abcdef) veya büyük harf ( ) olduğunu varsayalım ABCDEF.

  • Çıktıdaki harfler, istediğiniz gibi olabilir. Sen bile davaları karıştırabilirsin.

  • Alfa / şeffaflık burada ele alınmaz (RGBA renklerinin onaltılık versiyonları olsa da).

Bayt cinsinden en kısa kod kazanır.


11
Maalesef, şu üç rakamlı steno internetin şu ana kadar sunabileceği en hızlı oyundu. ” - Ah, tam olarak değil . HTML, 0 bayt - kutunun dışında çalışır
Bergi

11
Bunun tam tersi de güzel bir meydan okuma olurdu
Beta Decay

9
#UVWXY -> #UVWXYYMavi kanal için tek değerlikli bir temsile izin verdiği için girişten memnun değilim , ancak Kırmızı ve Yeşil için benzer bir ifade yok (örneğin, istersem #889071kısaltmayı #907188yapamam , ancak olabilir ... gibi #90718) hepsi harika çalışıyor.
Draco18

3
@ Draco18s Bayıldım. Bu ve #UVWX -> #UXVXWX. Böyle tutarsız ve tarayıcının bir çift yoktur inanmak zor olduğunu keyfi bir davranış aslında şu anda onu yerine getirirler.
xDaizu

1
@xDaizu CSS şartnamesi şu şekildedir #RGBAve #RRGGBBAA# 1234 ' rgba(17, 34, 51, 0.25)
ün

Yanıtlar:


13

JavaScript, 86 82 77 bayt

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

sadece özyinelemeli 4 bayt tasarruf kaldırmak ... bulmak

@Arnauld’daki fikir 4 bayt, +1 bayt daha


([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+b80 bayt için
Luke,

@Luke az önce varReferenceError: x is not defined
tsh

6

Jöle , 24 bayt



x2
j0ị$
m0

0
Ḣ;LĿṁ6$$

Tam bir program (boş satırlar aslında boş satırlar).

Çevrimiçi deneyin! veya bir test takımına bakın *

Nasıl?

     - 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

* Test süit programı nelerdi sırasını değiştirerek değiştirilebilir zorunda kaldı Main linkve Link 7altbilgi olurken, Main Link. Ayrıca, #programın başındaki gibi programın manuel olarak değiştirilmesi gerekiyordu.



4

PHP 7.1, 88 bayt

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

PHP 5, 90 88 bayt

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

Bu fikri nasıl elde ettiğin hakkında hiçbir fikrim yok ama işe yarıyor. Çalışma _21422112233122444113355123456[6*$i+++strlen($argn|aa)-8]?
Jörg Hülsermann

1
Bunun nasıl çalıştığını açıklayabilir misiniz?
Brian H.

Bu çok hoş! Bu ofset saklar $argniçinde 21422112233122444113355123456strlen bağlı olarak doğru bir ve seçer. aadizgiyi en az 2 karaktere kaydırır. Girişinde hangi #hayır yoktur $argn[1]bu yüzden ?:0bir çıkışı 0. Bu aynı zamanda 0dizede de çalışır . Gördüğüm en iyi cevaplardan biri! Ne yazık ki çok para ödemiyor (Jörg'in cevabını 95'e düşürdü).
Christoph

1
Haha, bu PHP'yi bir süredir gördüğüm otomatik dizgilerin en kötüye kullanımı. +1
ETH Sunumları

1
@Christoph İkinci versiyon 7.1 altında bir PHP Sürüm ihtiyacı ve 5.6 üzerinde PHP Sürümü Bunu daha anlaşılır hale gereken bu eklemek düşünüyorum
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);

Temelde @ JörgHülsermann'ın cevabı ama büyük ölçüde aşağı golf bu yüzden ayrı bir cevap olarak göndermeye karar verdim. Bu cevabı ben ve Jörg'in ortak bir çabası olarak sayardım.

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

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)

Her desen için bir regex yedek tuples listesi hazırladım ve sonra dizini len(x)-1indekte çıkartıp sonunda argümanlarına ( *) da sıçratıyorum 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

ezberleyerek 8 bayt kurtardı r'\1'(teşekkürler, Gábor Fekete)


1
r'\1'Adlandırılmış bir parametre olarak kullanmak bazı baytları kaydetmez mi?
Gábor Fekete

1
Sen yazdın o=r'\1'ama bkodunda kullan: D
Gábor Fekete

1
@ GáborFekete Whoops: D
L3viathan

3

Java 10, 228 227 224 182 bayt

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

Çevrimiçi deneyin.

Açıklama:

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 bayt

⎕IO←0Birçok sistemde varsayılan olanı gerektirir .

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

Çevrimiçi deneyin!

1↓⍞ ilk karakteri bırak (karma)

{ aşağıdaki anonim işlevi uygulayın

(≢⍵)⊃ Aşağıdaki yedi değerlerinden birini seçmek için değişken uzunluk kullanın:
  '0' bir sıfır
   argüman
   bağımsız değişken
  2/⍵ , iki ( 2her biri) ( /argüman) ( )
  ∊⍵,¨⊃⌽⍵ (düzleştirilmiş ) bağımsız değişken ( her () ve ardından , ilk olarak) ( ) arasında ters ( ) bağımsız değişken ( )
  ⍵,⌽⍵ bağımsız değişken ( ) (önüne ,ters (to) ) bağımsız değişken ( )
   argüman

6⍴ altı uzunluğa ulaşılana kadar ondan elemanları tekrarla

} adsız işlevin sonu

'#', buna bir karmaşa vermek


2

Python 2, 167 165 bayt

Trelzevir sayesinde -2 bayt

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

Dizenin uzunluğuna göre dizelerin bir listesini oluşturur ve seçer.


1
Kullanarak 2 bayt kaydedebilirsiniz z=zip.
Trelzevir

2

Sed, 119 (118 Bayt + -E)

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

Basit metin değiştirme.


2

PHP, 87 Bayt

Base 35 Numbers kullanın

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

Çevrimiçi deneyin!

veya Base 33 Numaralarını kullanın

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

Çevrimiçi deneyin!

PHP, 89 Bayt

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

Çevrimiçi deneyin!

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

PHP, 102 Bayt

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

Çevrimiçi deneyin!

PHP, 180 Bayt

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

Çevrimiçi deneyin!


1
Bu sürümü 95 byte'a indirdim ancak farklı olduğunu düşündüm, bu yüzden kendi cevabını gönderdim . Umarım
Christoph

2
@Christoph Şu an sürümüm ile buradayım Çevrimiçi deneyin!
Jörg Hülsermann

2
Base 33 harika bir fikir! Bir süredir burada oturuyorum ama bu lanet olası gelmedi.
Christoph

1
@Christoph benim ilk versiyonumdaki golf oynamaya çok benziyor. Yaklaşımımı yaklaşımınız altında değerlendirmek kolay değildi
Jörg Hülsermann

1
@Christoph Teşekkürler ve üssü 35 Sayı sistemi Takım Çalışmamdaki yaklaşımımdır
Jörg Hülsermann

2

Retina , 90 bayt

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

Çevrimiçi deneyin! Test durumları içerir.

Açıklama: İlk çeviri iki hane, ikincisi üç, üçüncü dört ve dördüncü bir sıfır işliyor. Bununla birlikte, ne ikinci ne de dördüncü çeviriler (kalan) basamağı tekrar etmemektedir, zira sonunda kalan tüm davaları kapsayacak şekilde yapılmıştır.


2

Haskell , 130 127 122 118 109 95 bytes ( user1472751 tarafından )

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

Çevrimiçi deneyin!


Arkasında gereksiz bir yer var g.
Laikoni

1
Ayrıca (x:r)!(y:t)=x:y:r!t;e!_=edaha kısa a!b=id=<<[[x,y]|(x,y)<-zip a b].
Laikoni

İlk karakter her zaman olduğu #gibig(a:t)|l<-last t=a:[ ...
Laikoni

@Likonik gerçekten, bunlar büyük gelişmeler!
bartavelle

Seninkine benzer bir yaklaşım kullanan 95 baytlık bir çözüm buldum (harika beyinler aynı düşünür, ha?). Kullanabilirsin ya da ayrı bir cevap gönderebilirim.
user1472751

2

Powershell, 113 111 bayt

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

Açıklanan test komut dosyası:

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

Çıktı:

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 bayt

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 bayt

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

İle koş perl -nE. Girişin tam olarak tanımlandığı gibi olduğunu varsayar (girişin sonunda yeni bir satır varsa yanlış sonuçlar verir).

"G + g + ÜRÉ / Â ¥ [[" dizgisi, 16 bitlik 7 sayıyı 11111,11111,21212,12233,42434,23455,2345614 latin1 karakter olarak kodlar . İşte netlik için bir hexdump:

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

I) (paketi çağrısı ile Latin-1 dize yerini ve var: perl -nE 'say+(/./g,0)[0,1,(unpack+S7,pack "H*","672b672bdc52c92fc2a59f5ba05b")[y/#//c]=~/./g]'. Ancak "#a" yazdığımda yanlış olduğunu düşündüğüm "# a0a0a0" alıyorum. "#Aaaaaa" olmalı. (Belki de pakette bir hata yaptım ().)
JL

Bu sefer unpack () & pack () çağrılarını değişmez şortlarla değiştirdim ve:: perl -nE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'. "#A" hala "# a0a0a0" ("#aaaaaa" yerine) yanlış cevabını verir.
JL

Ah! Bunu anladım! Ben kullanmak için gerekli -lolan (en "L harfi" olarak "arşın" olduğunu) anahtarı -nEbu gibi anahtar: perl -lnE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'. Şimdi düzgün çalışıyor.
JL

"(Giriş izleyen bir yeni satır varsa yanlış sonuç verir)" uyarısı, "Çalıştır perl -nE" seçeneğini "Çalıştır" olarak değiştirerek ortadan kaldırılabilir perl -lnE. ( -lAnahtarın bir kısmı sizin için takip eden yeni hattan kurtuluyor.)
JL

-FKomut satırında kullanmak say+(@F,0)[0,1,(unpack+S7,"g+g+ÜRÉ/Â¥[ [")[$#F]=~/./g], kodu 5 bayttan tasarruf etmenizi sağlar .
Xcali

1

Windows toplu iş, 389 372 362 349 231 bayt

@Neil kodunu tamamen kopyaladım ...

@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% 'nin% 1 ile değiştirilmesi sizi birkaç bayttan kurtarmalıdır.
satibel

2
%s:~3,1%%s:~4,1%ile değiştirilebilir %s:~3,2%. Ayrıca bunun bir girdi için çalıştığından emin değilim #.
Neil,

2
Bu arada, farklı bir algoritma denedim ve 243 baytta çıktı.
Neil

1
Algoritmanın ne olduğunu bilebilir miyim?
stevefestl

1
(Maalesef, @Neil eksikliğinden dolayı yorumunuzu görmedim.) Bazı kazan plakası var ancak iki ilgi alanı call:c %s:~1,1% %s:~2,1% %s:~3,1% %s:~4,1% %s:~5,1% %s:~6,1%ve 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 bayt

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

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

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

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]

Çevrimiçi deneyin!


Güzel ilk mesaj. Bir kenara, çevrimiçi deneyin! isteğe bağlı, ancak cevabınıza dahil etmek için kod çalıştıran önerilen bir sitedir. CG&CC gönderileri oluşturabilir ve önyüklemeye doğru bir bayt sayısı verir.
Veskah

Çok havalı, teşekkürler!
Jitse

0

Python 2 - 179 bayt

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

Birisi baytları kurtarmama yardım edebilir mi? Tüm if ifadeleri daha kısa bir şeye kısaltılabilir gibi görünüyor, sadece ne olduğunu bilmiyorum.


1
Her snippet'i bir listeye koyup dizine eklemeyi deneyin. Ayrıca, Python 3'e geçilmesi büyük olasılıkla baytları kurtarır ve list[len(list)-x]aynıdır list[-x].
CalculatorFeline

Bazı bayt dışarı sıkmak istiyorsanız, dönüştürme düşünün if t==1:için if t<2:(ve if t==2:hiç if t<3:vs.). Daha az okunabilir, emin olmak için ama daha fazla kod-golf yapabiliyor!
JL

0

TXR Lisp: 171 bayt

Girintili'ye:

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

Bu anonim bir işlevdir: domakro bir (lambda ...)form oluşturur.

İdiomatik kodlama tarzı, üretime uygun; tek golf sahası boşlukları ezmek:

(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 bayt

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

Çevrimiçi deneyin!

Bu etkili bir şekilde Braingolf'un girişten sonra #girilen karakter sayısı üzerindeki bir anahtar davasıyla eşdeğerdir .

açıklama

Her zaman çalışan şeyler:

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

Eğer #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

Eğer #XX

Bu biraz golf oynayabilir, eve geldiğimde bakabilirim

.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

Eğer #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

Kaptın bu işi


0

Ruby , 127 bayt

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)

Çevrimiçi deneyin!


0

Ruby , 118 bayt

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

Çevrimiçi deneyin!


0

05AB1E , 24 bayt

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

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

Açıklama:

ć           # 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)
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.