Golf ASCII-sanat


31

Bir golfçuyu temsil eden bu eski sanat eserini golf oynamaya çalışalım:

      '\. . |> 18 >>
        \. '. |
       O >>. 'o |
        \. |
        / \. |
       / /. ' |
 jgs ^^^^^^^ `^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^

Kaynak: JGS - http://www.retrojunkie.com/asciiart/sports/golf.htm

Kurallar:

  • Giriş izni yok
  • Dış kaynaklara izin verilmez
  • Çıktı, tam da bu satır olmalı, bir monospace fontunda (OS konsolu, JS konsolu, HTML <pre> etiketi, ...), satır başı ve sondaki satır sonu da dahil.
  • Çevreleyen tırnaklara veya çift tırnaklara izin verilir (JS konsolu bir dizge çıktığınızda çift tırnak ekler, bu tamamdır)

En iyi cevap, herhangi bir dilde daha az karakter kullanan cevap olacaktır .

İyi eğlenceler!


2
"tam olarak bu metin": başlangıçtaki boş satır dahil mi? sonunda boş satır dahil mi? Sonunda yeni bir çizgi var mı yoksa olmasın mı? (Bu, sonunda 0, 1 veya 2 yeni .lines?)
Martin Ender,

@ m.buettner, çıktıda tam olarak bir tane önde gelen satır sonu ve bir de sonunda satır sonu / yeni satır olmalıdır. (ve bunlardan
kaçınamıyorsanız

1
ASCII bana daha Kriket atışına benziyor
Bay Alien

@ Mr.Alien Martin Kleppe'nin son konuşmasında gördüm: speakerdeck.com/aemkei/… (video: youtube.com/watch?v=zy-2ruMHdbU )
xem

Yanıtlar:


14

CJam, 62 karakter

"Ⴀ지尦렒>Ä΀ྀ㸀⡅쇋蒧ʸ鿀ʃ케袧Ƽ蟀ʄ導뤷쀂萯Ű⋥ἀ਎밊耧台 ⢙⿶ꝍ㕟劢햟騤꩏脽啎"2G#b128b:c~

Çevrimiçi deneyin.

Test sürüşü

$ base64 -d > golf.cjam <<< IgHhgqDsp4DlsKbroJLujJ8+w4TOgOC+gOO4gOKhheyHi+iSp8q46b+AyoPsvIDvoIPuhKvooqfGvOifgMqE5bCO66S37ICC6JCvxbDii6XhvIDgqI7rsIrvgYvogKflj7DCoOKimeK/tuqdjeOVn+WKou2Wn+mopO+em+qpj+iEve6arOWVjiIyRyNiMTI4Yjpjfg==
$ wc -m golf.cjam
62 golf.cjam
$ cjam golf.cjam

      '\                   .  .                        |>18>>
        \              .         ' .                   |
       O>>         .                 'o                |
        \       .                                      |
        /\    .                                        |
       / /  .'                                         |
 jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
$

Nasıl çalışır

2G#b base-65536 sayısını dikkate alarak önceki dizgiyi bir tamsayıya dönüştürür.

128b:cbu tamsayıyı bir dizge ( 110 bayt ) değerine dönüştürür ve bunu temel sayı-128 sayısını göz önünde bulundurarak dönüştürür ~:

"
^F'^@\^S.^B.^X|^@>^@1^@8^@>^@>^@
^H\^N.^I'^A.^S|^@
^GO^@>^@>^I.^Q'^@o^P|^@
^H\^G.&|^@
^H/^@\^D.(|^@
^G/^A/^B.^@')|^@
^A"2/{)iS*}%"jgs"'^7*'`'^51*N

(şapka notası)

2/{)iS*}%

dizeyi iki karakterden oluşan çiftlere böler ve her çift için aşağıdakileri yapar: Dizenin ikinci karakterini açın, bir tamsayıya dönüştürün ve dizeyi " "birçok kez tekrarlayın .

