N-тая тройка

17

Я определяю n-ую тройку как тройную, которая возвращает n и имеет вид:

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

Напишите функцию или завершенную программу, которая с помощью ввода n будет выводить или возвращать n-ю троицу. Код-гольф.

Testcases

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-й троичный я думаю, в ней есть какая-то дзенская гармония.

Caridorc
источник
1
Разрешен ли конечный пробел?
rink.attendant.6
@ грин нет, тренировок нет
Caridorc
1
Поскольку «троичный» означает «3», разве вы не должны называть его «n-ary», на что он ссылается в математике?
mbomb007
4
Способ «отредактировать» комментарий: удалите его и добавьте новый.
Рето Коради
1
@RetoKoradi Вы можете редактировать комментарий, если он опубликован в течение пяти минут.
mbomb007

Ответы:

8

Pyth - 19 18 17 байт

Пространства убивают меня, думая о лучшем способе справиться с ними.

+j" ? "SQ*tQ" : 0

Он просто соединяет числа через a " ? "и затем объединяет вторую часть.

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

Попробуйте это онлайн здесь .

Maltysen
источник
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.
jimmy23013
источник
12
Я люблю :).
Алекс А.
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"
daniero
источник
2
Так что array * string== array.join string... интересно
Caridorc
Это действительно круто. Из любопытства, что происходит, когда вы делаете f[0]?
Алекс А.
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 И громко, и неразборчиво. Ницца.
Алекс А.
2
@daniero Предупреждение: может быть сгенерирована анти-строка
Caridorc
8

CJam, 19 байтов

Просто начало ...

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

Как это устроено

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

Попробуйте это онлайн здесь

оптимизатор
источник
Черт возьми, на 1 минуту позже.
Деннис
3
вау, ты довольно быстро разбираешься в Cjam: O
Caridorc
@ Денис Я думаю, что ваше первоначальное решение, которое было идентично первому решению Оптимизаторов, было на самом деле первым. По крайней мере, я почти уверен, что увидел это всплывающим первым. Но ваше время публикации было обновлено, когда вы редактировали его в течение льготного периода.
Рето Коради
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

Вторая часть (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 байт

Было бы слишком долго здесь, но это только 408452257862560239329948606295286361112603208650130608525040044700379331457759667646985586658469601803889628246410788572492437928714867190270708935427798983714797786123292750743771225096145575210320040188155473030775033228313350778616384531426430459309802833775612506568528463 нулей и работает так же, как программа Brainfuck.

РЕДАКТИРОВАТЬ : Я запутался, эта программа на самом деле не принимает пользовательский ввод, она просто использует текущее значение указателя в качестве ввода. Для возможности разбора числа потребовалось бы намного больше, и я не могу потрудиться сделать это.

Таким образом, он работает со значением, непосредственно введенным в программу (добавляя n раз «+» перед программой), но не с STDIN

Kametrixom
источник
5

JavaScript (ES6), 42 39 байт

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

Внешняя функция fпринимает входное значение, а затем вызывает внутреннюю функцию.g рекурсивно чтобы построить строку из середины, используя входное значение в качестве максимума для проверки базового случая.

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
источник
4

Python 56 55

t=lambda n:' ? '.join(map(str,range(1,n+1)))+' : 0'*~-n
Caridorc
источник
4

C # - 76

Func<int,string>F=k=>{var r="";for(;k>1;)r=" ? "+k--+r+" : 0";return"1"+r;};
Brandon
источник
3

Haskell, 53 байта

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

Как это работает: построить строку изнутри, начав с пустой строки и зацикливая nснизу до 2с добавлением текущего числа и a ?и добавляя a : 0. Наконец положить 1перед всеми.

Другой подход (благодаря @Mauris теперь на 9 байт короче):

Haskell, 60 51 байт

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

Как это работает: литерал 1следует ? <x>для каждого <x>в [2..n]последующей постоянной : 0для каждого <x>в [2..n].

Ними
источник
Подход, основанный на ваших 60 байтах, который сводится к 51:g n='1':((=<<[2..n])=<<[(" ? "++).show,\x->" : 0"])
Линн
На самом деле, вы можете уменьшить его до 51 напрямую, просто заменив (\_->" : 0")=<<[2..n]на[2..n]>>" : 0"
Линн
3

Юлия, 44 31 байт

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

Это создает безымянную функцию, которая принимает целое число в качестве входных данных и возвращает строку. Чтобы назвать его, дайте ему имя, напримерf=n->... .

Сначала мы объединяем целые числа от 1 до n , разделяя каждое с ?пробелами в одну строку. Затем добавляем к этому строку, " : 0"повторяемую n -1 раз.

Примеры:

julia> f(1)
"1"

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

julia> f(0)
can't repeat a string -1 times
Алекс А.
источник
2

JavaScript ES7, 62 байта

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

Я не знаю, смогу ли я играть в гольф больше. Но это довольно простое решение

Только Firefox:

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

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

ES5 эквивалент:

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

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

Downgoat
источник
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
rink.attendant.6
источник
2

SWI-Пролог, 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))конструкция довольно интересно повторить что-то на последовательности целых чисел.

Fatalize
источник
2

Swift 145 (135 без пробелов)

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

Можете ли вы поверить, что часть подстроки на самом деле длиннее, чем часть для создания выражения.

