第n三元


17

我将第n个三元定义为返回n并具有以下形式的三元:

1 ? 2 ? 3 ? n - 1 ? n : 0 : 0 : 0  # n - 1 zeroes

编写一个函数或完整程序,给定输入n将输出或返回第n个三进制。代码高尔夫球。

测试用例

0 #=> undefined behaviour
1 #=> 1
2 #=> 1 ? 2 : 0
3 #=> 1 ? 2 ? 3 : 0 : 0
10 #=> 1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 ? 10 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0

我认为第1000个三元组具有某种禅宗和谐。


1
是否允许尾随空格?
rink.attendant.2015年

@rink没有,没有训练空间
Caridorc

1
由于“三元”表示3,因此您难道不应该将其命名为“ n元”吗?
mbomb007

4
“编辑”评论的方法是:删除评论,然后添加新的评论。
Reto Koradi 2015年

1
@RetoKoradi如果评论在发布后五分钟之内,您可以编辑。
mbomb007

Answers:


8

Pyth- 19 18 17字节

这些空间让我丧命,正在想办法更好地处理它们。

+j" ? "SQ*tQ" : 0

它只是通过a将数字" ? "连接起来,然后将第二部分连接起来。

+              String concatenation
 j" ? "        Join by the string
  SQ           1-indexed inclusive range to input
 *             String repetition
  tQ           Input - 1
  " : 0        String implicitly closed by end of program

在这里在线尝试


10

CJam,18 18字节

ri,:)":?0"*2/ze_S*

在线尝试

说明

ri,:)          e# Generate the list 1..n.
":?0"*         e# Insert ":?0" between every two numbers.
2/             e# Split into pairs, e.g. 1:, ?0, 2:, ?0, ..., ?0, n.
z              e# First items in every pair before second items in every pair.
e_             e# Concatenate the two parts.
S*             e# Insert spaces.

12
我爱:)
Alex A.

9

Ruby,31个字节

f=->n{[*1..n]*' ? '+' : 0'*~-n}

测试:

> f[1]
=> "1"
> f[7]
=> "1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 : 0 : 0 : 0 : 0 : 0 : 0"

2
所以array * string== array.join string...有趣
Caridorc

这真的很酷。出于好奇,您做f[0]什么?
Alex A.

1
@AlexA。irb(main):007:0> f[0] ArgumentError: negative argument from (irb):6:in * from (irb):6:in block in irb_binding from (irb):7:in [] from (irb):7 from /usr/bin/irb:11:in <main>
Caridorc

4
@Caridorc大声且难以理解。真好
Alex A.

2
@daniero警告:可能会生成反字符串
Caridorc

8

CJam,19个字节

只是一个开始...

ri_,:)'?*\(":0"*+S*

怎么运行的

ri_                       e# Read the number as integer and make a copy of it on stack
   ,:)                    e# Convert the copy to array [1 .. n]
      '?*                 e# Join the numbers with a '?'. So we have [1 '? 2 '? ... '? n]
         \(               e# Swap the stack to get original integer on top. Decrement it by 1
           ":0"*          e# Get n-1 repeated ":0" string
                +S*       e# Join the two strings and fill it with spaces. 

在这里在线尝试


哎呀,迟到了1分钟。
丹尼斯

3
哇,您使用Cjam编码的速度非常快:O
Caridorc

@Dennis我认为您的初始解决方案实际上与Optimizers的第一个解决方案相同。至少我很确定自己首先看到了它。但是您在宽限期内进行编辑时,您的发布时间已更新。
Reto Koradi 2015年

1
@RetoKoradi他的帖子ID是52870。我的帖子是52869 :)
Optimizer

嗯,好吧,我没有权限查看此站点上已删除的帖子。两者一定是在同一时间弹出给我,而我只注意到顶部的那个。我似乎确实记得,在宽限期内进行编辑时,SE可能会做一些时髦的事情来发布时间。否则,您可以张贴一个空的占位符,并在宽限期内填写内容,以使它看起来像您的第一个答案,并且它实际上从一开始就包含有用的内容,因为没有跟踪宽限期内的编辑。
Reto Koradi 2015年

