El enésimo ternario

17

Defino el enésimo ternario como un ternario que devuelve ny tiene la forma:

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

Escriba una función o un programa completo que, con una entrada n, generará o devolverá el enésimo ternario. Código-Golf.

Casos de prueba

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

Creo que hay una especie de armonía zen en el ternario número 1000 .

Caridorc
fuente
1
¿Se permite el espacio en blanco al final?
rink.attendant.6
@rink no, no space training
Caridorc
1
Como "ternario" significa 3, ¿no debería llamarlo "n-ario", que es a lo que se refiere en matemáticas?
mbomb007
44
La forma de "editar" un comentario es: eliminarlo y agregar uno nuevo.
Reto Koradi
1
@RetoKoradi Puede editar un comentario si está dentro de los cinco minutos de haber sido publicada.
mbomb007

Respuestas:

8

Pyth - 19 18 17 bytes

Los espacios me están matando, pensando en una mejor manera de manejarlos.

+j" ? "SQ*tQ" : 0

Simplemente une los números con a " ? "y luego concatena la 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

Pruébelo en línea aquí .

Maltysen
fuente
10

CJam, 18 18 bytes

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

Pruébalo en línea .

Explicación

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
fuente
12
Me encanta el :).
Alex A.
9

Ruby, 31 bytes

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

Prueba:

> f[1]
=> "1"
> f[7]
=> "1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 : 0 : 0 : 0 : 0 : 0 : 0"
daniero
fuente
2
Entonces array * string== array.join string... interesante
Caridorc
Esto es realmente genial. Por curiosidad, ¿qué sucede cuando lo haces 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
44
@Caridorc Tanto ruidoso como ininteligible. Agradable.
Alex A.
2
@daniero Advertencia: se puede generar anti-string
Caridorc
8

CJam, 19 bytes

Solo un comienzo ...

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

Cómo 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. 

Pruébalo en línea aquí

Optimizador
fuente
Diablos, 1 minuto demasiado tarde.
Dennis
3
wow eres bastante rápido codificando en Cjam: O
Caridorc
@ Dennis Creo que su solución inicial, que era idéntica a la primera solución de Optimizers, fue realmente la primera. Al menos estoy bastante seguro de que lo vi aparecer primero. Pero el tiempo de publicación de los suyos se actualizó cuando lo editó dentro del período de gracia.
Reto Koradi
1
@RetoKoradi su identificación de publicación es 52870. La mía es 52869 :)
Optimizer
Ah, está bien, no tengo permiso para ver publicaciones eliminadas en este sitio. Ambos deben haber aparecido al mismo tiempo para mí en ese momento, y solo noté el superior. Me parece recordar que SE podría hacer algunas cosas funky para publicar veces cuando se edita dentro del período de gracia. De lo contrario, podría publicar un marcador de posición vacío y completar el contenido dentro del período de gracia, para que parezca que tenía la primera respuesta, y en realidad contenía contenido útil desde el principio porque las ediciones dentro del período de gracia no se rastrean.
Reto Koradi
6

Brainfuck, 305

(Sin el número de entrada de STDIN, vea editar en la parte inferior)

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

Utilicé este encantador algoritmo para imprimir un número, que ocupa 155 bytes del programa completo.

Funciona para entradas de hasta 32768 (limitación de 16 bits del algoritmo). No produce espacios finales y también funciona para la entrada 1:

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

Recorrido rápido:

Configuración (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)

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

Si se permitiera asignar los 8 comandos Brainfuck a 3 bits, este programa ocuparía 114 bytes y otros 3 bits

Unario, ~ 4.08 * 10 ^ 275 bytes

Sería demasiado largo para aquí, pero es sólo 408452257862560239329948606295286361112603208650130608525040044700379331457759667646985586658469601803889628246410788572492437928714867190270708935427798983714797786123292750743771225096145575210320040188155473030775033228313350778616384531426430459309802833775612506568528463 ceros y funciona igual que el programa Brainfuck.

EDITAR : Me equivoqué, este programa no toma la entrada del usuario realmente, solo usa el valor actual del puntero como entrada. Para poder analizar un número, se requeriría mucho más y no puedo molestarme en hacerlo.

Por lo tanto, funciona con un valor ingresado directamente en el programa (agregando n veces "+" antes del programa) pero no con STDIN

Kametrixom
fuente
5

JavaScript (ES6), 42 39 bytes

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

La función externa ftoma el valor de entrada y luego llama a la función internag recursiva para construir la cadena desde el medio, utilizando el valor de entrada como máximo para probar el caso base.

Sin golf:

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
fuente
4

Python 56 55

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

C # - 76

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

Haskell, 53 bytes

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

Cómo funciona: construya la cadena de adentro hacia afuera comenzando con una cadena vacía y haciendo un bucle de nabajo a 2con anteponer el número actual y a ?y agregar a : 0. Finalmente poner un 1frente a todos.

Un enfoque diferente (gracias a @Mauris ahora 9 bytes más corto):

Haskell, 60 51 bytes

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

