매지컬 8 사다리꼴 출력


41

당신의 임무는 Magical 8 Trapezium을 출력하는 것입니다.

        1 × 8 + 1 = 9
       12 × 8 + 2 = 98
      123 × 8 + 3 = 987
     1234 × 8 + 4 = 9876
    12345 × 8 + 5 = 98765
   123456 × 8 + 6 = 987654
  1234567 × 8 + 7 = 9876543
 12345678 × 8 + 8 = 98765432
123456789 × 8 + 9 = 987654321
  • 가장 적은 바이트로 선택한 언어로 출력하십시오.
  • 사다리꼴 모양을 유지하기 위해 각 줄의 시작 부분에 공간 수를 기록하십시오.
  • 후행 공백이 허용됩니다.
  • ×또는 원하는 문자 x를 사용할 수 있습니다 .

1
관련. (약간 ...)
Martin Ender

중간 공간이 필요합니다.
가치 잉크

@ KevinLau-notKenny 그것은 중요하지만 항상 대안을 게시 할 수 있습니다.
rybo111

중간에 6 칸에 해당하는 6 바이트이므로 아니오, 충분히 중요하지 않다고 생각합니다.
밸류 잉크

답변:


15

파이썬 2, 59 바이트

a=i=1
exec"print'%9d x 8 +'%a,i,'=',a*8+i;i+=1;a=a*10+i;"*9

숫자 ai방정식 a * 8 + i은 산술적으로 생성됩니다. 각 줄 i은 증분되며 a를 통해 다음 자리가 추가됩니다 a=a*10+i. 예를 들어, a=12345, i=5다음, i이된다 6, 그래서 새로운 aIS 12345*10 + 6이다 123456.

이것을 문자열 대신 숫자로 저장하면 방정식으로 주어진 RHS를 계산할 수 있습니다 a*8+i. 이는 문자열 반전보다 짧습니다.


이 내용이 무엇인지 +1 + 생성 할 수있는 금액
rybo111

7

V , 37 바이트

i¸ 1 X 8 + 1 = 98ñYp|Eylp^Xf+$ylp

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

여기에는 인쇄 할 수없는 것이 포함되어 있으므로 다음은 hexdump입니다.

00000000: 69c2 b820 3120 5820 3820 2b20 3120 3d20  i.. 1 X 8 + 1 = 
00000010: 391b 38c3 b159 707c 4579 6c70 015e 5866  9.8..Yp|Eylp.^Xf
00000020: 2b01 2479 6c70 18                        +.$ylp.


5

PHP, 105 89 60 57 바이트

나의 첫번째 골프는 여기에서 시도한다 (manatwork & user55641 덕분에)

