반 강자성 주문


16

반 강자성 주문

반 강자성은 IBM의 연구자가에서 이동하는 데 사용되는 것입니다 1 테라 바이트의 디스크 A와 100 테라 바이트의 디스크 원자의 같은 양.

반 강자성을 나타내는 물질에서, 일반적으로 전자의 스핀과 관련된 원자 또는 분자의 자기 모멘트는 반대 방향을 가리키는 인접한 스핀 (다른 서브 격자)과 규칙적인 패턴으로 정렬됩니다.

당신의 임무는 위의 그림과 같은 반 강자성 원자의 순서를 그리는 프로그램을 작성하는 것입니다. 더 많은 세트를 가질 수 있지만 최소한 네 쌍의 세트를 가질 수 있어야합니다.

각 쌍은 실제 화살표 여야하지만 다음과 같이 표시되어야합니다 .

 위아래
아래로
 위아래

출력은 ASCII 또는 그래픽 출력 일 수 있습니다.

함수 또는 전체 프로그램 만 만들 수 있지만 입력을 받아서 많은 쌍을 가져와야합니다. 단어 만있는 예 :

입력 : 1

 위아래
아래로
 위아래

입력 : 2

 up down up down 
아래로 위로  
 up down up down

허용되는 화살표 :

  • /|\\|/

읽기 쉬운 언어로 X 바이트 형식으로 답을 입력하십시오 . 가장 적은 양의 바이트가 이깁니다!


5
"화살표"는 꽤 모호한 소리입니다 ^v.
Sp3000

1
@ Sp3000 아니요. 꼬리가 작지 않기 때문입니다.
단계

2
이 화살표는 허용 됩니까? ? ( 유니 코드 코드 포인트 U + 21C5 및 U + 21F5 )
디지털 외상

1
@DigitalTrauma 그들은 완벽합니다!
Phase

11
@Phase 편집 내용을 롤백했습니다. 바이트에서 문자로 점수를 변경하면 많은 답변에 대한 점수가 크게 변경됩니다. 15 개의 답변을받은 후 규칙을 변경하는 것은 일반적으로 싫은 일입니다.
디지털 외상

답변:


16

APL, 18 12 바이트

⍉(2×⎕)3⍴'↑↓'

이렇게 구성하는 2N × 3 행렬, N은 입력 (여기서 문자 충전), . 그런 다음이 행렬 의 조옮김 ( )이 인쇄됩니다.

당신은 할 수 있습니다 온라인으로보십시오 .


APL 문자 집합의 악용. 그래도 다른 답변 에서도이 문자 세트를 사용할 수 있습니다.
jimmy23013

1
@ jimmy23013 : APL 코드 페이지는 EBCDIC 기반입니다. 얼마나 많은 언어로 처리 할 수 ​​있는지 잘 모르겠습니다.
Dennis

@Dennis 프로그램 자체가 EBCDIC 문자열을 인쇄하는 동안 ASCII (또는 EBCDIC의 일부 횡설수설) 일 수 없습니까? 그러나 줄 바꿈에 대한 지름길은 사라질 것입니다. 또한, 윈도우 콘솔은 인쇄 것 같았다 \x18\x19으로 ↑↓.
jimmy23013


@ jimmy23013 : 예, 채팅에서 오래된 콘솔 대해 이야기 했습니다 . 횡설수설은 효과가 있지만 메타 토론의 가치가 있습니다.
Dennis

12

Pyth, 15 바이트 (11 자)

V3.>*Q"↑↓"N

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

설명:

              implicit: Q = input number
V3            for N in [0, 1, 2]:
      "↑↓"       string "↑↓"
    *Q           repeat Q times
  .>      N      rotate the string by N

12

자바, (313) 296 바이트

다음은 화살표를 그래픽으로 표시하는 예입니다.

import java.awt.*;void f(int n){new Frame(){public void paint(Graphics g){for(int k=0,l,m,o;k<n*6;o=k%6,l=o/2*10+32,m=k/6*20+(k++%2==0?19:29),g.fillPolygon(new int[]{m+4,m,m+4,m+4,m+6,m+6,m+10},o==1|o==2|o==5?new int[]{l+9,l+5,l+5,l,l,l+5,l+5}:new int[]{l,l+5,l+5,l+9,l+9,l+5,l+5},7));}}.show();}

더 읽기 쉬운 형식으로 :

