N-й тернар


17

Я визначаю n-й тернар як тернар, який повертає n і має вигляд:

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

Напишіть функцію або повну програму, яка дасть вхід n, виведе або поверне n-й трирічник. Код-Гольф.

Тестові шафи

0 #=> undefined behaviour
1 #=> 1
2 #=> 1 ? 2 : 0
3 #=> 1 ? 2 ? 3 : 0 : 0
10 #=> 1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 ? 10 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0

Я вважаю, що в 1000-му трійці є якась дзен-гармонія.


1
Чи дозволений пробіл пробілів?
rink.attendant.6

@rink ні, місця для тренувань немає
Caridorc

1
Оскільки "потрійний" означає 3, чи не слід називати його "n-ary", про що йдеться в математиці?
mbomb007

4
Спосіб "редагування" коментаря: видалити його та додати новий.
Рето Кораді

1
@RetoKoradi Ви можете редагувати коментар, якщо це буде протягом п'яти хвилин після публікації.
mbomb007

Відповіді:


8

Піф - 19 18 17 байт

Простіри вбивають мене, думаючи про кращий спосіб впоратися з ними.

+j" ? "SQ*tQ" : 0

Він просто з'єднує числа а, " ? "а потім об'єднує другу частину.

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

Спробуйте його онлайн тут .


10

CJam, 18 18 байт

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

Спробуйте в Інтернеті .

Пояснення

ri,:)          e# Generate the list 1..n.
":?0"*         e# Insert ":?0" between every two numbers.
2/             e# Split into pairs, e.g. 1:, ?0, 2:, ?0, ..., ?0, n.
z              e# First items in every pair before second items in every pair.
e_             e# Concatenate the two parts.
S*             e# Insert spaces.

12
Я люблю :).
Олексій А.

9

Рубін, 31 байт

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

Тест:

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

2
Тож array * string== array.join string... цікаво
Caridorc

Це дійсно круто. Що з цікавості, що відбувається, коли ти робиш f[0]?
Олексій А.

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 Попередження: може бути створено
антиструйну

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

@Dennis Я думаю, що ваше початкове рішення, яке було ідентичним першому рішенню оптимізаторів, насправді було першим. Принаймні, я майже впевнений, що побачив, як це спливе першим. Але ваш час публікації було оновлено, коли ви редагували його протягом пільгового періоду.
Рето Кораді

1
@RetoKoradi його посадовий ідентифікатор 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.

EDIT : Я переплутав, ця програма насправді не приймає користувачів, вона просто використовує поточне значення вказівника як вхідне. Для того, щоб можна було розібрати число, потрібно більше, і я не можу це зробити.

Таким чином, він працює зі значенням, яке безпосередньо вводиться в програму (додаючи n програми "+" перед програмою), але не зі STDIN


5

JavaScript (ES6), 42 39 байт

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

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

Безголовки:

function f(max) {
    function g(count) {
        if(count==max) {
            // base case: return max for the center
            return max;
        } else {
            // recursive case: build outer shell around center
            return count + " ? " + g(count+1) + " : 0";
        }
    }

    return g(1);
}



3

Haskell, 53 байти

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

Як це працює: побудуйте рядок зсередини назовні, починаючи з порожнього рядка та циклічно nзнизу вниз, 2попередньо ?додавши поточне число, а та додаючи а : 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: ')))


2

CoffeeScript, 52 байти

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

Пояснення

f=(n)->
 s = ''                                # initialize string
 s = ' ? ' + n-- + s + ' : 0' while n  # prepend and append in decrementing loop
 s.slice 3,-4                          # chop off leading ?, trailing 0 and whitespace

2

SWI-Prolog, 90 байт

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

Однозначно перемогти не збирається, але \+ (between(1,TopBound,N),\+do_something(N))конструкція досить цікава повторити щось у послідовності цілих чисел.


2

Swift 145 (пробіл 135 м / без)

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

Чи можете ви повірити, що частина підрядок насправді довша, ніж частина для створення виразу.


1
Gotta love Swift <3 Я дуже хотів би, щоб вони зробили це, щоб ви могли отримати доступ до Strings з індексами Integer, як str[1]або str[0...5]. Звичайно, ви можете зробити невелике розширення, але я б хотів, щоб стандартна бібліотека
включила

