スクイグリーシーケンス


29

この挑戦を思いついたアドナンへのすべてのクレジット。

休憩に入る前の最後の挑戦。

仕事

正の整数nを指定するnと、奇数の場合、/その回数だけ繰り返します。場合nでもあり、繰り返し\その何回も。

(真剣に、テストケースはこの説明よりもはるかに明確になるので、テストケースを見てください。)

スペック

テストケース

n output
1 /
2 \\
3 ///
4 \\\\
5 /////
6 \\\\\\

回答:


17

Javascript、22バイト

n=>"\\/"[n%2].repeat(n)

無名関数を定義します。

*Javascriptで文字列が繰り返される場合のみ。ため息


1
最後に、適切な演算子を見つけました
Leaky Nun

@LeakyNun何のことを言ってるの?
DanTheMan

あなたは三項演算子を使ってキャラクターを選択していましたよね?
リーキー修道女

@LeakyNun最初は、はい。しかし、チャットを見ると、私も約1分後にこれを投稿しました。
DanTheMan

2
@Jordumus関数を変数に割り当てることができます:f=n=>...、直接呼び出すことができます:(n=>...)(5)。(または、Node.js REPLを使用している場合はthis._、最後に入力したものを表すを使用できます)
DanTheMan



9

Perl、20バイト

+1を含む -p

STDINの入力で実行:

squigly.pl <<< 6

squigly.pl

#!/usr/bin/perl -p
$_=$_%2x$_;y;01;\\/

それはちょうど私のバージョンのPerlかもしれません(私はまだ5.10にいます)が、余分を追加しない限り、これはエラーをスローします; 最後まで。yの区切り文字としてセミコロンを使用しているため、ステートメントを終了するためにもう1つ必要です(この後さらにコード行がある場合は2つ必要です)
-theLambGoat

@theLambGoat本当に-pオプションを使用していますか?コードの最後に暗黙的がある;ため-p;文字変換で使用します。これにより、さらに1バイト節約できます。これは、少なくともperlの5.6(おそらく限り以来働いている-pオプションは、実際には存在していた)
トンHospel

@theLambGoat Mm、perl 5.10で古いredhatを見つけましたが、実際には動作しません。これはredhatパッチであるか、実際に5.10前後で動作しませんでした(古いperlで動作し、新しいperlでも動作する
はず

私はSUSE Enterprise Server 11で実行しているので、単なるレッドハットではありません。しかし、私はそれがいくつかのバージョンで機能する限り、それはまだ有効な答えであるべきだと思います。(また、現時点でアクセスできる唯一の他のバージョンである5.08でもチェックインしましたが、そこでも動作しません)
–theLambGoat

1
;によって追加されたトリック-pは非常に恐ろしい、よくやった。
ダダ


7

C#、42バイト

string f(int n)=>new string("\\/"[n%2],n);

正しい文字を選択し、その文字を繰り返して構成される新しい文字列を作成しますn


7

PHP、38バイト

for(;$i++<$a=$argv[1];)echo'\/'[$a%2];

(バリアント38バイト)

while($i++<$a=$argv[1])echo'\/'[$a%2];

(バリアント38バイト)

<?=str_pad('',$a=$argv[1],'\/'[$a%2]);

(バリアント40バイト)

<?=str_repeat('\/'[($a=$argv[1])%2],$a);



6

J、10バイト

#'\/'{~2|]

これは6トレインの動詞で、次のもので構成されます。

# ('\/' {~ 2 | ])

これは間のフックです#('\/' {~ 2 | ])。フック(f g) yはに展開されるy f (g y)ため、これはに展開されy # (... y)、単一文字の場合、y文字のリストが生成されます。

2番目の部分は5トレインで、次のもので構成されます。

'\/' {~ 2 | ]

これは、2つのフォークに評価されます。

'\/' {~ (2 | ])

内側のフォーク、2 | ]はモジュラス2です。したがって、外側のフォークは次のとおりです。