import java.awt.*;
void f(int n) {
    new Frame() {
        public void paint(Graphics g) {
            for (int k = 0, l, m, o; k < n*6;){
                o = k % 6;
                l = o / 2 * 10 + 32;
                m = k / 6 * 20 + (k++ % 2 == 0 ? 19 : 29);
                g.fillPolygon(new int[] {m+4,m,m+4,m+4,m+6,m+6,m+10},
                              o == 1 || o == 2 || o == 5 ?
                                  new int[] {l+9,l+5,l+5,l,l,l+5,l+5} :
                                  new int[] {l,l+5,l+5,l+9,l+9,l+5,l+5},
                              7);
            }
        }
    }.show();
}

입력으로 5에 대한 표시 :

입력으로 5 표시

화살표가 표시되는 창 크기를 조정해야합니다. 나는 창문의 테두리로 "잘려지지 않은"것으로 보이지 않도록 만들려고했지만 특정 플랫폼에서는 그렇게 보일 수 있습니다.


9

CJam, 18 바이트 (14 자)

ri3*"↑↓"*3/zN*

반복 패턴을 형성하는 열을 생성 한 다음 전치하십시오.

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


대체 18 바이트 :

3,ri"↑↓"*fm>N*

문자열 "↑↓"*n을 0, 1 또는 2 번 회전시킵니다 .


7

CJam (15 자, 19 바이트)

ri"↑↓"*_(+1$]N*

온라인 데모


1
승리 조건은 문자가 아닌 바이트입니다.
isaacg

@PeterTaylor : 챌린지가 지정한 언어, X 바이트 형식입니다. 문자 형식으로되어 있지만 유니 코드 문자는 2 바이트이므로 실제 점수는 17 바이트입니다.
Levi

@Levi는에 따르면 그들은 3 각 바이트입니다.
isaacg

@isaacg 아 내 나쁜
레위

7

Befunge, 71 바이트

나의 첫 번째 대답은, 나와 함께 부드럽게 해주세요 : o)

성가신 정렬 문제로 인해 몇 바이트가 낭비되었습니다. 개선이 있다면 듣고 싶습니다!

&::3>:2% #v_0#v" \|/ "<
  >\^,*52<> 0#v" /|\ "<
:#^_$1-:#^_@  >:#,_$\1-

입력 : 4

 /|\  \|/  /|\  \|/  /|\  \|/  /|\  \|/ 
 \|/  /|\  \|/  /|\  \|/  /|\  \|/  /|\ 
 /|\  \|/  /|\  \|/  /|\  \|/  /|\  \|/ 


5

Pyth, 16 바이트 (12 자)

J"↑↓"V3*~_JQ

예:

Input: 4
Output:
↑↓↑↓↑↓↑↓
↓↑↓↑↓↑↓↑
↑↓↑↓↑↓↑↓

5

파이썬 2, 131122 바이트

from turtle import*
for k in range(input()*6):z=k/3+k%3&1;pu();goto(k/3*32,z*32^k%3*64);pd();seth(z*180+90);fd(32);stamp()

글쎄 ... 나는 C 자바를 이길 것 같아?

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


나는 32꽤 큰 화살표의 높이 를 선택 했으므로 잠시 후 거북이가 화면 밖으로 그리기 시작합니다. 큰 입력에 모든 것을 맞추려면 32s 를 교체하여 화살표를 작게 만들 거나 사용할 수 있습니다 screensize()(오프 스크린 출력에 메타 포스트가 있는지 확실하지 않습니다 ...)


1
그렇다면 ... 언제 Pyth에 거북이 그래픽을 추가할까요?
디지털 외상

확실히 골프 목적으로 당신은 사이징을 위해 한 자리 숫자를 선택해야합니다 ...
Beta Decay

@BetaDecay 한 자리 크기 조정의 경우 꼬리가 거북에 가려져 거의 보이지
않습니다

4

GNU sed, 25 바이트

나는 발견 하고 더 단축 허용 유니 코드 화살표 기호, 그들은이 댓글에 의해 허용 된을 :

h
s/1/⇅/g
H
G
s/1/⇵/g

입력은 단항 이므로, 예를 들어 4는 1111다음과 같습니다.

$ echo 1 | sed -f antiferro.sed
⇅
⇵
⇅
$ echo 1111 | sed -f antiferro.sed
⇅⇅⇅⇅
⇵⇵⇵⇵
⇅⇅⇅⇅
$ 

