Uống cà phê buổi sáng của bạn


21

Vẽ cốc cà phê Ascii này:

  o
       o
    o
 __________
/ \ __
| J | \
| Một | |
| V | |
| Một | __ /
\

Điểm Brownie cho kịch bản cà phê hoặc java :)

Mã ngắn nhất theo byte, chức năng hoặc chương trình, theo dõi dòng mới hoặc khoảng trắng là chấp nhận được, uống hết!


37
Tôi rất nghi ngờ về một tách cà phê lấp lánh. ;)
Dennis

8
@Dennis đó là cà phê đặc biệt của tôi vào sáng thứ Sáu;)
Aaron

1
Sẽ không thú vị hơn với 2 hay nhiều đồ uống: đồ uống nóng có hơi nước được tượng trưng bằng chữ ((và và), một ly lạnh? Và bằng cách mượn từ nhận xét của Rod, mã sẽ hiển thị cái này hoặc cái khác dựa trên thời gian hiện tại.
manatwork

1
Nó có thể được chấp nhận để có khoảng trắng trên đường?
Jonathan Allan

2
@Aaron cốc không có mẫu tốt, mã hóa cứng / nén sẽ ngắn hơn trong nhiều ngôn ngữ
Rod

Câu trả lời:


3

SOGL , 48 byte

mγmλ⁶…Jcēņ▒&↓¡℮štΥ{ιE‽▼⅛÷εγ╝Ξ∫$■⌡πθ&χF׀▼ΡQ7L↓F¶‘

Giải trình:

SOGL có nén chuỗi tích hợp và một trong những thứ nó có là nén từ điển char. Thậm chí tốt hơn, nó có kiểu nén hình hộp trong đó các ký tự duy nhất có sẵn là "/ \ | _- \ n". Vì vậy, toàn bộ chương trình là một chuỗi được gói trong "'(" là ẩn).

Chuỗi tôi đã cho máy nén là (thoát):

"  o\n       o\n    o\n ",
"__________",
"\n/          \\__\n|   ",
"J",
"      |  \\\n|    ",
"A",
"     |  |\n|     ",
"V",
"    |  |\n|      ",
"A",
"   |__/\n\\",
"__________",
"/"

16

JavaScript (ES6), 110 104 byte

Đã lưu 4 byte nhờ edc65

let f =

_=>`1o
6o
3o
 9
/44\\__
|2J5|1\\
|3A4|1|
|4V3|1|
|5A2|__/
\\9/`.replace(/\d/g,n=>' _'[n>>3].repeat(++n))

console.log(f())

Làm thế nào nó hoạt động

Việc nén nghệ thuật ASCII ban đầu đạt được bằng cách thay thế tất cả các chuỗi từ 2 đến 10 khoảng trắng liên tiếp và hai chuỗi 10 dấu gạch dưới liên tiếp bằng một chữ số:

  • Mỗi chuỗi các Nkhông gian liên tiếp được mã hóa bằng chữ số N-1.
  • Các chuỗi gạch dưới được mã hóa bằng a 9.

Chúng tôi sử dụng N-1chứ không phải Nđể chúng tôi không bao giờ phải sử dụng nhiều hơn một chữ số. Do đó cần thiết ++nkhi giải mã.

Biểu thức n>>3(shift Bitwise bên phải) bằng 0 cho n = 1tới n = 7và bằng 1 cho n = 8(không sử dụng) và n = 9. Do đó, ' _'[n>>3]cung cấp một dấu gạch dưới cho 9và một khoảng trắng cho tất cả các giá trị gặp phải khác.

Trường hợp đặc biệt duy nhất là chuỗi 10 khoảng trắng liên tiếp ngay phía trên "JAVA". Mã hóa nó với một 9xung đột sẽ với các chuỗi gạch dưới. Vì vậy, chúng ta cần chia nó thành hai chuỗi 5 không gian, được mã hóa thành 44.


Tôi đếm 108 byte (không tính f=). Bạn có thể lưu 4 byte theo cách này: n>>3thay vì +!(n&7), 9thay vì _8(hai lần) và 44thay vì9
edc65

@ edc65 Tôi không biết tại sao tôi lại đếm f=trong đó ... Cảm ơn vì các byte đã lưu!
Arnauld

Bạn có thể giải thích làm thế nào regex hoạt động một chút? Có vẻ như nó đã thay thế một chữ số d, với khoảng trắng d ('4' trở thành ' '). Nhưng không chắc chắn chính xác làm thế nào nó làm điều đó. Sự thay đổi bit làm gì? Tại sao chúng ta tăng n?
Cruncher

1
@Cruncher Tôi đã thêm phần 'Cách thức hoạt động'.
Arnauld

@Arnauld Rất thông minh :)
Cruncher

