L'ennesimo Ternario


17

Definisco l'n-esimo ternario come un ternario che restituisce n e ha la forma:

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

Scrivi una funzione o completa il programma che ha dato un input n genererà o restituirà l'n-esimo ternario. Codice-Golf.

Casi test

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

Il 1000esimo ternario penso che ci sia una sorta di armonia zen in esso.


1
È consentito lo spazio bianco finale?
rink.attendant.6

@rink no, nessuno spazio di allenamento
Caridorc,

1
Dato che "ternario" significa 3, non dovresti chiamarlo "n-ary", a cosa si riferisce in matematica?
mbomb007,

4
Il modo per "modificare" un commento è: eliminalo e aggiungine uno nuovo.
Reto Koradi,

1
@RetoKoradi Puoi modificare un commento se è entro cinque minuti dalla sua pubblicazione.
mbomb007,

Risposte:


8

Pyth - 19 18 17 byte

Gli spazi mi stanno uccidendo, pensando a un modo migliore per gestirli.

+j" ? "SQ*tQ" : 0

Unisce semplicemente i numeri con una " ? "e quindi concatena la seconda 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

Provalo online qui .


10

CJam, 18 18 byte

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

Provalo online .

Spiegazione

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
Adoro il :).
Alex A.

9

Rubino, 31 byte

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

Test:

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

2
Quindi array * string== array.join string... interessante
Caridorc il

Questo è davvero fantastico. Per curiosità, cosa succede quando lo fai 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 Sia forte che incomprensibile. Bello.
Alex A.

2
@daniero Attenzione: è possibile che venga generata l'anti-stringa
Caridorc

8

CJam, 19 byte

Solo un inizio ...

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

Come funziona

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. 

Provalo online qui


Cavolo, 1 minuto in ritardo.
Dennis,

3
wow sei abbastanza veloce a scrivere codice in Cjam: O
Caridorc,

@Dennis Penso che la tua soluzione iniziale, che era identica alla prima soluzione di Optimizer, fosse in realtà la prima. Almeno sono abbastanza sicuro di averlo visto apparire per primo. Ma il tuo post time è stato aggiornato quando lo hai modificato entro il periodo di tolleranza.
Reto Koradi,

1
@RetoKoradi il suo id post è 52870. Il mio è 52869 :)
Ottimizzatore

Ah, ok, non ho il permesso di vedere i post cancellati su questo sito. Entrambi devono essere spuntati allo stesso tempo per me allora, e ho notato solo quello in alto. Mi sembra di ricordare che SE potrebbe fare alcune cose funky per pubblicare i tempi durante le modifiche durante il periodo di tolleranza. Altrimenti potresti pubblicare un segnaposto vuoto e compilare il contenuto entro il periodo di tolleranza, per far sembrare che tu abbia avuto la prima risposta, e in realtà contenesse contenuti utili dall'inizio perché le modifiche all'interno del periodo di grazia non vengono monitorate.
Reto Koradi,

6

Brainfuck, 305

(Senza numero di input da STDIN, vedi modifica in fondo)

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

Ho usato questo adorabile algoritmo per stampare un numero, che occupa 155 byte dell'intero programma.

Funziona con input fino a 32768 (limitazione dell'algoritmo a 16 bit). Non produce spazi finali e funziona anche per l'input 1:

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

Guida rapida:

Installazione (97 byte)

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

Prima parte (181 byte)

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

Seconda parte (27 byte)

>>-----<<<        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 consentito mappare gli 8 comandi Brainfuck su 3 bit, questo programma richiederebbe 114 byte e altri 3 bit

Unario, ~ 4.08 * 10 ^ 275 byte

Sarebbe troppo lungo per qui, ma è solo 408452257862560239329948606295286361112603208650130608525040044700379331457759667646985586658469601803889628246410788572492437928714867190270708935427798983714797786123292750743771225096145575210320040188155473030775033228313350778616384531426430459309802833775612506568528463 zeri e funziona lo stesso come il programma Brainfuck.

EDIT : Ho incasinato, questo programma non accetta davvero l'input dell'utente, ma utilizza solo il valore del puntatore corrente come input. Per poter analizzare un numero molto di più sarebbe necessario e non posso preoccuparmi di farlo.

Quindi funziona con un valore inserito direttamente nel programma (aggiungendo n volte "+" prima del programma) ma non con STDIN


5

JavaScript (ES6), 42 39 byte

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

La funzione esterna fprende il valore di input e quindi chiama la funzione interna in modo gricorsivo per costruire la stringa dal centro, usando il valore di input come massimo per testare il 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);
}

4

Python 56 55

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

4

C # - 76

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

3

Haskell, 53 byte

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

Come funziona: costruisci la stringa dall'interno verso l'esterno iniziando con una stringa vuota e eseguendo il ciclo da ngiù a 2anteponendo il numero corrente e a ?e aggiungendo a : 0. Alla fine metti un 1davanti a tutti.