for(;$i++<9;)printf("%9s x 8 + $i = %s
",$s.=$i,$s*8+$i);

59

for(;$i++<9;)printf("%9s x 8 + $i = %s
",$s.=$i,$t.=10-$i);

89 (나만의 시도)

for(;@++$i<=9;){printf("%9s x 8 + %s = %s\n",join(range(1,$i)),$i,join(range(9,10-$i)));}

105 (첫번째)

for($j='123456789';@$j[$i++];){printf("%9s x 8 + %s = %s\n",substr($j,0,$i),$i,strrev(substr($j,-$i)));}

1
단일 문장 주위에 중괄호가 필요 없습니다. $ i만으로도 형식 지정자없이 문자열에서 직접 보간하는 것이 좋습니다.
manatwork

1
@ ++ $ i <= 9를 $ i ++ <9로 변경하면 2 바이트가 절약됩니다. 알림이 실행을 중지하지 않으므로 알림을 숨길 필요가 없으며 표준 PPCG 규칙에 따라 원하는 경우 stderr를 무시할 수 있습니다. \ n을 실제 개행 문자로 변경하면 바이트가 절약됩니다. join (range (...)) 비트를 $ s. = $ i 및 $ t. = 10- $ i로 변경하면 15 바이트가 절약됩니다. 이것은 할당이 할당 된 값을 반환하고 골프 PHP에서 찾은 가장 귀중한 트릭이기 때문에 작동합니다. 마지막 5 바이트는 위의
manatwork에

1
로 교체 $t.=10-$i하여 2 바이트를 더 삭제할 수 있습니다 $s*8+$i. tio.run/##K8go@G9jXwAk0/…
640KB

1
59 바이트입니다. 그리고 $s*8+$i대신 $t.=10-$i두 개 더 절약 할 수 있습니다.
디도

5

Pyth, 32 바이트

VS9ss[*dK-9NSN" x 8 + "N" = "r9K

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

VS9ss[*dK-9NSN" x 8 + "N" = "r9K
VS9                                  # For N in 1..9
   s                                 # Join without delimiter
    s[                               # Reduce the array on + (flattens)
      *dK-9N                         # - Space, repeated K=(9-N) times
            SN                       # - The string sequence 1..N
              " x 8 + "              # - This string literal
                       N             # - N itself
                        " = "        # - This string literal
                             r9K     # - The string sequence 9..K

2 바이트를 절약 한 @FryAmTheEggman에게 감사합니다. 3 바이트를 절약 한 @KennyLau에게 감사합니다.


s공백과 결합하지 않습니다-분리 문자없이 결합합니다.
isaacg

@isaacg hah, 그리고 지금 나는 공간과 결합하여 바이트를 절약 할 수 있다고 생각합니다
Ven

바이트 수 는 같습니다 .
Leaky Nun


4

파이썬 2, 87 84 78 75 바이트

s="123456789"
n=1
exec'print"%9s"%s[:n],"x 8 + %s ="%n,s[::-1][:n];n+=1;'*9

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

이전 버전에서는 문자열 마법을 사용합니다.

R=range(1,10)
for n in R:print" "*(9-n)+`R`[1:n*3:3]+" x 8 + %d = "%n+`R`[-2:27-3*n:-3]

range(1,10)문자열로 캐스트 하면을 제공 [1, 2, 3, 4, 5, 6, 7, 8, 9]하며 모든 숫자가 한 자릿수이기 때문에 좋습니다. 따라서 123456789이것 에서 문자열 을 얻는 것은 간단합니다 `range(1,10)`[1::3]. 반전 된 범위는 `range(1,10)`[-2::-3]입니다. 그런 다음 각 반복을 원할 때까지만 얻으려면 반전 된 숫자에 대해 ( ) 3*n또는 3*(9-n)( 27-3*n)에서 분리하십시오.


for n in range(1,10):print"%9s"%s[:n]+" x 8 + %s = "%n+s[::-1][:n]80 바이트를 할 수 있습니다 .
TheBikingViking

s="123456789";n=1;exec'print"%9s"%s[:n],"x 8 + %s ="%n,s[::-1][:n];n+=1;'*9세 개 더 절약! 아래로 75.
Lynn

도와 줘서 고마워! 너무 나쁘게 두 번째로 두 번 슬라이스해야했습니다 ...
mbomb007

4

펄, 49 바이트

printf"%9s x 8 + $_ = %s
",$@.=$_,$_+8*$@for 1..9

용법

perl -e 'printf"%9s x 8 + $_ = %s
",$@.=$_,$_+8*$@for 1..9'

4

루비, 77 73 65 60 바이트

온라인으로 사용해보세요 ~

@manatwork의 주요 개편

@xsot의 또 다른 점검

a=i=0;9.times{puts"%9d x 8 + %d = %d"%[a=a*10+i+=1,i,a*8+i]}

형식 문자열이 더 짧아 보입니다 : puts'%9d x 8 + %d = %d'%[k=[*1..i]*'',i,k.to_i*8+i].
manatwork

(1..9).map1.upto(9)
manatwork

아, 난 그런 %9d정수
Value Ink

60 :a=i=0;9.times{puts"%9d x 8 + %d = %d"%[a=a*10+i+=1,i,a*8+i]}
xsot

@xsot 대단해! 초기 숫자를 그렇게 계산하지 않았다.
가치 잉크

4

자바 10 151 133 130 129 126 110 바이트

v->{String p="\n",r="";for(int n=123456789,i=9;i>0;n/=10,p+=" ")r=p+n+" x 8 + "+i+" = "+(n*8+i--)+r;return r;}

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

설명:

v->{                   // Method with empty unused parameter and String return-type
  String p="\n",       //  Prefix-String, starting at a newline
         r="";         //  Result-String, starting empty
  for(int n=123456789, //  Multiply-number, starting at 123456789
      i=9;i>0          //  Loop `i` in the range [9, 0):
      ;                //    After every iteration:
       n/=10,          //     Remove the last digit from the integer
       p+=" ")         //     Append a space after the prefix
    r=...+r;           //   Prepend the following to the result-String:
      p                //    The prefix-String
      +n               //    Followed by the integer
      +" x 8 + "       //    Followed by the literal String " x 8 + "
      +i               //    Followed by the loop-index `i`
      +" = "           //    Followed by the literal String " = "
      +(n*8+i--)       //    Followed by the result of that equation
  return r;}           //  Return the result-String

1
x곱셈 부호 대신 사용하여 바이트를 절약 할 수 있다고 생각합니다 .
wizzwizz4

1
당신은 초기화하여 바이트의 몇 가지를 저장할 수 s"\n"및 제거 "\n"+으로부터 for루프
cliffroot

@ wizzwizz4 감사합니다. 알고 있어야합니다 . ×1 대신 2 바이트입니다 x..
Kevin Cruijssen

s각 반복의 결과에 추가하지 않습니까?
cliffroot

나는 이것이 오래되었다는 것을 알고 있지만 return o대신에 할 수 는 System.out.print(o)없습니까? 또한 Java 10으로 변경 var하고 람다 와 함께 저장할 수 있습니다.
무지의 구현

3

C, 74 바이트

d(i,n){for(i=n=1;i<10;n=++i+n*10)printf("%9d x 8 + %d = %d\n",n,i,n*8+i);}

3

C #, 113 바이트

void f(){for(int n=1,i=1;i<10;n=10*n+ ++i)Console.WriteLine(new string(' ',9-i)+n+" x "+"8 + "+i+" = "+(n*8+i));}

어쨌든이 솔루션을 개선 해야하는 경우 자유롭게 공유하십시오.


공백을 제거하여 1 바이트를 절약 할 수 있습니다 ;n=10*n+ ++i. for 루프에서로 변경할 수 있습니다 ;n=++i+10*n. 또한 +" x "+"8 + "+로 변경할 수 있습니다 +" x 8 + "+. 3 바이트를 더 절약합니다.
Kevin Cruijssen

void f () {for (int n = 1, i = 1; i <10; n = ++ i + 10 * n) Console.WriteLine ($ "{새 문자열 ( '', 9-i)} {n } x 8 + {i} = {(n * 8 + i)} ");} ------------ 바이트를 절약했습니다!
downrep_nation

3

배치, 117 바이트

@echo off
set a=         12345678987654321
for /l %%i in (1,1,9)do call echo %%a:~%%i,9%% x 8 + %%i = %%a:~17,%%i%%

그렇습니다. 한 줄에 16 %의 부호가 있습니다. 그것은 당신을위한 배치입니다!


2

하스켈, 92 바이트

s=(show=<<)
[1..9]>>= \x->([x..8]>>" ")++s[1..x]++" x 8 + "++s[x]++" = "++s[9,8..10-x]++"\n"

작동 방식 :

s=(show=<<)                   -- helper function that turns a list of numbers into
                              -- a string without delimiters, e.g. [1,2] -> "12"

[1..9]>>=                     -- for each number 1 to 9
     ([x..8]>>" ")            -- take length of [x..8] copies of a space
     s[1..x]                  -- the digits from 1 to x
     " x 8 + "                -- a string literal
     s[x]                     -- the digit of x
     " = "                    -- another string literal
     s[9,8..10-x]             -- the digits from 9 down to 10-x
     "\n"                     -- an a newline


2

파이크, 30 29 바이트

9Fd*~utj+9<\x8\+9i-\=ji>_dJ)X

여기 사용해보십시오!

9F                         )  -  for i in range(9):
  d*                          -       " " * i
        +                     -      ^ + V
       j                      -       j = V
    ~ut                       -        "123456789"
         9<                   -     ^[:9]
           \x8\+9i-\=         -    [^, "x", 8, "+", (9-i), "=", V]
                        _     -     reversed(V)
                     ji>      -      j[i:]
                         dJ   -   " ".join(^)
                            X - print(reversed(^))

2

PowerShell v2 +, 85 64 58 57 52 바이트

8..0|%{" "*$_+-join(1..++$i+" x 8 + $i = "+9..++$_)}

8..0|%{...}범위 연산자를 통해 8에서 0으로 반복합니다 . 반복 할 때마다 우리 출력 (공간의 적절한 개수로 구성된 문자열 연결 " "*$_), 플러스 -join의 (a 범위 ED 문자열 1사전 증분 헬퍼 번호 ++$i더한 중간 비트 " x 8 + $i = "플러스의 최종 범위 9현재 번호에 $_미리 증가).

여기서 가장 큰 트릭은 타입 캐스팅에 "왼쪽 기본 설정"을 활용하는 것인데 -join, 이는 우리가 하나의 -join연산자 만 사용한다는 것을 의미 합니다.

PS C:\Tools\Scripts\golfing> .\magical-8-trapezium.ps1
        1 x 8 + 1 = 9
       12 x 8 + 2 = 98
      123 x 8 + 3 = 987
     1234 x 8 + 4 = 9876
    12345 x 8 + 5 = 98765
   123456 x 8 + 6 = 987654
  1234567 x 8 + 7 = 9876543
 12345678 x 8 + 8 = 98765432
123456789 x 8 + 9 = 987654321

4
%{당신의 눈은 괜찮습니까?
gcampbell

@gcampbell 눈이 그렇게 보인다면 눈살을 찌푸리게됩니다.
AdmBorkBork

글꼴이 퍼센트를 렌더링하는 방법에 따라 다릅니다.
gcampbell


2

J, 51 바이트

(|."1|.\p),.' x 8 + ',"1]p,.' = ',"1]\|.p=:u:49+i.9

문자열을 생성 한 123456789다음 접두사와 접미사로 작동하여 출력을 만듭니다.

용법

   (|."1|.\p),.' x 8 + ',"1]p,.' = ',"1]\|.p=:u:49+i.9
        1 x 8 + 1 = 9        
       12 x 8 + 2 = 98       
      123 x 8 + 3 = 987      
     1234 x 8 + 4 = 9876     
    12345 x 8 + 5 = 98765    
   123456 x 8 + 6 = 987654   
  1234567 x 8 + 7 = 9876543  
 12345678 x 8 + 8 = 98765432 
123456789 x 8 + 9 = 987654321

2

자바 스크립트 ES6 (88)

새로운 repeat방법, 백틱 및 템플릿 사용

i=10;for(y="";--i;)console.log(`${" ".repeat(i)+(y+=(x=10-i))} x 8 + ${x} = ${y*8+x}\n`)

좋은 직업 형제, 당신은 공간을 제거하고 alert대신 사용 하는 것을 고려해야합니다 console.log, 그것은 약간의 바이트를 절약 할 수 있습니다!
chau giang

자정 직전에 이것에 답하면 반쯤 잠 들었다고 생각합니다. 곧 이것에 대한 업데이트를 게시 할 것입니다. LOL
WallyWest

2

R, 107103 바이트

a=1;for(i in 2:10){cat(rep("",11-i),paste(a,"x",8,"+",(i-1),"=",strtoi(a)*8+(i-1)),"\n");a=paste0(a,i)}

언 골프 :

a=1

for(i in 2:10)
    cat(rep("",11-i),paste(a,"x",8,"+",(i-1),"=",strtoi(a)*8+(i-1)),"\n")
    a=paste0(a,i)

결과 :

        1 x 8 + 1 = 9 
       12 x 8 + 2 = 98 
      123 x 8 + 3 = 987 
     1234 x 8 + 4 = 9876 
    12345 x 8 + 5 = 98765 
   123456 x 8 + 6 = 987654   
  1234567 x 8 + 7 = 9876543 
 12345678 x 8 + 8 = 98765432 
123456789 x 8 + 9 = 987654321


2

APL (Dyalog Unicode) , 61 52 39 바이트 SBCS

↑(⍳9)((¯9↑↑),' x 8 +',⊣,'= ',↑∘⌽)¨⊂1↓⎕D

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

10⊥축소 대신 숫자를 구문 분석 하는 트릭을 사용하여 -9 바이트 -13의 @ Adám에게 감사합니다!

설명:

    ((¯9↑↑),' x 8 +',⊣,'= ',↑∘⌽)¨⊂1↓⎕D
                                     D   Numbers from 0 to 9
                                   1     Drop the 0
 (⍳9)(                          )¨⊂       Do 9 times, N=current
                             ↑∘⌽          Reverse the string (9..1) and cut off N elements
                                         N itself
      (   ↑)                              Drop N elements off the 1..9 string...
      9 )                              ...then pad it back with spaces
            ,' x 8 +', ,'= ',             Join with a few constant strings
                                         Format

1

JavaScript (ES6), 99 바이트

_=>[...Array(9)].map((n,i)=>`${n="        123456789".substr(i,9)} x 8 + ${++i} = ${n*8+i}`).join`\n`
_=>".........".replace(/./g,(n,i)=>`${n="        123456789".substr(i,9)} x 8 + ${++i) = ${n*8+i}\n`)

어디 \n리터럴 개행 문자를 나타냅니다. 두 번째 버전은 후행 줄 바꿈을 출력합니다. 나는 숫자에 대한 공식을 생각해 ('1'.repeat(9-i)+0+i)/9냈지만 패딩은이 방법으로 더 쉬웠습니다.


1

Brainfuck , 232 바이트

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

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

훨씬 더 골프를 칠 수 있습니다 ...


1

자바 스크립트 (외부 라이브러리 사용) (143 바이트)

n=>_.Range(1,9).WriteLine(v=>_.Range(0,10-v).Write("",x=>" ")+_.Range(1,v).Write("")+" x 8 + " + v + " = "+_.Range(10-v,v).Reverse().Write(""))

lib에 링크 : https://github.com/mvegh1/Enumerable/

코드 설명 : 범위 1-9를 작성하고 각 값에 대해 복합 술어에 해당하는 행을 작성하십시오. 술어에는 현재 정수 값이 전달되고 많은 공간을 작성하기 위해 10-currentValue 요소에 걸친 범위가 작성됩니다. 이러한 공간은 선의 수식 부분과 연결되어 있으며, 프런트 엔드와 같은 요소 수와 일치하는 범위의 꼬리와 반대 순서로 연결됩니다.

참고 : 리턴 값이 문자열이므로 콘솔이 따옴표를 추가했기 때문에 이미지에서 첫 번째 행은 한 칸씩 떨어져 있습니다. 실제 값이 올바르게 형식화되었습니다

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


1

05AB1E , 24 바이트

9Lε©LJ'x8'+®'=T®L-Jðý}.c

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

챌린지보다 최신 버전을 사용하므로 이제 허용됩니다.


그것은 많은 아니지만, 05AB1E의도 최신 버전에서 당신은 제거 할 수 있습니다 ©, 그리고 변화 ®하는 y바이트를 저장합니다.
Kevin Cruijssen

@KevinCruijssen Eh, 나는 일반적으로 그런 오래된 답변을 "업데이트"하지 않습니다. 또한 "최신 버전"은 완전히 다른 언어입니다 (다른 구현).
Outgolfer Erik


1

VBA (Excel), 51 바이트

즉시 창 사용

For z=1To 9:a=a &z:?Spc(9-z)a" x 8 +"z"="a*8+z:Next

0

k (77 바이트)

아마 조금 더 단축 될 수 있습니다

-1@'((|t)#\:" "),'(t#\:n),'" x 8 + ",/:n,'" = ",/:(t:"I"$'n)#\:|n:"123456789";

예:

k)-1@'((|t)#\:" "),'(t#\:n),'" x 8 + ",/:n,'" = ",/:(t:"I"$'n)#\:|n:"123456789";
         1 x 8 + 1 = 9
        12 x 8 + 2 = 98
       123 x 8 + 3 = 987
      1234 x 8 + 4 = 9876
     12345 x 8 + 5 = 98765
    123456 x 8 + 6 = 987654
   1234567 x 8 + 7 = 9876543
  12345678 x 8 + 8 = 98765432
 123456789 x 8 + 9 = 987654321

0

golflua, 56 자

p=""~@i=1,9p=p..i; w(S.q("%9s x 8 + %d = "..p*8+i,p,i))$

샘플 실행 :

bash-4.3$ golflua -e 'p=""~@i=1,9p=p..i; w(S.q("%9s x 8 + %d = "..p*8+i,p,i))$'
        1 x 8 + 1 = 9
       12 x 8 + 2 = 98
      123 x 8 + 3 = 987
     1234 x 8 + 4 = 9876
    12345 x 8 + 5 = 98765
   123456 x 8 + 6 = 987654
  1234567 x 8 + 7 = 9876543
 12345678 x 8 + 8 = 98765432
123456789 x 8 + 9 = 987654321
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.