在其顶部显示一连串带奇数的小山脉!


19

第一行由ceil(n/2)元素组成,其中每个元素是:<space><odd-number><space>

第二行由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吗?
2016年

是的,所有输入将小于11!
Sygmei

8
欢迎光临本站!对于代码高尔夫,我们的默认设置是以字节为单位,而不是字符。但是,如果您想覆盖它,那是您的选择。另外,我会在下次推荐沙盒:)
Egg the Outgolfer '16

我的意思是字节你是对的!周围是否有一个好的字节计数器?
Sygmei

1
我们必须如何具体处理空白?您说每个元素都是<space><odd-number><space>,但是测试用例的最后一个奇数后没有空格。它是可选的吗?另外,输出是否为n=0两个空行?
xnor

Answers:


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

存在多长时间Ï?suuuper似乎很有用。
魔术章鱼缸

2
@carusocomputing很长时间了:p
Adnan

2
LDÉÏ与相同ÅÉ„ ýðì可以用ðì)»:) 代替。
阿德南

2
您可以删除),不是吗?
魔术章鱼缸

3
ÅÉðìDg…/ \×»也用于Dg代替¹;î另一个字节保存。
魔术章鱼缸

11

Pyke,16个字节

S2%idm+dJil*"/ \

在这里尝试!

17个字节甚至更棒

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

在这里尝试!

这使用IMHO AWESOME算法来确保第一行正确对齐。

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

这会将字符串列表中的所有字符替换为空格。~B包含Brain ****语言中的所有字符,这是我第一次使用此变量。