Un approccio diverso (grazie a @Mauris ora 9 byte in meno):

Haskell, 60 51 byte

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

Come funziona: un letterale 1seguito da ? <x>per ogni <x>in [2..n]seguito da una costante : 0per ogni <x>a [2..n].


Un approccio basato sui 60 byte che scende a 51:g n='1':((=<<[2..n])=<<[(" ? "++).show,\x->" : 0"])
Lynn

In realtà, puoi ridurlo a 51 in più direttamente sostituendolo (\_->" : 0")=<<[2..n]con[2..n]>>" : 0"
Lynn il


3

Julia, 44 31 byte

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

Ciò crea una funzione senza nome che accetta un numero intero come input e restituisce una stringa. Per chiamarlo, dagli un nome, ad es f=n->....

Innanzitutto uniamo gli interi da 1 a n , separando ciascuno con ?e spazi in una singola stringa. Quindi aggiungiamo a questo la stringa " : 0"ripetuta n -1 volte.

Esempi:

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 byte

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

Non so se posso giocare a golf di più. Ma è una soluzione piuttosto semplice

Solo Firefox:

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

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

Equivalente 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 byte

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

Spiegazione

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 byte

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

Sicuramente non vincerà, ma la \+ (between(1,TopBound,N),\+do_something(N))costruzione è piuttosto interessante per ripetere qualcosa su una sequenza di numeri interi.


2

Swift 145 (135 senza spazio)

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

Riesci a credere che la parte della sottostringa sia effettivamente più lunga della parte per produrre l'espressione.


1
Devo amare Swift <3 Vorrei davvero che lo facessero in modo da poter accedere a stringhe con indici Integer come str[1]o str[0...5]. Ovviamente puoi fare una piccola estensione, ma vorrei che la libreria standard lo
abilitasse

@Kametrixom apple una volta lo ha permesso nella prima beta, ma le varie codifiche Unicode ti impediscono di farlo. Questo principalmente perché alcuni simboli sono lunghi due byte o più e altri no. Quindi non è garantito il recupero dello stesso carattere in codifiche diverse con lo stesso indice. La mia descrizione potrebbe non essere precisa, ma è per questo che Apple ha introdotto la brutta sintassi dell'indice delle stringhe.
Ben Lu

Recentemente mi sono davvero abituato a usare Swift per
giocare a

2

Perl, 36 byte

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

35personaggi +1per -n.

Corri con:

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

2

Java, 71

Non ho potuto fare a meno di me stesso dopo aver commentato la risposta di RCB . Quindi ecco un altro Java (71 come wow quando Java non è il più lungo!)

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

2

Giava, 125 88 byte

Originale

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 una formattazione migliore e nomi di variabili:

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

Migliorato: grazie ai commenti di Jack Ammo di seguito:

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

1
non hai bisogno di quell'operatore triadico per aggiungere e solo per rendere conto dello spazio, supponi solo che hai sempre bisogno dello spazio davanti ai due punti e+=" : 0";. È quindi possibile salvare 1 byte post-incrementando i quando viene utilizzato anziché sulla riga di forloop for(int i=1;i<n;){s+=i+++" ? ";L'istruzione return non avrà più bisogno dello spazio aggiunto dopo n return s+n+e;. Puoi anche salvare 1 byte usando e=s. Inoltre, l'istruzione if all'inizio non è necessaria poiché la logica del ciclo for garantirà comunque quel risultato.
Jack Ammo,

@JackAmmo Suggerimenti eccellenti, grazie! L'istruzione if era necessaria per evitare spazi bianchi finali, ma non più dopo i miglioramenti apportati alla logica del ciclo for. Ho incorporato le modifiche e ho valutato la tua risposta.
RCB,

1

JavaScript (ES6), 59 byte

Lo stesso approccio della mia risposta CoffeeScript, usando l'aiuto delle stringhe del modello. String.prototype.repeatcosta troppi personaggi.

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

dimostrazione

Firefox solo per ora, in quanto è 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

Provalo qui

Soluzione semplice: (63)

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

Modifica : volevo davvero provare una funzione ricorsiva. Eccola: (56)

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

Modifica : qualcuno sa perché questo non funziona? Ho provato un elenco con un indice di c<n, ma non ha funzionato a causa di un errore di overflow dello stack. Lo stesso con questo:

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

L'indice non funziona perché deve creare un elenco contenente la funzione valutata (che ovviamente funzionerebbe per sempre). La stessa cosa accade con la moltiplicazione, deve ancora valutare la funzione anche se lo sta facendo 0*.
FryAmTheEggman,

@FryAmTheEggman Va bene, grazie. Non ho mai avuto una situazione del genere prima d'ora.
mbomb007,

1

rs , 77 byte

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

Demo live e casi di test.

Spiegazione:

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

Espandi il numero in una serie di N trattini bassi.

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

