n番目の三項


17

n番目の3項を、nを返し、次の形式の3項として定義します。

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

入力nを与えてn番目の3項を出力または返す関数または完全なプログラムを作成します。コードゴルフ。

テストケース

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.6

@リンクなし、トレーニングスペースなし
-Caridorc

1
「三項」は3を意味するので、数学で「n項」と名付けるべきではありません。
mbomb007

4
コメントを「編集」する方法は、コメントを削除してから新しいコメントを追加することです。
レトコラディ

1
@RetoKoradiコメントを投稿してから5分以内であれば、コメントを編集できます。
mbomb007

回答:


8

Pyth- 19 18 17バイト

スペースは私を殺して、それらを処理するより良い方法を考えています。

+j" ? "SQ*tQ" : 0

a " ? "で数値を結合し、2番目の部分を連結します。

+              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
私は大好き:)です。
アレックスA.

9

ルビー、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]何をしますか?
アレックス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大声で理解できない。いいね
アレックス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. 

こちらからオンラインでお試しください


ちょっと、遅すぎる。
デニス

3
あなたはCjamでのコーディングがかなり速いです:O
Caridorc

@Dennisオプティマイザーの最初のソリューションと同じ初期ソリューションが実際に最初だったと思います。少なくとも、私はそれが最初にポップアップするのを見たと確信しています。ただし、猶予期間内に編集すると、投稿時間が更新されました。
レトコラディ

1
@RetoKoradi彼の投稿IDは52870です。私は52869です:)
オプティマイザー

ああ、このサイトで削除された投稿を表示する権限がありません。私にとっては両方が同時にポップアップしているに違いない、そして私は一番上のものにのみ気づいた。SEは、猶予期間内に編集するときに時間を投稿するためにファンキーなことをするかもしれないことを覚えているようです。それ以外の場合は、空のプレースホルダーを投稿し、猶予期間内にコンテンツを入力して、最初の回答があったように見せることができます。猶予期間内の編集は追跡されないため、実際には最初から有用なコンテンツが含まれていました。
レトコラディ

6

Brainfuck、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

2番目の部分(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バイト

ここでは長すぎますが、ただ4084522578625602393299486062952863611126032086501306085250400447003793314577596676469855866584696018038896282464107885724924379287148671902707089354277989837147977861232927507437712250961455752103同じです。

編集:私は台無しに、このプログラムは実際にユーザー入力を取りません、それは単に入力として現在のポインター値を使用します。数値を解析できるようになるには、さらに多くのことが必要になりますが、それを行うことはできません。

そのため、プログラムに直接入力された値で(プログラムの前に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);
}



3

Haskell、53バイト

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

仕組み:空の文字列で開始し、現在の番号とa を追加nしてから下にループすることにより、文字列を内側から構築します。最後にすべての前に置きます。2?: 01

別のアプローチ(@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

実際には、あなただけ交換することにより、より直接的51にそれを得ることができ(\_->" : 0")=<<[2..n][2..n]>>" : 0"
リン


3

ジュリア、44 31バイト

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

これにより、整数を入力として受け入れ、文字列を返す名前のない関数が作成されます。呼び出すには、名前を付けf=n->...ます。

まず、整数1を結合します 1〜nそれぞれとで区切っ?て1つの文字列にします。次に、これにn -1回" : 0"繰り返される文字列を追加します。

例:

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
Gotta love Swift <3私は本当にそう願っています。そうすれば、str[1]またはのような整数インデックスを持つ文字列にアクセスできますstr[0...5]。もちろん、あなたは小さな拡張を行うことができますが、標準ライブラリがこれを有効にしたい
です-Kametrixom

@Kametrixom appleは、最初のベータ版でこれを許可していましたが、さまざまなUnicodeエンコーディングにより、これを行うことができません。これは主に、2バイト以上のシンボルとそうでないシンボルがあるためです。そのため、同じインデックスを使用して異なるエンコーディングで同じ文字をフェッチすることは保証されません。私の説明は正確ではないかもしれませんが、それがアップルがbasicallyい口いっぱいの文字列インデックス構文を導入した理由です。
ベン・呂

最近、私は本当にコードゴルフにSwiftを使用することに慣れました。私のSwiftの答え
-Kametrixomを

2

Perl、36バイト

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

35文字+1のために-n

で実行:

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

2

Java、71

RCBの回答についてコメントした後、私は自分自身を助けることができませんでした。ここに別のJavaがあります(71はJavaが最長ではないときのようなすごい!

String t(int n){String s=""+n;for(;--n>0;)s=n+" ? "+s+" : 0";return s;}

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に追加するためにその3項演算子は必要ありませんe+=" : 0";。コロンの前に常にスペースが必要であると仮定してください。その後、iをforloop行の代わりに使用するときに、ポストインクリメントすることで1バイトを節約できます。return for(int i=1;i<n;){s+=i+++" ? ";ステートメントでは、nの後にスペースを追加する必要がなくなりますreturn s+n+e;。を使用して1バイトを保存することもできますe=s。また、forループロジックがとにかく結果を保証するため、先頭のifステートメントは不要です。
ジャックの弾薬

@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

Python 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

@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

Swift、79 75バイト

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

f 1つの関数として暗黙的に宣言されています Intパラメータを含む、String

で動作します n >= 1、実行時にクラッシュしますn == 0。末尾の空白はありません

編集:文字列の補間が常に最短ではないため、2 * 2文字を削除することができました。

編集する際の注意:このコードはコンパイルに永遠に(止まらない)かかりますが、コンパイラーがそれを処理できれば間違いなくそうです。この編集前のバージョンを見て、コンパイルするバージョンを取得してください


1

> <>、32 + 3 = 35バイト

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

2行目に末尾のスペースがあることに注意してください。+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フラグのおかげでinputのみから始まり、次のことを行います。

: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ゼロ以下になるまでループで実行され、その時点で2番目の行に移動します。

最初に2行目が実行されると、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

sp3000知ってうれしい。
カリドール

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

中に置く0ためにint、または何かを否定することは上げNSRangeExceptionに伴うoutString含みます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が指定された場合、これはNSRangeExceptionindexがないために発生する場所1です。

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

文字列の2番目の部分を文字列に追加します。

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;)
リスト管理者

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

Common 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の場合は何も出力しません。

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