경우 이전 대답 허용되지 않습니다 :

GNU sed, 39 바이트

s/1/↑↓/g
s/.*/&a&↑\n&/
s/a↑/\n/

3
게시물 상단에 "GNU sed"가 표시 될 때마다 아래로 스크롤하여 게시 한 사람을 알 필요가 없습니다.
Alex A.


입력이 단항입니까?! 프로그래밍 언어 또는 프로그래밍에 대한 일반적인 내용입니까?
Beta Decay

1
이 얼마나 사악한 답변 :-)
xebtl

1
@BetaDecay는 단항 문자열의 고유 한 속성입니다. 숫자 값은 길이와 같습니다. 메타 질문 / 답변은 기본 산술이없는 언어 (예 :)에 대해서만이를 허용합니다 sed. 단항 입력에서 필요한 길이의 출력을 쉽게 생성 할 수 있기 때문에이 질문에 특히 유용합니다. 치타? 아마도-그러나 메타 답변 합의는 괜찮습니다.
디지털 외상

3

스위프트 2, 66 바이트

let f={n in(0..<n*3).map{print("↑↓",appendNewline:$0%n==n-1)}}

스위프트가 조금 덜 장황한 것이라면 골프를 치기에는 나쁘지 않을 것입니다 (파라미터라는 당신을보고 있습니다 appendNewline)


3

루비 39 (또는 44) 문자, 43 (또는 48) 바이트

https://mothereff.in/byte-counter 에 따르면 화살표 문자는 각각 3 바이트입니다!

->(n){a=['↑↓'*n]*3;a[1]=a[1].reverse;a}

배열을 반환하는 익명 함수 함수가 배열을 인쇄해야하는 puts a경우 5 바이트 이상으로 끝나야 합니다.

사용 예

f=->(n){a=['↑↓'*n]*3;a[1]=a[1].reverse;a}

puts f.call(6)

준다

↑↓↑↓↑↓↑↓
↓↑↓↑↓↑↓↑
↑↓↑↓↑↓↑↓

3

J, 41 35 32 바이트 (28 자)

3$(,:|.)(2*".1!:1[1)$ucp'↑↓'

나는 J에서 아무것도 프로그래밍하지 않았으므로 시간이 오래 걸렸으며 가장 좋은 방법은 아닙니다.

화살표를 출력하기 전에 실행시 숫자를 입력 할 때까지 기다립니다.


J에서 아무것도 프로그래밍하지 않았다는 것은 무엇을 의미합니까? 나는 1k 이상의 담당자를 얻은 특정 J 답변을 회상하는 것 같습니다. ;)
Alex A.

@AlexA. 간단한 산술을하는 것이 실제로 프로그래밍이라고하는 것은 아닙니다. 나는 그 대답을 게시 할 때 정말 왼쪽 우선 순위에 대한 권리 외에 J에 대해 아무것도 몰랐어요
Fatalize

2

자바 스크립트 (ES6), 66 63 53 47 바이트 ( 62 55 49 41 자)

f=n=>`⇅
⇵
⇅`.replace(/./g,'$&'.repeat(n))

에 소품 디지털 외상 ⇅ 및 ⇵ 문자를 발견하고 좀 더 바이트를 면도 할 수 있도록합니다.


2

J, 30 바이트

