O n-ésimo ternário

17

Defino o n-ésimo ternário como um ternário que retorna n e tem a forma:

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

Escreva uma função ou programa completo que, dado uma entrada n, produza ou retorne o n-ésimo ternário. Código-Golf.

Casos de teste

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

Na 1000ª ternária , acho que há algum tipo de harmonia zen nela.

Caridorc
fonte
11
O espaço em branco à direita é permitido?
usar o seguinte código
@rink não, não espaço de treinamento
Caridorc
11
Como "ternário" significa 3, você não deve chamá-lo de "n-ário", a que se refere a matemática?
mbomb007
4
A maneira de "editar" um comentário é: exclua-o e adicione um novo.
Reto Koradi 9/07
11
@RetoKoradi Você pode editar um comentário se ele estiver dentro de cinco minutos após a publicação.
mbomb007

Respostas:

8

Pitão - 19 18 17 bytes

Os espaços estão me matando, pensando em uma maneira melhor de lidar com eles.

+j" ? "SQ*tQ" : 0

Apenas junta os números com a " ? "e concatena a segunda parte.

+              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

Experimente online aqui .

Maltysen
fonte
10

CJam, 18 18 bytes

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

Experimente online .

Explicação

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.
jimmy23013
fonte
12
Eu amo o :).
9789 Alex A.
9

Ruby, 31 bytes

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

Teste:

> f[1]
=> "1"
> f[7]
=> "1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 : 0 : 0 : 0 : 0 : 0 : 0"
daniero
fonte
2
Então array * string== array.join string... interessante
Caridorc
Isso é muito legal. Por curiosidade, o que acontece quando você faz f[0]?
9789 Alex A.
11
@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 Alto e ininteligível. Agradável.
9789 Alex A.
2
@daniero Aviso: anti-string pode ser gerado
Caridorc
8

CJam, 19 bytes

Apenas um começo ...

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

Como funciona

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. 

Experimente online aqui

Optimizer
fonte
Caramba, 1 minuto tarde demais.
Dennis
3
wow você é muito rápido na codificação em Cjam: O
Caridorc
@ Dennis Acho que sua solução inicial, que era idêntica à primeira solução da Optimizers, foi realmente a primeira. Pelo menos eu tenho certeza que eu vi aparecer primeiro. Mas a hora da postagem foi atualizada quando você a editou dentro do período de carência.
Reto Koradi
11
@RetoKoradi o ID da sua publicação é 52870. O meu é 52869 :)
Otimizador
Ah, ok, eu não tenho permissão para ver postagens excluídas neste site. Ambos devem ter aparecido ao mesmo tempo para mim, então, e eu só notei o primeiro. Pareço lembrar que o SE pode fazer algumas coisas engraçadas para publicar momentos ao editar dentro do período de carência. Caso contrário, você poderá postar um espaço vazio e preencher o conteúdo dentro do período de cortesia, para parecer que você teve a primeira resposta, e ele realmente continha conteúdo útil desde o início, porque as edições no período de cortesia não são rastreadas.
Reto Koradi
6

Brainfuck, 305

(Sem o número de entrada de STDIN, veja editar na parte inferior)

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

Eu usei esse adorável algoritmo para imprimir um número, que ocupa 155 bytes de todo o programa.

Ele funciona para entradas de até 32768 (limitação de 16 bits do algoritmo). Ele não produz espaços à direita e funciona 1como entrada :

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

Passo a passo rápido:

Instalação (97 bytes)

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

Primeira parte (181 bytes)

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

Segunda parte (27 bytes)

>>-----<<<        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"
]

Se fosse permitido mapear os 8 comandos do Brainfuck para 3 bits, esse programa ocuparia 114 bytes e outros 3 bits

Unário, ~ 4,08 * 10 ^ 275 bytes

Seria muito longo para aqui, mas é apenas 408452257862560239329948606295286361112603208650130608525040044700379331457759667646985586658469601803889628246410788572492437928714867190270708935427798983714797786123292750743771225096145575210320040188155473030775033228313350778616384531426430459309802833775612506568528463 zeros e funciona da mesma forma como o programa Brainfuck.