6

脑干,305

(没有来自STDIN的输入号码,请参见底部的编辑)

-[->+>+<<]>>>++++[>++++++++<-]>[<+>-]+++++++[>+++++++++<-]>[<+>-]++++++[>++++++++
<-]>[<+>-]++<<<<>>>+.-<<<[>.>.<.>>>>>++++++++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<
]>>[-]>>>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]>>[>++++++[-<++++++++>]<.<<
+>+>[-]]<[<[->-<]++++++[->++++++++<]>.[-]]<<++++++[-<++++++++>]<.[-]<<[-<+>]<+<<<
<-]>>-----<<<[->>.>.<.>>.<<<<]

我使用了这种可爱的算法来打印数字,该数字占用了整个程序的155个字节。

它适用于高达32768(算法的16位限制)的输入。它不会产生尾随空格,也可以用于输入1

input    output
0        [infinite loop (til underflow)]
1        "1"
2        "1 ? 2 : 0"
4        "1 ? 2 ? 3 ? 4 : 0 : 0 : 0"
etc.

快速演练:

设置(97字节)

-                                 Decrease input (position 0)
[->+>+<<]  >>>                    Copy input twice to the right and 
                                      shift 3 positions to the right
++++[>++++++++<-]>   [<+>-]       Precalculate number 32 (=" ") at position 3
+++++++[>+++++++++<-]>  [<+>-]    Precalculate number 63 (="?") at position 4
++++++[>++++++++<-]>    [<+>-]    Precalculate number 48 (="0") at position 5
++<<<<                            Precalculate number 2 for later use. This number
                                      will be printed in each iteration. (position 6)

第一部分(181字节)

>>>+.-<<<                Go to the char "0" we saved, increase it, print it,
                             decrease it and go back (this prints "1" everytime)
[                        While our second copy of the number isn't zero
    >.>.<.>>>                Move to " ", print, move to "?", print,
                                 move to " " again, print, move to our
                                 number at the end which is initially 2

    [>>+>+<<<-]>>>[<<<+>>>-]<<+>[<->[>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]
        ++++++++[<++++++>-]>[<<+>>-]>[<<+>>-]<<]>]<[->>++++++++[<++++++>-]]<
        [.[-]<]<             Algorithm to print the number at current position

    +<<<<                    Increase our number at the end and return to the beginning
-]                       Decrease the loop variable

第二部分(27字节)

>>-----<<<        Move to our "?" char and decrease it by 5 to get ":"
[-                While our first copy of the number isn't zero decrease it
   >>.>.<.>>.<<<<     Print " ", print ":", print " ", print "0"
]

如果允许将8个Brainfuck命令映射到3位,则此程序将占用114个字节和另外3位

一元,〜4.08 * 10 ^ 275字节

在这里可能太长了,但仅是4084522578628625602393299486062952863611126032086501306085250400447003793314577596676469855866584696018038896282464107885724924379287148671902707089354277989837147977861232927507437712250961455752103200401881554730750730283507507856463802516327402365571

编辑:我搞砸了,该程序并没有真正接受用户输入,它只是使用当前指针值作为输入。为了能够解析更多的数字,将需要更多,而我也不会因此而烦恼。

因此,它可以与直接输入到程序中的值一起使用(在程序前附加n次“ +”),但不适用于STDIN


5

JavaScript(ES6),42个 39字节

f=m=>(g=k=>k-m?k+` ? ${g(k+1)} : 0`:m)(1)

外部函数f获取输入值,然后调用内部函数g递归以从中间开始构建字符串,并使用输入值作为最大值来测试基本情况。

取消高尔夫:

function f(max) {
    function g(count) {
        if(count==max) {
            // base case: return max for the center
            return max;
        } else {
            // recursive case: build outer shell around center
            return count + " ? " + g(count+1) + " : 0";
        }
    }

    return g(1);
}