Creare ripetutamente una serie di caratteri di sottolineatura, separati da spazi. ad es. Questo si trasformerebbe ___in _ __ ___.

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

Aggiungi all'ultima serie di caratteri di sottolineatura (di lunghezza N) N-1 istanze di : 0.

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

Sostituisci ogni gruppo di caratteri di sottolineatura con la sua lunghezza, preceduto da ?, TRANNE per il primo.

^./1

Sostituisci il primo con il numero 1.

A causa del formato, anche questo gestisce 0bene: stampa solo la stringa vuota.


1

Rapido, 79 75 byte

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

f è implicitamente dichiarato come una funzione con uno Int parametro che restituisce aString

Lavora con n >= 1 e si arresta in modo anomalo in fase di esecuzione quando n == 0. Non ci sono spazi bianchi finali

Modifica: gestito per rimuovere i caratteri 2 * 2, poiché l'interpolazione delle stringhe non è sempre la più breve

Nota per la modifica: questo codice impiega un'eternità (non si ferma) alla compilazione, ma sarebbe sicuramente se il compilatore fosse in grado di gestirlo. Dai un'occhiata alla versione prima di questa modifica per ottenere quella che viene compilata


1

> <> , 32 + 3 = 35 byte

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

Si noti che c'è uno spazio finale sulla seconda riga. Il +3 è per la -vbandiera, ad es. Corri come

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

Prendendo input come un punto di codice come

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

è di 34 byte, ma preferisco la versione precedente poiché è più facile da testare e non vincerà comunque.

Spiegazione

C'è un po 'di pseudo-ricorsione e abusi in corso, quindi diamo un'occhiata.

La prima riga stampa la "1 ? 2 ? ... n-1 ? " parte. Lo stack inizia con solo l'input n, grazie al -vflag, e facciamo quanto segue:

: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

> <> è toroidale, quindi quanto sopra viene eseguito in un ciclo fino a quando la pila è composta ndall'alto con n-1zero sotto, a quel punto si sposta sulla seconda riga.

La prima volta che viene eseguita la seconda riga, viene eseguita l' nistruzione, stampando la nparte superiore della pila. Questo lascia solo gli n-1zero e facciamo quanto segue, anche in un ciclo:

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 Stampa il retro di "?" (Ma hey, palindromes) sta stampando il retro più corto rispetto alla stampa della stringa effettiva?
Caridorc,

@Caridorc Sì, perché> <> può stampare solo a
carboncino saltando

sp3000 bello da sapere.
Caridorc,

1

Scala, 78 71 52 50 byte

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

1

Objective-C, 346 byte

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

Mettere 0per il into qualcosa di negativo genera un NSRangeExceptiondovuto al outStringcontenimento nil. Questo dovrebbe funzionare su iOS 2.0 e versioni successive e molte delle ultime versioni di Mac OS X.

Un'analisi del codice:

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

Dichiarazione di funzione standard in Objective-C.

NSMutableString *outString=@"".mutableCopy;

Crea una stringa per l'output a cui andare outStringe la rende mutabile. (In altre parole, può essere letto e scritto.

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

Aggiunge la prima parte della stringa all'output.

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

Pulisce l'inizio della stringa per assicurarsi che ? 1venga sostituito con 1. Nota: se è 0stato fornito, questo è dove NSRangeExceptionsi verificherebbe, a causa della mancanza di un indice 1.

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

Aggiunge la seconda parte della stringa alla stringa.

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

Sputa indietro la stringa usando NSLoge chiude la funzione.

Produzione:

L'inserimento 0fornisce questo registro degli arresti anomali:

    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à questo:

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

2 dà questo:

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

7 dà questo:

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à questo:

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 byte

C, anche se non è il più corto, in funzione:

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

In nome di golf, il inttipo di specificazione viene lasciato fuori di i, fe nperché è il default. ipuò essere non inizializzato perché è una variabile globale e il valore predefinito è zero. fnon restituisce un valore, ma ciò provoca solo un avviso. printfnon è #included. Per eseguire, ecco una versione completa del programma:

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

Puoi accorciarlo usando for(printf(...);--i;).
lirtosiast,

1

C, 63 byte

Funzione riutilizzabile, prende n come argomento.

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

Ungolf e commentato (abbastanza semplice):

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 comune, 84

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

Innanzitutto, (loop for i from 1 to (read) collect i)genera un elenco di numeri interi da 1 a qualsiasi cosa venga inserita, che viene utilizzata come unico argomento della funzione. Ma la vera magia è nella stringa di controllo che assomiglia al rumore di linea. "~{~A ? ~}"scorre sull'intero elenco memorizzato nel primo argomento, producendo ciascun numero con il ?per la prima metà. ~@*reimposta l'elenco degli argomenti sul primo argomento. ~{~[~;~:;0~^ ? ~]~}ripete l'elenco, producendo 0 ?per ogni argomento consumato, ma non generando nulla se l'argomento è 0 o 1.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.