Codegolf - Прыгающие Кенгуру

  • Автор темы Кмс76
  • Обновлено
  • 23, Oct 2024
  • #1

Предыстория

Отказ от ответственности: Может содержать вымышленную информацию о кенгуру.

Кенгуру проходят несколько стадий развития. По мере того, как они становятся старше и сильнее, они могут прыгать выше и дольше, и они могут прыгать больше раз, прежде чем проголодаются.

На сцене 1, кенгуру очень маленький и совсем не умеет прыгать. Несмотря на это, постоянно требует питания. Мы можем представить сцену 1 Модель активности кенгуру такая.

 
 
 
 o 

На сцене 2, кенгуру может совершать небольшие прыжки, но не более 2 прежде чем он проголодается. Мы можем представить сцену 2 Модель активности кенгуру такая.

o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o

После этапа 2 кенгуру быстро поправляется. На каждом последующем этапе кенгуру может прыгнуть чуть выше (1 единица в графическом представлении) и в два раза больше раз. Например, сцена 3 Схема деятельности кенгуру выглядит следующим образом.

o o o o o o o o o o o o o o o o o

Для сцены н, модель деятельности состоит из 2n-1 V-образные прыжки в высоту н.

Например, для сцены 4, есть 8 прыжки в высоту 4.

o o o o o

Задача

Напишите полную программу или функцию, которая принимает положительное целое число. н в качестве входных данных и печатает или возвращает художественное представление сцены в формате ASCII. н Модель активности кенгуру.

Допускаются окружающие пробелы и escape-коды ANSI, если шаблон выглядит точно так, как показано выше.

Если вы выберете функцию, которая возвращает выходные данные, она должна возвращать одну строку или массив символов, который отображает правильный результат при печати. Возврат массива строк не допускается.

Вместо символа можно использовать любой печатный символ без пробелов. o , as long as it is consistent within the activity pattern and across all patterns in your answer.

Это ; пусть победит самый короткий ответ в байтах!

#code-golf #code-golf #string #ascii-art #sequence

Кмс76


Рег
02 Jul, 2009

Тем
66

Постов
193

Баллов
533
  • 26, Oct 2024
  • #2