4

C#-76

Func<int,string>F=k=>{var r="";for(;k>1;)r=" ? "+k--+r+" : 0";return"1"+r;};

3

Haskell,53个字节

g n='1':foldr(\x s->" ? "++show x++s++" : 0")""[2..n]

工作原理:从空字符串开始,由内而外构建字符串,从n下到2上依次循环,并在当前数字前?加上a并附加a : 0。最后摆1在所有人面前。

一种不同的方法(由于@Mauris现在缩短了9个字节):

Haskell,60 51字节

 f n='1':((=<<[2..n])=<<[(" ? "++).show,\x->" : 0"])

它是如何工作的:文字1,然后? <x>为每个<x>[2..n]接着是一个恒定: 0的每个<x>[2..n]


基于您的60个字节的方法降至51:g n='1':((=<<[2..n])=<<[(" ? "++).show,\x->" : 0"])
Lynn

实际上,您只需将其替换(\_->" : 0")=<<[2..n][2..n]>>" : 0"
Lynn


3

朱莉娅,44 31字节

n->join(1:n," ? ")*" : 0"^(n-1)

这将创建一个未命名函数,该函数接受整数作为输入并返回字符串。要给它起个名字,例如f=n->...

首先,我们将整数1到n连接在一起,将与?和分隔为单个字符串。然后,我们将此字符串追加" : 0"重复n -1次。

例子:

julia> f(1)
"1"

julia> f(3)
"1 ? 2 ? 3 : 0 : 0"

julia> f(0)
can't repeat a string -1 times

2

JavaScript ES7,62个字节

n=>[for(i of Array(n).keys())i+1].join` ? `+' : 0'.repeat(n-1)

我不知道我还能再打高尔夫吗。但这是一个非常简单的解决方案

仅限Firefox:

var f=n=>[for(i of Array(n).keys())i+1].join` ? `+' : 0'.repeat(n-1)

alert(f(+prompt('Input: ')));

相当于ES5:

// Most browsers now support .repeat
String.prototype.repeat = String.prototype.repeat || function(n){var _n = '', i = 0; for (;i < n; i += 1){_n+=this};return _n}
                                                             //Function                         
function f(n){a=[];for(i of Array(n).keys()){a.push(i+1)};return a.join(' ? ')+' : 0'.repeat(n-1)}

alert(f(+prompt('Input: ')))


2

CoffeeScript,52个字节

f=(n)->s='';s=' ? '+n--+s+' : 0'while n;s.slice 3,-4

说明

f=(n)->
 s = ''                                # initialize string
 s = ' ? ' + n-- + s + ' : 0' while n  # prepend and append in decrementing loop
 s.slice 3,-4                          # chop off leading ?, trailing 0 and whitespace

2

SWI-Prolog,90字节

a(X):-Y is X-1,\+ (between(1,Y,L),\+writef('%w ? ',[L])),write(X),writef('%r',[' : 0',Y]).

绝对不会取胜,但是在\+ (between(1,TopBound,N),\+do_something(N))整数序列上重复执行某些操作非常有趣。


2

Swift 145(无空白135)

func t(n:Int) -> String {
    let a = (1..<n).reverse().reduce("") {" ? \($1)\($0) : 0"}
    return a.substringFromIndex(advance(a.startIndex, 3))
}

您可以相信子字符串的部分实际上比生成表达式的部分更长。


1
一定喜欢Swift <3,但我真的很希望它们能做到,这样您就可以访问带有Integer索引(如str[1]或)的字符串str[0...5]。当然,您可以做一个小扩展,但我希望标准库启用此功能
Kametrixom

@Kametrixom苹果曾经在第一个Beta中允许这样做,但是各种unicode编码阻止您这样做。这主要是因为某些符号的长度为两个或更多字节,而有些则不是。因此,不能保证以相同的索引以不同的编码获取相同的字符。我的描述可能不准确,但这基本上就是Apple引入丑陋的字符串索引语法的原因。
Ben Lu