Cómo funciona: un literal 1seguido ? <x>para cada <x>en [2..n]seguida por una constante : 0para cada uno <x>de [2..n].

nimi
fuente
Un enfoque basado en sus 60 bytes que se reduce a 51:g n='1':((=<<[2..n])=<<[(" ? "++).show,\x->" : 0"])
Lynn
En realidad, puede reducirlo a 51 más directamente simplemente reemplazándolo (\_->" : 0")=<<[2..n]con[2..n]>>" : 0"
Lynn
3

Julia, 44 31 bytes

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

Esto crea una función sin nombre que acepta un entero como entrada y devuelve una cadena. Para llamarlo, dale un nombre, por ejemplo f=n->....

Primero unimos los enteros 1 a n , separando cada uno con ?y espacios en una sola cadena. Luego agregamos a esto la cadena " : 0"repetida n -1 veces.

Ejemplos:

julia> f(1)
"1"

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

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

JavaScript ES7, 62 bytes

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

No sé si puedo jugar más al golf. Pero es una solución bastante sencilla

Solo Firefox:

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

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

ES5 equivalente:

// 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
fuente
2

CoffeeScript, 52 bytes

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

Explicación

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
fuente
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 no va a ganar, pero la \+ (between(1,TopBound,N),\+do_something(N))construcción es bastante interesante para repetir algo en una secuencia de enteros.

Fatalizar
fuente
2

Swift 145 (135 sin espacios en blanco)

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

¿Puedes creer que la parte de la subcadena es en realidad más larga que la parte para producir la expresión?

Ben Lu
fuente
1
Debo amar a Swift <3, aunque realmente deseo que lo hagan para que puedas acceder a cadenas con índices enteros como str[1]o str[0...5]. Por supuesto, puede hacer una pequeña extensión, pero desearía que la biblioteca estándar habilitara esto
Kametrixom
@Kametrixom apple una vez permitió esto en la primera versión beta, pero las diversas codificaciones Unicode te impiden hacerlo. Esto se debe principalmente a que algunos símbolos tienen dos bytes o más y otros no. Por lo tanto, no se garantiza obtener el mismo carácter en diferentes codificaciones con el mismo índice. Puede que mi descripción no sea precisa, pero esa es básicamente la razón por la cual Apple introdujo la sintaxis del índice de cadenas de bocado feo.
Ben Lu
Recientemente me he acostumbrado a usar Swift para Code Golfing, eche un vistazo a mi respuesta Swift
Kametrixom
2

Perl, 36 bytes

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

35personajes +1para -n.

Corre con:

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

Java, 71

No pude evitarlo después de comentar la respuesta de RCB . Así que aquí hay otro Java (71 como wow cuando Java no es el más largo)

String t(int n){String s=""+n;for(;--n>0;)s=n+" ? "+s+" : 0";return s;}
Jack munición
fuente
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;}

Con mejor formato y nombres de variables:

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

Mejorado: gracias a los comentarios de Jack Ammo a continuación:

