세븐 슬래시 디스플레이


99

0에서 9까지의 숫자가 아닌 빈 문자열을 사용하고 슬래시 ( , )를 사용하여 7 세그먼트 디스플레이에 표시 되는 방식을 인쇄하는 프로그램을 작성하십시오 ./\

정확한 숫자 모양은 다음과 같습니다.

/\  
\ \
 \/

 \
  \


/\
 /
 \/

/\
 /\
  /

 \
\/\

/
\/\
  /

/
\/\
 \/

/\
  \

/\
\/\
 \/

/\
\/\
  /

한 자릿수가 다른 숫자 다음에 나타날 때, 대각선 간격이 사이에있는 대각선 위아래로 연결됩니다. 예를 들어 다음과 203같이됩니다.

    /\
     /\
  /\  /
  \ \
/\ \/
 / 
 \/

1캐릭터는 다른 캐릭터와 동일한 공간을 차지합니다. 의 두 줄은 1왼쪽이 아니라 디스플레이의 오른쪽에 있습니다.

그래서 159114이것이 될 것입니다 :

           \
          \/\
         \
          \
       \
        \
    /\
    \/\
  /   /
  \/\
 \  /
  \

숫자가 서로에 대해 올바른 위치에있는 한 출력에 선행 / 후행 줄 바꿈 또는 공백의 양과 조합이있을 수 있습니다.

따라서 159114이것도 유효합니다.



          \        
         \/\     
        \
         \
      \    
       \          
   /\     
   \/\
 /   /
 \/\         
\  /
 \    


stdin 또는 명령 행에서 입력을 받거나 문자열을받는 함수를 작성하십시오. 결과를 stdout에 인쇄하거나 함수를 작성하면 문자열로 리턴 할 수 있습니다.

9 숫자 0의 비어 있지 않은 문자열은 단일 숫자 문자열 (예를 포함하여 작동합니다 8)와 0이 붙는 문자열 (예에서는 007, 0을가 않습니다 인쇄 할 필요가있다).

바이트 단위의 가장 짧은 코드가 이깁니다.


41
완전히 주 제외 : 이것은 굉장해 보인다!
Martijn

4
정말 정말 멋지다. 그러나 kolmogorov-complexity 가이 질문에 적합한 지 확실하지 않습니다. 일정한 출력이 필요하다고 생각 했습니까?
alexander-brett

1
원래 의도였던 @ alexander-brett iirc, 그러나 최근에는 대부분의 코드가 하드 코딩 될 수있는 문제에 사용되었습니다.
undergroundmonorail

이것은 나를 와우처럼 만들었습니다 ... 와우! 와우!
Renae Lider

질문 : 빈 문자열이나 숫자가 아닌 문자를 처리해야합니까?
프레드릭

답변:


9

CJam, 77 71 70 69 63 62 바이트

r_,5*_Sa*a*\{~"÷Ðëúܾ¿ðÿþ"=i2bS"\/"4*W<+.*3/..e>2fm>2m>}/Wf%N*

모든 문자를 인쇄 할 수 있으므로 복사 및 붙여 넣기가 제대로 작동합니다.

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

생각

입력 의 자릿수 n 을 조사 하고 출력을 덮을 수있을만큼 큰 제곱 공간을 밀어서 시작합니다. 구현시이 사각형은 1 문자 문자열의 2 차원 배열로 인코딩됩니다.

2n + 1 길이의 제곱은 간단한 구현에 적합하지만 (즉, 주변 공백이 없음) 5n 길이 중 하나를 사용 하여 몇 바이트를 절약합니다. 고맙게도 주변 공백이 허용됩니다.

8 슬래시 표현의 줄을 뒤집 으면 다음과 같은 결과를 얻습니다.

 \/
\/\
/\

모든 숫자의 표현은 8 비트 정수로 인코딩 될 수 있으며, i 번째 비트가 0 이면 i 번째 문자가 공백으로 대체되어야합니다. 숫자 0 ~ 9 의 경우 결과 정수는

247 208 235 250 220 190 191 240 255 254

다음 ISO-8559-1 문자에 해당합니다.

÷Ðëúܾ¿ðÿþ

