反強磁性秩序


16

反強磁性秩序

反強磁性は、IBMの研究者が同じ量の原子で1テラバイトのディスクから100テラバイトのディスクにジャンプするために使用したものです。

反強磁性を示す材料では、通常電子のスピンに関連する原子または分子の磁気モーメントは、隣接するスピン(異なる副格子上の)が反対方向を指す規則的なパターンで整列します。

あなたの仕事は、上の図のような反強磁性原子の順序を描くプログラムを書くことです。少なくとも4組のペアを持つことができなければなりませんが、さらに多くのペアがあります。

各ペアは次のように表示する必要がありますが、実際の矢印でなければなりません。

 上下
アップダウン
 上下

出力は、ASCIIアートまたはグラフィック出力になります。

関数またはプログラム全体のみを作成できますが、入力を受け取り、その数のペアを描画する必要があります。言葉だけの例:

入力:1

 上下
アップダウン
 上下

入力:2

 上下上下 
ダウンアップダウンアップ  
 上下上下

許容される矢印:

  • そして
  • そして
  • /|\ そして \|/

答えは読みやすいように、言語、Xバイト形式で入力してください。最小バイト数が勝ちです!


5
「任意の矢印」は私にはかなりあいまいに聞こえ^vますが、どうですか?
-Sp3000

1
@ Sp3000いいえ、彼らには小さなしっぽがありません。
フェーズ

2
これらの矢印は許可されていますか?(UnicodeコードポイントU + 21C5およびU + 21F5
デジタルトラウマ

1
@DigitalTrauma彼らは完璧です!
フェーズ

11
@Phase編集をロールバックしました。スコアをバイトから文字に変更すると、これらの回答の多くのスコアが大幅に変更されます。15の回答を得た後にルールを変更することは、一般的に嫌われています。
デジタル外傷

回答:


16

APL、18 12バイト

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

これにより、2n x 3の行列が作成されます。nは入力()で、文字とで埋められます。次に、この行列の転置()が印刷されます。

オンラインで試すことができます


APL文字セットの素晴らしい乱用。ただし、他の回答でもこの文字セットを使用できます。
jimmy23013

1
@ jimmy23013:APLコードページはEBCDICベースです。それをいくつの言語で処理できるかはわかりません。
デニス

@Dennis EBCDIC文字列を出力している間、プログラム自体をASCII(またはEBCDICの意味不明なもの)にすることはできませんか?ただし、改行のショートカットはなくなります。また、Windowsのコンソールは、印刷するように見えた\x18\x19として↑↓
jimmy23013


@ jimmy23013:はい、チャットで古いコンソールについて話しました。意味のわからないものは動作するかもしれませんが、おそらくメタディスカッションの価値があります。
デニス

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

Java、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の表示:

Display for 5 as input

矢印を表示するには、表示されるウィンドウのサイズを変更する必要があります。私はそれらがウィンドウの内側の境界線によって「切り取られた」ように見えないようにしようとしましたが、特定のプラットフォームではそのように見えるかもしれません。


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バイト形式。あなたはそれをchar形式で持っていますが、ユニコード文字は2バイトの価値があるので、あなたの実際のスコアは17 バイトです
レヴィ

@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

Python 2、131 122バイト

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 Java を打ちましたか?

ここに画像の説明を入力してください


32矢印の高さを選択しましたが、これはかなり大きいため、しばらくすると亀が画面外に描画を開始します。すべてを大きな入力に適合させたい場合は、32sを置き換えることで矢印を小さくするか、使用しますscreensize()(オフスクリーン出力にメタ投稿があるかどうかはわかりません...)


1
だから...いつタートルグラフィックスをPythに追加するのですか?
デジタル外傷

きっとあなたは、サイジングのために一桁の番号を選択する必要があります目的...ゴルフのために
ベータ崩壊

それは亀によって不明瞭だから尾のサイジング一桁の場合@BetaDecayは、ほとんど見えない
SP3000

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」が表示されるたびに、誰が投稿したかを知るためにスクロールダウンする必要さえありません。
アレックスA.


入力は単項式ですか?!それはあなたがプログラミングした言語や何かの一般的なものですか?
ベータ崩壊

1
なんという極悪非道な答え:-)
xebtl

1
@BetaDecayは、単項文字列の一意のプロパティです。数値は長さと同じです。メタの質問/回答では、ネイティブ算術を持たない言語(例:)に対してこれを厳密に許可していますsed。これは、必要な長さの出力を単項入力から簡単に生成できるため、この質問に特に役立ちます。チート?おそらく-しかし、メタ回答のコンセンサスはそれでいいようです。
デジタル外傷

3

Swift 2、66バイト

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

Swiftが少し冗長なだけであれば、それはゴルフにとってそれほど悪くはないでしょう(私はあなたにパラメータという名前を付けていますappendNewline


3

Ruby 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で何もプログラミングしていないとはどういう意味ですか?あるJの回答を思い出したようです。;)
アレックスA.

@AlexA。単純な算術を行うことは、実際にプログラミングと呼ぶものではありません。その回答を投稿したとき、右から左への優先順位以外にJについて何も本当に知りませんでした
-Fatalize

2

Javascript(ES6)、66 63 53 47バイト(62 55 49 41文字)

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

Traと⇵の文字を見つけ、より多くのバイトを削ることができるようにしたことで、Digital Traumaに小道具を提供しています。



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
リトシアスト

@ThomasKwaあぁ...よく見つけた。ありがとう
レヴィ

iそしてjグローバルなので、ゼロに初期化されます。あなたは、ドロップすることができますi=0j=0
アンドレアビオンド

また、あなたが使用するリトルエンディアンおよびゼロ初期化活用できるnバッファとしての:n=getchar();n=atoi(&n);
アンドレア・ビオンド

@AndreaBiondo i = 0とj = 0を削除すると、すべての出力が1行になります。これを再現できますか?私はgcc 4.9.2を使用しています
レヴィ

2

オクターブ、37バイト

編集:以前のストライプ反強磁性バージョンから修正。私の間違いを見つけてくれてありがとう@ beta-decay

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

関数またはプログラム全体のみを作成できますが、入力を受け取り、その数のペアを描画する必要があります。
デニス

[OK]を@Dennis、私はそれによ
daniero

誤解があるようです。元のリビジョンで完全なプログラムが質問に必要であることを暗示しているため、関数が実際に有効であることを示すために引用を投稿しました。
デニス

@Dennis問題ありません。3つの文字列を返すことは実際には「描画」ではないと考えていましたが、問題ではないと思います。とにかく、両方のバージョンを少しゴルフダウンしました:)
daniero

1

> <>、55バイト

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

ここでオンライン試して、初期スタック値として希望の長さを入力します。

Non⇅⇵ソリューション、59バイト:

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

1

BBC BASIC、70バイト

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

これはおそらくもっとゴルフできる


1

C、97バイト

たとえば、最初のコマンドラインパラメータから入力を取得しますmain 4357913940ペアまでサポートします。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

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

JavaScript(ES6)、66バイト(62文字)

これには、それぞれ3バイトとしてカウントされるUnicode文字と、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

Java、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

Pythonの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]}

あなたは使用してバイト保存することができますlmap代わりにforeach
sergiol

そして、string repeat略称することができますstring re
sergiol

また、確信はありませんが、値proclmap返し、$argv1文字の変数に置き換える副作用を取得するために実装すると、バイトが節約される場合があります。
sergiol

-1

Swift 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.