MATLAB, 92 90 86 84 байта

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 o×/L[|
o×     repeat o input times

/    make an antidiagonal using it

L   get width without popping

[| palindromize width times
 

Попробуйте онлайн!

o×/L[│ creates an identity matrix. If we flip it and concatenate the original i.e. for($i=$n=$argv[1];$i>0;) { // Spacing from beginning of pattern to first 'o' $o = str_repeat(' ',$i-1); // First 'o' for the ascent $o .= 'o'; // Spacing between ascent and descent $o .= str_repeat(' ',2*$n-2*$i-1); // Second 'o' for the descent, unless we are at the apex or the bottom $o .= ($i==$n|$i==1?'':'o'); // Spacing to the end of the pattern $o .= str_repeat(' ',$i-2); // Repeat the pattern 2^(n-1) times echo str_repeat($o, 2**($n-1)); // Output final 'o' if we are at the bottom in the last pattern echo $i--==1&$n!=1?'o':''; // End of line echo "\n"; } мы получаем (для for($i=$n=$argv[1],$r=str_repeat;$i>0;)echo$r($r(' ',$i-1).'o'.$r(' ',2*$n-2*$i-1).($i==$n|$i==1?'':'o').$r(' ',$i-2),2**($n-1)).($i--==1&$n!=1?'o':'')."\n"; ):

o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o

С import java.util.function.*; public class LeapingKangaroos { public static void main(final String[] args) { for (int i = 1; i <= 4; ++i) { System.out.println(toString(n -> { if (n == 1) { return "o"; } int k, x, y, m = (n + n) - 2; char[][] p = new char[n][m]; for (y = 0; y < n; ++y) { for (x = 0; x < m;) { p[y][x++] = ' '; } } for (k = 0; k < m; ++k) { p[k < n ? n - k - 1 : (k - n) + 1][k] = 'o'; } String s = ""; for (y = 0; y < n; ++y) { for (k = 0; k < (1 << (n - 1)); ++k) { for (x = 0; x < m;) { s += p[y][x++]; } } if (y == (n - 1)) { s += 'o'; } s += '\n'; } return s; } , i)); System.out.println(); System.out.println(); } } private static String toString(final IntFunction<String> func, final int level) { return func.apply(level); } } we repeat this n->{if(n==1)return"o";int k,x,y,m=n+n-2;char[][]p=new char[n][m];for(y=0;y<n;++y)for(x=0;x<m;)p[y][x++]=' ';for(k=0;k<m;++k)p[k<n?n-k-1:k-n+1][k]='o';String s="";for(y=0;y<n;++y){for(k=0;k<1<<(n-1);++k)for(x=0;x<m;)s+=p[y][x++];if(y==n-1)s+='o';s+='\n';} раз и получить

# Example input of n=2. L< # [0,1] (Push [1..a], decrement). ¹Fû} # [0,1,0,1,0] (Palindromize n times). ð×'o« # ['o',' o','o',' o','o'] (Push n spaces, append o's). .Bø # ['o ',' o','o ',' o','o '] (Pad with spaces into 2D array, transpose). R» # Reverse, join and print.

После этого мы просто удаляем ненужные столбцы, используя L<¹Fû}ð×'o«.BøR»

 

Def_v6


Рег
06 Jun, 2009

Тем
71

Постов
175

Баллов
540
  • 26, Oct 2024
  • #3

Древесный уголь, 14 байт

o

Попробуйте онлайн!

Объяснение

->\n{my @a;@a[$_;$++]="o" for [...] |(n-1,0,n-1)xx 2**n/2;say .join for @a».&{$_//" "}} inputs an integer into n=5;f=n-1;w='' for i in range(n): s='';a=0;d='\n' if i==f:w='';a=-1;d='' for _ in range(2**f): s+=' '*(f-i)+'o'+' '*(2*i-1)+w+' '*(n-i-2+a) print(s,end=d);w='o' print('o') . XyPt3LZ)2&Pht4LZ)lGqX"h48*c is a multidirectional print (SE and SW) of ŒḄ¡ḶUz1Ṛa⁶Y - Main link: n e.g. 3 ŒḄ - bounce, initial implicit range(n) e.g. [1,2,3,2,1] ¡ - repeat n times e.g. [1,2,3,2,1,2,3,2,1,2,3,2,1,2,3,2,1] i.e. [1,2,3,2,1] bounced to [1,2,3,2,1,2,3,2,1] bounced to [1,2,3,2,1,2,3,2,1,2,3,2,1,2,3,2,1] Ḷ - lowered range (vectorises) e.g. [[0],[0,1],[0,1,2],[0,1],[0],[0,1],[0,1,2],[0,1],[0],[0,1],[0,1,2],[0,1],[0],[0,1],[0,1,2],[0,1],[0]] U - upend (vectorises) e.g. [[0],[1,0],[2,1,0],[1,0],[0],[1,0],[2,1,0],[1,0],[0],[1,0],[2,1,0],[1,0],[0],[1,0],[2,1,0],[1,0],[0]] z1 - transpose with filler 1 Ṛ - ...and reverse e.g. [[1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1], [1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1], [0,1,2,1,0,1,2,1,0,1,2,1,0,1,2,1,0]] a⁶ - logical and with space character (all non-zeros become spaces) Y - join with line feeds e.g. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (строковое умножение 0 with ŒḄ¡ḶUz1Ṛa⁶Y ). Затем <input type=number min=1 oninput=o.textContent=f(this.value)><pre id=o> runs a for loop f= n=>` `.repeat(n).replace(/ /g,"$'o$`-$`o$'-".repeat(1<<n-1)+` `).replace(/-.?/g,``) времена, в которые o o o o o o o o o o o o o o o o o reflects the whole thing to the right with overlap.

 

Uggsonsaleja30


Рег
25 Oct, 2024

Тем
65

Постов
176

Баллов
531
  • 26, Oct 2024
  • #5

Питон 2, 87 байт

0 0 1 0 0 0 1 0 1 0 1 0 0 0 1

Попробуйте онлайн!

Использует формулу для координат 1 0 0 0 1 0 0 0 1 that contain a circle, then joins and prints the grid. There's a lot of golf smell here -- n = 3 , два вложенных диапазона, ' o'{&:>~[:(,.}."1)&.>/(2^<:)#<@(|.,.}."1)@=@i. over o , так что, скорее всего, будут улучшения.

 

Occallimify


Рег
25 Mar, 2013

Тем
77

Постов
182

Баллов
587
  • 26, Oct 2024
  • #7

Бефунге, 98 91 байт

Для этого используется o in place of the range(-n+1,n-1) , поскольку это позволяет нам сэкономить пару байт.

lambda n:'\n'.join(map(''.join,zip(*[' '*abs(i)+'o'+~-n*' 'for i in range(-n+1,n-1)*2**~-n])))+'o'

Попробуйте онлайн!

Объяснение

Учитывая номер этапа, н, мы начнем с расчета следующих трех параметров паттерна:

jC.<V*]+*dtQNh*tQ^2Q*+JUQtP_J^ Program. Input: Q jC.<V*]+*dtQNh*tQ^2Q*+JUQtP_J^QQ Implicit input fill ] Yield a one-element list, A *dtQ cotaining Q-1 spaces + N appended with a quote mark. h*tQ^2Q Yield 1+(Q-1)*2^Q * Repeat A that many times, giving B UQ Yield [0, 1, 2, ..., Q-1] J (Store that in J) + tP_J Append the reverse of J, discarding the first and last elements * ^QQ Repeat the above Q^Q times, giving C V Vectorised map. For each pair [a,b] from B and C: .< Cyclically rotate a left by b characters C Transpose j Join on newlines Implicitly print

jump_len нормализуется, чтобы избежать нулевого значения для кенгуру стадии 1 с:

o

Затем мы можем вывести шаблон перехода, перебирая х и й координаты области вывода и расчет соответствующего символа для вывода для каждого местоположения. й координата отсчитывается от н - от 1 до 0, и х координата отсчитывается от ширина - от 1 до 0. Определяем, нужно ли показывать точку, по следующей формуле:

"

show_dot Логическое значение используется в качестве индекса таблицы для определения фактического символа для вывода в каждом месте. Чтобы сэкономить место, в качестве таблицы мы используем начало последней строки исходного кода, поэтому наша jC.<V*]+*dtQNh*tQ^2Q*+JUQtP_J^ character ends up being a using System; public class P { public static void Main() { Func<int, string> _ = n => { var s = new string[n]; for (int a = -1, j = 0, i, m = n - 1, x = m; j <= m * (Math.Pow(2, n) * n + 1);) { i = j++ % n; s[i] += x‌ == i ? "o" : "_"; if (i == m & n > 1) { x += a; a *= x % m == 0 ? -1 : 1; } } return string.Join("\n", s); }; Console.Write(_(4)); Console.ReadKey(); } } .

 

Nix77


Рег
05 May, 2006

Тем
69

Постов
188

Баллов
573
  • 26, Oct 2024
  • #8

Дж, 28 25 байт

n=>{var s=new string[n];for(int a=-1,j=0,i,m=n-1,x=m;j<=m*(Math.Pow(2,n)*n+1);){i=j++%n;s[i]+=x==i?"o":"_";if(i==m&n>1){x+=a;a*=x%m==0?-1:1;}}return string.Join("\n",s);};

Сэкономлено 3 байта благодаря @Конор О'Брайен.

Это основано на трюке с палиндромом от @muddyfish's. решение.

Попробуйте онлайн!

Объяснение

n=1 ||answer||

Пайк, 11 байт

unlines

Попробуйте здесь!

' ' ||answer||

Хаскелл, 100 байт

'o'

Попробуйте онлайн! Использование: m*2^(n-1) .

Объяснение:

Учитывая ряд 0 , a column c и 0 an n-1 устанавливается, если r equals m-r или r . The outermost list comprehension sets the range of c mod m от o к m = 2(n-1) , следующий устанавливает диапазон c from r to k 3 and the innermost acts as conditional returning k 1="o" k n|n<-n-1,m<-n*2=unlines[[last$' ':['o'|mod c m`elem`[m-r,r]]|c<-[0..m*2^n]]|r<-[n,n-1..0]] если приведенная выше формула выполняется и F - for i in range(input) d*\o+ - " "*i+"o" Q^ - ^.lpad(input) Vs - repeat len(^): palindromise() X - print(reversed(^)) otherwise. This yields a list of strings which is turned into a single newline separated string by XFd*\o+Q^Vs . Для ' o'{~]_&(](|.,}.)"1)=@i. Input: integer n i. Form the range [0, 1, ..., n-1] =@ Equality table with itself. Creates an identity matrix of order n ] Get n _&( ) Repeat n times on x = identity matrix ( )"1 For each row |. Make a reversed copy }. Get a copy with the head removed , Append them ] Use that as the new value of x ' o'{~ Index into the char array the function produces a division-by-zero error, so this case is handled explicitly in the first line.

 

NixG


Рег
12 Jun, 2004

Тем
76

Постов
202

Баллов
602
  • 26, Oct 2024
  • #9

С#, 180, 173 171 байт

Не выиграйте это, публикуя сообщения для других участников C # как нечто, что они могут победить.

' o'{~]_&(](|.,}.)"1)=@i.

