모닝 커피를 마셔


21

이 Ascii 커피 컵을 그립니다.

  영형
       영형
    영형
 __________
/ \ __
| J | \
| A | |
| V | |
| A | __ /
\ __________ /

커피 스크립트 또는 자바 브라우니 포인트 :)

바이트, 함수 또는 프로그램의 짧은 코드, 후행 줄 바꿈 또는 공백은 허용됩니다.


37
나는 반짝이는 커피 한 잔을 의심 할 것이다. ;)
Dennis

8
@Dennis 금요일 아침을위한 특별한 커피입니다.)
Aaron

1
두 개 이상의 음료에서 더 흥미롭지 않습니까? 뜨거운 음료에는 "("및 ")"로 상징 된 증기가 있고 차가운 음료는 반짝입니까? 그리고 Rod의 의견을 빌리면 코드는 현재 시간을 기준으로 하나 또는 다른 것을 표시해야합니다.
manatwork

1
줄에 공백이 있으면 허용됩니까?
Jonathan Allan

2
@Aaron 컵 패턴이 좋지 않습니다. 하드 코딩 / 압축은 여러 언어로 더 짧을 것입니다
Rod

답변:


3

SOGL , 48 바이트

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

설명:

SOGL에는 내장 문자열 압축이 있으며 그 중 하나는 문자 사전 압축입니다. 더 나은 것은 사용 가능한 문자가 "/ \ | _- \ n"인 상자 문자열 압축 유형입니다. 따라서 전체 프로그램은 " '("는 암시 적)으로 묶인 문자열입니다.

내가 압축기에 준 줄은 (탈출)입니다.

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

16

자바 스크립트 (ES6) 110 104 바이트

edc65 덕분에 4 바이트 절약

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

작동 원리

원본 ASCII 기술의 압축은 연속 2 ~ 10 개의 연속 된 공백 시퀀스와 10 개의 연속 밑줄의 2 개의 시퀀스를 단일 숫자로 대체하여 이루어집니다.

  • N연속 된 공백 의 각 시퀀스 는 숫자로 인코딩됩니다 N-1.
  • 밑줄 시퀀스는로 인코딩됩니다 9.

우리는 하나 이상의 숫자를 사용할 필요 N-1N없도록 오히려 사용합니다. 따라서 ++n디코딩 할 때 필요하다 .

n>>3(우측 비트 시프트)이 0과 동일 n = 1n = 7과 동일 1 n = 8(사용하지 않음) n = 9. 따라서에 ' _'[n>>3]대한 밑줄 9과 다른 모든 발견 된 값에 대한 공간을 제공합니다.

유일한 특별한 경우는 "JAVA"바로 위의 10 개의 연속 공백 시퀀스입니다. 로 인코딩 9하면 밑줄 시퀀스와 충돌합니다. 따라서로 인코딩 된 5 개의 공백으로 구성된 두 개의 시퀀스로 분할해야합니다 44.


나는 108 바이트를 세지 않는다 f=. 이 방법으로 4 바이트를 절약 할 수 있습니다. n>>3대신 +!(n&7), 9대신 _8(두 번) 44대신9
edc65

@ edc65 왜 내가 그 숫자를 세 었는지 모르겠습니다 f=... 저장된 바이트에 감사드립니다!
Arnauld

정규식이 어떻게 작동하는지 설명 할 수 있습니까? 숫자 d를 공백으로 바꾸는 것처럼 보입니다 ( '4'는 ' '). 그러나 그것이 정확히 어떻게되는지 확실하지 않습니다. 비트 시프트는 무엇을합니까? 왜 우리는 n을 증가 시키는가?
Cruncher

1
@Cruncher '작동 방식'섹션을 추가했습니다.
Arnauld 2012

@Arnauld 매우 영리한 :)
Cruncher

16

젤리 , 67 64 바이트

Dennis 덕분에 -2 바이트 (1. 중복 제거 및 2. ZŒṙ요소 반복 별 감소로 전치 및 실행 길이 디코딩을 대체 x/합니다.)

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

온라인으로 사용해보십시오!

방법?

“...“...’ 두 개의 기본 250 압축 숫자의 목록입니다.

