この挑戦を思いついたアドナンへのすべてのクレジット。
休憩に入る前の最後の挑戦。
仕事
正の整数nを指定するnと、奇数の場合、/その回数だけ繰り返します。場合nでもあり、繰り返し\その何回も。
(真剣に、テストケースはこの説明よりもはるかに明確になるので、テストケースを見てください。)
スペック
- 合理的な入力/出力フォーマット。
- 標準の抜け穴が適用されます。
テストケース
n output
1 /
2 \\
3 ///
4 \\\\
5 /////
6 \\\\\\
休憩に入る前の最後の挑戦。
正の整数nを指定するnと、奇数の場合、/その回数だけ繰り返します。場合nでもあり、繰り返し\その何回も。
(真剣に、テストケースはこの説明よりもはるかに明確になるので、テストケースを見てください。)
n output
1 /
2 \\
3 ///
4 \\\\
5 /////
6 \\\\\\
回答:
n=>"\\/"[n%2].repeat(n)
無名関数を定義します。
*Javascriptで文字列が繰り返される場合のみ。ため息
f=n=>...、直接呼び出すことができます:(n=>...)(5)。(または、Node.js REPLを使用している場合はthis._、最後に入力したものを表すを使用できます)
+1を含む -p
STDINの入力で実行:
squigly.pl <<< 6
squigly.pl
#!/usr/bin/perl -p
$_=$_%2x$_;y;01;\\/
-pオプションを使用していますか?コードの最後に暗黙的がある;ため-p、;文字変換で使用します。これにより、さらに1バイト節約できます。これは、少なくともperlの5.6(おそらく限り以来働いている-pオプションは、実際には存在していた)
;によって追加されたトリック-pは非常に恐ろしい、よくやった。
putchar(92-n%2*45)同じ長さです。
ị⁾/\x
オンラインでお試しください!またはすべてのテストケースを検証します。
ị⁾/\x
ị⁾/\ modular-indexing into the string "/\"
x repeat
Ø^は1バイトより短いことは注目に値し⁾/\ ます。
#'\/'{~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)
これにより、必要なものが得られ、完了です。
If[OddQ@#,"/","\\"]~Table~#&
匿名関数。入力として整数を受け取り、出力として文字のリストを返します。
~Table~#。
<>""、文字のリストを返すことができると思います。
~Do~Infinity、10.2以降にも追加されている必要があります
更新:
param($n)('\','/')[$n%2]*$n
切り替えparamのおかげで、timmyd。
"$("\/"[$args[0]%2])"*$args[0]
または少し読みやすい
("\","/")[$args[0]%2]*$args[0]
テスト:
> 1..10 | % { ./run.ps1 $_ }
/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
\\\\\\\\\\
param($n)に$args、の代わりに入力を取得することで、数バイトを削ることができます。param($n)('\','/')[$n%2]*$n
"\\"["/"][[#~Mod~2]]~Table~#&
Cruelly [[1]]は、関数の最初の引数を[[0]]返し、関数(ヘッド)自体を返すという事実を利用します。この関数"\\"は、で「評価」されている、奇妙に有効な関数に適用され"/"ます。
a[b]単なる一般的な式であり、関数が単なる特別な種類の式であると考えると、少し奇妙ではありません(実際、関数はt式ですが、通常は形式を持つ式を変換するための単なるルールです)。:)a0b1f[x...]
:2%:"\/"rm:?jbw
:2% Input mod 2…
:"\/"rm …is the index of the element in string "\/",…
:?j …element that we juxtapose Input times to itself…
bw …and print to STDOUT after removing one slash/backslash
ri_"\/"=*
ri e# Read input and convert to integer N.
_ e# Duplicate N.
"\/"= e# Use N as cyclic index into "\/", giving '\ for even and '/ for odd inputs.
* e# Repeat N times.
⎕IO←0多くのシステムでデフォルトである
必要があります。
⊢⍴'\/'⊃⍨2|⊢
⊢ 引数
⍴ 再形成(繰り返し)
'\/'⊃⍨ によって選択された文字列「/」
2|⊢ 引数が2で除算されるときの除算剰余
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();
}
}
}
出力:
/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
x=-1;++x<iするx=0;x++<iと、1バイト削減できると思います
"\\" : "/"と92:'/';)
n=scan();cat(rep(c("\\","/")[n%%2+1],n),sep="")
Rでは、バックスラッシュをエスケープする必要があります。引数sepも後に来るため、完全に指定する必要があります...。したがって、文字を保存する面倒な機会はほとんどありません:(
1バイト離れてゴルフをしてくれたバウンシーボールに感謝します。
n=scan();cat(rep(c('\\','/')[n%%2+1],n),sep='')
"\/"@aXa
簡単です。モジュラーインデックスを使用して、文字と文字列の繰り返しを選択して乗算します。オンラインでお試しください!
この質問は、Pip、Pyth、およびJellyの興味深い比較を示しています。後者はそれぞれ5バイトを獲得しています。3つの言語すべてに暗黙的な出力があり、モジュラーインデックス作成と文字列の繰り返しのための単一文字演算子があり、文字列のバックスラッシュをエスケープする必要はありません。ただし、2つの重要な違いがあります。
これらの機能のいずれもPip 1には表示されない可能性があります(不均衡なデリミタの美学が好きではなく、ポイントフリー構文または暗黙的なオペランドは、中置式パーサーにとってあまりにも異質だと思われます) 3番目のフィドルを演奏しても構いません。ゴルフでは「読みやすさ」は非常に相対的ですが、これらの3バイトを追加すると、Pipプログラムが一目で理解しやすくなると主張します。
1ただし、Pipの1文字の文字列は'、CJamとLispでの引用に触発された単一の区切り文字を使用します。
code golf!= golflang design。今、あなたは同じ原則(短い方が常に良い)が言語設計にも適用されると主張するかもしれません。私はちょうど私のために、使いやすさも美しさがあること言っているの配慮。
{<\ />[$_%2]x$_}
for 1..6 {
say $_, {<\ />[$_%2]x$_}( $_ )
}
1/
2\\
3///
4\\\\
5/////
6\\\\\\
(i,j)->{for(j=i;j-->0;)System.out.print(i%2<1?92:'/');};
私の答えをさらにゴルフしてくれた@Kevin Cruijssenの上級者に感謝します。
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);
}
ゴルフの提案を歓迎します。オンラインでお試しください!
;'\'/2(%I*
使い方
Implicit input of n
; Duplicate n
'\'/ The strings "/" and "\"
2(% n mod 2
I If n mod 2, then "/", else "\"
* Multiply by n. Implicit print at the end.