ASCII 아트로 긴 곱셈 시각화


12

도전

표준 입력에서 두 개의 정수를 쉼표로 구분하여 작성하고이 두 정수의 긴 곱셈을 표준 출력으로 시각화하는 프로그램을 작성하십시오.

예 :

입력

14, 11

프로그램 출력

     14
    x11
   _____
     14
    14
  ______
    154

입력

-7, 20

프로그램 출력

     -7
    x20
   _____
     00
    14
   _____
   -140

[-999, 999] 범위에서 항상 정확한 입력과 숫자를 가정하십시오

우승 기준

최단 코드 승리!


답변:


3

펄, 108 자

Orabig의 아이디어를 통합 한 최상의 108 가지 char 솔루션.

($x,$y)=<>=~/[-\d]+/g;printf"%7s
",$_ for$x,x.$y,"-"x7,(map{abs($x*$_).$"x$i++}reverse$y=~/\d/g),"-"x7,$x*$y

이전 139 개 솔루션

sub P{sprintf"%*d",@_}
($x,$y)=<>=~/[^,]+/g;$,=$/;
print P(7,$x),"  x".P(4,$y),"-"x7,(map{P 7-$i++,abs$_*$x}reverse$y=~/\d/g),
"-"x7,P 7,$x*$y

/ me 활과 관련하여 ... 나는 printf 부분에지도를 포함시킬 가능성을 보지 못했다. 그리고 $y=~/\d/g속임수는 영리했다
Orabîg

5

매쓰 213 217 197 193 186 184 193 184 177

암호

a_~g~b_ := 
With[{e = IntegerDigits@b}, Column[Flatten@{a, UnderBar["x " <> IntegerString[b]], 
Table[Row @@ {PadRight[{a Reverse[e][[i]]}, i, " "]}, {i, Length@e}], OverBar[a b]}, 
Alignment -> Right]]

용법

g[845, 921]

곱하다


확실히 IntegerString[921]당신은 의미 IntegerString[b]합니까?
David Zhang

예, 잘 잡아요!
DavidC

나는 스펙이에서 공간을 제거 할 수 있다고 생각합니다 "x ".
ɐɔıʇǝɥʇuʎs

네 말이 맞아 나는 그것이 더 좋아 보이기 때문에 그것을 남기기로 결정했다 (그리고 나는 가장 짧은 코드를 가지지 않을 것이다).
DavidC

1

파이썬, 174 170 :

a,b=input();r,s=str(a),str(b);h=len(r+s)*'-';print'\n'.join(["%9s\n%9s\n%9s"%(r,'x'+s,h)]+["%%%ii"%(9-i)%(int(d)%10*a)for i,d in enumerate(s[::-1])]+["%9s\n%9i"%(h,a*b)])

사용법 : 요청한대로 표준 입력에서 값을 실행하고 입력하십시오.

달리기를 보려면 : http://ideone.com/S8xNb

산출:

     1234
    x5678
 --------
     9872
    8638
   7404
  6170
 --------
  7006652

fabiocerqueira와 beary605와 David Carraher 덕분에


당신은 공백의 4 개 문자를 제거 할 수 있습니다 : print '\n'-> print'\n', 10*a) for i,d in enumerate-> 10*a)for i,d in enumerate, "%9s\n%9i" % (h,a*b)->"%9s\n%9i"%(h,a*b)
beary605

1

Python, 145, 약간 다른 출력을 가진 또 다른 대답.

암호

a,b=input();h=6*'-';print'\n'.join(["%6i\nx%5i\n%s"%(a,b,h)]+["%%%ii"%(6-i)%(int(d)%10*a)for i,d in enumerate(str(b)[::-1])]+["%s\n%6i"%(h,a*b)])

용법

요청한대로

산출

   999
x  999
------
  8991
 8991
8991
------
998001

달리기를 보려면 : http://ideone.com/mdR18


1

, 157 개 151 150 144 141 133 문자 :

($x,$y)=<>=~/[-\d]+/g;map{$z=~s/z/ z/g;$z=(abs$x*$_)."z$z"}split//,abs$y;map{printf"%6s
",$_}$x,"x$y",$b="-"x6,(split/z/,$z),$b,$x*$y

사용법 :

>echo "-123, 456" | perl mult.pl
   -123
   x456
-------
    738
   615
  492
-------
 -56088

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