Бен Лу
источник
1
Должен любить Swift <3 Я действительно хочу, чтобы они сделали это, чтобы вы могли получить доступ к строкам с целочисленными индексами, такими как str[1]или str[0...5]. Конечно, вы можете сделать небольшое расширение, но я бы хотел, чтобы стандартная библиотека
включала
@Kametrixom Apple однажды допустила это в первой бета-версии, но различные кодировки Unicode мешают вам сделать это. Это происходит главным образом потому, что некоторые символы имеют длину два байта или более, а некоторые - нет. Таким образом, не гарантируется получение одного и того же символа в разных кодировках с одинаковым индексом. Мое описание может быть неточным, но в основном именно поэтому компания Apple ввела синтаксис уродливого глотка.
Бен Лу
Недавно я действительно привык использовать Swift для Code Golfing, взгляните на мой ответ Swift
Kametrixom
2

Perl, 36 байт

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

35символы +1для -n.

Бежать с:

echo 10 | perl -nE'say join(" ? ",1..$_)." : 0"x($_-1)'
hmatt1
источник
2

Ява, 71

Я не мог помочь себе после того, как прокомментировал ответ RCB . Итак, вот еще одна Java (например, вау, когда Java не самая длинная!)

String t(int n){String s=""+n;for(;--n>0;)s=n+" ? "+s+" : 0";return s;}
Джек Боеприпасы
источник
2

Джава, 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;
}

Улучшено - благодаря комментариям Джека Аммо ниже:

String f(int n){String s="",e=s;for(int i=1;i<n;){s+=i+++" ? ";e+=" : 0";}return s+n+e;}
RCB
источник
1
вам не нужен этот триадический оператор для добавления e только для учета пробела, просто предположите, что вам всегда нужно пространство перед двоеточием e+=" : 0";. Затем вы можете сохранить 1 байт, увеличив значение i после его использования, а не в строке forloop. В for(int i=1;i<n;){s+=i+++" ? ";операторе return больше не будет места, добавленного после n return s+n+e;. Вы также можете сохранить 1 байт, используя e=s. Кроме того, оператор if в начале не нужен, так как логика цикла for в любом случае гарантирует этот результат.
Джек Боеприпасы
@JackAmmo Отличные советы, спасибо! Оператор if был необходим, чтобы избежать запаздывающих пробелов, но больше не после улучшений логики цикла for. Я включил изменения и проголосовал за ваш ответ.
RCB
1

JavaScript (ES6), 59 байт

Тот же подход, что и в моем ответе CoffeeScript, с использованием строк шаблона. String.prototype.repeatстоит слишком много символов.

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

демонстрация

Firefox пока только для ES6.

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

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

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

rink.attendant.6
источник
1

К, 36 байт

{(3_,/(" ? ",)'$!x),(4*-1+x)#" : 0"}
kirbyfan64sos
источник
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')
mbomb007
источник
Индекс не работает, потому что он должен создать список, содержащий оцененную функцию (которая, очевидно, будет работать вечно). То же самое происходит с вашим умножением, оно все равно должно оценить функцию, даже если она это делает 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хорошо обрабатывается : он просто печатает пустую строку.

kirbyfan64sos
источник
1

Swift, 79 75 байт

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

fнеявно объявлен как функция с одним Intпараметром, который возвращаетString

Работает с n >= 1и вылетает во время выполнения, когда n == 0. Там нет конечных пробелов

Редактировать: удалось удалить 2 * 2 символа, потому что интерполяция строк не всегда самая короткая

Примечание для редактирования: этот код требует вечности (он не останавливается) для компиляции, но это определенно будет, если компилятор сможет его обработать. Взгляните на версию перед этим редактированием, чтобы получить ту, которая компилируется

Kametrixom
источник
1

> <> , 32 + 3 = 35 байт

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

Обратите внимание, что на второй строке есть пробел. +3 для -vфлага, например, бегите как

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

Принимая ввод как кодовую точку, как

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

составляет 34 байта, но я предпочитаю приведенную выше версию, так как ее проще тестировать и она все равно не выиграет.

объяснение

Происходит немало псевдорекурсии и злоупотреблений, поэтому давайте посмотрим.

Первая строка печатает "1 ? 2 ? ... n-1 ? " деталь. Стек начинается только с ввода n, благодаря -vфлагу, и мы делаем следующее:

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

> <> является тороидальным, поэтому приведенное выше выполняется в цикле до тех пор, пока стек не окажется nсверху, с n-1нулями внизу, после чего он переместится на вторую строку.

При первом выполнении второй строки выполняется nинструкция с печатью nвверху стека. Это оставляет только n-1нули, и мы делаем следующее, также в цикле:

l?!;            If the stack is empty, terminate
" : "ooo        Print the reverse of " : " (but hey, palin...)
n               Print one of the 0s, decreasing the stack's length by 1
                This reuses the same n instruction from before
Sp3000
источник
" ? "ooo Вывести на обороте знак «?» (Но, эй, палиндромы) , печать на обороте короче, чем печать фактической строки?
Caridorc
@Caridorc Да, потому что> <> может печатать только символ за
символом,
sp3000 приятно знать.
Каридорк
1

Scala, 78 71 52 50 байт

def f(n:Int)=(1 to n).mkString(" ? ")+" : 0"*(n-1)
user42083
источник
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был задан, это то NSRangeExceptionместо, где будет происходить, потому что там нет индекса 1.

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

Добавляет вторую часть строки в строку.

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

Выплевывает строку обратно с помощью NSLogи закрывает функцию.

Выход:

Ввод 0дает этот журнал сбоя:

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

1 дает это:

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

2 дает это:

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

7 дает это:

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

200 дает это:

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

С, 84 78 байт

C, хотя он и не самый короткий, как функция:

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

Во имя игры в гольф, то intспецификатор типа остается прочь i, fи nпотому что это по умолчанию. 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("");
}
hacatu
источник
Вы можете сократить это, используя for(printf(...);--i;).
lirtosiast
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.

Свечи
источник