最近,我真的很习惯使用Swift进行代码高尔夫,看看我的Swift答案
Kametrixom 2015年

2

Perl,36个字节

say join(" ? ",1..$_)." : 0"x($_-1)

35字符+1-n

运行:

echo 10 | perl -nE'say join(" ? ",1..$_)." : 0"x($_-1)'


2

Java 125 88字节

原版的

String f(int n){if(n==1)return"1";String s="",e="";for(int i=1;i<n;i++){s+=i+" ? ";e+=i==n-1?": 0":": 0 ";}return s+n+" "+e;}

具有更好的格式和变量名:

String nAry(int n) {
    if (n == 1) {
        return "1";
    }
    String start = "", end = "";
    for (int i = 1; i < n; i++) {
        start += i + " ? ";
        end += (i == n - 1) ? ": 0" : ": 0 ";
    }
    return start + n + " " + end;
}

改进-感谢Jack Ammo在下面的评论:

String f(int n){String s="",e=s;for(int i=1;i<n;){s+=i+++" ? ";e+=" : 0";}return s+n+e;}

1
您只需要考虑冒号前面的空格,就不需要三元运算符附加到e即可e+=" : 0";。然后,可以在使用i而不是在forloop行上时通过后递增i来节省1个字节。return for(int i=1;i<n;){s+=i+++" ? ";语句将不再需要在n之后添加的空间return s+n+e;。您也可以使用保存1个字节e=s。同样,开头的if语句也是不必要的,因为for循环逻辑将始终保证结果。
杰克弹药

@JackAmmo出色的提示,谢谢!if语句对于避免尾随空格是必需的,但是在对for循环逻辑进行改进之后不再需要。我已经合并了这些更改,并同意了您的回答。
RCB

1

JavaScript(ES6),59个字节

与我的CoffeeScript答案相同的方法,使用模板字符串帮助。String.prototype.repeat花费太多字符。

f=n=>{for(s=``;n;)s=` ? ${n--+s} : 0`;return s.slice(3,-4)}

演示版

Firefox仅适用于ES6。

f=n=>{for(s=``;n;)s=` ? ${n--+s} : 0`;return s.slice(3,-4)}

// DEMO
console.log = x => document.body.innerHTML += '<p>' + x

console.log(f(1));
console.log(f(3));
console.log(f(10));



1

蟒蛇2,63 60 58 56

在这里尝试

轻松解决:(63)

n=input()
for i in range(n-1):print-~i,'?',
print`n`+' : 0'*~-n

编辑:我真的很想尝试一个递归函数。这是:(56)

f=lambda n,c=1:`c`+(' ? '+f(n,c+1)if c<n else~-n*' : 0')

编辑:有人知道为什么这不起作用吗?我尝试了一个索引为的列表c<n,但由于堆栈溢出错误而无法正常工作。与此相同:

f=lambda n,c=1:`c`+((c<n)*(' ? '+f(n,c+1))or~-n*' : 0')

该索引不起作用,因为它必须创建一个包含被评估函数的列表(显然它将永远运行)。乘法也会发生同样的事情,即使它正在执行,它仍然需要评估该函数0*
FryAmTheEggman 2015年

@FryAmTheEggman好,谢谢。我以前从未发生过这种情况。
mbomb007

1

rs,77字节

(\d+)/(_)^^(\1)
+^_(_+)/\1 _\1
_(_+)$/_\1( : 0)^^((^^\1))
(__+)/? (^^\1)
^./1

现场演示和测试案例。

说明:

(\d+)/(_)^^(\1)

将数字扩展为N个下划线。

+^_(_+)/\1 _\1

重复创建下划线范围,并用空格分隔。例如,这将___变成_ __ ___

_(_+)$/_\1( : 0)^^((^^\1))

附加到最后一组下划线(长度为N)的N-1个实例 : 0

(__+)/? (^^\1)

用下划线的长度替换每组下划线?,后跟第一个,除第一个。

^./1

将第一个替换为数字1。

由于格式,这也处理得0很好:它只打印空字符串。


1

迅捷,79 75字节

let f={{$0+$1}((1..<$0).reduce(("1","")){($0.0+" ? \($1+1)",$0.1+" : 0")})}

f被隐式声明为具有一个Int参数的函数,该参数返回一个String

n >= 1在时运行,并在运行时崩溃n == 0。没有尾随空格

编辑:设法删除2 * 2个字符,因为字符串插值并不总是最短的

编辑注意:这段代码要花很长时间(不会停止),但是如果编译器能够处理,它肯定会。在进行此编辑之前,先查看一下版本,以进行编译


1

> <>,32 + 3 = 35字节

:l(?vln" ? "ooo0$
"ooo>nl?!;" : 

请注意,第二行上有一个尾随空格。+3用于-v标志,例如运行

$ py -3 fish.py ternary.py -v 2
1 ? 2 : 0

将输入作为代码点,例如

i:l(?vln" ? "ooo0$!
 "ooo>nl?!;" :

是34个字节,但我更喜欢上面的版本,因为它更易于测试,而且无论如何也不会赢。

说明

正在进行大量的伪递归和滥用,所以让我们看一下。

第一行打印"1 ? 2 ? ... n-1 ? " 零件。借助n-v标志,堆栈仅从输入开始,我们执行以下操作:

:l(?v           If (length of stack + 1 > n), go to the second line
ln              Print the length of the stack
" ? "ooo        Print the reverse of " ? " (but hey, palindromes)
0$              Push 0 and swap, keeping n on top and increasing the 
                length of the stack by 1

> <>是环形的,因此以上内容会循环执行,直到堆栈由n顶部的n-1下方为零为止,然后移至第二行。

第一次执行第二行时,该n指令将运行,并n在堆栈顶部打印。这样就只剩下n-1零了,我们也在循环中执行以下操作:

l?!;            If the stack is empty, terminate
" : "ooo        Print the reverse of " : " (but hey, palin...)
n               Print one of the 0s, decreasing the stack's length by 1
                This reuses the same n instruction from before

" ? "ooo 打印“?”的反面(但是,回文)是否比打印实际字符串短?
Caridorc

@Caridorc是的,因为> <>只能通过弹出堆栈来
逐个

sp3000很高兴知道。
Caridorc

1

Scala,78 71 52 50字节

def f(n:Int)=(1 to n).mkString(" ? ")+" : 0"*(n-1)

1

Objective-C,346个字节

-(void)printTernaryOfInt:(int)ternary{NSMutableString *outString=@"".mutableCopy; for (int i=1;i<=ternary;i++) {[outString appendString:[NSString stringWithFormat:@" ? %i",i]];}[outString deleteCharactersInRange:NSMakeRange(0, 2)];for (int i=1;i<ternary;i++) {[outString appendString:[NSString stringWithFormat:@" : 0"]];}NSLog(@"%@",outString);}

投入0int或任何负面影响提出了一个NSRangeExceptionoutString含有nil。它应在iOS 2.0和更高版本以及Mac OS X的许多最新版本上运行。

代码明细:

-(void)printTernaryOfInt:(int)ternary{ ... }

Objective-C中的标准函数声明。

NSMutableString *outString=@"".mutableCopy;

使字符串输出到outString,并使之可变。(换句话说,它可以被读取和写入。

for (int i=1;i<=ternary;i++) {[outString appendString:[NSString stringWithFormat:@" ? %i",i]];}

将字符串的第一部分添加到输出中。

[outString deleteCharactersInRange:NSMakeRange(0, 2)];

清理字符串的开头,以确保? 1将其替换为1。注意:如果0给出了NSRangeException,由于没有索引,这就是发生的地方1

for (int i=1;i<ternary;i++) {[outString appendString:[NSString stringWithFormat:@" : 0"]];}

将字符串的第二部分添加到字符串中。

NSLog(@"%@",outString);}

使用吐出字符串NSLog并关闭该功能。

输出:

输入0将给出以下崩溃日志:

    2015-07-11 05:15:28.036 Example App[41665:2134488] *** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFString deleteCharactersInRange:]: Range or index out of bounds'
*** First throw call stack:
(
    0   CoreFoundation                      0x009b5746 __exceptionPreprocess + 182
    1   libobjc.A.dylib                     0x0063ea97 objc_exception_throw + 44
    2   CoreFoundation                      0x009b566d +[NSException raise:format:] + 141
    3   CoreFoundation                      0x00981813 mutateError + 259
    4   CoreFoundation                      0x009818c1 -[__NSCFString deleteCharactersInRange:] + 65
    5   Example App                         0x000e3785 -[ViewController printTernaryOfInt:] + 277
    6   Example App                         0x000e3645 -[ViewController placeOrder:] + 133
    7   libobjc.A.dylib                     0x006547cd -[NSObject performSelector:withObject:withObject:] + 84
    8   UIKit                               0x00d75a40 -[UIApplication sendAction:to:from:forEvent:] + 99
    9   UIKit                               0x00d759d2 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 64
    10  UIKit                               0x00eb613a -[UIControl sendAction:to:forEvent:] + 69
    11  UIKit                               0x00eb6557 -[UIControl _sendActionsForEvents:withEvent:] + 598
    12  UIKit                               0x00eb57c1 -[UIControl touchesEnded:withEvent:] + 660
    13  UIKit                               0x00dcdcaa -[UIWindow _sendTouchesForEvent:] + 874
    14  UIKit                               0x00dce786 -[UIWindow sendEvent:] + 792
    15  UIKit                               0x00d8c681 -[UIApplication sendEvent:] + 242
    16  UIKit                               0x00d9cab8 _UIApplicationHandleEventFromQueueEvent + 21484
    17  UIKit                               0x00d702e7 _UIApplicationHandleEventQueue + 2300
    18  CoreFoundation                      0x008d706f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
    19  CoreFoundation                      0x008ccb7d __CFRunLoopDoSources0 + 253
    20  CoreFoundation                      0x008cc0d8 __CFRunLoopRun + 952
    21  CoreFoundation                      0x008cba5b CFRunLoopRunSpecific + 443
    22  CoreFoundation                      0x008cb88b CFRunLoopRunInMode + 123
    23  GraphicsServices                    0x029e42c9 GSEventRunModal + 192
    24  GraphicsServices                    0x029e4106 GSEventRun + 104
    25  UIKit                               0x00d740b6 UIApplicationMain + 1526
    26  Example App                         0x000e3cfa main + 138
    27  libdyld.dylib                       0x02d76ac9 start + 1
    28  ???                                 0x00000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

1 给出以下内容:

2015-07-11 05:06:02.360 Example App[41665:2134488]  1

2 给出以下内容:

2015-07-11 05:06:07.613 Example App[41665:2134488]  1 ? 2 : 0

7 给出以下内容:

2015-07-11 05:06:12.147 Example App[41665:2134488]  1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 : 0 : 0 : 0 : 0 : 0 : 0

200 给出以下内容:

2015-07-11 05:06:35.552 Example App[41665:2134488]  1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 ? 10 ? 11 ? 12 ? 13 ? 14 ? 15 ? 16 ? 17 ? 18 ? 19 ? 20 ? 21 ? 22 ? 23 ? 24 ? 25 ? 26 ? 27 ? 28 ? 29 ? 30 ? 31 ? 32 ? 33 ? 34 ? 35 ? 36 ? 37 ? 38 ? 39 ? 40 ? 41 ? 42 ? 43 ? 44 ? 45 ? 46 ? 47 ? 48 ? 49 ? 50 ? 51 ? 52 ? 53 ? 54 ? 55 ? 56 ? 57 ? 58 ? 59 ? 60 ? 61 ? 62 ? 63 ? 64 ? 65 ? 66 ? 67 ? 68 ? 69 ? 70 ? 71 ? 72 ? 73 ? 74 ? 75 ? 76 ? 77 ? 78 ? 79 ? 80 ? 81 ? 82 ? 83 ? 84 ? 85 ? 86 ? 87 ? 88 ? 89 ? 90 ? 91 ? 92 ? 93 ? 94 ? 95 ? 96 ? 97 ? 98 ? 99 ? 100 ? 101 ? 102 ? 103 ? 104 ? 105 ? 106 ? 107 ? 108 ? 109 ? 110 ? 111 ? 112 ? 113 ? 114 ? 115 ? 116 ? 117 ? 118 ? 119 ? 120 ? 121 ? 122 ? 123 ? 124 ? 125 ? 126 ? 127 ? 128 ? 129 ? 130 ? 131 ? 132 ? 133 ? 134 ? 135 ? 136 ? 137 ? 138 ? 139 ? 140 ? 141 ? 142 ? 143 ? 144 ? 145 ? 146 ? 147 ? 148 ? 149 ? 150 ? 151 ? 152 ? 153 ? 154 ? 155 ? 156 ? 157 ? 158 ? 159 ? 160 ? 161 ? 162 ? 163 ? 164 ? 165 ? 166 ? 167 ? 168 ? 169 ? 170 ? 171 ? 172 ? 173 ? 174 ? 175 ? 176 ? 177 ? 178 ? 179 ? 180 ? 181 ? 182 ? 183 ? 184 ? 185 ? 186 ? 187 ? 188 ? 189 ? 190 ? 191 ? 192 ? 193 ? 194 ? 195 ? 196 ? 197 ? 198 ? 199 ? 200 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0

1

C,84 78字节

C,尽管它不是最短的,但作为函数:

i;f(n){while(++i<n)printf("%i ? ",i);printf("%i",n);while(--i)printf(" : 0");}

在高尔夫球场的名称,int类型说明符都不放过的ifn因为它是默认的。 i可以被初始化,因为它是一个全局变量,默认为零。 f不会返回值,但是只会引起警告。 printf不是#include。要运行,这里是完整的程序版本:

#include <stdio.h>

i;f(n){while(++i<n)printf("%i ? ",i);printf("%i",n);while(--i)printf(" : 0");}

int main(int argc, char *argv[]){
    if(argc != 2){
        return 1;
    }
    f(atoi(argv[1]));
    puts("");
}

您可以使用来缩短此时间for(printf(...);--i;)
lirtosiast 2015年

1

C,63字节

可重用函数,以n为参数。

i;f(n){for(i=1;i<2*n;i++)printf(i-1?n/i?" ? %d":" : 0":"1",i);}

取消评论并发表评论(非常简单):

int f(int n) {
    int i;

    // 1 ... n, n+1 ... 2n-1
    for(i = 1; i < 2*n; i++) {
        // If i == 1, prints "1"
        // If i <= n, prints " ? %d", i (i = 2 ... n)
        // Else, prints " : 0" (i = n+1 ... 2n-1)
        printf(
            i-1 ?
                n/i ?
                    " ? %d" :
                    " : 0" :
                "1",
        i);
    }
}

1

普通Lisp,84

(format t "~{~A ? ~}~@*~{~[~;~:;0~^ ? ~]~}" (loop for i from 1 to (read) collect i))

首先,(loop for i from 1 to (read) collect i)生成一个从1到要放入的整数的整数列表,该列表用作函数的唯一参数。但是,真正的魔力在于看起来像线路噪音的控制字符串。"~{~A ? ~}"遍历存储在第一个参数中的整个列表,并输出每个数字?的前半部分。~@*将参数列表重置为第一个参数。~{~[~;~:;0~^ ? ~]~}重复该列表,0 ?为每个消耗的参数输出,但如果参数为0或1,则不输出任何内容。

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.