Örneğin , ASCII karakter kodu 40 olduğundan , ".("olur .". "(

En sonunda,

"jgs"'^7*'`'^51*N

dizeyi iter, "jgs"karakter ^7 kez tekrarlanır, karakter `, karakter ^51 kez tekrarlanır ve satır beslenir.


1
Gerçekten harika, ama pastebin den 62char sürümünü alıp "çevrimiçi dene", son satırdan önce "jgs ..." satır sonu eksik
xem

@xem: RAW Yapıştırma bölümünden kopyaladınız mı? Biçimlendirilmiş kodu kopyalarsam aynı sonucu alırım.
Dennis,

15

Ruby, 107

Görüntüyü kodda "oluşturmaya" çalışacağımı düşündüm (varolan sıkıştırma işlevini kullanmak yerine):

S=?\s*351+?^*60
"⠀鰇𗀈렜렟🀸쐺⠾𗁇롖鱠롢🁶⡷𓱿뢋鲝𛲞🂯⢰𗂹룁🃨⣩볲𗃳룸🄡⤢봪봬뤯鴰🅚⥛𚥝𙵞𜵟𘅧".chars{|q|S[511&r=q.ord]=(r>>10).chr}
puts S

Bu dizinin değişmezinde bazı yazdırılamayan karakterler var.

Yazdırılamayan karakterleri de göstermek için dosyanın onaltılı görünümü:

0000000: 533d 3f5c 732a 3335 312b 3f5e 2a36 300a  S=?\s*351+?^*60.
0000010: 22e2 a080 e9b0 87f0 9780 88eb a09c eba0  "...............
0000020: 9ff0 9f80 b8ef a0b9 ec90 baee 80bb efa0  ................
0000030: bcef a0bd e2a0 bef0 9781 87eb a196 e9b1  ................
0000040: a0eb a1a2 f09f 81b6 e2a1 b7f0 93b1 bfef  ................
0000050: a280 efa2 81eb a28b e9b2 9df0 9bb2 9ef0  ................
0000060: 9f82 afe2 a2b0 f097 82b9 eba3 81f0 9f83  ................
0000070: a8e2 a3a9 ebb3 b2f0 9783 b3eb a3b8 f09f  ................
0000080: 84a1 e2a4 a2eb b4aa ebb4 aceb a4af e9b4  ................
0000090: b0f0 9f85 9ae2 a59b f09a a59d f099 b59e  ................
00000a0: f09c b59f f098 85a7 222e 6368 6172 737b  ........".chars{
00000b0: 7c71 7c53 5b35 3131 2672 3d71 2e6f 7264  |q|S[511&r=q.ord
00000c0: 5d3d 2872 3e3e 3130 292e 6368 727d 0a70  ]=(r>>10).chr}.p
00000d0: 7574 7320 53                             uts S

Bazı önemli gelişmeler için Ventero'ya teşekkürler! (Temel olarak kodu% 50 azalttı.)


Güzel çaba! Bunun gibi cevaplar almayı umuyordum, bu sadece
ASCII'yi gizlemiyor

1
İkinci satır 6.times{|i|S[i+1]=' '*55+?|}2 karakter kaydetmek olabilir .
af

@ voidpigeon Ah teşekkürler. Aslında bununla başladım, ama başlangıçta bir ikereden fazla ihtiyacım olacağını düşündüm . İyi yakalama!
Martin Ender,

2
Umarım bunu kısaltmak için birkaç yoldan bahsedersem sorun olmaz Kullanılması S.fill{' '*55+?|}yerine birkaç daha fazla karakter (Tanımlamak gerekecek kaydeder Solarak ['']*7, değiştirmek putsiçin puts p,S,pve tüm y koordinatlarının olsa 1 çıkarma). Ardından, f ( def f(*p,c)) içindeki varargs tuşlarını kullanarak [], işlev çağrıları içine kaydedebilirsiniz . Oh, ve ()etrafını bırakabilirsin y,x.
Ventero

1
Bir S boyutlu yaparsanız, 55 karakter daha kaydedebilirsiniz;) Kendiniz yapmak istemiyorsanız kod burada .
Ventero

13

bash + iconv + DosBox / x86 makine kodu (104 97 96 95 karakter)

echo ↾각슈삨੽₲ɻ庲錿ʴ⇍罋곹삄ૃ蘊尧⺓⺂粘ㄾ㸸ਾ岈⺎➉⸠粓蜊㹏褾鄮漧粐蠊蝜꘮੼⾈葜꠮੼⾇⼠⺂ꤧ੼樠獧惇૳|iconv -futf8 -tucs2>o.com;dosbox o*

Bunu betiğe boş bir dizine koymayı öneriyorum, neredeyse bir terminale kopyalamanın her şeyi bozacağını garanti ediyorum; daha da iyisi, hazır senaryoyu burada bulabilirsiniz .

Beklenen çıktı: expected output

Nasıl çalışır

Bash kısmı betiğin UTF-8 karakterlerinden iconvbir .comdosyayı "açmak" için kullanılan ve DosBox ile başlatan sadece bir başlatıcı .

Tüm girdi dizileri iconvşikayet etmeden UCS-2 olarak yorumlanamadığından, içeriğe bazı sınırlamalar getirdiğine dikkat edin ; Örneğin, bazı nedenlerden dolayı, bxsicilleri içeren birçok işlem, onları kullandığım yere bağlı olarak çok büyük zarar gördü , bu yüzden birkaç kez bu problemi çözmek zorunda kaldım.

Şimdi, Unicode meselesi sadece "karakter sayısı" kurallarından faydalanmak; komut dosyasının gerçek boyutu (bayt olarak) orijinal .COMdosyadan çok daha büyük .

Çıkarılan .comdosya