полная программа:

,

редактировать: -7 байт благодаря @KevinCruijssen

редактировать: -2 байта, упрощенно, если

 

VIVENDO


Рег
25 Jun, 2008

Тем
53

Постов
212

Баллов
517
  • 26, Oct 2024
  • #10

Пиф, 30 байт

o

Программа, которая принимает на вход целое число и печатает результат. Использует кавычки jump_off = x % jump_len show_dot = (jump_off == y) or (jump_off == (jump_len-y)) instead of jump_len += !jumplen .

Попробуйте онлайн!

Как это работает

jump_count = 2 ^ (n - 1) jump_len = (n - 1) * 2 width = (jump_len * jump_count) + 1 ||answer||

Питон 2, 115 113 108 98 байт

&::1>\1-:v +\:v^*2\<_$\1-2*::!+00p*1 :-1_@v0\-g01:%g00:-1<:\p01 ,:^ >0g10g--*!3g,:#^_$\55+

Попробуйте онлайн!

С использованием o to create the absolute number of spaces between the bottom and the , генерировать

n=input() i=0 exec"s=' '*n+'o'+' '*i;i+=1;print(s[i:-1]+s[:i:-1])*2**~-n+s[i];"*n

а затем добавляем еще копии, поворачиваем все на 90° и добавляем последнюю exec at bottom right

 