该程序`~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 2016年

这真的很聪明:)做得好
Sygmei

@ErikGolferエリックゴルファー不再击败05AB1E。
boboquack

6

Python 2,63个字节

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

第一行的小技巧:它不打印偶数,而是将它们作为一个空字符串,这会导致开始一个空白(在该处为0),并且在数字之间加倍空格而未对范围进行任何修改,缺点是偶数中的领先空间 n


6

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*'/ \\'

感谢Rod节省了2个字节,Artyer通过切换版本节省了另一个字节:)


如果您使用Python 3,则可以替换%(tuple(...))%[*...],但必须这样做-~n//2
Artyer

@Artyer尝试过此操作,但会引发很多错误。我我需要转换range为列表,因为3 range就像Python 2一样xrange
卡德,2016年

您还可以删除tuple()
Rod

你可以做(*<iterable>,)投给元组在Python 3这样可以节省1个字节后虽然你把n/2进入n//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>

注意第二行末尾的空格。


丹吉特,我想.replace可能会更好,但我不愿意去检查...
ETHproductions 2016年

问题说“您可能会假设...”
Solomon Ucko '16

1
@SolomonUcko HTML并不是答案的一部分,它只是用来演示其操作。因此,最好将值限制在1到10之间,否则结果将无效。
尼尔

我知道了。否则,您将必须确定正确的间距
Solomon Ucko '16

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的输出是两个空行。


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)在第二个替代命令上,您可以将搜索保留为空,它将使用您的上一次搜索(恰好是相同的)。另外,&等于\0和短一个字节。所以您会得到:s// & /g
DJMcMayhem

谢谢!我希望从您那里得到一个V答案,看看您是否使用了更少字节的其他方法,但这没关系!我认为第一条评论是我忘记更新“在线试用”链接的功能。第二个给了我3个字节,所以谢谢!
nmjcman101 '16

4

Mathematica,65个字节

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

匿名函数。以数字作为输入,并返回一个字符串作为输出。Unicode字符分别为的U + 2308 LEFT CEILING \[LeftCeiling]和的U + 2309 RIGHT CEILING \[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让我写信给address,我的解决方案会更短一些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

> <>(FISH),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:完全改变了逻辑,没有一点可以检查数字是否为奇数-而是将所有数字都放在堆栈中,然后每秒删除一次。字节保存13!


4

Java,118112字节

编辑:由于@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的增量更改为,i += 2 并删除整个if语句,但是在那种情况下,我的第二个命题不适用:)(ps:我还没有测试过这个:))
peech

@peech如果有什么安慰的话,通常这是我获得第一个C#答案的竞赛。如果没有了,我会摸索Java答案:)感谢您的提示。我已经ifor循环中删除了初始化,但是其他事情使它陷入了循环。我可能需要多玩一些:)
Pete Arden

恩,我很高兴在我之前的评论中说“我还没有测试过”……当然,它不适用于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时发现了该部门自己的怪癖:)
Pete Arden

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;};

全lambda:

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@,"/ \\"*
Martin Ender

@MartinEnder哦,所以这就是为什么我不能删除它的原因+。我发誓,我真的很习惯ed!...比Pyth短
暴民埃里克

3

Game Maker Language(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的答案:)。

编辑:输出实际上在任一<<>提交中均未正确对齐!定影...

Edit2:我不得不牺牲一些字节,但是现在输出实际上是正确的。

Edit3:使用\ /镜像不再有趣,我节省了1个字节。

输出:

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

感谢您在打印中发现错误,我现在正在编辑我的答案(对我来说是微不足道的),很有趣的是,基本答案相同,但节省了大量字节。
蓝绿色鹈鹕

没问题,我很高兴看到> <>提交!看看现在哪个变小会很有趣,因为这些变化使我的哈哈变得非常糟糕。
redstarcoder

看起来我7月份小了:p。
redstarcoder

现在,我将再次查看我的数据库,看看是否可以从aha中挤出几个微尘字节。
蓝绿色鹈鹕

1
我回到家,想到了一种新的解决方法。我的新答案是55个字节!:D-感谢您让我参与其中,这很有趣。
蓝绿色鹈鹕

2

C,100 79 77字节

#define P(s)for(i=0;i++<n;printf(s,i++));puts("");
i;f(n){P(" %d ")P("/ \\")}

2

R,70 69 68 58字节

cat(paste("",z<-seq(,scan(),2)),"\n");for(i in z)cat("/ \\")

3:
#>  1  3 
#> / \/ \

10:
#>  1  3  5  7  9 
#> / \/ \/ \/ \/ \

2

重击 645957514948,45字节

编辑:

  • 减去3个字节(使用$ 1代替STDIN)
  • 替换-s ""为一个字节-s\
  • 减去2个字节替换的printfSEQ -f(感谢@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'
亚当(Adam)

这是一个很好的建议!谢谢 !我仍然使用cat从stdin读取输入,海事组织它不是真正的公平使用预先定义的变量来传递数据。
齐柏林

1
$1只是传输到程序的第一个参数。我不认为这是作弊行为,请参阅meta.codegolf.stackexchange.com/questions/2447/…–
亚当

是的,你是对的。再次感谢 !
zeppelin


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通过直接从回调输出第一行并在变量中建立第二行来减少的数量s="";(1..$*[0].to_i).step(2){|x|$><<" #{x} ";s+="/ \\"};puts"",s。甚至puts"",(1..$*[0].to_i).step(2).map{|x|$><<" #{x} ";"/ \\"}*""
manatwork '16

Numeric#step接受2个参数,因此可以避免需要括号的长语法:(1..$*[0].to_i).step(2)1.step($*[0].to_i,2)
manatwork '16

@manatwork真的很好的建议!我可以在以后的代码高尔夫帖子中看到自己使用了很多建议,所以我非常感谢您的投入。
Ben Hili

1

JavaScript(ES6),66 64字节

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

递归构建第一行,然后追加第二行。第一行是建立与观察,它是简单地在范围[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因为那样的话它会给出一个整数列表并且死掉了
Oliver Ni


@Kade Huh。它无法在线运行... 没关系,我不知道为什么我认为它不起作用...
Oliver Ni

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

Ruby,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

没说你的答案不正确!刚注意到那小小的有趣故障:)
Sygmei

我不能假设n == 0 :(
rahnema1 '16

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

Kitanai,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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.