EDIT : Eu errei, este programa não aceita realmente a entrada do usuário, apenas usa o valor atual do ponteiro como entrada. Para poder analisar um número, seria necessário muito mais e não posso me incomodar em fazer isso.

Portanto, ele funciona com um valor inserido diretamente no programa (acrescentando n vezes "+" antes do programa), mas não com STDIN

Kametrixom
fonte
5

JavaScript (ES6), 42 39 bytes

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

A função externa fpega o valor de entrada e, em seguida, chama a função interna grecursivamente para criar a sequência do meio para fora, usando o valor de entrada como máximo para testar o caso base.

Ungolfed:

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);
}
apsillers
fonte
4

Python 56 55

t=lambda n:' ? '.join(map(str,range(1,n+1)))+' : 0'*~-n
Caridorc
fonte
4

C # - 76

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

Haskell, 53 bytes

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

Como funciona: construa a string de dentro para fora, iniciando com uma string vazia e fazendo um loop de nbaixo para baixo 2com o prefixo do número atual e a ?e anexando a : 0. Finalmente, coloque um 1na frente de todos.

Uma abordagem diferente (graças a @Mauris agora 9 bytes mais curto):

Haskell, 60 51 bytes

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

Como funciona: a literal 1seguido por ? <x>para cada <x>em [2..n]seguida por uma constante : 0para cada <x>no [2..n].

nimi
fonte
Uma abordagem baseada em seus 60 bytes que chega a 51:g n='1':((=<<[2..n])=<<[(" ? "++).show,\x->" : 0"])
Lynn
Na verdade, você pode obtê-lo para baixo para 51 mais diretamente por apenas substituindo (\_->" : 0")=<<[2..n]com[2..n]>>" : 0"
Lynn
3

Pitão, 17 bytes

jd.iSQs*RtQ,\?":0

Demonstração.

isaacg
fonte
3

Julia, 44 31 bytes

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

Isso cria uma função sem nome que aceita um número inteiro como entrada e retorna uma string. Para chamá-lo, dê um nome, por exemplo f=n->....

Primeiro, juntamos os números inteiros 1 a n , separando cada um com ?e espaços em uma única sequência. Em seguida, anexamos a isso a sequência " : 0"repetida n -1 vezes.

Exemplos:

julia> f(1)
"1"

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

julia> f(0)
can't repeat a string -1 times
Alex A.
fonte
2

JavaScript ES7, 62 bytes

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

Não sei se posso jogar mais isso. Mas é uma solução bastante direta

Apenas Firefox:

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

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

Equivalente a 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: ')))

Downgoat
fonte
2

CoffeeScript, 52 bytes

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

Explicação

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
rink.attendant.6
fonte
2

SWI-Prolog, 90 bytes

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

Definitivamente não vai ganhar, mas a \+ (between(1,TopBound,N),\+do_something(N))construção é bastante interessante para repetir algo em uma sequência de números inteiros.

Fatalizar
fonte
2

Swift 145 (135 sem espaço em branco)

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

Você pode acreditar que a parte da substring é realmente mais longa que a parte para produzir a expressão.

Ben Lu
fonte
11
Tenho que amar o Swift <3. Eu realmente gostaria que eles o fizessem para que você pudesse acessar Strings com índices inteiros como str[1]ou str[0...5]. Claro que você pode fazer uma pequena extensão, mas eu desejo que a biblioteca padrão habilitado esta
Kametrixom
A Apple @ Kametrixom permitiu uma vez isso na primeira versão beta, mas as várias codificações unicode impedem que você faça isso. Isso ocorre principalmente porque alguns símbolos têm dois bytes ou mais de comprimento e outros não. Portanto, não é garantido buscar o mesmo caractere em codificações diferentes com o mesmo índice. Minha descrição pode não ser precisa, mas é basicamente por isso que a Apple introduziu a sintaxe feia do índice de string de boca cheia.
Ben Lu
Recentemente eu realmente se acostumado a usar Swift para o Código Golfe, ter um olhar para a minha resposta Swift
Kametrixom
2

