その上に奇数が付いた小さな山のチェーンを表示します!


19

最初の行はceil(n/2)、各要素が次の要素で構成される:<space><odd-number><space>

2行目はceil(n/2)要素で構成されていますが、各要素は/ \唯一のものです。

あなたは取ることができるn >= 0n <= 10

入力:3

 1  3
/ \/ \

入力:10

 1  3  5  7  9
/ \/ \/ \/ \/ \

Python 3の例、103バイト:

lambda a:print("".join([" "+str(i)+" "for i in range(1,a+1,2)]+["\n"]+["/ \\"for i in range(1,a+1,2)]))

バイト単位の最短コードが勝つ:)


3
すべての入力が11未満になると仮定できますか?
ブルー

はい、すべての入力は11未満です!
シグメイ

8
サイトへようこそ!code-golfのデフォルトでは、文字ではなくバイトでカウントします。ただし、これをオーバーライドする場合は、選択できます。また、次回はサンドボックスをお勧めします:)
エリックアウトゴルファー

私はあなたが正しいバイトを意味しました!良いバイトカウンターがありますか?
シグメイ

1
空白をどのように具体的に処理する必要がありますか?各要素は<space><odd-number><space>であると言いますが、テストケースには最後の奇数の後にスペースがありません。オプションですか?また、n=02つの空の行の出力はありますか?
xnor

回答:


12

05AB1E19 15 14 12バイト

05AB1EはCP-1252エンコードを使用します。Adnanの
おかげで4バイト節約されました。carusocomputingの おかげで2バイト節約

ÅÉðìDg…/ \×»

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

説明

ÅÉ               # list of uneven number up to input
  ðì             # prepend a space to each
    Dg           # get length of list
      …/ \       # push the string "/ \"
          ×      # repeat the string length-list times
           »     # join rows by spaces and columns by newlines

HOW LONG HAS Ï存在していました!それは便利なようです。
魔法のタコUr

2
@carusocomputing長い時間:p
アドナン

2
LDÉÏ同じであるÅÉ„ ýðì置き換えることができðì)»:)。
アドナン

2
を削除)できますか?
魔法のタコUr

3
ÅÉðìDg…/ \×»別のバイト保存のDg代わりに使用¹;îします。
魔法のタコUr

11

パイク、16バイト

S2%idm+dJil*"/ \

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

17バイト以上

S2%i`~Bd.:il*"/ \

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

これは、IMHO an AWESOMEアルゴリズムを使用して、最初の行が正しく整列されていることを確認します。

S                 - range(1, input+1)
 2%               -  ^[::2]
   i              -   i = ^
    `             -    str(^)
     ~Bd.:        -     ^.translate("><+-.,[]", " ") <-- awesome bit here
          il      -  len(i)
            *"/ \ - ^ * "/ \"

これにより、文字列化されたリスト内のすべての文字がスペースに置き換えられます。~BBrain ****言語のすべての文字が含まれており、この変数を使用するのは初めてです。