[1021021021332411532617161526181616261916162618163425334, 2117114111551155121131612111415121115141211161312111551]

D 10 진수로 변환하여 두 자릿수 목록을 생성합니다.

[[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/ 요소 반복에 의해 하나의 자릿수 목록을 제공합니다 (첫 번째 목록의 숫자를 다른 값의 해당 값으로 반복).

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

하나의 기반으로 모듈 식으로 오른쪽 목록에 색인을 생성하도록 지시합니다 (0은 가장 오른쪽 항목에 색인). 오른쪽에있는 목록 ¶_/\|JAVo은 단순히 필로우 가 줄 바꿈과 동일한 코드 포인트 인 필수 순서 로 사용되는 문자입니다. 프로그램의 끝이므로 닫기 파트너 는 필요하지 않습니다.

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

Jelly는이 목록의 암시 적 인쇄를 수행합니다.이 목록에는 문자가 포함되어 있으므로 마치 문자열 인 것처럼 인쇄합니다.

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

7
나는이 언어의 일부가 똑바로 압축 알고리즘이다 맹세
Cruncher의

6
@Cruncher 그 것이다 풍선 껌
조나단 앨런

4
물론 코드보다 긴 텍스트를 출력 할 수있는 언어는 반드시 일부 출력 텍스트의 출력 텍스트보다 긴 코드를 가져야합니다. 완전히 무작위 입력을 위해 무언가를 작성하려고하면 코드가 더 길지 않다고 가정합니다 (행운이 없다면)?
Cruncher

그렇습니다. Bubblegum은 실제로 압축을 사용하고 있으며, 목표는 Kolmogorov의 복잡성 문제이므로 입력에는 패턴이 있어야합니다 (또는 적어도 여기에서 반복해야 함).
Jonathan Allan

마지막은 암시 적이며, 당신은 대체 할 수 있습니다 ZŒṙx/. 또한 바이트가 없지만 리터럴 줄 바꿈 대신을 사용하면 코드를 더 빨간색으로 실행할 수 있습니다.
데니스

9

커피 스크립트 ES6, 214 180 바이트

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 바이트

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

8
상하 투표 금지; kolmogorov-complexity 답변의 요점은 일반적으로 코드에서 전체를 사용하지 않고 출력을 생성하는 것이기 때문에이 답변이 마음에 들지 않습니다.
HyperNeutrino

@HyperNeutrino, 나는 그것을 개선하는 데 동의합니다.
Tom

7

파이썬 2 174 172 171 167 바이트

하드 코딩이 없습니다.
Base-64 인코딩이 없습니다.
정규식 없음.

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+'/'])

'_'*10Python의 True -> 1and 변환을 외부화 하고 활용하여 2 바이트를 절약했습니다 False -> 0.
불필요한 공백을 제거하여 1 바이트를 절약했습니다.
@TuukkaX 덕분에 4 바이트가 절약되었습니다!


] for및에 2 개의 쓸모없는 공백이있는 것 같습니다 in [.
Yytsi

사실, 당신은 단축 할 수 [2,7,4][3,4,5,6]2,4,73,4,5,6.
Yytsi

7

PowerShell을 , 136 124 123 105 바이트

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

온라인으로 사용해보십시오!

-replace내가 알고 있는 더 짧은 방법 을 찾은 @briantist에게 감사드립니다 .

필요한 수의 공백 대신 숫자가 포함 된 문자열을 사용합니다. 그런 다음 -replace숫자를 스크립트 표현식으로 정규식으로 변환 합니다 $(" "*$1). 따라서, 예를 들어, 문자열의 첫 번째 줄은 것 $(" "*2)o두 번째는 것, $(" "*7)o등등. 삼중 따옴표로 인해 파이프 라인에 문자열로 남습니다. 스크립트 표현식을 처리하고 결과 다중 행 문자열을 파이프 라인에 남겨 두는 iex(약식 Invoke-Expression및 유사)로 덤프합니다 eval. 출력은 암시 적입니다.


이상하다, 하드 코딩이 짧다. 흠. +1 어쨌든 :)
HyperNeutrino

혁신적인 (허프만) 코딩 스키마를 사용하여 일부 답변을 기대하고 있었지만 파이썬 구현도 여전히 더 길어질 것입니다.
Aaron

어떤 이유로 든 짧은 경우 if / else가 작동하지 않는 것 같습니다 ($_,' '*$_)[+$_-in48..57]-내가 무엇을 변경하더라도 그것은 실패합니다.
colsw 2012

@ConnorLSW 두 표현식 모두 평가되고 색인이 생성되기 전에 배열이 작성 되기 때문입니다. 그 결과, PowerShell은 번식하는 방법을 알고하지 않습니다 space에 의해 o및 barfs.
AdmBorkBork

1
@briantist 그것을 찾아 주셔서 감사합니다! 나는 그것이 거기에 있다는 것을 알았고, 제대로 작동하기 위해 따옴표를 올바르게 조합 할 수 없었습니다.
AdmBorkBork

4

GNU sed , 113112 바이트

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

기본 인코딩은 3 개의 공백을 S, \nas @및 5 개의 밑줄을으로 저장 U합니다. 더 짧은 것을 찾기 위해 계속 조합을 시도 할 것입니다.

온라인으로 사용해보십시오!

문자열을 직접 인쇄하는 간단한 솔루션은 다음과 같습니다. 136 바이트이며 위의 인코딩 체계를 사용하여 압축률은 18 %입니다.

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

온라인으로 사용해보십시오!



@Riley 감사합니다. 또한 S3 개의 공백 을 저장 하는 1 바이트 적은 솔루션을 찾았습니다 s. 동일한 수의 변환을 유지하기 때문에 대신이 것을 편집 할 것입니다.
seshoumara

4

MATL, 87 86 83 82 78 바이트

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

이 솔루션은 커피를 "거품"과 머그잔의 두 조각으로 나눕니다. 거품을 만들기 위해 세 위치에 111이있는 희소 행렬을 만들어 문자 배열로 변환합니다.

[TIH][IAC]111Z?c

찻잔 구성 요소의 경우 문자열 압축을 사용합니다

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

두 구성 요소 모두 출력에 인쇄되고 구성 요소 사이에 개행이 자동으로 배치됩니다

MATL Online 에서 사용해보십시오


4

파이썬 2 , 128 127 바이트

Rod 덕분에 -1 바이트 ( ('_'*10,)선언을 피하기 위해 튜플의 곱셈을 사용하십시오 ).

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

온라인으로 사용해보십시오!

참고 : 이중 백 슬래시 줄 바꿈 전에 필요합니다.

'''와 사이의 모든 것은 '''단일 문자열이며, 두 개 %s는 후행 %(...)튜플 의 내용으로 대체되는 포매터이며 '_'*10튜플 곱셈 을 통해 두 개의 사본이 포함 (...)*2됩니다. '_'*10수행 문자열 승산 얻었다 '__________'.

이 코드는, 문자 통과 c, 그 전체 문자열의 사용을 for c in '''...과 결합하여 새로운 문자열을 생성 ( join(...))
중 하나 에 의해 확인 된 공간의 수는 c, int(c), 경우는 c숫자인가
또는 c 자체
숫자에 의해 식별되는 - '0'<c<':'이상 저장할은 c.isdigit().


당신은 대체 할 수 u,u('_'*10,)*2드롭 u선언
로드

오, 좋았어요. 그 방법이 있다고 생각했습니다-@Rod 감사합니다!
Jonathan Allan

4

Java 8, 294 289 248 바이트

골프 :

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

의 정신으로 , 이것은 출력 할 문자열을 하드 코딩하지 않습니다. 대신 여러 개의 공백이 있고 그 뒤에 인쇄 가능한 문자가 있다는 사실을 이용합니다. 문자의 상위 바이트에서 문자 앞에 오는 공백 수를 하위 바이트의 실제 ASCII 문자로 인코딩합니다.

언 골프 드 :

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

높은 바이트의 문자 앞에 선행 공백 수를 인코딩하는 것이 더 좋을 것이라고 생각합니다. 따라서 앞에 6 개의 공백이있는 'A'는로 인코딩됩니다 \u0641.
David Conrad

@DavidConrad 왜 둘 다하지 않습니까? 문자열의 어느 곳에서나 10 회 연속 반복이 없으며 10 진수 10 진수는 16 진법에 맞습니다 F. 거기에 모두 들어갈 수 있어야합니다.

그건 좋은 지적이야.
David Conrad

1
@DavidConrad는 추가해야 할 두 번째 루프로 인해 파일 크기가 커졌습니다. 그러나 16 진수를 10 진수 상수로 변환하여 몇 바이트를 절약했습니다. 0x접두사를 잃어 버렸 습니다.

1
유용하게 보이는 두 가지 인코딩이 있습니다. 공백 수와 반복 수입니다. 당신은 맞았습니다 : 공백 수를 인코딩하는 것은 순 이득입니다. 또한 다른 코드 중 일부를 골프화하고 ( if예 : 중복) 크기의 약 1/6을 면도 할 수있었습니다 .

2

비 펀지, 158 (105) 101 바이트

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

온라인으로 사용해보십시오!

문자열의 문자는 먼저 가능한 10 가지 값의 룩업 테이블에 인덱스로 인코딩됩니다. 그런 다음 인덱스는 쌍으로 그룹화되며 각 쌍은 0-99 범위의 단일 숫자 (i1 + i2 * 10)로 결합됩니다. 룩업 테이블의 순서를 신중하게 선택하면 해당 값이 항상 유효 함을 보장 할 수 있습니다 문자열 리터럴로 표현할 수있는 ASCII 문자.

이것은 코드 자체의 분석입니다.

실행 경로가 강조 표시된 소스 코드

*룩업 테이블의 마지막 요소를 개행 문자 (ASCII 10)로 초기화합니다.
*그런 다음 문자열 리터럴을 사용하여 인코딩 된 내용을 스택으로 푸시합니다.
*마지막으로 스택의 값을 반복하여 한 번에 두 문자를 디코딩하고 출력합니다.
*마지막 행은 찾아보기 테이블을 보유합니다. 9 번째 요소는 묵시적인 공간이며 10 번째 (개행)는 앞에서 설명한대로 수동으로 설정됩니다.


2

망막 , 71 바이트

다르게에서 내 다른 대답 이 한 손으로 작성되었습니다.


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

(끝에 후행 공간이 있습니다)

온라인으로 사용해보십시오!

원리는 여전히 "압축 된"끈을 가지고 있으며,이 문자열에서 커피 컵을 대체물로 재구성 할 수 있습니다. 다른 대체를 시도해 보았을 때 유일한 가치는 다음과 같습니다.

  • =__________(밑줄 10 개) 로 바뀝니다.
  • 모든 숫자는 그 수의 공백으로 바뀝니다.

2

CL의, 125 123 122 120 114 바이트

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

~&s 대신 문자열에 enters를 넣는 아이디어를 사용하여 6 바이트를 절약했습니다 .

개선을위한 아이디어를 환영합니다.


1

Python3, 206 바이트

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
너무 많은 공백 문자… s=' '변수를 선언 하고 사용하는 것이 좋습니다.
manatwork

또한 개행을 미리 정의하기 위해 상처를 입지 않을 것입니다
밀 마법사

3
출력이 짧은 하드 코딩
Kritixi Lithos

@WheatWizard, 나는 그렇게 생각하지 않습니다. 독방 개행은 하나뿐입니다. 다른 것은 문자열 안에 있으므로 변수를 사용하려면 연결 연산자가 필요합니다. 와 'o\n'길이가 같습니다 'o'+n.
manatwork

2
@manatwork 하나는 : print(*(' o',7*' '+'o',4*' '+'o',' '+10*'_','/'+10*' '+'\__','|'+3*' '+'J'+6*' '+'| \\','|'+4*' '+'A'+5*' '+'| |','|'+5*' '+'V'+4*' '+'| |','|'+6*' '+'A'+3*' '+'|__/','\\'+10*'_'+'/'),sep='\n')또는 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)둘 다 197입니다. 여전히 136 하드 코드 보다 깁니다 .
Jonathan Allan


1

C-179

형식 문자열을 광범위하게 사용하는 솔루션 :

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

더 읽기 쉬운 버전은 다음과 같습니다.

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는 더 짧은 버전을 제공하고 puts로 인쇄합니다. void g(){puts(" o\n o\n o\n __________\n/ \\__\n| J | \\\n| A | |\n| V | |\n| A |__/\n\__________/\n");}
Churam

1

레티 나 , 99 바이트

이 솔루션은 스크립트를 사용하여 자동으로 생성되었습니다 .


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

(많은 줄에 후행 공백이 있습니다)

이것은 대상 문자열에서 반복되는 일부 문자 시퀀스 대신 숫자 1,2,3,4를 사용한 다음 다시 대체하여 작동합니다.

나는이 코드를 조정하거나 완전히 변화하는 접근 방식으로 더 골프를 칠 수 있다는 것을 알고 있지만 kolmogorov 메타 골프 도전은 실망스러운 결과를 얻었으므로 스크립트를 실제 도전에 사용하려고했습니다.

온라인으로 사용해보십시오!


당신은 마지막 줄의 끝에있는 모든 공백을 대체 할 수있는 3다음 3. 또한 변경하기 전에로 대체를 이동 2\n 2\n3 와 3 전에이 대체 이동 을 온라인으로보십시오!
Kritixi Lithos

당신은 또한 변경할 수 있습니다 1\n__________1\n_____다음 각을 변경 1하기 위해 주요 대체에 11 온라인으로보십시오!
Kritixi Lithos

@KritixiLithos 내가 말했듯이, 이것이 골프를 칠 수 있다는 것을 알고 있습니다 :) 방금 알고리즘에 의해 직접 생성 된 솔루션을 게시하고 싶었습니다. 아마도 수동으로 최적화 된 다른 답변을 게시 할 것입니다 ^
Leo

0

파이썬 3.6

(비경쟁)

허프만 인코딩에 대한 나의 시도는 다음과 같습니다. 누군가가 아이디어를 받아들이고 싶다면 확실히 골프를 더 할 수 있습니다.

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

리터럴은 base64 또는 기타로 변환하여 더 압축 할 수 있으며 허프만 트리는 더 짧은 비트 배열을 생성하도록 최적화 할 수 있습니다.


3
비경쟁은 무효에 대한 변명이 아닙니다.
Mego

@Mego 나는 그것을 고칠 시간이 없다. 나는 다른 누군가가 실행할 수있는 솔루션의 프레임 워크를 제공하고 싶었다. 내가 도전의 OP 였기 때문에 경쟁적이지 않음
Aaron

2
정말 중요하지 않습니다. 우리의 정책은 분명하다 .
Mego

@ Mego 고정 ... 당신만을 위해
Aaron

0

GameMaker 언어, 138 바이트

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

0

C, 141 바이트

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

용법

main(){f();}

쉬운 솔루션, 148 바이트 :

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

0

PHP, 116 바이트

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;

이것은 Arnauld의 답변 과 매우 비슷하며 거의 동일합니다. 로 실행하십시오 -r.


0

zsh, 86 바이트

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

설명 : 해당 문자열은 gzip 압축 Java 컵 ASCII 아트입니다. 내가 사용 printf에 있기 때문에 echo, zcat경고를 출력하고, echo -e하나 개의 문자 이상이다. 그것은 작동하지 않습니다 bash또는 sh그들이 그것을 바이너리 파일이라고 생각하기 때문에. 효과적으로 브라우저에서 그 결과를 붙여 할 수 없기 때문에, 여기에 '사용 가능한 파일을이야.


0

자바 9 / JShell, 299 바이트

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

언 골프 드 :

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

JShell에서의 사용법 :

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

각 문자를 상위 3 비트의 문자 앞의 공백 수로 구성되고 하위 7 비트의 코드 포인트가 뒤에 오는 10 비트로 각 문자를 인코딩합니다.

(카운트에는 3 비트 만 있기 때문에 7 개의 연속 된 공백을 나타낼 수 없으며 문자열의 한 지점에 10 개의 공백이 있습니다. 이들은 6의 카운트로, 그 다음에 공백, 그 다음에 a로 인코딩됩니다. 세 문자 다음에 다음 문자가 표시됩니다.)

안타깝게도 다음과 같은 간단한 140 바이트 Java 솔루션을 잃게됩니다.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.