การเล่นกอล์ฟ ASCII-art


31

ลองเล่นกอล์ฟชิ้นส่วนศิลปะ ASCII ซึ่งเป็นตัวแทนของนักกอล์ฟ:

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

ที่มา: JGS - http://www.retrojunkie.com/asciiart/sports/golf.htm

กฎ:

  • ไม่อนุญาตให้ป้อนข้อมูล
  • ไม่อนุญาตให้ใช้ทรัพยากรภายนอก
  • ผลลัพธ์จะต้องตรงกับข้อความนี้แสดงในแบบอักษร monospace (คอนโซล OS, คอนโซล JS, แท็ก HTML <pre>, ... ) รวมถึงตัวแบ่งบรรทัดด้านหน้าและด้านหลัง
  • อนุญาตให้ใช้เครื่องหมายคำพูดล้อมรอบหรืออัญประกาศคู่ได้ (คอนโซล JS จะเพิ่มเครื่องหมายคำพูดคู่เมื่อคุณส่งออกสตริงซึ่งก็ไม่เป็นไร)

คำตอบที่ดีที่สุดคือคำตอบที่ใช้ตัวอักษรน้อยกว่าในภาษาใด ๆ

มีความสุข!


2
"ตรงข้อความนี้": รวมถึงบรรทัดว่างที่จุดเริ่มต้นหรือไม่ รวมถึงบรรทัดว่างที่ท้าย? ด้วยการขึ้นบรรทัดใหม่หรือไม่ (นั่นคือ 0, 1 หรือ 2 บรรทัดใหม่ในตอนท้าย?)
Martin Ender

@ m.buettner เอาต์พุตควรมีตัวแบ่งบรรทัดหลักหนึ่งบรรทัดและหนึ่งตัวแบ่งบรรทัดต่อท้าย / บรรทัดใหม่ (และราคาถ้าคุณไม่สามารถหลีกเลี่ยงพวกเขาได้) :)
xem

1
ASCII นั้นดูเหมือนกับคริกเก็ตที่ยิงมาให้ฉัน
Mr. Alien

@ Mr.Alien ฉันเห็นมันในการพูดคุยล่าสุดของ Martin Kleppe: speakerdeck.com/aemkei/ … (วิดีโอ: youtube.com/watch?v=zy-2ruMHdbU )
xem

คำตอบ:


14

CJam, 62 ตัวอักษร

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

ลองออนไลน์

ทดสอบการทำงาน

$ 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^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
$

มันทำงานอย่างไร

2G#b แปลงสตริงก่อนหน้านี้ให้เป็นจำนวนเต็มโดยพิจารณาว่าเป็นเลขฐาน 65536

128b:cแปลงจำนวนเต็มนั้นกลับไปเป็นสตริง ( 110 ไบต์ ) โดยพิจารณาว่าเป็นเลขฐาน -128 ซึ่ง~จะประมวลผล:

"
^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

(เครื่องหมายรูปหมวก)

2/{)iS*}%

แยกสตริงออกเป็นคู่ของอักขระสองตัวและทำสิ่งต่อไปนี้สำหรับแต่ละคู่: ป๊อปอักขระตัวที่สองของสตริงแปลงเป็นจำนวนเต็มและทำซ้ำสตริง" "ที่หลายครั้ง

