PrettyFont에서 숫자 출력


13

PrettyFont라는 새로운 글꼴을 디자인했습니다. 나는 그것을 완성시키는 데 많은 시간을 투자했지만, 일하는 사람이기 때문에 그것을 끝내야 할 시간이 없다. 따라서 현재 4 자만 포함합니다. 내가 부자가 된 어느 날은 그것을 끝내는 것이 평생 목표가 될 것이지만, 지금은 ...

이것은 PrettyFont입니다 : (0, 1, 2, 3)

####  ##  #### ####
#  #   #  #  #    #
#  #   #    #   ###
#  #   #   #      #
####  ### #### ####

각 문자의 너비는 4 픽셀, 높이는 5 픽셀입니다. 지금! PrettyFont로 숫자를 출력하는 프로그램을 작성하여 인쇄 디자인을 보낼 수 있기를 바랍니다.

규칙 :

입력은 기수 4 (문자 0-3 만)의 문자열 번호 (예 : "01321")입니다. 프로그램은 문자열에서 10 자 이상을 처리 할 수 ​​있어야합니다. 보너스 포인트는 문자열 대신 실제 기본 10 정수를 사용하는 프로그램에 제공됩니다. 설명 편집 : 정수 보너스는 54321과 같은 10 진법을 입력 할 수 있으며 프로그램은 4 진법으로 변환하여 출력합니다 (이 경우 31100301).

PrettyFont로 인쇄 된 번호가 출력됩니다. 입력 및 출력 예 :

> "321"
####
   #
 ###
   #
####

####
#  #
  # 
 #  
####

 ## 
  # 
  # 
  # 
 ###

다음과 같이 단일 행 방식으로 출력 할 수있는 프로그램에 큰 보너스 :

> "321"
#### ####  ## 
   # #  #   # 
 ###   #    # 
   #  #     # 
#### ####  ### 

'#'문자는 필수 사항이 아니며 모든 문자로 바꿀 수 있습니다.

수직 출력에서는 각 PrettyFont 문자 사이에 빈 행이 필요합니다. 가로 출력을하는 사람이 있으면 각 PrettyFont 문자 사이에 공백 문자 ''또는 탭 문자가 필요합니다.

이것은 코드 골프, 가장 짧은 코드 승리입니다! (내 사무실 컴퓨터의 저장 공간이 제한되어 있기 때문에 짧아야합니다.)


1
정확히 중복되지는 않지만 이것과 codegolf.stackexchange.com/questions/3628/… 의 유일한 근본적인 차이점 은 룩업 테이블입니다.
피터 테일러

PrettierFont -banner -c '#' 0123
드레이크 Clarris

1
너비가 4 픽셀 인 'M'에 문제가있을 것입니다.
Cameron MacFarland 1

기본 숫자 10을 입력으로 사용하면 몇 개의 문자가 보너스입니까?
defhlt

확실하지 않습니다. 얼마나 어려운지에 대한 아이디어를 얻으려면 더 많은 솔루션이 필요합니다. 나는 코드 골프 자체를 잘하지 못합니다 ... 제안은 감사합니다!
Accatyyc

답변:


11

k ( 118117 72 71 69 66 자)

나는 이것을 아직 골프화하려고 많은 노력을 기울이지 않았지만 너무 많은 문자로 원하는 수평 출력을 얻습니다.

-1'" "/:'+(5 4#/:4 20#"# "@,/0b\:'0x066609ddd806db00e8e0)"I"$'0:0;

stdin에서 입력을 받아서 stdout으로 출력을 인쇄합니다.

편집 : 출력 "비트 맵"에 압축 형식을 구현하여 72로 줄였습니다. 이제 비트 맵은 64 비트 int를 이진으로 변환하고 0과 1을 "#"또는 ""로 매핑하여 작성됩니다. 다른 몇 가지 솔루션처럼 16 진수로 할 수는 있지만 이것이 더 길어질 것이라고 생각합니다 . 16 진수가 더 좋습니다.

012301의 샘플 출력 :

####  ##  #### #### ####  ##
#  #   #  #  #    # #  #   #
#  #   #    #   ### #  #   #
#  #   #   #      # #  #   #
####  ### #### #### ####  ###

// 편집 : -6 문자


감동적인. 가장 짧은 코드! 제한된 저장 장치 드라이브에 맞을 수 있습니다. 잘 했어.
Accatyyc

kdb + / q / k exe의 조합이 392kB의 슬림 한 무게라는 점을 고려할 때, 이는 제한된 저장 장치 드라이브에 이상적 일 수 있습니다.)
skeevey