입력의 각 숫자에 해당 8 비트 정수를 선택한 후, 우리는 I를 반복 번째 의 문자 표현 8 정확하게 나는제가 상기 I이다 번째 정수 비트. 이것은 1 또는 0 문자의 문자열 배열을 푸시합니다. 이 배열을 길이 3의 청크로 나누면 각 요소가 표현의 선에 해당하는 배열을 얻습니다.

이제 사각형을 나타내는 문자열과 숫자를 나타내는 문자열의 벡터화 된 최대 값을 계산합니다. 문자열 /과 문자열 \보다 크기  때문에 정사각형의 공백을 대체합니다. 그러나 빈 문자열은 string보다 작으므로  숫자 표현의 빈 문자열은 사각형의 공백을 유지합니다.

이제 행과 열을 두 단위로 회전하여 사각형의 적절한 부분에 다음 숫자 표시를 배치하고 입력의 나머지 숫자에 대한 프로세스를 반복합니다.

마지막으로 각 행을 뒤집고 개별 행 사이에 줄 바꿈을 삽입합니다.

암호

r_,      e# Read a token from STDIN and push the length of a copy.
5*_      e# Multiply the length by 5 and push a copy.
Sa*      e# Repeat the array [" "] that many times.
a*       e# Repeat the array [[" " ... " "]] that many times.
\{       e# For each character C in the input:
  ~      e#   Push eval(C), i.e., the digit the character represents.

  "÷Ðëúܾ¿ðÿþ"

         e#   Push the encodings of all 10 seven slash representations.

  =      e#   Select the proper one.
  i2b    e#   Push the resulting characters code point in base 2, i.e., its bits.
  S      e#   Push " ".
  "\/"4* e#   Push "\/\/\/\/".
  +W<    e#   Concatenate and eliminate the last character.
  .*     e#   Vectorized repetition.

         e#   For the digit 5, e.g., we have [1 0 1 1 1 1 1 0] and  " \/\/\/\" on
         e#   the stack, so .* yields [" " "" "/" "\" "/" "\" "/" ""].

  3/     e#   Divide the representation into chunks of length 3, i.e., its lines.
  ..e>   e#   Compute the twofold vectorized maximum, as explained above.
  2fm>   e#   Rotate each line to characters to the right.
  2m>    e#   Rotate the lines two units down.
}/
Wf%      e# Reverse each line.
N*       e# Place linefeeds between them.

정사각형의 측면 길이가 2n + 3 보다 작 으면 마지막 회전으로 출력이 엉망이됩니다 . 이후 5N ≥의 2N + 3 모든 양의 정수에 대한 N , 사각형은이를 방지하기에 충분히 큽니다.


base64 버전의 코드를 여기에 게시하는 것이 합리적입니까?
TRiG

1
+1이지만 솔직히 CJam et al. p
primo

@primo : Pyth와 수학 문제에 대해서도 같은 생각이 듭니다. : P 단어 정리로 인해 엉망이되어 파티에 조금 늦었습니다 . 오늘 아침 편집 한 후에야이 질문을 기억할 수있었습니다.
Dennis

@Dennis 과제는 예전보다 훨씬 빠르게 진행되는 것 같습니다. 나는 아직도 2 주 전에 하나에서 일하고 있습니다 : p
primo

1
나는 항상 가장 낮은 바이트 수를 가질 것으로 기대하면서 CJam을 먼저 찾습니다. 나는 아직 실망하지 않았습니다.
엔지니어 토스트

25

Python 3, 189 183 174 바이트

s="a%sa"%input()
while s[1:]:b,a,c,d,e,f,g=[c*(ord(n)>>int(s[~(n>"Ͱ")],16)&1)or" "for c,n in zip("\/"*4,"ΟϭŅͭͱͼϻ")];S=len(s)*"  ";print(S+a+b,c+d+"\n"+S+e+f+g);*s,_=s

압축은 괜찮아 보이지만 7 가지 변수를 버리는 좋은 방법을 찾는 데 어려움을 겪고 있습니다 ...

고맙게도 공백에는 많은 공백이 있기 때문에 공백 규칙에서는 사양이 상당히 완화됩니다.

넓히는:

s="a%sa"%input()
while s[1:]:
  b,a,c,d,e,f,g=[c*(ord(n)>>int(s[~(n>"Ͱ")],16)&1)or" "
                 for c,n in zip("\/"*4,"ΟϭŅͭͱͼϻ")]
  S=len(s)*"  "
  print(S+a+b,c+d+"\n"+S+e+f+g)
  *s,_=s

설명

변수로 표시되는 세그먼트 위치는 다음과 같습니다.

    ab               /\
    efg               /\
  ab cd            /\  /
  efg              \ \
ab cd            /\ \/
efg               /
 cd               \/

각 세그먼트는 단일 2 바이트 유니 코드 문자로 인코딩됩니다. 예를 들어 의 세그먼트를 다음과 같이 ϻ인코딩합니다 g.

bin(ord("ϻ")) = bin(1019) = "0b1111111011"
                               ^^^^^^^^^^
                               9876543210

실제로, 27- 세그먼트 디스플레이의 오른쪽 아래 세그먼트를 사용하지 않는 유일한 숫자입니다.


19

C, 1,098 345 323 319 바이트

번째 두 번째 세 번째 시도. 마지막으로 화면 버퍼를 버리고 몇 바이트를 절약하기로 결정했습니다. 이 프로그램은 자릿수 매개 변수를 사용하여 7 세그먼트 형식으로 자릿수를 인쇄합니다.

처음 참가자. 재미로. 조심해

a[]={100489,2056,98569,67849,2440,67969,100737,2057,100745,67977},i,j,k,n,m;char*c=" /\\";
#define f(q,r) for(q=0;q<(r);q++)
#define P(w) putchar(w)
#define Q(d,i,j) P(c[a[v[1][d]-48]>>(i*3+j)*2&3])
main(w,char**v){f(i,n=strlen(v[1]))f(k,(m=n-i-1)?2:3){f(j,m*2)P(32);f(w,3)Q(m,k,w);if(!k&&i)f(w,2)Q(m+1,2,w+1);P(10);}}

확장, 경고 없음 :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int a[]={100489,2056,98569,67849,2440,67969,100737,2057,100745,67977};
char *c=" /\\";
#define f(q,r) for(q=0;q<(r);q++)
#define P(w) putchar(w)
#define Q(d,i,j) P(c[a[v[1][d]-48]>>(i*3+j)*2&3])
int main(int w, char **v)
{
    int i,j,k,n,m;
    f(i,n=strlen(v[1])) {
        m=n-i-1;
        f(k,m?2:3) {
            f(j,m*2) P(32);
            f(w,3) Q(m,k,w);
            if (!k&&i) f(w,2) Q(m+1,2,w+1);
            P(10);
        }
    }
}

서쪽에서 가장 빠른 총. 지금 압축하고 있습니다.
Alexey Burdin 2016 년

15
야! Code Golf에 오신 것을 환영합니다. 이 과제의 목적은 코드를 최대한 짧게 만드는 것이므로 공백, 단락 설명 등을 제거하는 데있어 최적화를 한 다음 게시물 상단에 언어로 바이트 수를보고해야합니다. 그래도 첫 번째 게시물! 참고로 초기 게시물의 길이는 1,098 바이트입니다.
Kade

감사. 언어와 바이트 수를 추가했습니다. 내 원본에도 의견과 사용법이 있습니다. :)
일부 사용자