Яблоко @Kametrixom колись дозволяло це робити в першій бета-версії, але різні кодування Unicode заважають вам це робити. Це головним чином тому, що деякі символи мають два байти або більше, а деякі - ні. Тому не гарантується отримання одного і того ж символу в різних кодуваннях з одним і тим же індексом. Мій опис може не бути точним, але це, в основному, тому Apple ввів некрасивий синтаксис симпатичного рядкового рядка.
Бен Лу

Останнім часом я дуже звик користуватися Swift для Code
Golfing,

2

Perl, 36 байт

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

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

Виконати з:

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

2

Ява, 71

Я не міг допомогти собі, коментуючи відповідь RCB . Ось ось ще одна Java (71 як уау, коли Java не найдовша!)

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

2

Java, 125 88 байт

Оригінал

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

З кращим форматуванням та назвами змінних:

String nAry(int n) {
    if (n == 1) {
        return "1";
    }
    String start = "", end = "";
    for (int i = 1; i < n; i++) {
        start += i + " ? ";
        end += (i == n - 1) ? ": 0" : ": 0 ";
    }
    return start + n + " " + end;
}

Покращено - Завдяки коментарям Джека Аммо нижче:

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

1
тобі не потрібен цей тріадний оператор для приєднання до e просто для обліку простору, просто припустимо, що завжди потрібен простір на передній частині двокрапки e+=" : 0";. Тоді ви можете зберегти 1 байт шляхом інкрементування i, коли він використовується замість рядка forloop. Після for(int i=1;i<n;){s+=i+++" ? ";повернення n заява про повернення більше не потребуватиме пробілу return s+n+e;. Ви також можете зберегти 1 байт за допомогою e=s. Крім того, оператор if на початку є непотрібним, оскільки логіка циклу гарантуватиме результат.
Jack Ammo

@JackAmmo Відмінні поради, дякую! Оператор if був необхідним, щоб уникнути пробілу пробілів, але вже не після вдосконалення логіки циклу for. Я включив зміни та підтримав вашу відповідь.
RCB

1

JavaScript (ES6), 59 байт

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

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

Демо

Firefox поки що лише, як це ES6.

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

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

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



1

Пітон 2, 63 60 58 56

Спробуйте тут

Просте рішення: (63)

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

Edit: I really wanted to try a recursive function. Here it is: (56)

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

Edit: Anyone know why this isn't working? I tried a list with an index of c<n, but that didn't work because of a stack overflow error. Same with this:

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

The index doesn't work because it has to create a list containing the evaluated function (which obviously would run forever). The same thing happens with your multiplication, it still needs to evaluate the function even though it is doing 0* it.
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)

Замініть кожну групу підкреслень на її довжину, перед якою ?переходить EXCEPT для першої.

^./1

Замініть перший на число 1.

Через формат це також 0добре справляється : він просто друкує порожній рядок.


1

Свіфт, 79 75 байт

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

fнеявно оголошується як функція з одним Intпараметром, який повертає aString

Працює з n >= 1та виходить з ладу під час виконання n == 0. Немає відсталих пробілів

Редагування: вдалося видалити 2 * 2 символи, оскільки інтерполяція рядків не завжди є найкоротшою

Примітка для редагування: Цей код потрібно назавжди (він не зупиняється) для компіляції, але це безумовно, якщо компілятор зможе це обробити. Погляньте на версію перед цим редагуванням, щоб отримати версію, яка збирається


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

" ? "ooo Друкувати зворотний бік "?" (Але ей, паліндром) друкує зворотний бік коротше, ніж друк фактичного рядка?
Caridorc

@Caridorc Так, тому що> <> може друкувати лише char-by-char, вискочивши стек :)
Sp3000

sp3000 приємно знати.
Caridorc


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

1

C, 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'd. Щоб запустити, ось повна версія програми:

#include <stdio.h>

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

int main(int argc, char *argv[]){
    if(argc != 2){
        return 1;
    }
    f(atoi(argv[1]));
    puts("");
}

Ви можете скоротити це за допомогою for(printf(...);--i;).
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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.