プログラム`~Bd.:はこれを行います:

`~Bd.: - input = [1, 3, 5, 7]
`      - str(input)  # stack now ["[1, 3, 5, 7]"]
 ~B    - "><+-.,[]"  # stack now ["[1, 3, 5, 7]", "><+-.,[]"]
   d   - " "         # stack now ["[1, 3, 5, 7]", "><+-.,[]", " "]
    .: - translate() # stack now [" 1  3  5  7 "]

...これは...すごい?あなたは05AB1Eとみんなを倒しただけですよね?
エリックアウトゴルファー

私はゼリーを試しました。きっともっと長くなるでしょう。
エリックアウトゴルファー

「数字の配列を均等に配置するためにBF文字セットを使用しました」あなたが言うとは思わなかったことが
...-ETHproductions

これは本当に賢いです:)よくやった
Sygmei

@ErikGolferエリックゴルファー05AB1Eに勝つことはもうありません。
boboquack

6

Python 2、63バイト

lambda n:' '.join(n%2*`n`for n in range(n+1))+'\n'+-~n/2*'/ \\'

最初の行のちょっとしたトリック:偶数は出力しませんが、空の文字列として取得します。これにより、空のスペース(0が存在します)が始まり、範囲を変更せずに数字の間に2つのスペースがあります。マイナス面は偶数の先頭のスペースです n


6

Pythonの2 3、67 65 63 60バイト

ここであまりクレイジーなことはありません最初のセクションはおそらくもっと短くすることができると思いますが、どのようにすればよいかよくわかりません。私はこの場合-~n/2にうまくいくという事実を使用しceilます。

lambda n:-~n//2*' %d '%(*range(1,n+1,2),)+'\n'+-~n//2*'/ \\'

以下は、Python 2の代替61および65バイトソリューションです。

lambda n:-~n/2*' %d '%tuple(range(1,n+1,2))+'\n'+-~n/2*'/ \\'
lambda n:' '+'  '.join(map(str,range(1,n+1,2)))+'\n'+-~n/2*'/ \\'

2バイトを保存してくれたRodと、バージョンを切り替えて別のバイトを保存してくれたArtyerに感謝します。


あなたは、Python 3に移動する場合は、置き換えることができ%(tuple(...))%[*...]、しかし、あなたは何をする必要があります-~n//2
Artyer

@Artyerはこれを試しましたが、大量のエラーをスローしました。私が考えて、私はキャストに必要となるrange3人の者がいるため、リストにrangeはPython 2点のようなものですxrange
ケード

また、周囲の括弧を削除することもできますtuple()
Rod

あなたは行うことができ(*<iterable>,)ますが、電源を入れた後にかかわらず、これは、1つのバイトを節約するのPython 3のタプルにキャストするn/2n//2ためのPython 3
Artyer

@RodとArtyerに感謝します!:)
Kade

6

JavaScript(ES6)、55バイト

f=n=>n%2?f(n-1).replace(`
`,` ${n} 
/ \\`):n?f(n-1):`
`
<input type=number min=1 max=10 oninput=o.textContent=f(this.value)><pre id=o>

2行目の終わりのスペースに注意してください。


ダンギット、私.replaceはより良いかもしれないと思ったが、私はチェックすることを気にしませんでした
...-ETHproductions

質問は、「あなた ...」と言う
ソロモンUcko

1
@SolomonUcko HTMLは答えの一部ではなく、単にその動作を実証するのに役立ちます。そのため、値は1〜10に制限される可能性があります。それ以外の場合、結果は有効になりません。
ニール

そうですか。そうでない場合は、正しい間隔を決定する必要があります
ソロモンUcko

5

Python 2、53バイト

lambda n:" 1  3  5  7  9"[:-~n/2*3]+'\n'+-~n/2*"/ \\"

制限n <= 10を利用して、ハードコードされた文字列から一部を切り取ることでトップラインを生成します。

1〜10の出力は次のとおりです。

 1 
/ \
 1 
/ \
 1  3 
/ \/ \
 1  3 
/ \/ \
 1  3  5 
/ \/ \/ \
 1  3  5 
/ \/ \/ \
 1  3  5  7 
/ \/ \/ \/ \
 1  3  5  7 
/ \/ \/ \/ \
 1  3  5  7  9
/ \/ \/ \/ \/ \
 1  3  5  7  9
/ \/ \/ \/ \/ \

0の出力は2つの空の行です。


5

Vim、73 59 56バイト

これは、単純な問題のように思える非常に高いバイト数のIMOです。明らかな何かを見逃しているように感じます。

caw="/2*2
caw1357911/"
DYp:s;.;/ \\;g
k:s// & /g

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

印刷できないもの:

^Acaw^R=^R"/2*2      # Transform a number into the next odd number (3->5,4>5)
^[^Acaw1357911^[/^R" # Insert 1357911, delete everything after the number above
DYp:s;.;/ \\;g       # Duplicate the line, replace numbers with / \
k:s// & /g           # On the line above, add spaces around numbers
<trailing newline>

いいですね、私はいつもvimに賛成です!ただし、印刷できない文字もバイトとしてカウントされるため、このソリューションは実際には73バイトです。ごめんなさい!
DJMcMayhem

ただし、いくつかのヒントがあります。1)代替コマンドで別のセパレーターを使用する場合、スラッシュをエスケープする必要はないので、できます:s;.;/ \\;g。2)2番目の代替コマンドでは、検索を空のままにすると、最後の検索が使用されます(これは偶然同じです)。また、&同等で\0あり、1バイト短くなります。あなたが得るよう:s// & /g
DJMcMayhem

ありがとう!あなたがより少ないバイトで別のアプローチを使用したかどうかを確認するためにあなたからVの答えを見たいと思っていましたが、それは大丈夫です!最初のコメントは、Try it Onlineリンクを更新するのを忘れた機能だと思います。2番目は3バイトを受け取ったので、ありがとう!
nmjcman101

4

Mathematica、65バイト

" "<>Range[1,#,2]~StringRiffle~"  "<>"
"<>"/ \\"~Table~⌈#/2⌉&

匿名関数。入力として数値を受け取り、出力として文字列を返します。Unicode文字は、それぞれU + 2308 LEFT CEILING for \[LeftCeiling]およびU + 2309 RIGHT CEILING for \[RightCeiling]です。


4

WinDbg、100バイト

.echo;.for(r$t1=1;@$t1<=2*@$t0+@$t0%2;r$t1=@$t1+2){j@$t1<=@$t0 .printf"\b %d \n",@$t1;.printf"/ \\"}

入力は、擬似レジスターに値を設定することにより行われます$t0

ここでは、最初に文字列を作成して全体を表示しようとするのではなく、作成中の文字列を印刷するだけで最短になります。WinDbgがアドレスに書き込みを許可する場合、より短い解決策があります0

使い方:

.echo;                                            * Print a new line that'll be deleted
.for(r$t1=1; @$t1 <= 2*@$t0+@$t0%2; r$t1=@$t1+2)  * Enumerate 1 to 4*ceil($t0/2), count by 2
{
    j@$t1<=@$t0                                   * If $t1 <= $t0...
        .printf"\b %d \n",@$t1;                   * ...Print $t1 (and newline for last n)
        .printf"/ \\"                             * ...Else print the / \'s
}

の各値の出力n

0:000> .for(r$t0=0;b>@$t0;r$t0=@$t0+1){.printf"\n\nn=%d\n",@$t0; .echo;.for(r$t1=1;@$t1<=2*@$t0+@$t0%2;r$t1=@$t1+2){j@$t1<=@$t0 .printf"\b %d \n",@$t1;.printf"/ \\"}}


n=0



n=1
 1 
/ \

n=2
 1 
/ \

n=3
 1  3 
/ \/ \

n=4
 1  3 
/ \/ \

n=5
 1  3  5 
/ \/ \/ \

n=6
 1  3  5 
/ \/ \/ \

n=7
 1  3  5  7 
/ \/ \/ \/ \

n=8
 1  3  5  7 
/ \/ \/ \/ \

n=9
 1  3  5  7  9 
/ \/ \/ \/ \/ \

n=10
 1  3  5  7  9 
/ \/ \/ \/ \/ \

4

> <>(魚)、69 60 68 55バイト

5|v&+%1:,2
1->:?!v:
8~v!?l<on$o:*4
a&/o
1->:?!;"\ /"ooo

このオンライン通訳に貼り付けてください!

最初の行の5は入力値です(5としてハードコードされ、ユーザー入力の場合は0-aまたはiに置き換えられます)。

編集1:新しい行の配置を最初の行スペース(空)に移動して、新しい行のスペースを全体で9バイト節約しました。

編集2:user7150406で述べたように、出力が間違っていた(スペースが印刷されていない)これは8バイトの損失で修正されました。

編集3:ロジックを完全に変更しました。数字が奇数であるかどうかをチェックするポイントはありません。すべての数字をスタックに置き、1秒ごとに削除します。バイトが13個保存されました!


4

Java、118 112バイト

編集:@peechのおかげで6バイト保存

ゴルフ:

String M(int n){String o=" ";int i=1;n+=1;for(;i<n;i+=2)o+=i+"  ";o+="\n";for(i=0;i<n/2;i++)o+="/ \\";return o;}

ゴルフをしていない:

public String M(int n)
{
    String o = " ";
    int i=1;
    n += 1;
    for (; i < n;i+=2)
        o += i + "  ";
    o += "\n";
    for (i = 0; i < n/2; i++)
        o += "/ \\";
    return o;  
}

テスト:

    OddMountains om = new OddMountains();
    System.out.println(om.M(1));
    System.out.println();
    System.out.println(om.M(3));
    System.out.println();
    System.out.println(om.M(5));
    System.out.println();
    System.out.println(om.M(7));
    System.out.println();
    System.out.println(om.M(10));

 1  
/ \

 1  3  
/ \/ \

 1  3  5  
/ \/ \/ \

 1  3  5  7  9  
/ \/ \/ \/ \/ \

ああ、あなたはそれに私を打ち負かしました:)私もJavaの答えを投稿したかったです。とにかく、ここでもう少しゴルフをするためのいくつかの提案がありiます。最初のforループで初期化する必要はありませんfor(; i < n; i++)。これは次のようになります。:あなたも、さらにこの変更にゴルフをすることができますo += i + " ";への変更o += i++ + " ";、ループになるためにfor(; i < n; )。ifステートメントを保持したい場合です。あなたは私にあなたの増分を変更することができますi += 2 if文全体を削除し、その場合には、私の第二の命題が適用されますdoes notの:)(PS:私haventはこの:)をテスト)
ザピーチ

@peech慰めの場合、通常、最初のC#の回答を取得するのは私にとっては競争です。それがなくなった場合、Javaの回答をたどります:)ヒントをありがとう。ループiから初期化を削除しましたforが、他のことはループでスタックしました。もう少し
ピートアーデン

ええ、私は以前のコメントで「これをテストしていません」と言ってくれてとても嬉しいです...もちろん、o += i++ + " ";:) では動作しません。ところで、あなたのコードには小さなバグがあります:) Javaはfloor()整数の除算(4/3 = 1)を使用しているので、次のようにする必要がありますint i = 1; n += 1; for (; i < n; i += 2) { ... jada jada ... }。iをインクリメントi += 2する場合、ifステートメントがパリティをチェックする必要はありません。また、さらに3バイトを保存します:)ここで試してください:ideone.com/ekaUUH
peech

@peech誰かが私のコードを修正するのに十分自信があるなら、私はそれが正しいに違いないと思います。ヒントをありがとう- floor数日前にいくつかのJavaで遊んでいると、自分が分裂の気まぐれを発見しました:)
ピートアーデン

3

C#6、95バイト

n=>{var o="";int i=1;for(;i<=n;i+=2)o+=$" {i} ";o+='\n';for(i=1;i<=n;i+=2)o+="/ \\";return o;};

フルラムダ:

Func<int, string> a = n=>
{
    var o="";int i=1;
    for(;i<=n;i+=2)
        o+=$" {i} ";
    o+='\n';
    for(i=1;i<=n;i+=2)
        o+="/ \\";
    return o;
};

3

CJam、26 23バイト

Sri,:)2%_S2**N@,"/ \\"*

試して!

-3 8478(Martin Ender)に感謝


あなたはスタック操作のいくつかを回避することにより、3つのバイトを保存することができます:Sri,:)2%_S2**N@,"/ \\"*
マーティン・エンダー

@MartinEnderああ、だからそれを削除できませんでした+。そして私は誓う、私は本当に使用しましたed!... Pythよりも短い。
エリックアウトゴルファー

3

ゲームメーカー言語(GM 8.0)、97バイト

m=ceil(argument0/2)e=""for(i=1;i<2*m;i+=2)e+=" "+string(i)+" "return e+"#"+string_repeat("/ \",m)

入力が最大10であるchr(48+i)ことを考えると、代わりに動作しますstring(i)ある場合、バイト数は同じですが、のます。

読みやすい:

m = ceil(argument0/2)
e = ""
for (i = 1; i < 2*m; i += 2 )
  e += " " + string(i) + " "
return e + "#" + string_repeat("/ \", m)


3

> <>(魚)52 63 62バイト

<v!?:-1:!?-1%2:
 >~la}}" "72.
v!?-2lno<o"  "
o
>:?!;"\ /"ooo1-

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

単純に場所を使用するには nスタックに置いて、離れてです!

これの多くは@ Teal-Pelicanの回答から引用されています:)。

編集:出力は、実際には> <>提出のいずれでも正しく整列されていません!修正しています...

編集2:私はいくつかのバイトを犠牲にしなければならなかったが、出力は実際に今正しいです。

Edit3:\ /ミラーの面白さはなくなり、1バイト節約しました。

出力:

 1  3  5  7  9
/ \/ \/ \/ \/ \

印刷中にエラーを見つけてくれてありがとう、私は今私の答えを編集しています(私の場合はかなり些細なことです)。
ティールペリカン

問題ありません、私は> <>提出を見てうれしく思いました!これらの変更が私の悪い傷を傷つけるので、どれが小さくなっているのかを見るのは面白いでしょう。
redstarcoder

私は5バイト小さいように見えます:p。
redstarcoder

今度は、もう1つ見て、モートバイトを少し絞ることができるかどうかを確認します。
ティールペリカン

1
私は家に帰り、それについて新しい方法を考えました。私の新しい答えは55バイトです!:D-私がこれに取り組んでくれてありがとう、楽しかった。
ティールペリカン



2

バッシュ、 645957514948、45バイト

編集:

  • マイナス3バイト(STDINの代わりに$ 1を使用)
  • 置換することにより、1以上のバイトをオフ-s ""-s\
  • printfseq -fに置き換えてマイナス2バイト(@Adamに感謝!)
  • 関数の代わりにスクリプトにリファクタリングされました(> <>に勝つため)
  • 余分なスペースを削除
  • sed式を少し最適化しました

ゴルフ

チャンク(45バイト):

seq -f" %g " -s\  1 2 $1|sed 'p;s| . |/ \\|g'

機能(元のバージョン)(57バイト):

M() { printf " %s %.0s" `seq 1 $1`|sed 'p;s| . |/ \\|g';}

テスト

--- mountains.sh ----
#!/bin/bash
seq -f" %g " -s\  1 2 $1|sed 'p;s| . |/ \\|g'

>./mountains.sh 10
 1  3  5  7  9 
/ \/ \/ \/ \/ \

>M 10
 1  3  5  7  9 
/ \/ \/ \/ \/ \

2
sed素晴らしいです。:機能やprintf関数を使用していないことで、あなたは10バイトの保存seq -f" %g " -s "" 1 2 $1|sed 'p;s| . |/ \\|g'
アダム

それはいいアドバイスです!ありがとうございました !catIMOはデータを渡すために事前定義された変数を使用することは実際には公平ではないため、STDINからの入力の読み取りにまだ使用しています。–
zeppelin

1
$1プログラムに送信される最初のパラメータにすぎません。不正行為だとは思わないmeta.codegolf.stackexchange.com/questions/2447/…–
Adam

はい、あなたは正しいです。再度、感謝します !
ツェッペリン


2

Ruby 82 60バイト

Rubyの方が優れていれば、迅速で汚れたRubyソリューションを確実に最適化できます。

puts "",1.step($*[0].to_i,2).map{|x|$><<" #{x} ";"/ \\"}*""

使用法:prog.rb 10
出力:

 1  3  5  7  9
/ \/ \/ \/ \/ \

編集:@Manatworkによる多数の編集と最適化!


print$><<そして、文字列補間を使用します" #{x} "。しかし、最良の方法は.each、コールバックから直接1行目を出力し、変数に2行目を作成することにより、の数を減らすことですs="";(1..$*[0].to_i).step(2){|x|$><<" #{x} ";s+="/ \\"};puts"",s。またはputs"",(1..$*[0].to_i).step(2).map{|x|$><<" #{x} ";"/ \\"}*""
マナトワーク

Numeric#stepその周りに括弧を必要とし、長い範囲の構文を避けることができ、2パラメータを受け取ります(1..$*[0].to_i).step(2)1.step($*[0].to_i,2)
マナトワーク

@manatwork本当に良い提案!今後のcodegolfの投稿であなたのアドバイスをたくさん使っているのを見ることができるので、本当に感謝しています。
ベンヒリ

1

JavaScript(ES6)、66 64バイト

n=>(f=n=>n?f(n-1)+(n%2?n+s:s):s=" ")(n)+`
`+"/ \\".repeat(++n/2)

最初の行を再帰的に構築してから、2番目の行を追加します。最初の行は、各アイテムnが偶数の場合はスペースに変換され、奇数の場合はnがスペースで連結された範囲[0 ... n]であるという観察で構築されます。


1

Python 2、60バイト

@Kadeのおかげで6バイト節約できました!

lambda s:" "+"  ".join(`range(s+1)`[4::6])+"\n"+-~s/2*"/ \\"

list()キャストを使用する必要はありません。削除すると60になります:)
Kade

@Kadeバッククティック `` ``を文字列にします。lambda s:" "+" ".join(range(s+1)[1::2])+"\n"+-~s/2*"/ \\"eそれはintのリストを提供し、それが死ぬので、私はそれが好きではありません
オリバーNi


@Kade Huh。これは、オンライン動作しません... 決して心を、私はそれが機能しなかったと思った理由を私は知らない...
オリバー・ニッケル

1

バッチ、107バイト

@set s=
@set t=
@for /l %%i in (1,2,%1)do @call set s=%%s%%  %%i&call set t=%%t%%/ \
@echo%s%
@echo %t%

1

Scala、99 95バイト

(? :Int)=>for(i<-0 to 1)println(1 to ?filter(c=>c%2>0)map(c=>if(i<1)s" $c "else"/ \\")mkString)

非ゴルフ

(? :Int) => 
    for (i<-0 to 1)
        println(
            1 to ?filter(c=>c%2>0)
                  map(c=>if(i<1)s" $c "else"/ \\")
                  mkString
        )

1

ルビー、48バイト

->x{" 1  3  5  7  9 "[0..3*x-=x/2]+?\n+"/ \\"*x}

1

オクターブ、45バイト

f=@(n)reshape(sprintf(' /%d \',1:2:n),2,[]);

テスト:
f(8)

 1  3  5  7
/ \/ \/ \/ \

入力= 0の場合、/があります:)
Sygmei

あなたの答えが正しくないとは言わなかった!その小さな面白いグリッチに気づいた:)
シグメイ

n == 0と仮定することはできません:(
rahnema1

1

QBIC、35バイト

:[1,a,2|X=X+!b$+@ | Y=Y+@/ \|]?X ?Y

説明:

:           gets a CMD line param as INT 'a'
[1,a,2|     FOR b = 1 to a STEP 2
X=X+!b$+@ | Add to X$ the counter of our FOR loop and a trailing space
            Leading space is provided by the cast-to-string function.
Y=Y+@/ \|   Add to Y$ the mountain.
]           Close the first possible language construct (IF, DO or FOR). In this case: NEXT
?X ?Y       Print X$, Print Y$. The space adds a newline in the resulting QBASIC.

0

北内、140バイト

$0[0]$1[int(input":")]$2[""]$3[""]$0#?(mod@2)($2[add(add(@" ")(string($0@)))"  "]
$3[add@"/ \"])?(neq@($1@))([add@1]&1)print($2@)print($3@)%

0

Perl、46 + 2(-plフラグ)= 48バイト

@_=map$_%2?$_:"",0..$_;$_="@_$/"."/ \\"x(@_/2)

を使用して:

perl -ple '@_=map$_%2?$_:"",0..$_;$_="@_$/"."/ \\"x(@_/2)' <<< 7    

または52バイト:

@_=map$_%2?$_:"",0..pop;print"@_$/","/ \\"x(@_/2),$/

を使用して:

perl -e '@_=map$_%2?$_:"",0..pop;print"@_$/","/ \\"x(@_/2),$/' 7
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.