'\/' {~ mod2

これは、文字列から{~mod2インデックス(mod2)を取得します/

次に、上からフックを使用します。

y # (apt char)

これにより、必要なものが得られ、完了です。


6

Haskell、25バイト

f n=cycle"\\/"!!n<$[1..n]

-1バイト、Damienのおかげですcycle


1
f n=cycle"\\/"!!n<$[1..n]
ダミアン

@Damienうわー、どうやってサイクルを忘れたの?
xnor

知りません。しかし、私は一度あなたを「打つ」機会があったことをうれしく思います:)
ダミアン

6

Mathematica、34 32 28バイト

If[OddQ@#,"/","\\"]~Table~#&

匿名関数。入力として整数を受け取り、出力として文字のリストを返します。


を使用できます~Table~#
マーティンエンダー

10.2で追加されたと思います。
マーティンエンダー

また、私はあなたが溝を捨てて<>""、文字のリストを返すことができると思います。
マーティンエンダー

1
@MartinEnderまた~Do~Infinity、10.2以降にも追加されている必要があります
...-LegionMammal978

5

Powershell、30 27バイト

更新:

param($n)('\','/')[$n%2]*$n

切り替えparamのおかげで、timmyd


"$("\/"[$args[0]%2])"*$args[0]

または少し読みやすい

("\","/")[$args[0]%2]*$args[0]

テスト:

> 1..10 | % { ./run.ps1 $_ }
/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
\\\\\\\\\\

3
PPCGへようこそ!この辺りで別のPowerShellユーザーに会えて嬉しいです。27バイトの場合のようparam($n)$args、の代わりに入力を取得することで、数バイトを削ることができます。param($n)('\','/')[$n%2]*$n
AdmBorkBork

5

Mathematica、29バイト

"\\"["/"][[#~Mod~2]]~Table~#&

Cruelly [[1]]は、関数の最初の引数を[[0]]返し、関数(ヘッド)自体を返すという事実を利用します。この関数"\\"は、で「評価」されている、奇妙に有効な関数に適用され"/"ます。


フォームの何かがhead (index )とelement (index )を持つa[b]単なる一般的なであり、関数が単なる特別な種類の式であると考えると、少し奇妙ではありません(実際、関数はt式ですが、通常は形式を持つ式を変換するための単なるルールです)。:)a0b1f[x...]
マーティンエンダー

2
このサイトでは多くの言語が悪用されていますが、これは私が見たMathematicaの最初の悪用だと思います。よくやった!
DanTheMan





4

> <>(魚)、30バイト

:2%?'/'o1-:?!;30.
30.  >'\'50p

初めてこの言語を使用しますが、フローをリダイレクトする出力またはミラーの一部として/を条件付きで使用することで、少なくとも少しのスペースを節約できたと思います。恐らく恐ろしく非効率的かもしれませんが、少なくとももう少し削減できると思います。

入力は初期スタック、出力は stdout

オンラインでお試しください!


プログラミングパズルとコードゴルフへようこそ!
デニス

@デニスありがとう!私は歓迎に感謝します。
カラムカー

4

Dyalog APL、11 バイト

⎕IO←0多くのシステムでデフォルトである 必要があります。

⊢⍴'\/'⊃⍨2|⊢

引数

再形成(繰り返し)

'\/'⊃⍨ によって選択された文字列「/」

2|⊢ 引数が2で除算されるときの除算剰余

TryAPLオンライン!


クール!Jに非常に似ています
コナーオブライエン

@ ConorO'Brienはい、唯一の違いは、Jの2トレインがフックであり、Dyalogのトップであるため、明示的な左脚が必要なことです。
アダム

ああ、なぜ議論があったのだろうと思っていました。
コナーオブライエン

1
最後に、すべてのキャラクターが正しくレンダリングされたAPLの回答!
チョイス

@Cyoceええ、SEにフォントを指定(および埋め込み)できるといいのですが。
アダム

3

Java 7、68 65バイト

void c(int i){for(int x=0;x++<i;)System.out.print(i%2<1?92:'/');}

@ user902383@SeanBeanのおかげで3バイト節約されました。

この答えと同様に、最短のコードゴルフはループして印刷するようです。再帰的であり、
void c(int i){System.out.print(new String(new char[i]).replace("\0",i%2<1?"\\":"/"));}
より長いようです。

未ゴルフ&テストコード:

ここで試してみてください。

class M{
  static void c(int i){
    for(int x = 0; x++ < i;){
      System.out.print(i % 2 < 1
                        ? 92
                        : '/');
    }
  }

  public static void main(String[] a){
    for(int i = 0; i < 10; i++){
      c(i);
      System.out.println();
    }
  }
}

出力:

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

やあケビン。なぜラムダ式ではないのですか?
ベール

@ValeこんにちはVale。私は昔ながらのJava 7プログラマーだからです。:) Java 8または9の回答が私の回答とわずかに異なる場合は、お気軽に投稿してください。
ケビンCruijssen

2
@Vale(彼はそのように奇妙です:P)
ショーンワイルド

1
変更x=-1;++x<iするx=0;x++<iと、1バイト削減できると思います
-user902383

1
また、あなたは置き換えることができます"\\" : "/"92:'/';)
ショーン・ワイルド

3

R、47 46バイト

n=scan();cat(rep(c("\\","/")[n%%2+1],n),sep="")

Rでは、バックスラッシュをエスケープする必要があります。引数sepも後に来るため、完全に指定する必要があります...。したがって、文字を保存する面倒な機会はほとんどありません:(

1バイト離れてゴルフをしてくれたバウンシーボールに感謝します。


1
インデックスを使用して1バイトを保存しますn=scan();cat(rep(c('\\','/')[n%%2+1],n),sep='')
。– bouncyball

3

T-SQL 50バイト

もちろんSTDINここにはありませんので、次のINTようなハードコードされた変数を想定しましょう:DECLARE @ INTその場合の解決策は:

PRINT IIF(@%2=0,REPLICATE('\',@),REPLICATE('/',@))

3

ピップ、8バイト

"\/"@aXa

簡単です。モジュラーインデックスを使用して、文字と文字列の繰り返しを選択して乗算します。オンラインでお試しください!


この質問は、Pip、Pyth、およびJellyの興味深い比較を示しています。後者はそれぞれ5バイトを獲得しています。3つの言語すべてに暗黙的な出力があり、モジュラーインデックス作成と文字列の繰り返しのための単一文字演算子があり、文字列のバックスラッシュをエスケープする必要はありません。ただし、2つの重要な違いがあります。

  1. 特定の状況では、PythとJellyは、ストリングを定義するために1つの区切り文字のみを必要とします。
  2. PythとJellyには、入力をコードで明示的に表す必要のない構文があります(ただし、Maltysenが私に説明したように、非常に異なる理由があります)。

これらの機能のいずれもPip 1には表示されない可能性があります(不均衡なデリミタの美学が好きではなく、ポイントフリー構文または暗黙的なオペランドは、中置式パーサーにとってあまりにも異質だと思われます) 3番目のフィドルを演奏しても構いません。ゴルフでは「読みやすさ」は非常に相対的ですが、これらの3バイトを追加すると、Pipプログラムが一目で理解しやすくなると主張します。

1ただし、Pipの1文字の文字列は'、CJamとLispでの引用に触発された単一の区切り文字を使用します。


コードゴルフでは、読みやすさがプラスであるかどうかわかりませんか?バイトを犠牲にしません!
GreenAsJade

@GreenAsJade多くの人が同じように感じることを期待しています。私は1つだけ区別します:code golf!= golflang design。今、あなたは同じ原則(短い方が常に良い)が言語設計にも適用されると主張するかもしれません。私はちょうど私のために、使いやすさも美しさがあること言っているの配慮。
DLosc

ゴルフ言語を作成するためのプロのヒント:中置
記号を


pythには、暗黙的なポイントフリー構文はありません。Pythonでの動作とほぼ同じように動作し、読みやすく短いものになります。一方、不均衡な区切り文字に関するあなたのコメントはかなり真実です
-Maltysen




2

SpecBAS-28バイト

1 INPUT n: ?"\/"(ODD(n)+1)*n

ODD数値が奇数の場合は1を返し、それをインデックスとして使用して正しい文字をn回印刷します。SpecBAS文字列は文字1で始まるため、1を追加する必要があります。


2

Java 8、56バイト

(i,j)->{for(j=i;j-->0;)System.out.print(i%2<1?92:'/');};

私の答えをさらにゴルフしてくれた@Kevin Cruijssenの上級者に感謝します。

Ungolfedテストプログラム

public static void main(String[] args) {
    BiConsumer<Integer, Integer> consumer = (i, j) -> {
        for (j = i; j-- > 0;) {
            System.out.print(i % 2 < 1 ? 92 : '/');
        }
    };

    consumer.accept(5, 0);
    consumer.accept(1, 0);
    consumer.accept(8, 0);
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.