|:((2*".1!:1<1),3)$ucp'↑↓'

2

C, 169 170 162 125 123 105 119 107 바이트

그래서, 비록 이것이 분명히 승자가 아니더라도 나는 이것을 갈 수 있지만

골프 :

n,i,j;main(){n=getchar();n=atoi(&n);for(;j++<3;){for(i=0;i++<n;)printf("%.3s ","⇅⇵"+(j%2)*3);puts("");}}

언 골프 드 :

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

/* n -> Number of columns, i & j -> Loop counters */
n,i,j;

main()
{
    /* Get the number of iterations from stdin */
    n = getchar();
    n = atoi(&n); /* Thanks @AndreaBiondo */

    for (; j++ < 3;)
    {
        /* Print rows of arrows */
        for (i = 0; i++ < n;)
            printf("%.3s ","⇅⇵" + (j % 2) * 3);

        /* Print a newline */
        puts("");
    }
}

예:

Input: 4
⇵ ⇵ ⇵ ⇵ 
⇅ ⇅ ⇅ ⇅ 
⇵ ⇵ ⇵ ⇵ 

최신 정보:

여기서 실행되는 것을 보십시오


다음 for(j=0;j++<3;)과 같은 작업을 수행 할 수 있습니다i
lirtosiast

@ThomasKwa 아하 ... 잘 발견했다. 감사합니다
Levi

i그리고 j전역이므로 0으로 초기화됩니다. 당신은 놓을 수 i=0j=0.
Andrea Biondo

또한 적은 엔디 아니스와 제로 초기화를 사용 n하여 버퍼 로 사용할 수 있습니다 .n=getchar();n=atoi(&n);
Andrea Biondo

@AndreaBiondo i = 0 및 j = 0을 제거하면 모든 출력이 한 줄에 있습니다. 이것을 재현 할 수 있습니까? 나는 gcc 4.9.2를 사용하고있다
Levi

2

옥타브, 37 바이트

편집하다: 이전의 반 강자성 버전에서 수정되었습니다. 내 실수를 잡아 주셔서 감사합니다.

f=@(n)repmat(["⇅";"⇵";"⇅"],1,n)

함수를 정의합니다 f(n). 샘플 출력 :

octave:4> f(1)
ans =

⇅
⇵
⇅

octave:5> f(5)
ans =

⇅⇅⇅⇅⇅
⇵⇵⇵⇵⇵
⇅⇅⇅⇅⇅

1

CoffeeScript, 60 바이트 (58 자)

이해력은 재귀없이 쉽게 만듭니다.

f=(n,x='')->x+='\n⇵⇅'[i%(n+1)&&1+i%2]for i in[1..n*3+2];x

1

루비, 33 바이트

기능으로서 :

f=->n{[s="↑↓"*n,s.reverse,s]}

예:

> puts f[3]
↑↓↑↓↑↓
↓↑↓↑↓↑
↑↓↑↓↑↓

루비, 37 바이트

stdin에서 입력을받는 전체 프로그램 :

puts s="↑↓"*gets.to_i,s.reverse,s

함수 또는 전체 프로그램 만 만들 수 있지만 입력을 받아서 많은 쌍을 가져와야합니다.
Dennis

@Dennis 좋아, 나는 그것에있어
daniero

우리는 오해가있는 것 같습니다. 나는 원래 개정판에서 질문에 전체 프로그램이 필요하다는 것을 암시했기 때문에 함수가 실제로 유효하다는 것을 보여주기 위해 인용문을 게시했습니다.
Dennis

@Dennis 문제 없습니다. 3 개의 문자열을 반환하는 것이 실제로 "그리기"가 아니라고 생각했지만 중요하지 않습니다. 어쨌든, 두 버전 모두 약간 다운되었습니다 :)
daniero

1

> <>, 55 바이트

"⇅⇵⇅"{:&3*1-:0(?;\
|.!09v!?%&:&:{o:}/
oa{~}/|.!09

원하는 길이를 초기 스택 값으로 입력하여 여기서 온라인으로 시도 하십시오 .

비 ⇅⇵ 솔루션, 59 바이트 :

"↓↑"{:&3*>1-:0(?;{:{\
 |.!09v!?%&:&:oo}}@:/
9oa{$}/|.!0

1

BBC 기본, 70 바이트

INPUTx:n$=STRING$(x,"/|\\|/"):PRINTn$:PRINTSTRING$(x,"\|//|\"):PRINTn$

아마 더 골프를 칠 수 있습니다


1

C, 97 바이트

첫 번째 명령 줄 매개 변수에서 입력을 가져옵니다 (예 :) main 4. 최대 357913940쌍을 지원합니다 . C에서는 다중 바이트 문자를 chars 로 사용할 수 없지만 문자열로 잘 작동합니다.

i,n;main(c,v)char**v;{n=atoi(v[1]);for(i=6*n+3;i--;)printf("%s",i%(2*n+1)?i%2?"↓":"↑":"\n");}

함수로는 더 작지만 다른 C 답변은 완전한 프로그램이므로 그렇게했습니다. 69 바이트입니다.

i;f(n){for(i=6*n+3;i--;)printf("%s",i%(2*n+1)?i%2?"↓":"↑":"\n");}

1

파이썬 2, 47 바이트

파이썬이 문자열을 쉽게 뒤집을 수있는 방법을 활용 한 BBC BASIC answer 포트 .

n=r"/|\\|/"*input();print n+"\n"+n[::-1]+"\n"+n

1

C, 117 89 85 바이트

i;main(j,v)char**v;{j=2*atol(v[1])+1;for(;i++<3*j;)printf(i%j?i%2?"↑":"↓":"\n");}

언 골프 드 :

i;
main(j,v)
char**v; // Credit to @AndreaBiondo for brilliant idea that I will use a lot in future golfed programs :)
{
    j = 2*atol(v[1])+1;
    for(;i++<3*j;)
        printf(i%j?i%2?"↑":"↓":"\n");
}

1

자바 스크립트 (ES6), 66 바이트 (62 자)

여기에는 각각 3 바이트로 계산 된 유니 코드 문자와 1 바이트로 계산 된 필수 줄 바꿈이 포함됩니다.

이 답변에서 영감을 얻은 재귀를 사용합니다 . 비 재귀 적으로 시도했지만 정의 된 배열을 생성하는 데 너무 많은 문자가 필요했지만 다른 사람이 나보다 더 잘 수행하는 방법을 알 수 있습니다.

f=n=>(g=(a,i)=>i?g(`
↓↑`[i%(n*2+1)&&1+i%2]+a,i-1):a)('',n*6+2)

데모

모든 ES6 답변과 마찬가지로 Firefox, Edge 및 Safari 9에서는 글을 쓸 때만 설명 할 수 있습니다.

f = n => (g = (a, i) => i ? g(`
↓↑` [i % (n * 2 + 1) && 1 + i % 2] + a, i - 1) : a)('', n * 6 + 2)

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

console.log(f(1));
console.log(f(2));
console.log(f(4));
console.log(f(32));
<pre><output id=O></output></pre>


1

자바, 150 바이트

static void g(int n){n*=2;f(n,0);f(n,1);f(n,0);}static void f(int n,int d){String l="";for(n+=d;n-->d;)l+=(n%2==0)?"↓":"↑";System.out.println(l);}

출력 g(2):

↑↓↑↓
↓↑↓↑
↑↓↑↓

1
나는 당신이 화살표를 출력해야한다고 생각하므로 규칙을 위반하지 않는다는 것을 분명히 하기 위해 예제 출력과 코드를 변경하는 것이 좋습니다. :)
Beta Decay

@BetaDecay 승인 된 화살표가 표시되어 있지만 잘라 내지 않은 것 같습니다. 그래서 당신의 조언에 따라 변경했습니다
DeadChex

0

파이썬 2, 45 55 바이트

편집 : 수정 된 화살표

매우 간단한 접근법. 그러나 유니 코드 화살표로는 작동하지 않습니다.

def f(n):x=" /|\\ \\|/"*n;print x+"\n "+x[::-1]+"\n"+x

원래 게시물에 코멘트를 보면, 당신은 당신이하는 것을 볼 수 특별히 사용할 수 없습니다 ^v그들은 꼬리를 가지고 있지 않는 한 화살표
레위

1
고마워요. "/ | \"로 변경했습니다. 이제 괜찮기를 바랍니다.
heo

0

R, 60 62 바이트

STDIN에서 입력을 가져 와서 STDOUT으로 출력합니다. 3 x (2 * 입력) 배열을 만들고 캐리지 리턴 열을 추가 한 다음 조옮김 배열을 출력합니다.

cat(t(cbind(array(c('↑','↓'),c(3,2*scan())),'\n')),sep='')

시운전

cat(t(cbind(array(c('↑','↓'),c(3,2*scan())),'\n')),sep='')
1: 25
2: 
Read 1 item
↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓
↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑
↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓

0

Tcl 49 바이트

승자는 없지만 최소한 경쟁력이 있습니다.

foreach x {⇅ ⇵ ⇅} {puts [string repeat $x $argv]}

lmapforeach
sergiol

다음과 string repeat같이 축약 될 수 있습니다string re
sergiol

그리고 확실하지 않지만 값 proclmap반환하고 $argv한 문자로 된 변수로 대체 하여 부작용을 검색하여 바이트를 절약 할 수 있습니다.
sergiol

-1

스위프트 2.0, 79 바이트

영리한 아무것도 ...

let p=3;for x in 0...2{print((0..<p*2).reduce(""){$0+["↑","↓"][($1+x)%2]})}

3
이것은 입력 코드를 변경하는 것이 허용되지 않는 함수에 넣어야합니다
Downgoat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.