팁 : 모든 변수 이름을 단일 문자로 변경하십시오. 또한`for (i = 0; i <digits)를 많이 사용하면 매크로로 대체 할 수 있습니까?
Joshpbarron

잘 했어 보다 경쟁력있는 점수를 얻으려면 C 골프에 대한 팁을 살펴보십시오 .
Alex A.

14

자바 스크립트, 192 178 167 162 바이트

f=x=>{n=b="\n";for(k in x)for(i=0;i<8;)b+=("î\xA0Öô¸|~àþü".charCodeAt(x[k])>>i++&1?i%2?"/":"\\":" ")+(i%3?"":n+"  ".repeat(k));return b.split(n).reverse().join(n)}

사용법 : f("1337");반환

      /\
        \
    /\   
     /\
  /\  /
   /\
 \  /
  \

ES6의 기능을 사용하며 세미콜론 및 괄호 등이 누락되어 구현에 따라 일부 동작이 발생할 수 있지만 Firefox에서는 작동합니다.

넓히는:

f=x=>
{
    n = b = "\n";

    for (k in x)
        for (i=0; i<8;)
            b += ("î\xA0Öô¸|~àþü".charCodeAt(x[k]) >> i++ & 1? i%2? "/" : "\\" : " ") + (i%3? "" : n+"  ".repeat(k));

    return b.split(n).reverse().join(n)
}

설명:

l각 숫자의 모양에 해당하는 10 개의 1 바이트 문자를 포함하는 배열입니다. 예를 들어 숫자 0은 문자로 표시됩니다 î.

/\        11
\ \  -->  101  --> 11 101 110 = î
 \/       011

입력 문자는 대응하는 비트를 나타내는 모양을 유지하는 배열의 키로 사용되며 비트 단위로 읽습니다.


2
인가 ==0==1이전에 실제로 필요 ?. js에서 부울로 간주되지 않습니까? @Regret
Alexey Burdin

1
@Regret : "w\x05k/\x1D>~\x07\x7F?"각 문자를 비트 단위로 뒤집 으면 각각 "\xee\xa0\xd6\xf4\xb8|~\xe0\xfe\xfc"인쇄 가능합니다. 이것은 8 바이트를 더 제공합니다. 충분하지는 않지만 ...
Alexey Burdin

1
괄호를 제거하여 2 바이트를 줄일 수 f=(x)=>{}있습니다. 인수는 하나만 필요하지 않습니다.
Scimonster

당신은 절대적으로 맞습니다, @Alexey. 나는 그것을 바꿀 것이다.
후회하다

작동합니까? 가짜 문자로 6 행을 더 얻습니다.
edc65

10

펄-103 바이트

#!perl -n
print$i+$%2?U^(u,$i--%2?v9:z)[$i<4+$%2&vec$_,4*$-3-$i,1]:$/.!($i=$--)
while$+=2*y/0-9/wPkz\\>?p~/

위의 내용은 6 개의 인쇄 할 수없는 문자 (소스는 Ideone 에서 다운로드 할 수 있음 )를 포함하며 다음과 같습니다.

#!perl -n
print$i+$^F%2?U^(u,$i--%2?v9:z)[$i<4+$^F%2&vec$_,4*$^F-3-$i,1]:$/.!($i=$^F--)
while$^F+=2*y/0-9/wPkz\\>?p\177~/

각각 ^F은 리터럴 문자 6 (ACK)으로 \177대체되고 문자 127 (DEL) 로 대체 될 수 있습니다 .

shebang은 1로 계산되며 두 번째 줄 바꿈은 불필요합니다. 입력은 stdin에서 가져옵니다.


샘플 사용법

$ echo 0123 | perl seven-slash.pl

      /\
       /\
    /\  /
     /
   \ \/
    \
/\
\ \
 \/

$ echo 456789 | perl seven-slash.pl

          /\
          \/\
        /\  /
        \/\
      /\ \/
        \
    /
    \/\
  /  \/
  \/\
 \  /
\/\

설명

출력은 한 번에 1 바이트 씩 생성됩니다. 각 문자는 음역되며,이를 사용하여 비트 배열로 해석됩니다 vec. 비트는 다음과 같은 방식으로 저장됩니다.

   /\           56 
   \/\          234
 /\ \/   ->   56 01
 \/\          234 
  \/           01

출력은 3에서 5 사이의 슬래시를 번갈아 가며 비트 가 다음 자리 56로 넘치 도록합니다 01. 비트 7는 사용되지 않습니다.


8

C #을 360 355 331 바이트

안녕하세요, 먼저 코드 골프를 시도하십시오. 이것이 C # 항목에 대해 너무 나쁘지 않기를 바랍니다.

string p(string n){var l=new string[n.Length*2+1];var i=l.Length-1;for(;i>0;){var x=@"/\\ \\/ \  \  /\ / \//\ /\ / \\/\  / \/\ // \/\\//\  \  /\\/\\//\\/\ /".Substring((n[0]-48)*7,7);for(var j=i-3;j>=0;){l[j--]+="  ";}l[i--]+=" "+x[5]+x[6];l[i--]+=""+x[2]+x[3]+x[4];l[i]+=""+x[0]+x[1];n=n.Remove(0, 1);}return string.Join("\n",l);}

사용법 : p("159114");반환

          \
         \/\
        \
         \
      \
       \
   /\
   \/\
 /   /
 \/\
\  /
 \

넓히는:

string p(string n)
    {
        var l = new string[n.Length * 2 + 1];
        var i = l.Length - 1;
        for (; i > 0; )
        {
            var x = @"/\\ \\/ \  \  /\ / \//\ /\ / \\/\  / \/\ // \/\\//\  \  /\\/\\//\\/\ /".Substring((n[0] - 48) * 7, 7);

            for (var j = i - 3; j >= 0; )
            {
                l[j--] += "  ";
            }
            l[i--] += " " + x[5] + x[6];
            l[i--] += "" + x[2] + x[3] + x[4];
            l[i] += "" + x[0] + x[1];

            n = n.Remove(0, 1);
        }

        return string.Join("\n", l);
    }

1
거의 3 년이 지났다는 것을 알고 있지만 30 바이트의 골프를 타실 수 있습니다. 온라인으로 사용해보십시오. 301 바이트 . 그래도 좋은 대답은 +1입니다.
Kevin Cruijssen

시원한. 그때 자신의 답변으로 자유롭게 게시하십시오 :)
Shion

1
아니요, 코드입니다. for 루프 괄호를 제거하고 변수를 결합하여 조금 단축했습니다. 그리고 변화 string s(string n)n=>람다를 사용. 아, 원한다면 그냥 이렇게 남겨 두세요. :) 그러나 Java 크레딧 포트를 만들었습니다. ;)
Kevin Cruijssen

4

파이썬 2 317 298 278 273.15

def f(s):
    r=range;n=len(s)*2;l=[[' ']*-~n for x in r(-~n)]
    for x in r(0,n,2):
        for i,[d,y,c]in enumerate(zip('0112012','1021012',r'\\\\///')):l[n-2-x+int(y)][x+int(d)]=[' ',c][('%7s'%(bin(ord('}(7/jO_,\x7fo'[map(int,s)[x/2]])))[2:])[i]=='1']
    for x in l:print''.join(x)

계산하는 동안 4 개의 공백을 탭으로 간주했습니다.
비 압축 및 읽기 가능 :

def f(s):
    r=['1111101','0101000','0110111','0101111','1101010','1001111','1011111','0101100','1111111','1101111']
    ''.join(map(lambda x:chr(eval('0b'+x)),r))
    n=len(s)*2
    l=[[' ']*(n+1) for x in xrange(n+1)]
    shifts=[(0,1,'\\'),(1,0,'\\'),(1,2,'\\'),(2,1,'\\'),(0,0,'/'),(1,1,'/'),(2,2,'/')]
    for x in xrange(0,n,2):
        y=n-2-x
        for i,[dx,dy,c] in enumerate(shifts):
            l[y+dy][x+dx]=c if r[map(int,s)[x/2]][i]=='1' else ' '
    return '\n'.join(''.join(x) for x in l)

야! 좋은 대답이지만 더 짧게하기 위해 몇 가지 사항을 변경할 수 있습니다. 변경 l[y+dy][x+dx]=c if r[map(int,s)[x/2]][i]=='1' else ' '하려면 l[y+dy][x+dx]=[' ',c][r[map(int,s)[x/2]][i]=='1']변경, 5 바이트를 저장 return '\n'.join(''.join(x) for x in l)하려면 print'\n'.join(''.join(x)for x in l)3 바이트, 플러스 몇 가지 더 변경 내용을 저장합니다. 다음 은 508에서 440으로 바이트 카운트를 줄인 Gist에 대한 링크입니다.
Kade

6
켈빈은 그 점수에 매우 만족했을 것입니다.
Cristian Lupascu

3
귀하의 답변은 실제로 272 바이트이지만 공백이 탭보다 짧으므로 하나 더 저장할 수 있습니다. 여기를 참조 하십시오 . 어쨌든 어떻게 273.15 바이트를 가질 수 있습니까?
mbomb007

1
273.15 바이트는 @AlexeyBurdin이 디지털 플랫폼에서 아날로그 컴퓨팅을 알아 낸 것을 의미합니다. 왜 과학 대신 세상 에서 여기에 출판 했습니까? ;-)
hBy2Py

1
이것은 솔루션이 절대 제로 로 동결 되었다는 것을 의미 합니다. 즉, 나는 이미 잃어버린 것에 집중하고 싶지 않습니다 . :)
Alexey Burdin 2016 년

3

KDB (Q), 172136 바이트

{d:(9#1 2 0 2)*/:-9#'0b vs'427 136 403 409 184 313 315 392 443 441;
 -1" /\\"{m+(c,/:y),c:(count[m:0 0,x,\:0 0]-3)#0}/[3 3#/:d"J"$'(),x];}

설명

1) d모든 숫자의 모양으로지도를 만듭니다 .

2) 여분의 0으로 행렬을 채우고 함께 더하십시오. 즉 "01"

0           0 0 0 2 0   
0           0 0 0 0 2
1 2 0 0 0 + 0 0 0 0 0
2 0 2 0 0   0
0 2 1 0 0   0

3) 색인을 사용하여로 매핑 " /\"하고 인쇄합니다 -1.

테스트

q){d:(9#1 2 0 2)*/:-9#'0b vs'427 136 403 409 184 313 315 392 443 441;-1" /\\"{m+(c,/:y),c:(count[m:0 0,x,\:0 0]-3)#0}/[3 3#/:d"J"$'(),x];}"0123456789"
                  /\
                  \/\
                /\  /
                \/\
              /\ \/
                \
            /
            \/\
          /  \/
          \/\
         \  /
        \/\
      /\
       /\
    /\  /
     /
   \ \/
    \
/\
\ \
 \/

나는 이것이 더 짧을 수 있다고 확신한다!!

감사합니다 @ hjk


1
내가 발견 한 유일한 감소는 (-6) 으로 대체 1 2 0 2 1 2 0 2 1하는 것 (9#1 2 0 2)입니다.
hjk

1
아, 그리고 교체 enlist와 함께 1#작동, 그래서 그것은 또 다른입니다 -5.
hjk

1
당신은 스타입니다! 업데이트하겠습니다! 그러나 원자가 enlist아니기 때문에 대체 할 수 count[a 0]#0는 없습니다 :(
WooiKent Lee

아 이상하지만 그것은 나를 위해 일했다 ... 별난해야합니다. ;)
hjk 2016 년

1
실제로,리스트 플러스 원자는 어쨌든 올바른 길이로 원자를 확장합니다! 당신은 나에게 그런 메커니즘을 상기시켰다! : D
WooiKent Lee 2016 년

2

핍, 122 + 1 = 123 바이트

-n플래그를 사용합니다 . 명령 줄 인수를 통해 입력을받습니다.

l:$.(J"\/ "@^(A_TB3M"⮐䫶ヷ㄃䓳ⴷⴥㅕ⬿⭑")@_.2<>2Ma)z:2*#ap:sXz+2RLz+2Fi,5Fj,z{c:[4-ii]//2+j(pc@0c@1):(lij)}RVp

UTF-8 문자열의 문자는 다음 코드 포인트를 갖습니다 11152, 19190, 12535, 12547, 17651, 11575, 11557, 12629, 11071, 11089.

약간 골퍼되지 않음 :

t:[120022001 222022202 122012021 122012201 220012202 120212201 120212001 122022202 120012001 120012201]
l:$.({J"\/ "@^t@a.2<>2}Ma)
z:2*#a+2
p:sXzRLz
Fi,5
 Fj,2*#a {
  x:i//2+j
  y:(4-i)//2+j
  p@y@x:l@i@j
 }
P RVp

기본 전략은 각 숫자의 구성 문자를 찾아서 적절하게 기울이는 것입니다. 예를 들어, 8우리는 이것을 원합니다 (점으로 표시되는 공백).

/.
\\
/.
\\
/.

이것은 이것으로 바뀔 것입니다 :

 .  
/\. 
\/\.
 \/ 

이 전략의 좋은 특징은 여러 개의 미리 치우친 숫자를 나란히 연결할 수 있다는 것입니다.

이제 우리는 /.\\/.\\/.기저 3에서로 인코딩 할 수 있습니다 1200120012. 그런 다음 이것을 10 진수로 변환하여 UTF-8 코드 포인트로 취급 할 수 있습니다.

표현식 J"\/ "@^(A_TB3M"⮐䫶ヷ㄃䓳ⴷⴥㅕ⬿⭑")@_.2<>2Ma은 다음 프로세스를 통해 미리 기울어 진 데이터를 가져옵니다.

                            Ma   Map this lambda function to each character in input:
        (A_TB3M"...")            Create list of the code points of each character in UTF-8
                                   string, converted to base 3
                     @_          Index into that list using the input character
                       .2        Concatenate 2 to the end of the base-3 value (all of the
                                   pre-skewed number grids end in 2, i.e. space)
       ^                         Split the number into a list of its digits
 "\/ "@                          Index into this string with those digits, giving a list
                                   of slashes & spaces
J                                Join the list together into a string
                         <>2     Group string two characters at a time

을 사용하여 이러한 문자열을 나란히 연결 한 후에는 $.공간 격자 (2 * n +2 정사각형)를 만들고 사전 기울어 진 격자를 반복 한 다음 기울어 진 기둥 격자의 해당 공간을 적절한 문자. 이를 확인하기 위해 코드를 수정하여 각 단계를 인쇄하고 사용자 입력을 위해 일시 ​​중지 할 수 있습니다.

진행중인 알고리즘

그리드는 수학이 더 쉬워 보이기 때문에 실제로 거꾸로 세워졌습니다.

더 나은 알고리즘을 사용할 것이라고 확신합니다. 그러나 나는 다른 사람을 복사하는 대신 내 자신의 아이디어를 생각해 내고 싶었습니다.

Pip에 대한 추가 정보


2

Brainfuck-719 바이트

역사적 맥락에서만 다니엘 B 크리스토 파니에게 감사의 말을 전합니다. 이것이 언제 만들어 졌는지 확실하지 않지만 2003 년 5 월 9 일부터 인터넷 아카이브 에서 구할 수 있습니다 .

의 출력 9이 문제점 설명 의 출력과 다릅니다.

>>>>+>+++>+++>>>>>+++[
  >,+>++++[>++++<-]>[<<[-[->]]>[<]>-]<<[
    >+>+>>+>+[<<<<]<+>>[+<]<[>]>+[[>>>]>>+[<<<<]>-]+<+>>>-[
      <<+[>]>>+<<<+<+<--------[
        <<-<<+[>]>+<<-<<-[
          <<<+<-[>>]<-<-<<<-<----[
            <<<->>>>+<-[
              <<<+[>]>+<<+<-<-[
                <<+<-<+[>>]<+<<<<+<-[
                  <<-[>]>>-<<<-<-<-[
                    <<<+<-[>>]<+<<<+<+<-[
                      <<<<+[>]<-<<-[
                        <<+[>]>>-<<<<-<-[
                          >>>>>+<-<<<+<-[
                            >>+<<-[
                              <<-<-[>]>+<<-<-<-[
                                <<+<+[>]<+<+<-[
                                  >>-<-<-[
                                    <<-[>]<+<++++[<-------->-]++<[
                                      <<+[>]>>-<-<<<<-[
                                        <<-<<->>>>-[
                                          <<<<+[>]>+<<<<-[
                                            <<+<<-[>>]<+<<<<<-[
                                              >>>>-<<<-<-
  ]]]]]]]]]]]]]]]]]]]]]]>[>[[[<<<<]>+>>[>>>>>]<-]<]>>>+>>>>>>>+>]<
]<[-]<<<<<<<++<+++<+++[
  [>]>>>>>>++++++++[<<++++>++++++>-]<-<<[-[<+>>.<-]]<<<<[
    -[-[>+<-]>]>>>>>[.[>]]<<[<+>-]>>>[<<++[<+>--]>>-]
    <<[->+<[<++>-]]<<<[<+>-]<<<<
  ]>>+>>>--[<+>---]<.>>[[-]<<]<
]
[Enter a number using ()-./0123456789abcdef and space, and hit return.
Daniel B Cristofani (cristofdathevanetdotcom)
http://www.hevanet.com/cristofd/brainfuck/]

2
아마 2002 년에 쓴 인터넷 아카이브 9에 관해서는, 내가의 두 번째 버전에서 패턴을 사용하는 생각의 Panu Kalliokoski는 2002 년 8 월 자신의 브레인 퍽 저장소에 추가 말합니다 마이크로 프로세서와 인터페이싱 , 4 페이지
다니엘 Cristofani

1

펄, 270 바이트

나는 이것에 내 시간을 낭비해서는 안됩니다.

$e="\\";$g=" ";$_=reverse<>;$l=length;push@a,(119,18,107,91,30,93,125,19,127,95)[$1]while/(.)/g;for($i=0;$i<=$l;$i++){$j=2*($l-$i);$b=$a[$i];$c=$i&&$a[$i-1];print" "x$j,$b&1?"/":$g,$b&2?$e:$g,$g,$c&32?$e:$g,$c&64?"/":$g,"
"," "x$j,$b&4?$e:$g,$b&8?"/":$g,$b&16?$e:$g,"
"}

교체 [$1]while/(.)/g[$_]for/./g4 바이트를 저장합니다. 교체 for($i=0;$i<=$l;$i++)for$i(0..$l)9 바이트를 저장합니다.
hobbs

1

자바 스크립트 ( ES6 ) 191 206

Firefox에서 스 니펫을 실행하여 테스트하십시오.

F=m=>(
  a='    \\/  /\\/\\ /  /\\  \\\\ \\'.match(/.../g),
  o=f='',r=' ',
  [for(d of m)(
    n=1e3+'¯B\x91ÿ$ê\x86A\x87ë'.charCodeAt(d)+'', // here there are 3 valid characters tha the evil stackoverflow editor just erase off, so I had to put them as hex escape
    o='\n'+f+' '+a[n[2]]+'\n'+r+a[n[1]]+o,
    r=f+a[n[3]],
    f+='  ')],
  r+o
)


//TEST

go=_=>O.innerHTML =(v=I.value)+'\n'+F(v)

go()
<input id=I value='0123456789'><button onclick='go()'>-></button>
<pre id=O></pre>


0

자바 8, 341 바이트

n->{int i=n.length*2,j=i+1,k=0,t;String l[]=new String[j],x;for(;j-->0;l[j]="");for(;i>0;l[i--]+=" "+x.substring(5,7),l[i--]+=x.substring(2,5),l[i]+=x.substring(0,2))for(x="/~~ ~~/ ~  ~  /~ / ~//~ /~ / ~~/~  / ~/~ // ~/~~//~  ~  /~~/~~//~~/~ /".replace('~','\\').substring(t=(n[k++]-48)*7,t+7),j=i-2;j-->0;)l[j]+="  ";return"".join("\n",l);}

@Shion 의 C # .NET 응답 포트이므로 그를 투표 해야합니다.

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

설명:

n->{                       // Method with character-array parameter and String return-type
  int i=n.length*2,        //  Two times the length of the input array
      j=i+1,               //  Index integer, starting at `i+1`
      k=0,t;               //  Temp integers
  String l[]=new String[j],//  String-array for the rows, default filled with `null`
         x;                //  Temp-String
  for(;j-->0;l[j]="");     //  Replace all `null` with empty Strings
  for(;i>0                 //  Loop `i` downwards in the range [`n.length*2`, 0)
      ;                    //   After every iteration:
       l[i--]+=            //    Append the row at index `i` with:
                           //    (and decrease `i` by 1 afterwards with `i--`)
         " "               //     A space
         +x.substring(5,7),//     And the 6th and 7th characters of temp-String `x`
       l[i--]+=            //    Append the row at index `i` with:
                           //    (and decrease `i` by 1 afterwards with `i--`)
         x.substring(2,5), //     The 3rd, 4th and 5th characters of temp-String `x`
       l[i]+=              //    Append the row at index `i` with:
         x.substring(0,2)) //     The 1st and 2nd characters of the temp-String `x`
    for(x="/~~ ~~/ ~  ~  /~ / ~//~ /~ / ~~/~  / ~/~ // ~/~~//~  ~  /~~/~~//~~/~ /".replace('~','\\')
                           //   String containing all digit-parts
          .substring(t=(n[k++]-48)*7,t+7),
                           //   and take the substring of 7 characters at index
                           //   `n[k]` as integer multiplied by 7
        j=i-2;j-->0;)      //   Inner loop `j` in the range (`i`-2, 0]
      l[j]+="  ";          //    And append the rows at index `j` with two spaces
  return"".join("\n",l);}  //  Return the rows delimited with new-lines
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.