Aleksis3241


Рег
26 Nov, 2019

Тем
91

Постов
201

Баллов
676
  • 26, Oct 2024
  • #11

Дж, 58 47 байт

for

Сэкономлено 11 байт благодаря использованию идеи идентификационной матрицы от @flawr's. решение.

Попробуйте онлайн!

Простое применение определения.

Объяснение

Для ''.join , creates the identity matrix of order н.

(i,j)

Затем отразите его, чтобы сделать

n=input() for i in range(n):print''.join(' o'[abs(j%(2*n)-n)==i]for j in range(1,n<<n))

Повтори это 2н-1 раз и поместите заголовок каждой строки на дубликаты

Î # Push zero and input j # Prepend input - 1 spaces ¹F # Input times do.. Ð # Triplicate the string v } # Length times do.. û # Palindromize , # Pop and print with a newline À # Rotate the string on to the right

Используйте эти значения в качестве индексов в массиве символов. Îj¹FÐvû},À to output a 2d char array

‖O→ ||answer||

JavaScript (ES6), 83 байта

λ - 1 F⁻λ¹
 

Timege


Рег
04 May, 2005

Тем
101

Постов
220

Баллов
725
  • 26, Oct 2024
  • #14

Perl 6, 104 93 88 байт

Nλ

Вставки NλP^×λoF⁻λ¹‖O→ 's into a 2D array, and then prints it.

 

Botsman1972


Рег
17 Nov, 2007

Тем
78

Постов
206

Баллов
606
  • 26, Oct 2024
  • #15

05AB1E, 16 байт

A(:,n+1:n:end)=[];

Попробуйте онлайн!

Почему и как?

0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 ... 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 ||answer||

Java 8, 254 байта

Гольф:

2^(n-1)

Негольфед:

repmat(...,1,2^n/2)

Выход программы:

0 0 1 1 0 0 0 1 0 0 1 0 1 0 0 0 0 1 ||answer||

PHP, 157 байт

n=3

Негольфед:

[fliplr(p),p] ||answer||

Холст, 6 байты

eye

Попробуйте здесь!

Объяснение

n=input('');p=eye(n)+32;A=repmat([fliplr(p),p,''],1,2^n/2);A(:,n+1:n:end)=[];disp(A)
 

Lestar666


Рег
22 Oct, 2008

Тем
67

Постов
183

Баллов
538
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно