태그 보관물: kolmogorov-complexity

kolmogorov-complexity

미국 국기를 인쇄하십시오!

오늘 미국을 위한 특별 독립 기념일 테마 도전. 이 미국 국기의 아스키 아트 표현을 인쇄하는 프로그램을 작성해야합니다.

0
|---------------------------------------------------------
| *   *   *   *   *   * #################################|
|   *   *   *   *   *                                    |
| *   *   *   *   *   *                                  |
|   *   *   *   *   *   #################################|
| *   *   *   *   *   *                                  |
|   *   *   *   *   *                                    |
| *   *   *   *   *   * #################################|
|   *   *   *   *   *                                    |
| *   *   *   *   *   *                                  |
|########################################################|
|                                                        |
|                                                        |
|########################################################|
|                                                        |
|                                                        |
|########################################################|
|                                                        |
|                                                        |
|########################################################|
|---------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

각 줄의 후행 공백과 하나의 후행 줄 바꿈이 허용됩니다.

이것은 플래그가 보이는 방식이 아니지만 ASCII로 얻을 수있는 가장 가까운 것입니다.

평소와 같이 이것은 이므로 표준 허점이 적용되고 바이트 단위의 최단 답변이 승리합니다!



답변

CJam, 184 120 109 101 76 74 69 67 64 62 58 바이트

0'-57*"  #"56f*'|f+7*2>" *  "50*22/W<Sf+..e&~J$]N'|+a37*.+

CJam 통역사 에서 온라인으로 사용해보십시오 .

생각

국기에서 가장 흥미로운 부분은 성조기 패턴입니다.

두 개의 공백과 숫자 기호를 56 번 반복하고 각각에 수직 막대를 추가하면

                                                         |
                                                         |
#########################################################|

이 패턴을 7 번 반복하고 처음 두 줄을 삭제하면 줄무늬가 나타납니다.

#########################################################|
                                                         |
                                                         |
#########################################################|
                                                         |
                                                         |
#########################################################|
                                                         |
                                                         |
#########################################################|
                                                         |
                                                         |
#########################################################|
                                                         |
                                                         |
#########################################################|
                                                         |
                                                         |
#########################################################|

이제 문자열을 " * "50 번 반복하고 결과를 길이가 22 인 덩어리로 나누면 별을 얻습니다.

 *   *   *   *   *   *
   *   *   *   *   *
 *   *   *   *   *   *
   *   *   *   *   *
 *   *   *   *   *   *
   *   *   *   *   *
 *   *   *   *   *   *
   *   *   *   *   *
 *   *   *   *   *   *
   

공백은 약간 떨어져 있지만 마지막 청크를 제거하고 나머지 부분에 공백을 추가하여 문제를 해결할 수 있습니다.

이제 줄무늬와 별을 겹쳐 놓으면

 *   *   *   *   *   * #################################|
   *   *   *   *   *                                    |
 *   *   *   *   *   *                                  |
   *   *   *   *   *   #################################|
 *   *   *   *   *   *                                  |
   *   *   *   *   *                                    |
 *   *   *   *   *   * #################################|
   *   *   *   *   *                                    |
 *   *   *   *   *   *                                  |
########################################################|
                                                        |
                                                        |
########################################################|
                                                        |
                                                        |
########################################################|
                                                        |
                                                        |
########################################################|

남은 일은 57 개의 대시로 된 두 줄을 추가하고 37 개의 세로 막대를 추가하고 체리를 맨 위에 올리는 것입니다.

암호

0         e# Push a zero.
'-57*     e# Push a string of 57 dashes.
"  #"56f* e# Repeat each character in the string 56 times.
'|f+      e# Append a vertical bar to each resulting string.
7*        e# Repeat the resulting array of strings 7 times.
2>        e# Discard the first two strings.
" *  "50* e# Repeat the string 50 times.
22/       e# Split the result into chunks of length 22.
W<        e# Discard the last, partial chunk.
Sf*       e# Append a space to each chunk.
..e&      e# Twofold vectorized logical AND.
          e# Since all characters in the strings are truthy, this always selects
          e# the second character, painting the stars over the stripes.
~         e# Dump all resulting strings on the stack.
J$        e# Copy the string of dashes.

]         e# Wrap the entire stack in an array.
N'|+a37*  e# Repeat ["\n|"] 37 times.
.+        e# Perform vectorized concatenation.


답변

파이썬 2, 113 바이트

for i in range(38):print i and"|"+["-"*57,(" *  "*7)[i%2*2:][:(i<11)*23].ljust(56,"  #"[i%3])+"|"][1<i<21]*(i<22)

스트링 슬라이싱 및 모듈로 점검


답변

Brainf ** K, 3355 3113 1598 1178 782 바이트

이 언어는 무엇입니까?

다음은 28 개의 루프가있는 수동 최적화 버전입니다. 나는 그것이 가능한 한 이것을 취했다고 생각합니다.

다음은 ideone.com 에서 실행 한 내용입니다 .

+++[>++++<-]>[>+++>+++>+++>++++++++++>+>++++<<<<<<-]>++++++>---->->>>.<--.
<++++.>>---.>+++++++[<........>-]<<.
<.<<<<+++++[>>.<.>..<<-]>>.<.>.<<++++[>>>........<<<-]>>>.>.>.
<.<<<<+++++[>>...<.<-]+++++[>>.......<<-]>>.>>.>.
<.<<<<++++++[>>.<.>..<<-]++++[>>........<<-]>>>>.>.
<.<<...<<+++++[>.>...<<-]++++[>>>........<<<-]>>>.>.>.
<.<<<<++++++[>>.<.>..<<-]++++[>>........<<-]>>>>.>.
<.<<<<+++++[>>...<.<-]+++++[>>.......<<-]>>.>>.>.
<.<<<<+++++[>>.<.>..<<-]>>.<.>.<<++++[>>>........<<<-]>>>.>.>.
<.<<<<+++++[>>...<.<-]+++++[>>.......<<-]>>.>>.>.
<.<<<<++++++[>>.<.>..<<-]++++[>>........<<-]>>>>.>.
>>>+++[<<<
<.>>>+++++++[<<<<........>>>>-]<<<.>.
>>++[<<
<.<<<<+++++++[>>........<<-]>>>>.>.
>>-]<<
>>>-]<<<
<.>>>+++++++[<<<<........>>>>-]<<<.>.
<.>>.>+++++++[<........>-]<<.
>>++++++++[<<<.>.<.>.>>-]

어떻게 작동합니까?

 1: +++[>++++<-]>[>+++>+++>+++>++++++++++>+>++++<<<<<<-]>++++++>---->->>>.<--.
 2: <++++.>>---.>+++++++[<........>-]<<.
 3: <.<<<<+++++[>>.<.>..<<-]>>.<.>.<<++++[>>>........<<<-]>>>.>.>.
 4: <.<<<<+++++[>>...<.<-]+++++[>>.......<<-]>>.>>.>.
 5: <.<<<<++++++[>>.<.>..<<-]++++[>>........<<-]>>>>.>.
 6: <.<<...<<+++++[>.>...<<-]++++[>>>........<<<-]>>>.>.>.
 7: <.<<<<++++++[>>.<.>..<<-]++++[>>........<<-]>>>>.>.
 8: <.<<<<+++++[>>...<.<-]+++++[>>.......<<-]>>.>>.>.
 9: <.<<<<+++++[>>.<.>..<<-]>>.<.>.<<++++[>>>........<<<-]>>>.>.>.
10: <.<<<<+++++[>>...<.<-]+++++[>>.......<<-]>>.>>.>.
11: <.<<<<++++++[>>.<.>..<<-]++++[>>........<<-]>>>>.>.
12: >>>+++[<<<
13: <.>>>+++++++[<<<<........>>>>-]<<<.>.
14: >>++[<<
15: <.<<<<+++++++[>>........<<-]>>>>.>.
16: >>-]<<
17: >>>-]<<<
18: <.>>>+++++++[<<<<........>>>>-]<<<.>.
19: <.>>.>+++++++[<........>-]<<.
20: >>++++++++[<<<.>.<.>.>>-]

이 프로그램은 10 개의 메모리 위치를 사용합니다.

0: loop counter #1
1: loop counter #2
2: "*"  ASCII 42
3: spc  ASCII 32
4: "#"  ASCII 35
5: "|"  ASCII 124
6: "\n" ASCII 10
7: "0"  ASCII 48, "-"  ASCII 45
8: loop counter #3
9: loop counter #4

1 호선

  • 이 줄은 레지스터 2에서 7까지 (대부분) ASCII 문자를 설정합니다. 약간의 조정은 나중에 수행됩니다.
  • 이 코드는 먼저 3을 레지스터 0에 넣은 다음 각 루프를 4 번씩 증가시켜 레지스터 1을 3 번 반복 +++[>++++<-]합니다. 결과적으로 레지스터 0은 0이고 레지스터 1은 12입니다.
  • 12는 다음 루프의 루프 카운터로 사용됩니다. 루프를 통해 12 회 동안 레지스터 2, 3 및 4는 3 번 증가하고, 레지스터 5는 10 번 증가하고, 레지스터 6은 1 번 증가하고, 레지스터 7은 4 번 증가합니다. 이 루프의 끝에 R2 (36), R3 (36), R4 (36), R5 (120), R6 (12), R7 (48)을 포함합니다. 루프 레지스터 2가 6 번 증가한 후 레지스터 3은 4 번 감소하고 레지스터 4는 한 번 감소합니다. 이때의 값은 R2 (42), R3 (32), R4 (35), R5 (120), R6 (12), R7 (48)입니다. 레지스터 5와 6을 제외한 모든 것은 초기 ASCII 값을 포함합니다.
  • 다음 레지스터 7이 "0"플래그 상단에 출력됩니다 !
  • 다음 레지스터 6은 10으로 두 번 감소 (ASCII 줄 바꿈)되어 출력됩니다. 깃발의 첫 줄로 끝났다!

2 호선

  • 먼저 레지스터 5를 4 씩 증가시켜 "|"(ASCII 124) 출력합니다.
  • 그런 다음 레지스터 7을 "0"(ASCII 48)에서 "-"(ASCII 45) 로 변경하여 레지스터 7을 감소 시키고 출력합니다.
  • 그런 다음 7을 루프 카운터 3 (레지스터 8)에 넣고 7 번 반복하여 매번 8 개의 대시를 작성하여 총 7 * 8 = 56 개의 대시를 만듭니다.
  • 마지막으로 줄 바꿈을 출력하여 끝납니다.

3 호선

  • 이 줄에는 두 개의 루프가 있습니다.
  • 첫 번째 루프는 " * "5 번 씁니다 .
  • 그런 다음 " * "기록됩니다
  • 두 번째 루프 "#"는 총 32 번씩 8 을 4 번 반복 합니다.
  • 그런 다음 "#", "|""\n"기록됩니다.

4 ~ 11 행

  • 이 선들은 3 번 줄과 같은 기술을 사용하여 깃발의 별과 줄무늬를 씁니다.

12 호선

  • 이 줄은 3 번 실행되는 루프를 시작합니다.
  • 루프는 17 행에서 끝납니다.

13 호선

  • 깃발을 가로 지르는 스트립을 씁니다.
  • 루프를 "#"통해 매번 8 번씩 7 번씩 실행되는 루프를 사용합니다 .

14 호선

  • 2 회 실행되는 루프의 시작

15 호선

  • 깃발을 가로 지르는 스트립을 씁니다.
  • 루프를 " "통해 매번 8 번씩 7 번씩 실행되는 루프를 사용합니다 .

16 호선

  • 14 행에서 시작한 내부 루프의 끝.

17 호선

  • 13 번 라인에서 시작된 외부 루프의 끝.

18 호선

  • 깃발의 밑줄을 그립니다.

19 호선

  • 플래그의 아래쪽 테두리를 그립니다.

20 호선

  • 깃대를 그립니다.
  • 루프를 "|"통해 매번 두 번 쓰기 와 개행을 두 번 반복합니다.

답변

/// : 225 자

/D/ddd//d/--------//H/hhh//h/########//S/sss//s/        //A/aaaaa//a/ *  //b/|HHh|
|SSs|
|SSs|
//p/|
|
|
|
/0
|DDd-
|A * Hh#|
|  A Ss |
|A * Ss |
|  A Hh#|
|A * Ss |
|  A Ss |
|A * Hh#|
|  A Ss |
|A * Ss |
bbb|HHh|
|DDd-
pppp


답변

자바 스크립트 ( ES6 ) 153 156

템플릿 문자열을 사용하면 중요하고 계산 된 1 개의 줄 바꿈이 있습니다.

아래 스 니펫 실행 테스트 (EcmaScript 6, Firefox 만 해당)

// TEST - Just for testing purpose,redefine console.log

console.log = (...x) => O.innerHTML += x+'\n'

// SOLUTION

o=[0];for(o[r=1]=o[21]='-'[R='repeat'](57);++r<21;o[r]=" *  "[R](7).substr(r%2*2,r<11&&23)+'  #'[r%3][R](r<11?33:56)+'|')o[37]='';console.log(o.join`
|`)
<pre id=O></pre>

더 애국심을 기하기 위해 여기 EcmaScript 5 버전이 있습니다.

// TEST - Just for testing purpose,redfine console.log

console.log = function(x){ O.innerHTML += x+'\n' }

// SOLUTION - 175 bytes

for(o=(A=Array)(38),o[0]=0,r=2;r<21;r++)o[r]=A(8)[J='join'](" *  ").substr((r&1)*2,r<11?23:0)+A(r<11?34:57)[J]('  #'[r%3])+'|';
o[1]=o[r]=A(58)[J]('-'),console.log(o[J]('\n|'))
<pre id=O></pre>


답변

루비, 104102 바이트

ManAtWork의 Ruby 아이디어를 허가를 받아 사용합니다.

puts 0,s=?|+?-*57,(0..18).map{|i|?|+("#  "[i%3]*(i>8?56:33)).rjust(56," *   *"[i%2*2,4])+?|},s,'|
'*16

루비, 127121112 바이트

?스트라이프 색상에 대해 조건부 대신 배열 을 사용 하도록 따옴표를 변경했습니다 . 스트라이프 길이에 수식 대신 조건부를 사용했습니다.

puts 0,s=?|+?-*57
19.times{|i|puts ?|+("#  "[i%3]*(i>8?56:33)).rjust(56,i%2>0?"   *":" *  ")+?|}
puts s,"|\n"*16

여기서의 트릭은 줄무늬 (빨간색 #과 흰색 / space)를 올바른 길이로 그린 다음별로 채 웁니다. 루비는 rjust우리가 패딩 문자열 번갈아 지정할 수 있습니다 " * "" *".

원본 버전, 127 바이트

puts 0,s="|"+"-"*57
19.times{|i|puts("|"+((i%3>0?" ":"#")*((i+1)/10*23+33)).rjust(56,i%2>0?"   *":" *  ")+"|")}
puts s,"|\n"*16


답변

SWI- 프롤로그, 275 바이트

이다 프랑스어 기원의 언어에서 어떤 종류의 피팅

a:-put(48),nl,b,c(0).
b:-z,w(-,57).
c(I):-nl,I=36;J is I+1,(I=19,b,c(J);I>19,z,c(J);I>8,z,(I mod 3=:=0,w(#,56);tab(56)),z,c(J);z,(I mod 2=:=0,tab(1),w('*   ',5),put(42),tab(1);w('   *',5),tab(3)),(0=:=I mod 3,w(#,33);tab(33)),z,c(J)).
z:-put(124).
w(A,B):-writef('%r',[A,B]).

결과를 여기에서보십시오