Perl, 36 bytes

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

35caracteres +1para -n.

Correr com:

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

Java, 71

Não pude evitar depois de comentar a resposta da RCB . Então aqui está outro Java (71 como uau, quando Java não é o mais longo!)

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

Java, 125 88 bytes

Original

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

Com formatação melhor e nomes de variáveis:

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

Melhorado - Graças aos comentários de Jack Ammo abaixo:

String f(int n){String s="",e=s;for(int i=1;i<n;){s+=i+++" ? ";e+=" : 0";}return s+n+e;}
RCB
fonte
11
você não precisa desse operador triádico para anexar e apenas para dar conta do espaço, basta assumir que você sempre precisa do espaço na frente dos dois pontos e+=" : 0";. Você pode salvar 1 byte pós-incrementando i quando usado em vez de na linha de forloop for(int i=1;i<n;){s+=i+++" ? ";Sua declaração de retorno não precisará mais do espaço adicionado após n return s+n+e;. Você também pode salvar 1 byte usando e=s. Além disso, a instrução if no início é desnecessária, pois a lógica do loop for garantirá o resultado de qualquer maneira.
Jack Ammo
@JackAmmo Excelentes dicas, obrigado! A instrução if era necessária para evitar o espaço em branco à direita, mas não após as melhorias na lógica do loop for. Incorporei as alterações e votei na sua resposta.
RCB
1

JavaScript (ES6), 59 bytes

A mesma abordagem da minha resposta do CoffeeScript, usando a ajuda de strings de modelo. String.prototype.repeatcusta muitos caracteres.

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

Demo

Firefox apenas por enquanto, como é o 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));

rink.attendant.6
fonte
1

K, 36 bytes