16

Thạch , 67 64 byte

-2 byte nhờ Dennis (1. loại bỏ dự phòng và 2. thay thế giải mã chuyển vị và độ dài chạy ZŒṙ, bằng cách giảm bởi sự lặp lại phần tử , x/.)

“Ñṁ{xGgṭḷVỤɲ8ṿfƬT9Ɱ¹=qṀS“$<(ƇỤ08ØÑḌṃṘX6~cuc8HṗḞ2’Dx/ị“ ¶_/\|JAVo

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

Làm sao?

“...“...’ là danh sách hai số nén 250 cơ sở:

[1021021021332411532617161526181616261916162618163425334, 2117114111551155121131612111415121115141211161312111551]

D chuyển đổi thành số thập phân để mang lại hai danh sách các chữ số:

[[1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 3, 3, 2, 4, 1, 1, 5, 3, 2, 6, 1, 7, 1, 6, 1, 5, 2, 6, 1, 8, 1, 6, 1, 6, 2, 6, 1, 9, 1, 6, 1, 6, 2, 6, 1, 8, 1, 6, 3, 4, 2, 5, 3, 3, 4], [2, 1, 1, 7, 1, 1, 4, 1, 1, 1, 5, 5, 1, 1, 5, 5, 1, 2, 1, 1, 3, 1, 6, 1, 2, 1, 1, 1, 4, 1, 5, 1, 2, 1, 1, 1, 5, 1, 4, 1, 2, 1, 1, 1, 6, 1, 3, 1, 2, 1, 1, 1, 5, 5, 1]]

x/ giảm bởi sự lặp lại phần tử để đưa ra một danh sách các chữ số (lặp lại số từ danh sách đầu tiên bằng giá trị tương ứng của số khác):

[1, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, 1, 1, 1, 0, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 3, 3, 2, 6, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 6, 1, 1, 5, 2, 6, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 6, 1, 1, 6, 2, 6, 1, 1, 1, 1, 1, 9, 1, 1, 1, 1, 6, 1, 1, 6, 2, 6, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 6, 3, 3, 4, 2, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4]

hướng dẫn lập chỉ mục vào danh sách bên phải, dựa trên mô đun và mô đun (0 chỉ mục vào mục ngoài cùng bên phải). Danh sách bên phải, ¶_/\|JAVochỉ đơn giản là ký tự được sử dụng theo thứ tự bắt buộc trong đó người hành hương , có cùng điểm mã với nguồn cấp dữ liệu. Đối tác kết thúc của không bắt buộc vì đây là phần cuối của chương trình:

[' ', ' ', 'o', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'o', '\n', ' ', ' ', ' ', ' ', 'o', '\n', ' ', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '\n', '/', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '\\', '_', '_', '\n', '|', ' ', ' ', ' ', 'J', ' ', ' ', ' ', ' ', ' ', ' ', '|', ' ', ' ', '\\', '\n', '|', ' ', ' ', ' ', ' ', 'A', ' ', ' ', ' ', ' ', ' ', '|', ' ', ' ', '|', '\n', '|', ' ', ' ', ' ', ' ', ' ', 'V', ' ', ' ', ' ', ' ', '|', ' ', ' ', '|', '\n', '|', ' ', ' ', ' ', ' ', ' ', ' ', 'A', ' ', ' ', ' ', '|', '_', '_', '/', '\n', '\\', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '/']

Jelly thực hiện một bản in ngầm của danh sách này, vì nó chứa các ký tự, in như thể nó là một chuỗi:

  o
       o
    o
 __________
/          \__
|   J      |  \
|    A     |  |
|     V    |  |
|      A   |__/
\__________/

7
Tôi thề một số ngôn ngữ này là các thuật toán nén thẳng lên
Cruncher

6
@Cruncher đó sẽ là Bubblegum
Jonathan Allan

4
Tất nhiên, bất kỳ ngôn ngữ nào có thể xuất văn bản dài hơn mã, nhất thiết phải có mã dài hơn văn bản đầu ra đối với một số văn bản đầu ra. Tôi giả sử nếu bạn đã cố gắng viết một cái gì đó cho một đầu vào hoàn toàn ngẫu nhiên, mã cho nó (trừ khi bạn gặp may mắn) sẽ dài hơn?
Cruncher

Đúng nếu ngẫu nhiên. Bubblegum thực sự đang sử dụng nén, mục tiêu là các thách thức phức tạp Kolmogorov và do đó đầu vào phải có mẫu (hoặc ít nhất là lặp lại như ở đây).
Jonathan Allan

Cuối cùng là ẩn và bạn có thể thay thế ZŒṙbằng x/. Ngoài ra, trong khi nó không có bất kỳ byte nào, việc sử dụng thay vì một dòng mới theo nghĩa đen sẽ làm cho mã trở nên imo hơn.
Dennis

9

CoffeeScript ES6, 214 180 byte

r="replace";" 1o0n0 6o0n0 3o0n0 _9n0/0 9b0_1n0|0 2J0 5|0 1b0n0|0 3A 4|0 1|0n0|0 4V0 3|0 1|0n0|0 5A0 2|0_1/0n0b0_9/0"[r](/\d/g,(a,b,c)->c[b-1].repeat(a))[r](/n/g,"\n")[r](/b/g,"\\")

CoffeeScript, 135 byte với mã hóa cứng

f=()->"""  o
       o
    o
 __________
/          \__
|   J      |  \\
|    A     |  |
|     V    |  |
|      A   |__/
\__________/"""

8
Không bỏ phiếu lên / xuống; Tôi không thích câu trả lời này bởi vì điểm chung trong câu trả lời phức tạp kolmogorov là tạo đầu ra mà không sử dụng toàn bộ điều trong mã.
HyperNeutrino

@HyperNeutrino, tôi đồng ý, làm việc để cải thiện nó.
Tom

7

Con trăn 2, 174 172 171 167 byte

Không mã hóa cứng.
Không mã hóa Base-64.
Không có Regex.

k=' '
q='_'*10
print'\n'.join([k*i+'o'for i in 2,7,4]+[k+q]+['/'+k*10+'\\__']+['|'+k*s+'JAVA'[s-3]+k*(9-s)+'|'+' _'[s==6]*2+'\\||/'[s-3]for s in 3,4,5,6]+['\\'+q+'/'])

Đã lưu 2 byte bằng cách bên ngoài '_'*10và bằng cách khai thác chuyển đổi True -> 1False -> 0.
Đã lưu 1 byte bằng cách loại bỏ khoảng trắng không cần thiết.
Đã lưu 4 byte nhờ @TuukkaX!


Bạn dường như có 2 khoảng trắng vô dụng tại ] forin [.
Yytsi

Trên thực tế, bạn có thể rút ngắn [2,7,4][3,4,5,6]đến 2,4,73,4,5,6.
Yytsi

7

PowerShell , 136 124 123 105 byte

"""2o
7o
4o
 $(($a='_'*10))
/55\__
|3J6|2\
|4A5|2|
|5V4|2|
|6A3|__/
\$a/"""-replace'(\d)','$(" "*$1)'|iex

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

Cảm ơn @briantist vì đã tìm ra cái ngắn hơn -replace phương pháp mà tôi biết là ở đâu đó.

Điều này có chuỗi với số thay cho số lượng không gian cần thiết. Sau đó chúng ta regex -replacecác chữ số với một biểu thức script $(" "*$1). Vì vậy, ví dụ, dòng đầu tiên của chuỗi sẽ là $(" "*2)o, dòng thứ hai sẽ $(" "*7)onhư vậy. Do trích dẫn ba lần, điều này được để lại dưới dạng một chuỗi trên đường ống. Chúng tôi kết xuất nó thành iex(viết tắt Invoke-Expressionvà tương tự eval), để xử lý các biểu thức tập lệnh và để lại chuỗi nhiều dòng kết quả trên đường ống. Đầu ra là ẩn.


Thật lạ, mã hóa ngắn hơn. Hừm. +1 dù sao :)
HyperNeutrino

Tôi đã hy vọng cho một số câu trả lời bằng cách sử dụng các lược đồ mã hóa (huffman) sáng tạo, nhưng việc triển khai con trăn của tôi vẫn còn kéo dài nữa ..
Aaron

vì một số lý do, bàn tay ngắn nếu / khác dường như không hoạt động ($_,' '*$_)[+$_-in48..57]- bất kể tôi thay đổi điều gì dường như là thất bại đối với tôi.
colsw

@ConnorLSW Đó là vì cả hai biểu thức được ước tính và mảng được xây dựng trước khi lập chỉ mục xảy ra. Kết quả là, PowerShell không biết làm thế nào để nhân spacebởi ovà barfs.
admBorkBork

1
@briantist Cảm ơn bạn đã tìm ra điều đó! Tôi biết nó ở đó, chỉ là không thể đưa ra sự kết hợp đúng của các trích dẫn để làm cho nó hoạt động.
admBorkBork

4

GNU sed , 113 112 byte

s:$:  o@SS o@S o@ UU@/SSS \\__@|SJSS|  \\@|S AS  |  |@|S  VS |  |@|SSAS|__/@\\UU/:
s:S:   :g
y:@:\n:
s:U:_____:g

Mã hóa cơ bản, nó sẽ lưu 3 không gian như S, \nnhư @và 5 gạch dưới như U. Tôi sẽ tiếp tục thử kết hợp để tìm thứ gì đó ngắn hơn.

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

Các giải pháp tầm thường của việc in chuỗi trực tiếp được đưa ra dưới đây. Nó có 136 byte, dẫn đến nén 18%, sử dụng sơ đồ mã hóa ở trên.

c\  o\
       o\
    o\
 __________\
/          \\__\
|   J      |  \\\
|    A     |  |\
|     V    |  |\
|      A   |__/\
\\__________/

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



@Riley Cảm ơn. Tôi cũng chỉ tìm thấy một giải pháp ít hơn 1 byte, với Sviệc lưu trữ 3 khoảng trắng, không s. Tôi nghĩ rằng tôi sẽ chỉnh sửa cái này thay vào đó, vì nó giữ cùng một số lượng biến đổi.
seshoumara

4

MATL, 87 86 83 82 78 byte

[TIH][IAC]111Z?c'(ty!(OWM4J4gW{lm> >bw8ch|.FU2W"@\#2Dj!NQDeIMZ'F'_ /|\JAV'Za7e

Giải pháp này phá vỡ cà phê thành hai phần: "bong bóng" và cốc. Để tạo bong bóng, chúng tôi tạo một ma trận thưa thớt với 111 vị trí tại ba vị trí và chuyển đổi nó thành một mảng ký tự

[TIH][IAC]111Z?c

Đối với thành phần cốc, chúng tôi dựa vào nén chuỗi

'(ty!(OWM4J4gW{lm> >bw8ch|.FU2W"@\#2Dj!NQDeIMZ'F'_ /|\JAV'Za7e

Cả hai thành phần được in ra đầu ra và một dòng mới được tự động đặt giữa các thành phần

Dùng thử tại MATL Online


4

Python 2 , 128 127 byte

-1 byte nhờ vào Rod (sử dụng phép nhân của tuple ('_'*10,)để tránh khai báo).

print''.join('0'<c<':'and' '*int(c)or c for c in'''2o
7o
4o
 %s
/ 9\__
|3J6|2\\
|4A5|2|
|5V4|2|
|6A3|__/
\%s/'''%(('_'*10,)*2))

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

Lưu ý: rằng dấu chéo ngược đôi cần thiết trước khi thức ăn đường.

Tất cả mọi thứ giữa ''''''là một chuỗi đơn, hai chuỗi %snày là các trình định dạng được thay thế bằng nội dung của bộ dữ liệu theo sau %(...), trong đó lần lượt chứa hai bản sao '_'*10thông qua phép nhân tuple (...)*2. Việc '_'*10thực hiện phép nhân chuỗi để mang lại '__________'.

Mã này đi qua các nhân vật, c, trong đó toàn bộ chuỗi sử dụng for c in '''...và tạo ra một chuỗi mới bằng cách tham gia ( join(...))
hoặc số lượng không gian xác định bởi c, int(c)nếu clà một chữ số
hoặc c bản thân
- được một chữ số được xác định bởi '0'<c<':'để tiết kiệm hơn c.isdigit().


Bạn có thể thay thế u,ubằng ('_'*10,)*2và thả utờ khai
Rod

Ồ, thật tuyệt, tôi đã nhìn vào đó và nghĩ rằng có một cách - cảm ơn @Rod!
Jonathan Allan

4

Java 8, 294 289 248 byte

Chơi gôn

()->{String s="";for(char c:"\u026F\n\u076F\n\u046F\n __________\n/\u0A5C__\n|\u034A\u067C\u025C\n|\u0441\u057C\u027C\n|\u0556\u047C\u027C\n|\u0641\u037C__/\n\\__________/".toCharArray()){for(int i=0;i<c>>8;++i)s+=' ';s+=(char)(c&255);}return s;}

Theo tinh thần , điều này không làm khó mã hóa chuỗi thành đầu ra. Thay vào đó, nó sử dụng thực tế là có nhiều trường hợp có nhiều khoảng trắng theo sau là một ký tự có thể in được. Nó mã hóa số lượng khoảng trắng đứng trước một ký tự trong byte thứ tự cao của ký tự, với ký tự ASCII thực tế trong byte thứ tự thấp.

Ung dung:

import java.util.function.*;

public class DrinkYourMorningCoffee {

  public static void main(String[] args) {
    System.out.println(f(
    () -> {
      String s = "";
      for (char c : "\u026F\n\u076F\n\u046F\n __________\n/\u0A5C__\n|\u034A\u067C\u025C\n|\u0441\u057C\u027C\n|\u0556\u047C\u027C\n|\u0641\u037C__/\n\\__________/".toCharArray()) {
        for (int i = 0; i < c >> 8; ++i) {
          s += ' ';
        }
        s += (char) (c & 255);
      }
      return s;
    }
    ));
  }

  private static String f(Supplier<String> s) {
    return s.get();
  }
}

Tôi nghĩ sẽ tốt hơn nếu mã hóa số lượng khoảng trắng hàng đầu trước một ký tự trong byte cao. Vì vậy, một chữ 'A' đứng trước sáu khoảng trắng sẽ được mã hóa thành \u0641.
David Conrad

@DavidConrad tại sao không làm cả hai? Không có hơn mười lần lặp lại liên tiếp ở bất cứ đâu trong chuỗi và mười số thập phân khớp với hex F. Nó có thể phù hợp với cả hai trong đó.

Đó là một điểm hay.
David Conrad

1
@DavidConrad cuối cùng đã làm cho kích thước tệp lớn hơn do vòng lặp thứ hai tôi phải thêm. Nhưng tôi đã lưu một vài byte bằng cách chuyển đổi hex thành hằng số thập phân. Mất 0xtiền tố giúp.

1
Có hai bảng mã trông hữu ích: số lượng khoảng trắng và số lần lặp lại. Bạn đã đúng: mã hóa số lượng không gian là một lợi ích ròng. Tôi cũng có thể đánh golf một số mã khác ( ifchẳng hạn như dự phòng) và cạo đi khoảng 1/6 kích thước.

2

Befunge, 158 105 101 byte

<v"XaXXXNYXNY77777'XXXXX2_TXQXX0XZTXDXX0X^TXXRX0X^TXXDX07]27777#"p29+55
:<_@#:,g2/+55,g2%+55
\JV/|_Ao

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

Các ký tự trong chuỗi được mã hóa đầu tiên dưới dạng các chỉ mục vào bảng tra cứu mười giá trị có thể. Các chỉ số sau đó được nhóm thành từng cặp, mỗi cặp được kết hợp thành một số duy nhất (i1 + i2 * 10) trong phạm vi 0 đến 99. Bằng cách chọn cẩn thận thứ tự của bảng tra cứu, chúng tôi có thể đảm bảo rằng các giá trị đó sẽ luôn hợp lệ Các ký tự ASCII có thể được biểu diễn bằng một chuỗi ký tự.

Đây là một sự cố của chính mã:

Mã nguồn với các đường dẫn thực thi được tô sáng

*Chúng tôi bắt đầu bằng cách khởi tạo phần tử cuối cùng của bảng tra cứu bằng ký tự dòng mới (ASCII 10).
*Sau đó, chúng tôi sử dụng một chuỗi ký tự để đẩy nội dung được mã hóa lên ngăn xếp.
*Cuối cùng, chúng tôi lặp lại các giá trị của ngăn xếp, giải mã và xuất ra hai ký tự cùng một lúc.
*Dòng cuối cùng giữ bảng tra cứu: phần tử thứ 9 là một không gian ngụ ý và phần 10 (dòng mới) được đặt thủ công, như đã giải thích trước đó.


2

Võng mạc , 71 byte

Khác với câu trả lời khác của tôi , câu này được viết bằng tay.


2o¶6o¶3o¶1=¶/55\__¶|3J6|2\¶|4A5|2|¶|5V4|2|¶|6A3|__/¶\=/
=
10$*_
\d
$* 

(có một khoảng trống ở cuối)

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

Nguyên tắc vẫn là có một chuỗi "nén" mà từ đó tách cà phê có thể được tái tạo bằng cách thay thế. Thử những sự thay thế khác nhau hóa ra những điều duy nhất đáng làm là:

  • =biến thành __________(10 dấu gạch dưới)
  • bất kỳ chữ số nào cũng biến thành số không gian đó

2

Lisp thường gặp, 125 123 122 120 114 byte

(format t"~3@{~vto
~} ~10@{_~}
/~11t\\__
|   J~11t|  \\
~2@{|~5t~a~11t|  |
~}|~7tA   |__/
\\~10{_~}/"2 7 4'A" V"1)

Tôi đã lưu 6 byte, sử dụng ý tưởng chỉ cần nhập vào chuỗi thay vì ~&s.

Ý tưởng để cải thiện hoan nghênh.


1

Python3, 206 byte

print('  o\n'+7*' '+'o\n'+4*' '+'o\n'+' '+10*'_'+'\n'+'/'+10*' '+'\__\n'+'|'+3*' '+'J'+6*' '+'|  \\\n'+'|'+4*' '+'A'+5*' '+'|  |\n'+'|'+5*' '+'V'+4*' '+'|  |\n'+'|'+6*' '+'A'+3*' '+'|__/\n'+'\\'+10*'_'+'/') 

2
Vì vậy, nhiều ký tự không gian, Better Better khai báo một s=' 'biến và sử dụng nó.
manatwork

Cũng sẽ không bị tổn thương khi xác định trước dòng mới
Wheat Wizard

3
Mã hóa đầu ra ngắn hơn
Kritixi Lithos

@WheatWizard, tôi không nghĩ vậy. Chỉ có một dòng duy nhất duy nhất. Các chuỗi khác nằm trong các chuỗi, vì vậy sử dụng một biến cũng sẽ cần một toán tử nối. Và 'o\n'có cùng độ dài như 'o'+n.
manatwork

2
@manatwork Một người có thể: print(*(' o',7*' '+'o',4*' '+'o',' '+10*'_','/'+10*' '+'\__','|'+3*' '+'J'+6*' '+'| \\','|'+4*' '+'A'+5*' '+'| |','|'+5*' '+'V'+4*' '+'| |','|'+6*' '+'A'+3*' '+'|__/','\\'+10*'_'+'/'),sep='\n')hoặc for x in(' o',7*' '+'o',4*' '+'o',' '+10*'_','/'+10*' '+'\__','|'+3*' '+'J'+6*' '+'| \\','|'+4*' '+'A'+5*' '+'| |','|'+5*' '+'V'+4*' '+'| |','|'+6*' '+'A'+3*' '+'|__/','\\'+10*'_'+'/'):print(x), cả hai đều là 197. Vẫn dài hơn 136 mã cứng .
Jonathan Allan


1

C - 179

Giải pháp với việc sử dụng rộng rãi chuỗi định dạng:

void f(){printf("%1$3c\n%1$8c\n%1$5c\n%2$11s\n/%3$13s\n|%4$4c%5$7c%6$3c\n|%7$5c%5$6c%5$3c\n|%8$6c%5$5c%5$3c\n|%7$7c%5$4c__/\n\\%2$s/\n",'o',"__________","\\__",74,'|',92,65,86);}

Đây là một phiên bản dễ đọc hơn:

void f() {
  printf("%1$3c\n"
         "%1$8c\n"
         "%1$5c\n"
         "%2$11s\n"
         "/%3$13s\n"
         "|%4$4c%5$7c%6$3c\n"
         "|%7$5c%5$6c%5$3c\n"
         "|%8$6c%5$5c%5$3c\n"
         "|%7$7c%5$4c__/\n"
         "\\%2$s/\n"
         'o',"__________","\\__",'J','|','\','A','V');
}

1
Brute buộc nghệ thuật bên trong mã đưa ra một phiên bản ngắn hơn và in với các lệnh: void g(){puts(" o\n o\n o\n __________\n/ \\__\n| J | \\\n| A | |\n| V | |\n| A |__/\n\__________/\n");}
Churam

1

Võng mạc , 99 byte

Giải pháp này được tạo tự động bằng cách sử dụng tập lệnh này .


0 0o¶ 1¶/32\__¶4 J24\¶|3A 34|¶| 3V34|¶|2A   |__/¶\1/
4
|  
3
    
2
      
1
__________
0
  o¶    

(có dấu cách trên nhiều dòng)

Điều này hoạt động bằng cách sử dụng các số 1,2,3,4 thay cho một số chuỗi ký tự được lặp lại trong chuỗi mục tiêu và sau đó thay thế chúng trở lại.

Tôi biết rằng nó có thể được đánh gôn nhiều hơn bằng cách điều chỉnh mã này hoặc thay đổi hoàn toàn cách tiếp cận, nhưng vì thử thách chơi golf kolmogorov có kết quả khá đáng thất vọng, tôi muốn thử sử dụng kịch bản của mình cho một thử thách thực sự.

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


Bạn có thể thay thế tất cả các không gian ở phần cuối của dòng cuối cùng để một 3và sau đó di chuyển thay thế lên đến trước 3. Ngoài ra bạn có thể thay đổi 2\n để 2\n3 và di chuyển thay thế này để trước 3. Thử trực tuyến!
Kritixi Lithos

Bạn cũng có thể thay đổi 1\n__________để 1\n_____rồi thay đổi mỗi 1trong việc thay thế chính để 11 Thử trực tuyến!
Kritixi Lithos

@KritixiLithos như tôi đã nói, tôi biết điều này có thể được đánh gôn :) Tôi chỉ muốn đăng một giải pháp được tạo trực tiếp bằng thuật toán của mình, có thể tôi sẽ đăng một câu trả lời khác được tối ưu hóa thủ công ^^
Leo

0

Python 3.6

(không cạnh tranh)

Đây là nỗ lực của tôi tại mã hóa Huffman. Nó chắc chắn có thể chơi gôn hơn nữa nếu bất cứ ai muốn đưa ra ý tưởng.

from bitarray import bitarray as b
a=b()
a.frombytes(bytes.fromhex('ca7fca7e53b6db6db664ffc6d9ae1fd6335e2fad1af83d68d7e2e9b218db6db6db20'))
print(''.join(a.decode({k:b(v)for k,v in zip(" _|\no/\\AJV","1 011 010 0011 00101 00100 00011 00010 00001 00000".split())})))

Nghĩa đen có thể được nén hơn nữa bằng cách chuyển đổi sang base64 hoặc khác, và cây Huffman có thể được tối ưu hóa để mang lại một bitarray ngắn hơn.


3
Không cạnh tranh không phải là một cái cớ cho sự vô hiệu.
Mego

@Mego Tôi không có thời gian để sửa nó, tôi chỉ muốn đưa ra khuôn khổ của một giải pháp cho người khác chạy theo. không cạnh tranh vì tôi là OP của thử thách
Aaron

2
Điều đó thực sự không quan trọng. Chính sách của chúng tôi là rõ ràng .
Mego

@Mego đã sửa ... chỉ dành cho bạn
Aaron

0

Ngôn ngữ GameMaker, 138 byte

show_message("  o#       o#    o# __________#/          \__#|   J      |  \#|    A     |  |#|     V    |  |#|      A   |__/#\__________/")

0

C, 141 byte

f(){printf("  o\n%7co\n    o\n __________\n/%11c__\n|   J%6c|  \\\n|    A     |  |\n|%6c    |  |\n|%7c   |__/\n\\__________/",0,92,0,86,65);}

Sử dụng

main(){f();}

Giải pháp dễ dàng, 148 byte:

w(){puts("  o\n       o\n    o\n __________\n/          \\__\n|   J      |  \\\n|    A     |  |\n|     V    |  |\n|      A   |__/\n\\__________/");}

0

PHP, 116 byte

for(;$c="1o
6o
3o
 9
/44\\__
|2J5|1\\
|3A4|1|
|4V3|1|
|5A2|__/
\\9/"[$i++];)echo$c>0?str_repeat(" _"[$c>8],$c+1):$c;

Điều này trông rất giống câu trả lời của Arnauld - và cũng khá giống như vậy. Chạy với -r.


0

zsh, 86 byte

printf "^_<8b>^H^@^@^@^@^@^B^CSPÈçR^@^A^P^CJÆÃ^A<97>¾^B^\Ä^@¹5@Ú^KÂ^E2cÀ|^EG^X¿^FÂW^HCæÃTÔÄÇësÅÀ^L^Fq^@<92>}ý^?{^@^@^@"|zcat

Giải thích: chuỗi đó là nghệ thuật ascii cup nén nén gzip. Tôi sử dụng printf, bởi vì với echo, zcatin một cảnh báo, và echo -elà một ký tự dài hơn. Nó không hoạt động với bashhoặc sh, bởi vì họ nghĩ rằng đó là một tệp nhị phân. Vì bạn không thể dán hiệu quả đầu ra đó từ trình duyệt, đây là một tệp có thể sử dụng được.


0

Java 9 / JShell, 299 byte

()->{String s="";BigInteger b=new BigInteger("43ljxwxunmd9l9jcb3w0rylqzbs62sy1zk7gak5836c2lv5t36ej6682n2pyucm7gkm9bkfbn4ttn0gltbscvbttifvtdfetxorj6mmy3mt6r3",36);while(!b.equals(BigInteger.ZERO)){int x=b.intValue()&0x3ff;for(int i=0;i<x>>7;i++)s+=' ';s+=(char)(x&0x7f);b=b.shiftRight(10);}return s;}

Ung dung:

() -> {
    String s = "";
    BigInteger b = new BigInteger(
        "43ljxwxunmd9l9jcb3w0rylqzbs62sy1zk7gak5836c2lv5t36ej6682n2pyucm7gkm9bkfbn4ttn0gltbscvbttifvtdfetxorj6mmy3mt6r3",
        36);
    while (!b.equals(BigInteger.ZERO)) { 
        int x = b.intValue() & 0x3ff;
        for (int i = 0; i < x >> 7; i++) s+=' ';
        s += (char)(x&0x7f);
        b = b.shiftRight(10);
    }
    return s;
}

Cách sử dụng trong JShell:

Supplier<String> golf = <lambda expression>
System.out.println(golf.get())

Mã hóa mỗi ký tự là mười bit bao gồm một số lượng khoảng trắng trước ký tự trong ba bit cao theo sau bởi điểm mã trong bảy bit thấp.

(Vì chỉ có ba bit cho số đếm, nó không thể biểu thị hơn bảy khoảng trắng liên tiếp và có mười khoảng trắng tại một điểm trong chuỗi. Chúng được mã hóa dưới dạng đếm sáu, theo sau là khoảng trắng, sau đó là một khoảng trắng đếm ba theo sau là ký tự tiếp theo.)

Đáng buồn thay, nó thua giải pháp Java 140 byte tầm thường này:

()->"  o\n       o\n    o\n __________\n/          \\__\n|   J      |  \\\n|    A     |  |\n|     V    |  |\n|      A   |__/\n\\__________/"

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