00000000  be 21 01 ac 88 c2 a8 c0  7d 0a b2 20 7b 02 b2 5e  |.!......}.. {..^|
00000010  83 e0 3f 93 b4 02 cd 21  4b 7f f9 ac 84 c0 75 e4  |..?....!K.....u.|
00000020  c3 0a 0a 86 27 5c 93 2e  82 2e 98 7c 3e 31 38 3e  |....'\.....|>18>|
00000030  3e 0a 88 5c 8e 2e 89 27  20 2e 93 7c 0a 87 4f 3e  |>..\...' ..|..O>|
00000040  3e 89 2e 91 27 6f 90 7c  0a 88 5c 87 2e a6 7c 0a  |>...'o.|..\...|.|
00000050  88 2f 5c 84 2e a8 7c 0a  87 2f 20 2f 82 2e 27 a9  |./\...|../ /..'.|
00000060  7c 0a 20 6a 67 73 c7 60  f3 0a 0a 00              ||. jgs.`....|
0000006c

ve 108 bayt uzunluğundadır. Bunun için NASM kaynağı:

    org 100h

start:
    ; si: pointer to current position in data
    mov si,data
    ; load the character in al
    lodsb
mainloop:
    ; bx: repetition count
    ; - zero at startup
    ; - -1 after each RLE run
    ; - one less than each iteration after each "literal" run
    ; the constant decrement is not really a problem, as print
    ; always does at least one print, and there aren't enough
    ; consecutive literal values to have wraparound

    ; if the high bit is not set, we have a "literal" byte;
    ; we prepare it in dl just in case
    mov dl,al
    ; then check if it's not set and branch straight to print
    ; notice that bx=0 is fine, as print prints always at least one character
    ; test the top two bits (we need the 6th bit below)
    test al,0xc0
    ; to see if the top bit was set, we interpret it as the sign bit,
    ; and branch if the number is positive or zero (top bit not set)
    jge print
rle:
    ; it wasn't a literal, but a caret/space with a repetition count
    ; space if 6th bit not set, caret otherwise
    mov dl,' '
    ; exploit the parity bit to see if the 6th bit was set
    jnp nocaret
    mov dl,'^'
nocaret:
    ; lower 6 bits: repetition count
    ; and away the top bits and move in bx
    ; we and ax and not al because we have to get rid of the 02h in ah
    and ax,3fh
    xchg ax,bx
print:
    ; print bx times
    mov ah,2
    int 21h
    dec bx
    jg print
    ; read next character
    lodsb
    test al,al
    ; rinse & repeat unless we got a zero
    jnz mainloop
end:
    ret
data:
    ; here be data
    incbin "compressed.dat"
    ; NUL terminator
    db 0

Bütün bunlar, compressed.datformatı aşağıdaki gibidir:

  • yüksek bit ayarlanmamışsa, karakteri olduğu gibi yazdırın;
  • aksi takdirde, düşük 6 bit, tekrar sayımıdır ve ikinci en yüksek bit, boşluk (bit ayarlanmamış) veya bir şapka (bit ayar) yazdırması gerekip gerekmediğini belirtir.

compressed.datsırayla, orijinal metinden bir Python betiği kullanılarak üretilir .

Her şey burada bulunabilir .


10

Python, 156

print'''
%6s'\%19s.  .%24s|>18>>
%8s\%14s.%9s' .%19s|
%7sO>>%9s.%17s'o%16s|
%8s\%7s.%38s|
%8s/\%4s.%40s|
%7s/ /  .'%41s|
 jgs'''%(('',)*19)+'^'*7+'`'+'^'*51

Bu, bazı temel sıkıştırma için boşluk doldurma ile dize biçimlendirme kullanır.


7

PHP, 147

Bu komut satırında çalışır ve doğrudan konsola çıktı verir:

php -r 'echo gzinflate(base64_decode("41IAA/UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRfHQUBCHOmAiwsA"));'

6

Perl - 127 129 130 132 135 137 145

print q(
6'\19.2.24|>18>>
8\14.9'1.19|
7O>>9.17'o16|
8\7.38|
8/\4.40|
7/1/2.'41|
1jgs^^^^^^^`0
)=~s/\d++(?!>)/$"x$&||'^'x51/reg

Regero optimizasyonumdaki yardımları için Ventero ve m.buettner'e teşekkürler .


Bir karakterini kaydedebilirsinizs/\d+(?!8?>)/%$&s/rg
Ventero

@Ventero öneri için teşekkür ederim.
core1024

2
İyelik /\d++(?!>)/
Martin Ender

@ m.buettner Bunu bilmiyordum. Her gün yeni şeyler öğrenmek :)
core1024

4

GCC C - 203 bayt

Bununla biraz eğlenirim diye düşündüm. Bu benim MinGW sürümünde derler ve beklenen metni çıkarır.

Açıklık için boşluk eklendi.

char*v="\n ú'\\ í.  . è|>18>>\n ø\\ ò. ÷' . í|\n ùO>> ÷. ï'o ð|\n ø\\ ù. Ú|\n ø/\\ ü. Ø|\n ù/ /  .' ×|\n jgs^ù`^Í\n";
main(g,o,l){
    for(;*v;
        g=!g&*v<0&l?-*v++:g){
        v+=!(l=*v-35);
        putchar((g-=g>0)?o:(o=*v++));
    }
}

Çevrimiçi kod yapıştırma sitelerinden hiçbiri, ASCII aralığının dışındaki tek baytlık karakterlerin kullanımına izin vermediğinden, yüklenen bir örnek için onlardan kaçmak zorunda kaldım. Aksi halde aynı. http://codepad.org/nQrxTBlX

Siz de kendi derleyicinizle her zaman doğrulayabilirsiniz.


4

LOLCODE, 590 karakter

Cuz LOLCODE iz perfik dil 4 golfin: iz easy 2 şaşırtmaya benziyor ve ayrıntılı bir şey değil.

HAI
HOW DUZ I D C T
I HAZ A O
I HAZ A N ITZ 0
IM IN YR LOOP UPPIN YR N TIL BOTH SAEM N AN T
O R SMOOSH O AN C MKAY
IM OUTTA YR LOOP
FOUND YR O
IF U SAY SO
VISIBLE ""
VISIBLE SMOOSH "  '\" AN D " " 19 AN ".  ." AN D " " 24 AN "|>18>>" MKAY
VISIBLE "    \              .         ' .                   |"
VISIBLE "   O>>         .                 'o                |"
VISIBLE SMOOSH "    \       ." AN D " " 38 AN "|" MKAY
VISIBLE SMOOSH "    /\    ." AN  D " " 40 AN "|" MKAY
VISIBLE SMOOSH "   / /  .'" AN D " " 41 AN "|" MKAY
VISIBLE SMOOSH "jgs^^^^^^^`" AN D "^" 51 MKAY
VISIBLE ""
KTHXBYE

Tabii ki dis werkz pritee ama doan bir http://repl.it 'liek funcshuns 2 görünüyor gibi bir LOLCODE yorum var.

(Tranzlashun, http://speaklolcat.com 'un robotları tarafından cömertçe sağlandı.


Kodun girintili, aralıklı ve yorumlu sürümü (LOLCODE yorumları BTW ile başlar):

HAI BTW All LOLCODE programs start with HAI
    HOW DUZ I D C T BTW Function declarations follow the form "HOW DUZ I <func-name>[ <func-arg1>[ <func arg2>[ ...]]]". In this case, D is a function that repeats a YARN C (YARN is the equivalent of string in LOLCODE) NUMBR T (NUMBR = int) times.
        I HAZ A O BTW Variable declarations follow the form "I HAZ A <var-name>"

        I HAZ A N ITZ 0 BTW Variables can be intialised when declared by appending " ITZ <init-value>" to the declaration 
        IM IN YR LOOP UPPIN YR N TIL BOTH SAEM N AN T BTW Loops follow the form "IM IN YR LOOP <action> TIL <condition>" where action and condition are "UPPIN YR N" and "BOTH SAEM N AN T", respectively, in this case
            O R SMOOSH O AN C MKAY BTW "R" assigns a new value to a variable. YARN (string) concatenation follows the form "SMOOSH <str-1> AN <str-2>[ AN <str-3>[...]] MKAY"
        IM OUTTA YR LOOP BTW "IM OUTTA YR LOOP" ends LOLCODE loops

        FOUND YR O BTW "FOUND YR <value>" returns a value
    IF U SAY SO BTW "IF U SAY SO" ends functions

    VISIBLE "" BTW "VISIBLE" prints its argument to stdout
    VISIBLE SMOOSH "  '\" AN D " " 19 AN ".  ." AN D " " 24 AN "|>18>>" MKAY BTW The function I wrote above only "pays off" in terms of characters added/saved when repeating 19 or more characters (the function call itself takes 8 characters, assuming a one-character first argument and a 2-digit second one; you need to factor in the added quotes (2 characters), spaces (4) and ANs (4) for 18 total extra characters; and possible SMOOSH/MKAY)
    VISIBLE "    \              .         ' .                   |"
    VISIBLE "   O>>         .                 'o                |"
    VISIBLE SMOOSH "    \       ." AN D " " 38 AN "|" MKAY
    VISIBLE SMOOSH "    /\    ." AN  D " " 40 AN "|" MKAY
    VISIBLE SMOOSH "   / /  .'" AN D " " 41 AN "|" MKAY
    VISIBLE SMOOSH "jgs^^^^^^^`" AN D "^" 51 MKAY
    VISIBLE ""    
KTHXBYE BTW "KTHXSBYE" ends LOLCODE programs

haha, güzel sıkıştırma, bunun gibi: D
Joshua

3

Python - 205 203 197

i="""
G^y`G^MsGgGj!G
G|!o'G.!H/!G/!M
G|!n.!J\G/!N
G|!l.!M\!N
G|!VoG'!W.!O>HO!M
G|!Y.!G'!O.!T\!N
G>H8G1G>G|!^.!H.!Y\G'!L
G""".replace('!','G ')
o=''
j=140
while j:j-=2;o+=ord(i[j+1])%70*i[j]
print o

Dize iasci sanatındaki karakterleri, hepsi ters sırayla karakter olarak temsil edilen çarpımları ile birleştirir. Ayrıca, '!' Kullanarak biraz yer kazanıyorum 'G' yerinei ve sonra sadece değiştirerek.


3

Python (145)

'eJzjUgAB9RgFTKAHRthBjZ2hhZ0dF5SHphuhSx2rCTVQff52dlj0wPXm49IHtw+n83Do048hQRdCnz4QKuipE6sNqC8rvTgOAhLiSAdcAG/9Ri8='.decode('base64').decode('zip')

Çok orijinal değil, biliyorum.


2

Javascript ( ES6 ) 193 175 bayt

Düzenleme: Yeni satırları korumak için değiştirilmiş RegPack v3 , for in3 bayt kaydetmek için bir döngü kullanın ve gizli konsol çıktısı için eval kaldırıldı.

_="\nx'\\w{. z~|>18>>\n~\\~x.~ 'z{yx O>>~z 'owy~\\xzwxy~/\\{zw~yx / /  .'ww~ y jgs}`}}}}}}}^^\n~x  }^^^^^^^{   z .wy|\nx{{w~~";for(i of "wxyz{}~")with(_.split(i))_=join(pop())

Xem'in unicode sıkıştırmasını kullanma: 133 karakter

eval(unescape(escape('𧰽𘡜𫡸𙱜𧁷𮰮𘁺嵃🠱𞀾🡜𫡾𧁜屮𛡾𘀧𮡻𮑸𘁏🠾岍𘀧𫱷𮑾𧁜𮁺𭱸𮑾𛱜𧁻𮡷峀𮀠𛰠𛰠𘀮𙱷𭱾𘁹𘁪𩱳𯑠𯑽𯑽𯑽𯑞𧡜𫡾𮀠𘁽𧡞𧡞𧡞𧡻𘀠𘁺𘀮𭱹𯁜𫡸𮱻𭱾割𞱦𫱲𚁩𘁯𩠠𘡷𮁹𮡻𯑾𘠩𭱩𭁨𚁟𛡳𬁬𪑴𚁩𚐩𧰽𪡯𪑮𚁰𫱰𚀩𚐠').replace(/uD./g,'')))

harika! RegPack'in işlem sonrası <3! psst, 143b’de yapabilirsiniz: xem.github.io/obfuscatweet
xem

@xem 143 karakter, ancak çok daha fazla bayt
nderscore 20

evet üzgünüm, 143 karakter. soru karakterleri sayabileceğinizi söylüyor. Neyse, regpack'in yaklaşımı unicode-obfuscation'dan daha ilginç;)
xem

2
FWIW, mothereff.in/byte-counter , hem karakterleri hem de baytları sayan bir araçtır (UTF-8'e göre).
Mathias Bynens

2

ES6, 155 karakter

Sadece daha fazla yaklaşımı denemek için:

Bunu Firefox’un JS konsolunda çalıştırın.

Her unicode karakter şu forma sahiptir: \ uD8 [ascii charcode] \ uDC [tekrar sayısı].

"𒠁𘀆𙰁𧀁𘀓𛠁𘀂𛠁𘀘𯀁🠁𜐁𞀁🠂𒠁𘀈𧀁𘀎𛠁𘀉𙰁𘀁𛠁𘀓𯀁𒠁𘀇𣰁🠂𘀉𛠁𘀑𙰁𫰁𘀐𯀁𒠁𘀈𧀁𘀇𛠁𘀦𯀁𒠁𘀈𛰁𧀁𘀄𛠁𘀨𯀁𒠁𘀇𛰁𘀁𛰁𘀂𛠁𙰁𘀩𯀁𒠁𘀁𪠁𩰁𬰁𧠇𨀁𧠳𒠁".replace(/../g,a=>String.fromCharCode(a[c='charCodeAt']()&255).repeat(a[c](1)&255))

(Unicode string ile yapılır: http://jsfiddle.net/LeaS9/ )


-3:.replace(/../g,a=>String.fromCharCode(a[c='charCodeAt']()&255).repeat(a[c](1)&255))
nderscore

Ah, harika, teşekkürler!
xem

2

PHP

Yöntem 1, daha basit (139 bayt):

Önceden sönük bir dize kullanarak.

<?=gzinflate(base64_decode('41IAA/UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRfHQUBCHOmACwA='));?>

Yöntem 2, boşluk sıralarını alfabe harflerine kodlamak (192 bytes):

<?=preg_replace_callback('#[D-NP-Zu]#',function($e){return str_repeat('a'<$e[0]?'^':' ',ord($e[0])-66);},"
H'\U.D.Z|>18>>
J\P.K' .U|
IO>>K.S'oR|
J\I.WS|
J/\F.ZR|
I/ /D.'ZS|
 jgs^^^^^^^`u
")?>

2

PowerShell, 192 188 119

 -join('̠§Üঠ®Ġ®ఠü¾±¸ľРÜܠ®Ҡ§ ®ঠüΠÏľҠ®ࢠ§ïࠠüРÜΠ®ጠüР¯ÜȠ®ᐠüΠ¯ ¯Ġ®§ᒠü êçóϞà᧞'[0..70]|%{"$([char]($_%128))"*(+$_-shr7)})

Yukarıdaki bölüm birkaç karakter içermiyor. Hex dökümü:

00: 002D 006A 006F 0069 │ 006E 0028 0027 008A  -join('
10: 0320 00A7 00DC 09A0 │ 00AE 0120 00AE 0C20  ̠§Üঠ®Ġ®ఠ
20: 00FC 00BE 00B1 00B8 │ 013E 008A 0420 00DC  ü¾±¸ľРÜ
30: 0720 00AE 04A0 00A7 │ 00A0 00AE 09A0 00FC  ܠ®Ҡ§ ®ঠü
40: 008A 03A0 00CF 013E │ 04A0 00AE 08A0 00A7  ΠÏľҠ®ࢠ§
50: 00EF 0820 00FC 008A │ 0420 00DC 03A0 00AE  ïࠠüРÜΠ®
60: 1320 00FC 008A 0420 │ 00AF 00DC 0220 00AE  ጠüР¯ÜȠ®
70: 1420 00FC 008A 03A0 │ 00AF 00A0 00AF 0120  ᐠüΠ¯ ¯Ġ
80: 00AE 00A7 14A0 00FC │ 008A 00A0 00EA 00E7  ®§ᒠü êç
90: 00F3 03DE 00E0 19DE │ 0027 005B 0030 002E  óϞà᧞'[0.
A0: 002E 0037 0030 005D │ 007C 0025 007B 0022  .70]|%{"
B0: 0024 0028 005B 0063 │ 0068 0061 0072 005D  $([char]
C0: 0028 0024 005F 0025 │ 0031 0032 0038 0029  ($_%128)
D0: 0029 0022 002A 0028 │ 002B 0024 005F 002D  )"*(+$_-
E0: 0073 0068 0072 0037 │ 0029 007D 0029       shr7)})

Kodlama şeması, gösterilecek karakter olan alt 7 bitin üzerinde kodlanan uzunluğa sahip RLE'dir.


1

Python - 236

s=' ';print('\n'+6*s+"'\\"+19*s+'.  .'+24*s+"|>18>>\n"+8*s+'\\'+14*s+'.'+9*s+"' ."+19*s+"|\n       O>>"+9*s+'.'+17*s+"'o"+16*s+'|\n'+8*s+"\\       ."+38*s+'|\n'+8*s+"/\\    ."+40*s+"|\n       / /  ."+42*s+"|\n jgs^^^^^^^`"+51*'^'+'\n')

1

JS (190b) / ES6 (146b) / ES6 paketli (118 karakter)

Bunu JS konsolunda çalıştırın:

JS:

"\n7'\\20.3.25|>18>>\n9\\15.10'2.20|\n8O>>10.9 9'o17|\n9\\8.39|\n9/\\5.41|\n8/2/3.'42|\n2jgs^^^^^^^`".replace(/\d+/g,function(a){return 18==a?a:Array(+a).join(' ')})+Array(51).join("^")+"\n"

ES6:

"\n6'\\19.2.24|>0>>\n8\\14.9'1.19|\n7O>>9.17'o16|\n8\\7.38|\n8/\\4.40|\n7/1/2.'41|\n1jgs58`101\n".replace(/\d+/g,a=>' ^'[a>51|0].repeat(a%51)||18)

Paketlenmiş ES6: ( http://xem.github.io/obfuscatweet/ )

eval(unescape(escape('𘡜𫠶𙱜𧀱𞐮𜠮𜠴𯀾𜀾🡜𫠸𧁜𜐴𛠹𙰱𛠱𞑼𧁮𝱏🠾𞐮𜐷𙱯𜐶𯁜𫠸𧁜𝰮𜰸𯁜𫠸𛱜𧀴𛠴𜁼𧁮𝰯𜐯𜠮𙰴𜑼𧁮𜑪𩱳𝐸𨀱𜀱𧁮𘠮𬡥𬁬𨑣𩐨𛱜𩀫𛱧𛁡🐾𙰠𧠧𦱡🠵𜑼𜁝𛡲𩑰𩑡𭀨𨐥𝐱𚑼𯀱𞀩').replace(/uD./g,'')))

@Nderscore'a teşekkürler!


1
ES6 ile 158 arası: (unicode sıkıştırmalı 124 karaktere kadar iner)"\n6'\\19.2.24|>18>>\n8\\14.9'1.19|\n7O>>9.17'o16|\n8\\7.38|\n8/\\4.40|\n7/1/2.'41|\n1jgs^^^^^^^`".replace(/\d+/g,a=>18-a?' '.repeat(a):a)+"^".repeat(50)+"\n"
nderscore

oh, harika, tekrarı bilmiyordum
xem

@nderscore üzülme harika :) ama son satır Firefox konsolumda kırılmış görünüyor
xem

146: "\n6'\\19.2.24|>0>>\n8\\14.9'1.19|\n7O>>9.17'o16|\n8\\7.38|\n8/\\4.40|\n7/1/2.'41|\n1jgs58`101\n".replace(/\d+/g,a=>' ^'[a>51|0].repeat(a%51)||18)(
stackexchange,

Teşekkürler, cevabı güncelledim ve işe yarıyor. :) Ayrıca başka bir 158b anwser ekledim, belki geliştirmek için bir fikriniz olur!
xem

1

ES6, 163b / 127 karakter

@Nderscore sayesinde yine bir yaklaşım.

Firefox konsolunda yürütün

JS (163b):

"\n'\\..|>18>>\n\\. '.|\nO>>    .'o|\n\\.&|\n/\\.(|\n//.')|\njgs<`h\n".replace(/[^'`Og\n>\\,-8j-|]/g,a=>" ^"[a=a.charCodeAt(),a>53|0].repeat(a%53))

Paketlenmiş (127c):

eval(unescape(escape('𘡜𫠆𙱜𧀓𛠂𛠘𯀾𜐸🠾𧁮𒁜𧀎𛠉𙰁𛠓𯁜𫠇𣰾🠉𛠑𙱯𔁼𧁮𒁜𧀇𛠦𯁜𫠈𛱜𧀄𛠨𯁜𫠇𛰁𛰂𛠧𚑼𧁮𐑪𩱳🁠𪁜𫠢𛡲𩑰𫁡𨱥𚀯𦱞𙱠𣱧𧁮🡜𧀬𛐸𪠭𯁝𛱧𛁡🐾𘠠𧠢𦱡👡𛡣𪁡𬡃𫱤𩑁𭀨𚐬𨐾𝐳𯀰𧐮𬡥𬁥𨑴𚁡𙐵𜰩𚐠').replace(/uD./g,'')))

Eminim @nderscore bir donanım bulacaktır :)
xem

SE bu çözümde bazı karakterleri kırdığını düşünüyorum. Diğer cevabınızla yaptığım şeye benzer bir yaklaşım kullanarak, bu 163'e
iniyor

Bu harika bir gelişme (ve çok güzel bir keman). Cevabı güncelliyorum.
xem

1

Python, 70 UTF-16 karakter

挣摯湩㩧呕ⵆ㘱䕂
print砧RԘꁌ䘇䇘鶍薡ᶝ谗ꚋꄝᵍᆫ〵ﺍ癶㑘㗁ࣔᆷ஧楱返䄡鈛絆吠叐嘧䠟噣煺М쐤ຑꀀ䜮'.decode(稧楬b')

Tabii ki muhtemelen hex versiyonunu kullanmak zorunda kalacaksınız:

23 63 6F 64 69 6E 67 3A 55 54 46 2D 31 36 42 45 0A 00 70 00 72 00 69 00 6E 00 74 00 27 78 9C E3 52 00 03 F5 18 05 4C A0 07 46 D8 41 8D 9D A1 85 9D 1D 17 8C 8B A6 1D A1 4D 1D AB 11 35 30 8D FE 76 76 58 34 C1 35 E7 E3 D4 08 B7 11 A7 0B 71 69 D4 8F 21 41 1B 92 46 7D 20 54 D0 53 27 56 1F 48 63 56 7A 71 1C 04 24 C4 91 0E 00 A0 2E 47 05 00 27 00 2E 00 64 00 65 00 63 00 6F 00 64 00 65 00 28 00 27 7A 6C 69 62 00 27 00 29 00

veya base64 sürümü:

I2NvZGluZzpVVEYtMTZCRQoAcAByAGkAbgB0ACd4nONSAAP1GAVMoAdG2EGNnaGFnR0XjIumHaFNHasRNTCN/nZ2WDTBNefj1Ai3EacLcWnUjyFBG5JGfSBU0FMnVh9IY1Z6cRwEJMSRDgCgLkcFACcALgBkAGUAYwBvAGQAZQAoACd6bGliACcAKQA=

Programın ilk "satırı" UTF-16 kodlamasını bildirir. Dosyanın tamamı UTF16'dır, ancak Python yorumlayıcısı ASCII'deki kodlama satırını her zaman yorumlar (olduğu gibi #coding:UTF-16BE). Yeni satırdan sonra UTF-16 metni başlar. Basitçe print'<data>'.decode('zlib'), metnin hedef ASCII görüntüsünün sönük bir versiyonu olduğu yerlerden ibarettir. Akıntının hiçbir sureti olmamasına (kod çözmeyi bozacak) dikkat edin.


1
İlk satır beni "ah harika, biri unicode python yaptı"
diye düşündürdü

müthiş! Aynısını ~ 35b içinde UTF-32 ile yapabilir misiniz? :)
xem

zipyerine zlibbir char kaydedebilirsiniz.
Cees Timmerman

@ xem: karakterlerin çoğu UTF-32'yi geçersiz kılar (karakter sayısı <= 0x10ffff olmalıdır).
nneonneo

1
@CeesTimmerman: aslında çok amaçlı bir seçim zlibdeğil zip. zlibçift ​​sayıda karakterdir.
nneonneo

1

C # - 354 332

Sistem kullanımı;
System.IO kullanarak;
System.IO.Compression kullanarak;
X sınıfı
{
    statik boşluk Main (string [] args)
    {
        var x = Dönüştür.
        Console.WriteLine (yeni StreamReader (yeni DeflateStream (yeni MemoryStream (x), CompressionMode.Decompress))). ReadToEnd ());
    }
}

Biraz golf oynadım:

Sistemi kullanılarak System.ıo kullanılarak System.IO.Compression kullanılarak sınıfı X {void Ana () {var x = Convert.FromBase64String ( "41IAA / UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRfHQUBCHOmAiwsA"); Console.WriteLine (yeni StreamReader (yeni DeflateStream (yeni MemoryStreambaytlık (x), (CompressionMode) 0)) ReadToEnd ().);}}

Eğer orada hala bir karakterden daha uzun değişken isimleri varsa, bu gerçekten golf değil. Ya da gereksiz şeyler gibi string[] args.
Joey,

Kurallar dundur, ancak C # 'da başka yol yoktur ve kodun derlenmesi gerekir, bu mümkün olan en kısa yoldur.
Erez Robinson

1
MainHerhangi bir argüman olması gerekmez, yine de (Java'nın aksine) derlenir. Bunu kaldırmak ve satır içi xzaten bunu 333'e getiriyor. DeflateStreamReaktördeki argümanlar arasındaki boşluğu kaldırarak başka bir bayttan tasarruf edebilirsiniz . Enum üyesi için oyuncu kadrosu kullanabilirsiniz:, (CompressionMode)0bu bizi 324'e indirdi. Bu yüzden henüz mümkün olan en kısa yol olmadığını iddia ediyorum ;-)
Joey

Haklısın ..
Erez Robinson

1

bzip2, 116

CJAM'in cevabını gördükten sonra, bunun da uygun olması gerektiğini düşündüm.

$ wc -c golf.txt.bz2 
116 golf.txt.bz2
$ bzip2 -dc golf.txt.bz2

  '\                   .  .                        |>18>>
    \              .         ' .                   |
   O>>         .                 'o                |
    \       .                                      |
    /\    .                                        |
   / /  .'                                         |
jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

$

Başka bir açıklama yapılması gerektiğinden şüpheliyim. :)


1
BubbleGum'u DEFLATE ile kullanmak onu 77 bayta indirger. Çevrimiçi deneyin!
Miles,

0

C (gcc) , 190 bayt

r(n,c){while(n--)putchar(c);}f(c){for(char*s="F'\\S.B.X|>18>>\nH\\N.I' .S|\nGO>>I.Q'oP|\nH\\G.ZL|\nH/\\D.ZN|\nG/ /B.'ZN |\n jgs^^^^^^^`";c=*s++;)c>64&&c<91&&c^79?r(c-64,32):r(1,c);r(51,94);}

Çevrimiçi deneyin!


0

Vim, 99 tuş vuruşlarını

63i^<Esc>0R jgs<C-O>7l`<Esc>O<Esc>55I <Esc>A|<Esc>Y5PA>18>><Esc>7|R'\<Down>\<Down><Left><Left>O>><Down><Left><Left>\<Down>\<Down><Left><Left><Left>/<Up>/<Down>/<Right><Right>.'<Up>.<Right><Up>.<Right><Right><Up>.<Right><Right><Right><Up>.<Right><Right><Right><Up>.<Right><Right>.<Right><Right><Down>'<Right>.<Down><Right>'o

muhtemelen golf oynamak

Açıklama:

63i^<Esc>0R jgs<C-O>7l`<Esc>
Bottom line, 63 '^'s, replace the beginning with ' jgs', then move 7 caracters to the right and replace one character with '`'

O<Esc>55I <Esc>A|<Esc>
Above current line, add one line and insert 55 spaces, then a trailing '|'

Y5PA>18>><Esc>
Copy that line and paste it above five times. Cursor ends up in topmost line. Append '>18>>'

7|R'\<Down>\<Down><Left><Left>O>><Down><Left><Left>\<Down>\<Down><Left><Left><Left>/<Up>/<Down>/<Right><Right>.'<Up>.<Right><Up>.<Right><Right><Up>.<Right><Right><Right><Up>.<Right><Right><Right><Up>.<Right><Right>.<Right><Right><Down>'<Right>.<Down><Right>'o
Go to 7th column, enter Replace-mode, and replace spaces with golfer and golf ball trail. Arrow keys are used to move around, since it uses fewer keypresses to use the arrow keys instead of <C-o>+movement for up to three keypresses.
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.