ตัวอย่างเช่น".("กลายเป็น". "เพราะรหัสอักขระ ASCII ของ(คือ 40

สุดท้าย

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

ผลักดันสตริง"jgs"ตัวละคร^ซ้ำ 7 ครั้งตัว`ละครตัวละคร^ซ้ำ 51 ครั้งและ linefeed


1
ยอดเยี่ยมจริง ๆ แต่เมื่อฉันใช้รุ่น 62char จาก pastebin และ "ลองออนไลน์" การแบ่งบรรทัดหายไปก่อนบรรทัดสุดท้าย "jgs ... "
xem

@xem: คุณคัดลอกจากส่วนข้อมูลการวาง RAWหรือไม่ หากฉันคัดลอกรหัสที่จัดรูปแบบฉันจะได้ผลลัพธ์เดียวกัน
Dennis

15

ทับทิม, 107

ฉันคิดว่าฉันพยายาม "สร้าง" ภาพในรหัส (แทนที่จะใช้ฟังก์ชั่นการบีบอัดที่มีอยู่):

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

มีอักขระบางตัวที่ไม่สามารถพิมพ์ได้ในอาเรย์ตัวอักษรนั้น

นี่คือมุมมองฐานสิบหกของไฟล์เพื่อแสดงอักขระที่ไม่สามารถพิมพ์ได้เช่นกัน:

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

ขอบคุณ Ventero สำหรับการปรับปรุงที่สำคัญบางอย่าง! (โดยทั่วไปเขาลดรหัสลง 50%)


เยี่ยมมาก! ฉันหวังว่าจะได้รับคำตอบอย่างนั้นไม่ใช่แค่ gzip ASCII;)
xem

1
บรรทัดที่สองสามารถ6.times{|i|S[i+1]=' '*55+?|}บันทึกอักขระได้ 2 ตัว
af

@ voidpigeon อาขอบคุณ จริง ๆ แล้วฉันเริ่มต้นด้วย แต่ในตอนแรกคิดว่าฉันต้องการiมากกว่าหนึ่งครั้ง จับดี!
Martin Ender

2
หวังว่าคุณจะไม่รังเกียจถ้าฉันพูดถึงวิธีการสั้นลงอีกเล็กน้อย! ใช้S.fill{' '*55+?|}แทนบันทึกตัวอักษรอีกไม่กี่ (คุณจะต้องกำหนดSเป็น['']*7เปลี่ยนputsไปputs p,S,pและลบ 1 จากทั้งหมด y พิกัดของคุณแม้ว่า) จากนั้นโดยใช้ varargs ใน f ( def f(*p,c)) คุณสามารถบันทึก[]ในการเรียกใช้ฟังก์ชัน อ้อและคุณสามารถ()ไปy,xไหนมาไหนได้
Ventero

1
หากคุณสร้างS มิติเดียวคุณสามารถบันทึกอีก 55 ตัวอักษร;) นี่คือรหัสหากคุณไม่ต้องการทำด้วยตัวเอง
Ventero

13

bash + iconv + รหัสเครื่อง DosBox / x86 (104 97 96 95 ตัวอักษร)

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

ฉันแนะนำให้ใส่ไว้ในสคริปท์ในไดเร็กตอรี่ว่าง ๆ , มันเกือบจะรับประกันได้ว่าการคัดลอกในเทอร์มินัลจะทำลายทุกอย่าง; ยิ่งไปกว่านั้นคุณสามารถคว้าสคริปต์มาไว้ที่นี่ได้

ผลลัพธ์ที่คาดหวัง: expected output

มันทำงานอย่างไร

ส่วนทุบตีเป็นเพียงตัวเรียกใช้งานที่ใช้iconvเพื่อ "คลายการบีบอัด" .comไฟล์จากตัวอักษร UTF-8 ของสคริปต์และเรียกใช้งานด้วย DosBox

โปรดสังเกตว่าสิ่งนี้มีข้อ จำกัด บางประการเกี่ยวกับเนื้อหาเนื่องจากลำดับการป้อนข้อมูลทั้งหมดไม่สามารถตีความได้ว่าเป็น UCS-2 โดยiconvไม่บ่น ตัวอย่างเช่นด้วยเหตุผลบางอย่างการดำเนินการหลายอย่างที่เกี่ยวข้องกับการbxลงทะเบียนทำให้เกิดความเสียหายขึ้นอยู่กับสถานที่ที่ฉันใช้พวกเขาดังนั้นฉันจึงต้องแก้ไขปัญหานี้หลายครั้ง

ตอนนี้สิ่งที่ Unicode เพียงเพื่อใช้ประโยชน์จากกฎ "จำนวนตัวอักษร"; ขนาดที่แท้จริง (เป็นไบต์) ของสคริปต์นั้นใหญ่กว่า.COMไฟล์ต้นฉบับ

.comไฟล์ที่คลายบีบอัดคือ

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

และมีความยาว 108 ไบต์ แหล่งที่มาของ NASM สำหรับมันคือ:

    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

ทั้งหมดนี้เป็นเพียงตัวขยายการบีบอัดcompressed.datที่มีรูปแบบดังนี้:

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

compressed.datในทางกลับกันถูกสร้างขึ้นโดยใช้สคริปต์ Pythonจากข้อความต้นฉบับ

สิ่งที่ทั้งสามารถพบได้ที่นี่


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

สิ่งนี้ใช้การจัดรูปแบบสตริงพร้อมช่องว่างภายในสำหรับการบีบอัดพื้นฐานบางอย่าง


7

PHP, 147

สิ่งนี้จะทำงานบนบรรทัดคำสั่งและส่งออกไปยังคอนโซลโดยตรง:

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

ขอบคุณVenteroและm.buettnerสำหรับความช่วยเหลือในการเพิ่มประสิทธิภาพ RegEx ของฉัน


คุณสามารถบันทึกหนึ่งตัวละครด้วยs/\d+(?!8?>)/%$&s/rg
Ventero

@Ventero ขอบคุณสำหรับคำแนะนำ
core1024

2
คุณสามารถบันทึกอีกอันหนึ่งได้โดยใช้ตัวระบุความเป็นเจ้าของ :/\d++(?!>)/
Martin Ender

@ m.buettner ฉันไม่รู้ เรียนรู้สิ่งใหม่ทุกวัน :)
core1024

4

GCC C - 203 ไบต์

ฉันคิดว่าฉันจะสนุกกับอันนี้ สิ่งนี้รวบรวมใน MinGW เวอร์ชั่นของฉันและส่งออกข้อความที่คาดหวัง

เพิ่มช่องว่างเพื่อความชัดเจน

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

ไม่มีไซต์การวางโค้ดออนไลน์ที่อนุญาตให้ใช้อักขระไบต์เดียวนอกช่วง ASCII ดังนั้นฉันจึงต้องหลีกเลี่ยงพวกเขาสำหรับตัวอย่างที่อัปโหลด มันก็เหมือนกัน http://codepad.org/nQrxTBlX

คุณสามารถยืนยันได้ด้วยคอมไพเลอร์ของคุณเองเช่นกัน


4

LOLCODE, 590 ตัวอักษร

Cuz LOLCODE iz perfik language 4 golfin: iz easy 2 เข้าด้วยกันทำให้งงงวยและมันก็ไม่ได้ verbose เลย

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

อิ่ม pritee แน่ใจว่าโรค werkz แต่ฉัน Doan มี LOLCODE interpretr http://repl.it 's 2 ดูเหมือนว่า funcshuns ไม่ liek

(ทรานแซลชุนให้เผื่อแผ่โดยหุ่นยนต์ของhttp://speaklolcat.comเพราะฉันดูSpol lolcat )


โค้ดที่เยื้อง, เว้นระยะและแสดงความคิดเห็น (ความคิดเห็น LOLCODE เริ่มต้นด้วย BTW):

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

ฮ่าฮ่า, การบีบอัดที่ดี, ชอบ: 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

สตริงiสอดแทรกอักขระในศิลปะ ASCII ด้วยหลายหลากของพวกเขาแสดงเป็นตัวละครทั้งหมดในลำดับที่กลับกัน นอกจากนี้ฉันประหยัดพื้นที่โดยใช้ '!' แทนที่จะเป็น 'G' iแล้วก็แทนที่มัน


3

Python (145)

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

ไม่ใช่ต้นฉบับมากฉันรู้


2

Javascript ( ES6 ) 193 175 ไบต์

แก้ไข: Modified RegPack v3เพื่อรักษาบรรทัดใหม่ใช้for inวนรอบเพื่อบันทึก 3 ไบต์และลบ eval สำหรับเอาท์พุทคอนโซลโดยปริยาย

_="\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())

ใช้การบีบอัด Unicode ของ xem: 133 ตัวอักษร

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

ที่ดี! <3 กระบวนการโพสต์ของ RegPack! psst คุณสามารถทำได้ใน 143b: xem.github.io/obfuscatweet
xem

@xem 143 ตัวอักษร แต่มีจำนวนมากขึ้น
nderscore

ใช่ขอโทษ 143 ตัวอักษร คำถามบอกว่าคุณสามารถนับตัวอักษรได้ แล้ววิธีการ RegPack ที่เป็นที่น่าสนใจมากขึ้นกว่า Unicode-obfuscation;)
xem

2
FWIW, mothereff.in/byte-counterเป็นเครื่องมือที่นับทั้งอักขระและไบต์ (ตาม UTF-8)
งัด Bynens

2

ES6, 155 chars

เพียงลองใช้วิธีการ anorher:

เรียกใช้สิ่งนี้ในคอนโซล JS ของ Firefox

อักขระยูนิโค้ดแต่ละตัวมีแบบฟอร์มต่อไปนี้: \ uD8 [ascii charcode] \ uDC [จำนวนการเล่นซ้ำ]

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

(สตริง Unicode ทำด้วย: http://jsfiddle.net/LeaS9/ )


-3:.replace(/../g,a=>String.fromCharCode(a[c='charCodeAt']()&255).repeat(a[c](1)&255))
ขีดเส้นใต้

โอ้เยี่ยมมากขอบคุณ!
xem

2

PHP

วิธีที่ 1 เรียบง่าย (139 ไบต์):

การใช้สตริงที่กำหนดไว้ล่วงหน้า

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

วิธีที่ 2 การเข้ารหัสช่องว่างเป็นตัวอักษรตัวอักษร (192 ไบต์):

<?=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)})

ส่วนด้านบนมีอักขระที่ไม่ใช่ตัวอักษรอยู่สองสามตัว การถ่ายโอนข้อมูล Hex:

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

รูปแบบการเข้ารหัสคือ RLE ที่มีความยาวเข้ารหัสเหนือ 7 บิตด้านล่างซึ่งเป็นอักขระที่จะแสดง


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 ที่บรรจุ (118chars)

รันสิ่งนี้ในคอนโซล JS:

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)

ES6 บรรจุ: ( http://xem.github.io/obfuscatweet/ )

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

ขอบคุณ @nderscore!


1
ES6 ลดเหลือ 158: (ลดลงไปที่ 124 chars ด้วยการบีบอัด unicode)"\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

โอ้เยี่ยมมากฉันไม่รู้ซ้ำซ้ำ
xem

@nderscore ไม่ต้องเสียใจก็จะดี :) แต่บรรทัดสุดท้ายดูเหมือนว่าเสียในคอนโซล Firefox ของฉัน
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 เพิ่มอักขระทำลายเส้นที่มองไม่เห็นหลังจาก 41 | \ ‌)
ขีดล่าง

ขอบคุณฉันอัปเดตคำตอบและใช้งานได้ :) ฉันได้เพิ่ม anwser อีก 158b บางทีคุณอาจมีความคิดที่จะปรับปรุงมัน!
xem

1

ES6, 163b / 127 ตัวอักษร

อีกวิธีหนึ่งขอขอบคุณ @nderscore

ดำเนินการในคอนโซลของ Firefox

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

บรรจุ (127c):

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

ฉันแน่ใจว่า @nderscore จะได้พบกับการเพิ่มประสิทธิภาพ :)
xem

ฉันคิดว่า SE กำลังทำลายตัวละครบางตัวในโซลูชันนี้ ใช้วิธีการที่คล้ายกันกับสิ่งที่ฉันทำกับคำตอบอื่น ๆ ของคุณซึ่งจะลดลงเหลือ 163: jsfiddle.net/2Fbxq/3
nderscore

นั่นคือการปรับปรุงที่ยอดเยี่ยม (และซอที่ดีมาก) ฉันอัพเดทคำตอบ
xem

1

Python 70 ตัวอักษร UTF-16

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

แน่นอนคุณอาจต้องใช้รุ่น hex:

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

หรือเวอร์ชัน base64:

I2NvZGluZzpVVEYtMTZCRQoAcAByAGkAbgB0ACd4nONSAAP1GAVMoAdG2EGNnaGFnR0XjIumHaFNHasRNTCN/nZ2WDTBNefj1Ai3EacLcWnUjyFBG5JGfSBU0FMnVh9IY1Z6cRwEJMSRDgCgLkcFACcALgBkAGUAYwBvAGQAZQAoACd6bGliACcAKQA=

"บรรทัด" แรกของโปรแกรมประกาศการเข้ารหัส UTF-16 ไฟล์ทั้งหมดเป็น UTF16 แต่ Python interpreter ตีความบรรทัดการเข้ารหัสใน ASCII เสมอ (เป็น#coding:UTF-16BE) หลังจากขึ้นบรรทัดใหม่ข้อความ UTF-16 จะเริ่มขึ้น มันเพียงแค่จำนวนprint'<data>'.decode('zlib')ที่ข้อความเป็นเวอร์ชันที่ย่อของอิมเมจ ASCII เป้าหมาย มีการดูแลบางอย่างเพื่อให้แน่ใจว่าสตรีมไม่มีตัวแทน (ซึ่งจะทำลายการถอดรหัส)


1
บรรทัดแรกทำให้ฉันคิดว่า "เยี่ยมเลยมีคนทำ Unicode หลาม"
seequ

! น่ากลัว คุณสามารถทำเช่นเดียวกันใน ~ 35b กับ UTF-32 ได้หรือไม่? :)
xem

zipแทนzlibอาจบันทึกหนึ่งอักขระ
Cees Timmerman

@xem: อักขระส่วนใหญ่หยุดใช้งาน UTF-32 ที่ถูกต้อง (ตัวอักษรต้องเป็น <= 0x10ffff)
nneonneo

1
@CeesTimmerman: จริง ๆ แล้วทางเลือกของzlibแทนที่จะzipเป็นเด็ดเดี่ยวมาก zlibเป็นจำนวนคู่ของอักขระ
nneonneo

1

C # - 354 332

ใช้ระบบ
ใช้ System.IO;
ใช้ System.IO.Compression
คลาส X
{
    โมฆะคงที่หลัก (สตริง [] args)
    {
        var x = Convert.FromBase64String ("41IAA / UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEJRMPAHQA"
        Console.WriteLine (StreamReader ใหม่ (ใหม่ DeflateStream (ใหม่ MemoryStream (x), CompressionMode.Decompress)) ReadToEnd ());
    }
}

บิต golfed:

การใช้ระบบการใช้ System.IO; using System.IO.Compression; X ชั้น {static void Main () {var x = Convert.FromBase64String ( "41IAA / UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRfHQUBCHOmAiwsA"); Console.WriteLine (StreamReader ใหม่ (DeflateStream ใหม่ (MemoryStream ใหม่ (x), (CompressionMode) 0)) ReadToEnd ());.}}

นั่นไม่ใช่กอล์ฟที่จริงถ้าคุณยังคงมีชื่อตัวแปรยาวกว่าตัวละครในนั้น string[] argsหรือสิ่งที่ไม่จำเป็นต้องการ
Joey

กฎ Dunno แต่ไม่มีวิธีอื่นใน C # และรหัสจำเป็นต้องรวบรวมดังนั้นนี่เป็นวิธีที่สั้นที่สุด
Erez Robinson

1
Mainไม่จำเป็นต้องมีข้อโต้แย้งใด ๆ มันจะยังคงรวบรวม (ตรงกันข้ามกับ Java) การลบสิ่งนั้นและการทำอินไลน์xทำให้สิ่งนี้เป็น 333 อยู่แล้ว คุณสามารถบันทึกไบต์อื่นได้โดยการลบช่องว่างระหว่างอาร์กิวเมนต์ในDeflateStreamctor คุณสามารถใช้นักแสดงสำหรับสมาชิก enum: (CompressionMode)0ซึ่งนำเราไปสู่ ​​324 ดังนั้นฉันจึงเถียงว่ามันยังไม่สั้นที่สุด ;-)
Joey

ขวาคุณจะ ..
Erez โรบินสัน

1

bzip2, 116

หลังจากเห็นคำตอบของ CJAM ฉันคิดว่าอันนี้ควรมีคุณสมบัติเช่นกัน

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

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

$

ฉันสงสัยว่าต้องมีคำอธิบายเพิ่มเติมใด ๆ :)


1
การใช้Bubblegumกับ DEFLATE ทำให้ได้ถึง 77 ไบต์ ลองออนไลน์!
ไมล์


0

เป็นกลุ่ม 99 การกดแป้น

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

อาจเล่นกอล์ฟได้

คำอธิบาย:

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