String f(int n){String s="",e=s;for(int i=1;i<n;){s+=i+++" ? ";e+=" : 0";}return s+n+e;}
RCB
fuente
1
no necesita ese operador triádico para agregar e solo para tener en cuenta el espacio, solo suponga que siempre necesita el espacio en la parte frontal del colon e+=" : 0";. A continuación, puede guardar 1 byte mediante el incremento posterior de i cuando se usa en lugar de en la línea forloop. for(int i=1;i<n;){s+=i+++" ? ";Su declaración de devolución ya no necesitará el espacio agregado después de n return s+n+e;. También puede guardar 1 byte usando e=s. Además, la declaración if al principio es innecesaria ya que la lógica del bucle for garantizará ese resultado de todos modos.
Jack Ammo
@JackAmmo Excelentes consejos, ¡gracias! La declaración if fue necesaria para evitar espacios en blanco al final, pero ya no después de sus mejoras en la lógica del bucle for. He incorporado los cambios y he votado tu respuesta.
RCB
1

JavaScript (ES6), 59 bytes

El mismo enfoque que mi respuesta CoffeeScript, usando la ayuda de cadenas de plantillas. String.prototype.repeatCuesta demasiados personajes.

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

Manifestación

Firefox solo por ahora, ya que es 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
fuente
1

K, 36 bytes

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

Pitón 2, 63 60 58 56

Pruébalo aquí

Solución fácil: (63)

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

Editar : realmente quería probar una función recursiva. Aquí está: (56)

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

Editar : ¿Alguien sabe por qué esto no está funcionando? Intenté una lista con un índice de c<n, pero eso no funcionó debido a un error de desbordamiento de pila. Lo mismo con esto:

f=lambda n,c=1:`c`+((c<n)*(' ? '+f(n,c+1))or~-n*' : 0')
mbomb007
fuente
El índice no funciona porque tiene que crear una lista que contenga la función evaluada (que obviamente se ejecutará para siempre). Lo mismo sucede con su multiplicación, aún necesita evaluar la función aunque lo esté haciendo 0*.
FryAmTheEggman
@FryAmTheEggman Muy bien, gracias. Nunca he tenido una situación como esta antes.
mbomb007
1

rs , 77 bytes

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

Demostración en vivo y casos de prueba.

Explicación:

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

Expanda el número en una serie de N guiones bajos.

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

Repetidamente cree un rango de guiones bajos, separados por espacios. Por ejemplo, esto se convertiría ___en _ __ ___.

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

Añadir al último conjunto de guiones bajos (de longitud N) N-1 instancias de : 0.

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

Reemplace cada grupo de guiones bajos por su longitud, precedido por ?, EXCEPTO por el primero.

^./1

Reemplace el primero con el número 1.

Debido al formato, esto también se maneja 0bien: solo imprime la cadena vacía.

kirbyfan64sos
fuente
1

Swift, 79 75 bytes

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

fse declara implícitamente como una función con un Intparámetro que devuelve unString

Funciona n >= 1y se bloquea en tiempo de ejecución cuando n == 0. No hay espacios en blanco al final

Editar: administrado para eliminar caracteres 2 * 2, porque la interpolación de cadenas no siempre es la más corta

Nota para editar: este código tarda una eternidad (no se detiene) en compilarse, pero definitivamente lo haría si el compilador pudiera manejarlo. Eche un vistazo a la versión anterior a esta edición para obtener una que compile

Kametrixom
fuente
1

> <> , 32 + 3 = 35 bytes

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

Tenga en cuenta que hay un espacio final en la segunda línea. El +3 es para el-v bandera, por ejemplo, correr como

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

Tomando la entrada como un punto de código como

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

es de 34 bytes, pero prefiero la versión anterior ya que es más fácil de probar y de todos modos no ganará.

Explicación

Hay bastante pseudo-recurrencia y abuso, así que echemos un vistazo.

La primera línea imprime la "1 ? 2 ? ... n-1 ? " pieza. La pila comienza solo con la entrada n, gracias a la -vbandera, y hacemos lo siguiente:

: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

> <> es toroidal, por lo que lo anterior se ejecuta en un bucle hasta que la pila consiste nen la parte superior conn-1 ceros a continuación, en cuyo punto se mueve a la segunda línea.

La primera vez que se ejecuta la segunda línea, se ejecuta la ninstrucción, imprimiendo nen la parte superior de la pila. Esto deja solo los n-1ceros, y hacemos lo siguiente, también en un bucle:

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
fuente
" ? "ooo Imprima el reverso de "?" (Pero bueno, palíndromos) ¿ está imprimiendo el reverso más corto que imprimiendo la cadena real?
Caridorc
@Caridorc Sí, porque> <> solo puede imprimir char-by-char haciendo estallar una pila :)
Sp3000
sp3000 es bueno saberlo.
Caridorc
1

Scala 78 71 52 50 bytes

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

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

Poner 0por el into cualquier cosa negativa aumenta NSRangeExceptiondebido a la outStringcontención nil. Esto debería ejecutarse en iOS 2.0 y versiones posteriores y en muchas de las últimas versiones de Mac OS X.

Un desglose del código:

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

Declaración de función estándar en Objective-C.

NSMutableString *outString=@"".mutableCopy;

Hace una cadena para que la salida vaya a outString, y la hace mutable. (En otras palabras, se puede leer y escribir.

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

Agrega la primera parte de la cadena a la salida.

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

Limpia el comienzo de la cadena para asegurarse de que ? 1se reemplaza con 1. Nota: si 0se dio, aquí es donde NSRangeExceptionocurriría, debido a que no hay un índice1 .

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

Agrega la segunda parte de la cadena a la cadena.

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

Escupe la cuerda de nuevo usando NSLogy cierra la función.

Salida:

La entrada 0proporciona este registro de bloqueo:

    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 da esto:

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

2 da esto:

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

7 da esto:

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 da esto:

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
fuente
1

C, 84 78 bytes

C, aunque no es el más corto, como una función:

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

En el nombre de golf, el intespecificador de tipo se deja fuera de i, fy ndebido a que es el valor predeterminado. ipuede no inicializarse porque es una variable global y su valor predeterminado es cero. fno devuelve un valor, pero eso solo provoca una advertencia. printfno es #include'd. Para ejecutar, aquí hay una versión completa del 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
fuente
Puede acortar esto usando for(printf(...);--i;).
lirtosiast
1

C, 63 bytes

Función reutilizable, toma n como argumento.

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

Indiferente y comentado (bastante sencillo):

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
fuente
1

Lisp común, 84

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

Primero, (loop for i from 1 to (read) collect i) genera una lista de enteros de 1 a lo que sea que se ingrese, que se usa como el único argumento para la función. Pero la verdadera magia de esto está en la cadena de control que parece ruido de línea. "~{~A ? ~}"itera sobre la lista completa almacenada dentro del primer argumento, generando cada número con el ?para la primera mitad. ~@*restablece la lista de argumentos al primer argumento. ~{~[~;~:;0~^ ? ~]~}reitera sobre la lista, generando 0 ?para cada argumento consumido, pero sin generar nada si el argumento es 0 o 1.

Velas
fuente