10

파이썬 3 (124)

s=input();[print(*["".join(" #"[0xf171ff429f72226f999f>>(20*int(x)+4*y+i)&1]for i in(3,2,1,0))for x in s])for y in range(5)]

죄송합니다. 세로 형은 흥미롭지 않았습니다.

???/golf.py
1230012301203012030102301230
 ##  #### #### #### ####  ##  #### #### ####  ##  #### #### #### ####  ##  #### #### #### ####  ##  #### #### #### ####  ##  #### #### ####
  #  #  #    # #  # #  #   #  #  #    # #  #   #  #  # #  #    # #  #   #  #  # #  #    # #  #   #  #  # #  #    # #  #   #  #  #    # #  #
  #    #   ### #  # #  #   #    #   ### #  #   #    #  #  #  ### #  #   #    #  #  #  ### #  #   #  #  #   #   ### #  #   #    #   ### #  #
  #   #      # #  # #  #   #   #      # #  #   #   #   #  #    # #  #   #   #   #  #    # #  #   #  #  #  #      # #  #   #   #      # #  #
 ### #### #### #### ####  ### #### #### ####  ### #### #### #### ####  ### #### #### #### ####  ### #### #### #### ####  ### #### #### ####

굉장한 일! 수평 문자에 대해 너무 적은 문자를 기대하지 않았습니다. 좋은 작업.
Accatyyc

1
고마워. Ruby 구현에서 내 아이디어 (16 진수 및 시프트)가 훨씬 짧아야한다고 생각합니다.
Ev_genus

10

J, 84 82 81 80 75 69 자