{(3_,/(" ? ",)'$!x),(4*-1+x)#" : 0"}
kirbyfan64sos
fonte
1

Python 2, 63 60 58 56

Experimente aqui

Solução fácil: (63)

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

Edit : Eu realmente queria tentar uma função recursiva. Aqui está: (56)

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

Edit : Alguém sabe por que isso não está funcionando? Tentei uma lista com um índice de c<n, mas isso não funcionou devido a um erro de estouro de pilha. O mesmo com isso:

f=lambda n,c=1:`c`+((c<n)*(' ? '+f(n,c+1))or~-n*' : 0')
mbomb007
fonte
O índice não funciona porque precisa criar uma lista contendo a função avaliada (que obviamente seria executada para sempre). O mesmo acontece com a sua multiplicação, ela ainda precisa avaliar a função mesmo que esteja fazendo 0*isso.
FryAmTheEggman
@FryAmTheEggman Tudo bem, obrigado. Eu nunca tive uma situação como essa antes.
mbomb007
1

rs , 77 bytes

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

Demonstração ao vivo e casos de teste.

Explicação:

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

Expanda o número em uma série de N sublinhados.

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

Crie repetidamente um intervalo de sublinhados, separados por espaços. eg Este giraria ___em _ __ ___.

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

Anexe ao último conjunto de sublinhados (de comprimento N) instâncias N-1 de : 0.

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

Substitua cada grupo de sublinhados por seu comprimento, precedido por ?, EXCETO para o primeiro.

^./1

Substitua o primeiro pelo número 1.

Por causa do formato, isso também lida 0bem: apenas imprime a string vazia.

kirbyfan64sos
fonte
1

Rápido, 79 75 bytes

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

f é declarado implicitamente como uma função com um Int parâmetro que retorna umString

Funciona com n >= 1 e trava no tempo de execução quando n == 0. Não há espaços em branco à direita

Editar: conseguiu remover 2 * 2 caracteres, porque a interpolação de cadeia nem sempre é a mais curta

Nota para editar: Esse código leva uma eternidade (não para) para compilar, mas definitivamente o faria se o compilador fosse capaz de lidar com isso. Dê uma olhada na versão anterior a esta edição para obter uma que compile

Kametrixom
fonte
1

> <> , 32 + 3 = 35 bytes

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

Observe que há um espaço à direita na segunda linha. O +3 é para a -vbandeira, por exemplo, execute como

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

Tomando a entrada como um ponto de código como

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

tem 34 bytes, mas eu prefiro a versão acima, pois é mais fácil de testar e, de qualquer maneira, não ganha.

Explicação

Há muita pseudo-recursão e abuso acontecendo, então vamos dar uma olhada.

A primeira linha imprime a "1 ? 2 ? ... n-1 ? " peça. A pilha começa apenas com a entrada n, graças à -vflag, e fazemos o seguinte:

: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

> <> é toroidal, portanto, o acima é executado em um loop até que a pilha consista nno topo com n-1zeros abaixo; nesse ponto, ela se move para a segunda linha.

Na primeira vez que a segunda linha é executada, a ninstrução é executada, imprimindo a nparte superior da pilha. Isso deixa apenas os n-1zeros e fazemos o seguinte, também em um loop:

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
Sp3000
fonte
" ? "ooo Imprimir o reverso de "?" (Mas ei, palíndromos) está imprimindo o inverso mais curto do que imprimir a sequência real?
Caridorc
@Caridorc Sim, porque> <> só pode imprimir de char-by-char estalando fora de uma pilha :)
SP3000
É bom saber sp3000.
Caridorc
1

Scala, 78 71 52 50 bytes

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

Objective-C, 346 bytes

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

Colocando 0 pelo intou negativo nada levanta uma NSRangeExceptiondevido a outStringcontendo nil. Isso deve ser executado no iOS 2.0 e posterior e em muitas das versões mais recentes do Mac OS X.

Um detalhamento do código:

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

Declaração de função padrão em Objective-C.

NSMutableString *outString=@"".mutableCopy;

Cria uma string para a saída, outString , e a torna mutável. (Em outras palavras, pode ser lido e gravado em.

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

Adiciona a primeira parte da cadeia de caracteres à saída.

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

Limpa o início da string para garantir que ela ? 1seja substituída por 1. Nota: se 0foi dado, é aqui que o NSRangeExceptionocorreria, devido à inexistência de um índice 1.

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

Adiciona a segunda parte da string à string.

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

Cospe a corda de volta usando NSLoge fecha a função.

Resultado:

A entrada 0fornece esse log de falha:

    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 dá o seguinte:

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

2 dá o seguinte:

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

7 dá o seguinte:

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 dá o seguinte:

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
DDPWNAGE
fonte
1

C, 84 78 bytes

C, mesmo que não seja o menor, como uma função:

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

Em nome de golfe, o intespecificador de tipo for deixada de fora de i, fe nporque é o padrão. ipode ser não inicializado porque é uma variável global e o padrão é zero. fnão retorna um valor, mas isso apenas causa um aviso. printfnão é #include'd. Para executar, aqui está uma versão completa do programa:

#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("");
}
hacatu
fonte
Você pode reduzir isso usando for(printf(...);--i;).
lirtosiast
1

C, 63 bytes

Função reutilizável, leva n como argumento.

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

Ungolfed e comentou (bastante direto):

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);
    }
}
Andrea Biondo
fonte
1

Lisp comum, 84

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

Primeiro, (loop for i from 1 to (read) collect i)gera uma lista de números inteiros de 1 para o que for inserido, que é usado como o único argumento para a função. Mas a verdadeira mágica disso está na cadeia de controle que se parece com o ruído da linha. "~{~A ? ~}"itera sobre a lista inteira armazenada no primeiro argumento, produzindo cada número com o ?da primeira metade. ~@*redefine a lista de argumentos para o primeiro argumento. ~{~[~;~:;0~^ ? ~]~}reitera sobre a lista, produzindo 0 ?para cada argumento consumido, mas não produzindo nada se o argumento for 0 ou 1.

Velas
fonte