' #'{~(,4,.(4*".,' ',.1!:1[1)+/i.4){"1#:63231 37521 37415 37441 63487

키보드에서 입력을받습니다.

   ' #'{~(,4,.(4*".,' ',.1!:1[1)+/i.4){"1#:63231 37521 37415 37441 63487 63487
0123210
 ####  ##  #### #### ####  ##  ####
 #  #   #  #  #    # #  #   #  #  #
 #  #   #    #   ###   #    #  #  #
 #  #   #   #      #  #     #  #  #
 ####  ### #### #### ####  ### ####

매직 넘버 FTW (또는이 경우 2 위) :-)


아주 좋아요 ... 아주 좋아요 ... 감동합니다! 오늘 많은 좋은 답변. 아마도 내 디자이너 인쇄물이 잘 될 것입니다.
Accatyyc

모든 숫자를 하나의 이진수로 인코딩하고 결과를 재구성하여 해당하는 숫자 행렬을 얻을 수 있습니다.
FUZxxl

@FUZxxl 전체 80 비트의 숫자를 찾으려고 시도했지만 #:해당 크기의 숫자에서는 작동하지 않는 것 같습니다. #:1166416635908028473935870그리고 #:1166416635908028473931775모두는 나에게 같은 대답을 제공합니다.
Gareth

8

C- 164151 자 수평

IDEone에서 : http://ideone.com/gljc3

코드 (164 바이트) :

i,j;main(){char n[99];gets(n);for(;j<5;++j){for(i=0;n[i];++i)printf("%.4s ","#####  # ##   #  ### #     #"+4*("01110233340135006460"[(n[i]-48)*5+j]-48));puts("");}}

여기에 이미지 설명을 입력하십시오

편집-151 바이트

의견에서 제안을 추가 한 다음 일부를 추가했습니다. 그래도 정확히 안전하지는 않습니다 (0 길이 배열 gets()...).

char i,j=5,n[];main(){for(gets(n);j--;)for(i=puts("");n[i];printf("%.4s ","#####  # ##   #  ### #     #"+4*(0x1A600BA136E0248>>15*n[i++]-720+3*j&7)));}

참고, i=puts("")내가 치료하고 있습니다 때문에 정의되지 않은 동작입니다 void으로가 int! 0내 MinGW 버전에서는 일관되게 반환 되지만 1IDEOne이 사용하는 컴파일러 에서는 반환 됩니다.

10 진수를 받아들이고 밑줄 4를 출력합니다 (167 바이트)

char i,j=5,n[];main(p){for(itoa(atoi(gets(n)),n,4);j--;)for(i=puts("");n[i];printf("%.4s ","#####  # ##   #  ### #     #"+4*(0x1A600BA136E0248>>15*n[i++]-720+3*j&7)));}

오, C의 짧은 것! 이전 CPU에서 1 분 안에 실행됩니다. 좋아요
Accatyyc

"! = 0"을 제거하여 3 개의 문자를 저장할 수 없습니까?
a3nm

응, 고마워 나는 그것을 잡지 않았다.
Kaslai

gets안에 넣습니다 for(1 번 저장). puts외부 for증분으로 이동 하고 중괄호를 저장하십시오. 마비를 저장하십시오 : (n[i]-48)*5+j-> n[i]*5-240+j,와 같은 트릭 +4*(...
ugoren

153 바이트로 줄이십시오. CI 추측에는 나쁘지 않습니다.
Kaslai

7

루비, 0123 자 + 보너스 ([0123] vs '#')

f=15
0.upto(4){|n|$*[0].chars{|x|$><<"%4s "%eval(:f6ff929192279241f7ff[x.to_i+4*n]).to_i.to_s(2).tr(?0,' ').tr(?1,x)}
puts}

예:

% ruby ./font.rb 01231231
0000  11  2222 3333  11  2222 3333  11  
0  0   1  2  2    3   1  2  2    3   1  
0  0   1    2   333   1    2   333   1  
0  0   1   2      3   1   2      3   1  
0000  111 2222 3333  111 2222 3333  111
% ruby ./font.rb 01231231102020103201301203212302230
0000  11  2222 3333  11  2222 3333  11   11  0000 2222 0000 2222 0000  11  0000 3333 2222 0000  11  3333 0000  11  2222 0000 3333 2222  11  2222 3333 0000 2222 2222 3333 0000 
0  0   1  2  2    3   1  2  2    3   1    1  0  0 2  2 0  0 2  2 0  0   1  0  0    3 2  2 0  0   1     3 0  0   1  2  2 0  0    3 2  2   1  2  2    3 0  0 2  2 2  2    3 0  0 
0  0   1    2   333   1    2   333   1    1  0  0   2  0  0   2  0  0   1  0  0  333   2  0  0   1   333 0  0   1    2  0  0  333   2    1    2   333 0  0   2    2   333 0  0 
0  0   1   2      3   1   2      3   1    1  0  0  2   0  0  2   0  0   1  0  0    3  2   0  0   1     3 0  0   1   2   0  0    3  2     1   2      3 0  0  2    2      3 0  0 
0000  111 2222 3333  111 2222 3333  111  111 0000 2222 0000 2222 0000  111 0000 3333 2222 0000  111 3333 0000  111 2222 0000 3333 2222  111 2222 3333 0000 2222 2222 3333 0000 

편집 : 루비, 87 자

0.upto(4){|n|$*[0].bytes{|x|$><<"%04b0"%:f6ff929192279241f7ff[x-48+4*n].to_i(16)}
puts}

여기에 이미지 설명을 입력하십시오


창조적 인 것! 아주 좋아요 이것은 내 디자인에서 멋지게 보일 것입니다. 공감하십시오.
Accatyyc

교활한! 그것을 이해하는 데 시간이 좀 걸릴 것입니다.
manatwork

5

루비

세로 : 116 자

f="f999f62227f924ff171f".chars.map{|c|c.hex.to_s(2).rjust(4).tr"01"," #"}
$<.chars{|c|i=c.to_i*5;$><<f[i,5]*$/+$/*2}

샘플 실행 :

bash-4.2$ echo -n 321 | ruby -e 'f="f999f62227f924ff171f".chars.map{|c|c.hex.to_s(2).rjust(4).tr"01"," #"};$<.chars{|c|i=c.to_i*5;$><<f[i,5]*$/+$/*2}'
####
   #
 ###
   #
####

####
#  #
  # 
 #  
####

 ## 
  # 
  # 
  # 
 ###

수평 : 150 148 자

f="f999f62227f924ff171f".chars.map{|c|c.hex.to_s(2).rjust(4).tr"01"," #"}
o=(0..4).map{""}
$<.chars{|c|5.times{|j|o[j]<<f[c.to_i*5+j]+" "}}
$><<o*$/

샘플 실행 :

bash-4.2$ echo -n 321 | ruby -e 'f="f999f62227f924ff171f".chars.map{|c|c.hex.to_s(2).rjust(4).tr "01"," #"};o=(0..4).map{""};$<.chars{|c|5.times{|j|o[j]<<f[c.to_i*5+j]+" "}};$><<o*$/'
#### ####  ##  
   # #  #   #  
 ###   #    #  
   #  #     #  
#### ####  ### 

나는 그것을 그렇게 인코딩하려고했습니다. 이 언어를 이길 수 있다고 생각하지 마십시오!
그리핀

4

매쓰 174 145 139 118 119 123 문자

이제 기본 10 (정수 보너스)의 입력으로 작동합니다. 이전 버전은 편집에서 찾을 수 있습니다.


ArrayPlot 사용 :

함께 ArrayPlot우리는 직접 그 과정에서 몇 가지 문자를 저장, 검은 색과 흰색 사각형에 1과 0을 변환 할 수 있습니다. 예를 들어, n = 58021 인 경우 기본 4에서 32022211 입니다.

i = IntegerDigits; i[n, 4] /. Thread@Rule[0~Range~3, ArrayPlot /@ ((PadLeft[#, 4] & /@ i[#, 2]) & /@ (i@{89998, 62227, 89248, 81718} /. {8 -> 15}))]

정수 보너스


설명

입력은 프로그램 매개 변수 n입니다.

0은 {{1,1,1,1},{1,0,0,1},{1,0,0,1},{1,0,0,1},{1,1,1,1} 16 진수 로 표시 될 수 있습니다 f999f.

, 표현식 f999f62227f924ff171f은 모든 숫자 {0,1,2,3}을 표시하는 정보를 보유합니다. (참고 : 그것은 시작 f999f, 우리가 언급 한 바와 같이, 이는 변장 제로이다.) 티카 숫자로 인식하지 않기 때문에, 내가 사용 89998622278924881718하는 대신 (네 개의 정수 문자열에)는 그 정수 숫자로 번호를 돌파 한 후 사용 모든 곳에서 15 명은 8 명으로 나타났다. (내가 문자열 대신 숫자를 사용할 수있게했습니다.)


1
출력이 입력과 일치하지 않습니다.
Mr Lister

당신은 수직 보너스를 위해 그것을 전치 할 수 있습니까?
그리핀

규칙을 이해하면 보너스는 수평 구성에 대한 것입니다.
DavidC

리스터 씨 잘 잡았습니다. 나는 1 대신에 0의 그림을 복사하여 붙여
넣었다

내 잘못, 잘못 읽었습니다.
Griffin

3

매쓰 , 112 (107) 103

나는 David의 방법을 취합니다.

i=IntegerDigits;Grid/@i@n/.Thread[0~Range~3->("#"i[i@#/.8->15,2,4]&/@{89998,62227,89248,81718}/.0->"")]

Mathematica 그래픽

보너스와 함께 105 :

(의 경우 n = 54321)

i=IntegerDigits;Grid/@n~i~4/.Thread[0~Range~3->("#"i[i@#/.8->15,2,4]&/@{89998,62227,89248,81718}/.0->"")]

Mathematica 그래픽


정말 좋습니다. 보너스가있는 캐릭터는 거의 없습니다. 잘 했어!
Accatyyc

3

APL ( 58 57)

{' #'[1+5 4⍴1022367 401959 1020495 988959[1+⍎⍵]⊤⍨20⍴2]}¨⍞

산출:

0123
 #### ## #### #### 
 # # # # # # 
 # # # # ### 
 # # # # # 
 #### ### #### #### 

2

파이썬 2.7

세로 160

for i in input():print['****\n*  *\n*  *\n*  *\n****',' ** \n  * \n  * \n  * \n***','****\n*  *\n  * \n *  \n****','****\n   *\n ***\n   *\n****'][int(i)]+'\n'

가로 234 216

x=[['****\n*  *\n*  *\n*  *\n****',' ** \n  * \n  * \n  * \n ***','****\n*  *\n  * \n *  \n****','****\n   *\n ***\n   *\n****'][int(i)]for i in input()]
for i in range(5):print' '.join([y.split('\n')[i]for y in x])

둘 다 stdin에서 인용 된 문자열로 입력을받습니다.

예 :
$. / pretty
"0123"


이걸 어떻게 운영합니까? 오류가 발생합니다. Python 2 : "TypeError : 'int'개체를 반복 할 수 없습니다", Python 3 : "TypeError : 'builtin_function_or_method'개체를 첨자화할 수 없습니다."
manatwork

@manatwork 이것은 파이썬 2.7에 있으며, 명확하게하기 위해 답변을 편집했습니다.
Matt

@manatwork 또한, 주위에 따옴표없이 숫자를 입력 한 것 같습니다 : 0123. stdin에 "0123"을 입력해야합니다.
Matt

지금 작동합니다. 죄송합니다, 그 인용 트릭은 나에게 분명하지 않았습니다.
manatwork

@manatwork 3 이전의 파이썬 버전에서 input () 함수는 입력을 마치 파이썬 표현식 인 것처럼 평가합니다. 따옴표가 없으면 프로그램은 정수를 반복하여 오류를 발생시킵니다.
Matt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.