Codegolf - Соединение С Круговой Цепью

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

Задача

Учитывая положительное целое число

 
 
 
 
 # 
, output the joined compound of circles

Круги квадратного размера 1 -> # # # # 2 -> ## ## # # # # # # ## ## 3 -> ### ### ### # # # # # # # # # # # # ### ### ### 4 -> #### #### #### #### # # # # # # # # # # # # # # # # # # # # #### #### #### #### but removing the corner edges and the middle, before finally overlapping ## ## # # # # # # ## ## времена самого себя

Например.

## # # # # ##

->

#### #### #### ####

->

2

->

n

Тестовые случаи

n+2

Допускаются конечные пробелы

Вы должны использовать персонажа n

Вам нужно объединить строки с помощью новой строки (без списков)

Это так, поэтому побеждает самый короткий код!

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

Zuimanf432


Рег
06 Sep, 2012

Тем
67

Постов
185

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

Дж, 37 32 31 30 28 байт

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lambda n:"\n".join([t:=" "+f'{"#"*n} '*n,*["#"+f'{" "*n}#'*n]*n,t])

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

-2 спасибо ovs за то, что XOR можно заменить на XNOR

ключевая идея

Искомый 2d-шаблон — это просто таблица функций XOR этих двух 1d-шаблонов:

 
 
 
 
 
 
lambda n:"\n".join(n*(a+n*b)+a for a,b in[" #",*n*["# "]," #"])
||answer||

Луа, 86 байт

 
 
 
 
 
 
 
 
 
 
 
 
 +OUO{^)+E:ROD-}. block 0
+O               push 1 to global as a flag

UO             get n/push n to global

U {^)  :  D-}  loop n times

RO       push n to global

+E      . goto block 1

UOD++++[]]]][]]O[UO{N-)!@++E:]PUO{^):]+++PD-};}. block 1
UOD                                              push flag to global

++++[]]]][]]O                                 push 32 to global

[                                and store it

UO                              push n to global

{N-)     :  U              }  loop n times

]P                    append 32 to string

UO                  push n to global

U {^):     D-};     loop n times

]+++P           append 35 to string

!@                        print string w/trailing

newline and clear string

++E                   . goto block 2

UO)++++E:U[{N-)+++E:]+++PUO{^):]PD-};}. block 2
UO)                                      if flag is 0

++++E                                  goto block 5

:                               else

U[                               store 32

{N-)    :     U           }    loop n plus 1 times

]+++P                   append 35 to string

UO                 push n to global

{^):  D-};       loop n times

]P             append 32 to string

+++E                   .   goto block 3

OUUO{^)@+E:RO!D-}. block 3
O                  push 0 to global as flag

U                 discard previous flag state

UO               push n to global

U {^)   :   D-}  loop n times

RO        push n to global

!       print string w/trailing newline

@           clear string

+E       . goto block 1

block 4 is empty
 

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

 

Vladislav.blagov


Рег
07 Nov, 2019

Тем
104

Постов
210

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

К (нгн/к), 37 35 34 30 26 байт

"\u0004"

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

Ура, мой второй ответ!

Использует подход @Jonah.

¯2 байта благодаря @doug в дереве k

¯1 байт, используя erun("+OUO{^)+E:ROD-}.UOD++++[]]]][]]O[UO{N-)!@++E:]PUO{^):]+++PD-};}.UO)++++E:U[{N-)+++E:]+++PUO{^):]PD-};}.OUUO{^)@+E:RO!D-}.","your input here")

4 байта благодаря @ovs и @doug

4 байта благодаря @Traws

 

Pahar


Рег
26 Oct, 2008

Тем
71

Постов
194

Баллов
569
  • 26, Oct 2024
  • #4

Виксал +OUO{^)+E:ROD-}.UOD++++[]]]][]]O[UO{N-)!@++E:]PUO{^):]+++PD-};}.UO)++++E:U[{N-)+++E:]+++PUO{^):]PD-};}.OUUO{^)@+E:RO!D-}. , 16 bytes

t=(.cycle).take f n=unlines$t(n+2)[t(n^2+n+1)[" # "!!(x+y)|x<-l]|y<-l]where l=1:t n[0]

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

(ИМО) это довольно элегантный код. Для достижения желаемого результата он использует несколько довольно изящных приемов. Однако выходной формат все еще глуп.

n=>(t=(r=s=>s.repeat(n))(' '+r('#'))+` `)+r(r('#'+r(' '))+`# `)+t

Подход, аналогичный ответу Джонаса, но полученный независимо:

Виксал $&* , 18 bytes

$()

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

Последние 7 байт существуют из-за дурацкого формата вывода и некоторых ошибок Vyxal.

Виксал $&*$( $&*#)¶$&*$($&*$(#$&* )#¶)$&*$( $&*#) , 18 bytes

.+ *$( $&*#)¶$&*$(*$(#$&* )#¶)$&*$( $&*#

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

Начальная версия первого подхода. Кто такой Джо?

 

555555


Рег
24 Mar, 2009

Тем
70

Постов
176

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

Машинный код x86-64, 33 байта

%(`

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

Следуя стандартному соглашению о вызовах для Unix-подобных систем (из System V AMD64 ABI), он принимает в RDI адрес, по которому можно поместить результат, в виде байтовой строки с нулевым завершением, и принимает число n в RSI.

В сборке:

n ||answer||

PowerShell, 58 байт

#

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

 

Siplex7


Рег
08 Sep, 2009

Тем
62

Постов
195

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

С (ГКК), 102 байта

более короткая версия благодаря @ceilingcat!

\b¶ # ¶

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

C (GCC), 107 байт

¶$ ¶$%` #

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

Версия с отступом:

# ||answer||

Питон, 71 67 байт

1

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

-4 байта из @Unrelated String

 

Natalia1982_fre


Рег
09 Dec, 2020

Тем
76

Постов
212

Баллов
612
  • 26, Oct 2024
  • #13

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

^ $%' #¶

Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:

n

Вход 1 .

n

Повторить 1 $_¶ times...

.+ $*

... нарисуйте полый многоугольник, используя направления вправо, вниз, влево, вверх, вправо по размеру .+ $* 1 $_¶ ^ $%' #¶ ¶$ ¶$%` # \b¶ # ¶ %(`1 $_¶ 1(?=.*(.)) $1 .¶ (.+)(.). $2$1 , using a string consisting of a space and ₊ #iZŻ≠⌜ŻF₎⍴⊂µ¬W1⍪ C s. Each polygon therefore starts at the top left of the "circle" and finishes at the top right, ready to start the next one.

 

1235


Рег
14 Nov, 2015

Тем
59

Постов
169

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

МАТЛ, 18 17 байт

StringRiffle[StringJoin/@Table[If[#∣i⊻#∣j,"#"," "],{j,0,#},{i,0,#2#}]&[#+1,#],"\n"]&

Попробуйте онлайн! Или проверить все тестовые случаи.

Объяснение

Рассмотрите ввод lambda x: for j in [0,*[1]*x,0] ## Builds the list [0,1,1,...0], with x 1s, and loops over it for i in [0,*[1]*x]*x+[0] ## Builds the list [0,1,1,...0,1,1,...0,....], i.e. [0,1...] with x 1s, repeated x times, with an extra 0 at the end (" ","#")[i^j] ## '#' if i xor j, else ' ' "".join( ) ## .join the characters of this line "\n".join( ) ## Encapsulate it in a list for output as an example.

lambda x:"\n".join("".join(" #"[i^j]for i in[0,*[1]*x]*x+[0])for j in[0,*[1]*x,0]) ||answer||

Желе, 16 байты

say$_=$".('#'x$_.$")x$_,($/.y/ #/# /r)x"@F"

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

-pa ||answer||

Перл 5 ‘ð;ׯ€⁸ḍn€/ị⁾# Y - Main Link: integer, N ‘ - increment -> N+1 ð - start a new dyadic chain - f(N+1, N) × - multiply -> (N+1)×N ; - concatenate -> [N+1, (N+1)×N] Ż€ - zero range each -> [[0..N+1], [0..(N+1)×N] ⁸ - chain's left argument -> N+1 ḍ - divides? (vectorises) -> [[1,0,...,0,1], [1,0,...,0,1,0,...,0,1,0,...,1]] / - reduce by: € - for each: n - not equal (vectorises) ị⁾#. - index into "# " (vectorises) Y - join with newline characters , 43 bytes

‘ð;ׯ€⁸ḍn€/ị⁾# Y

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

 

Alastorz


Рег
20 Mar, 2020

Тем
73

Постов
203

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

Питон 3, 93 82 байта

Ионы наблюдение Меня заинтриговало то, что этот шаблон можно легко сформировать с помощью таблицы XOR, и я хотел посмотреть, даст ли это что-нибудь короткое в Python. К сожалению, я не смог придумать хороший способ построить необходимые шаблоны по-гольфистски, и результат будет на 30 байт длиннее, чем другой ответ Python здесь:

WB % Implicit input: n. 2^n, convert to binary. % STACK: [1 0 0 0] tTh % Duplicate, push 1, concatenate horizontally % STACK: [1 0 0 0], [1 0 0 0 1] !- % Transpose, subtract element-wise with broadcast % STACK: [0 -1 -1 -1 1 0 0 0 1 0 0 0 1 0 0 0 0 -1 -1 -1] GtQ*Q: % Push n, duplicate, add 1, multiply, add 1: gives n^2+n+1. Range (1-based) % STACK: [0 -1 -1 -1 1 0 0 0 1 0 0 0 1 0 0 0 0 -1 -1 -1], [1 2 3 4 5 6 7 8 9 10 11 12 13] Z) % Horizontal indexing (1-based, modular) % STACK: [0 -1 -1 -1 0 -1 -1 -1 0 -1 -1 -1 0 1 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 1 0 -1 -1 -1 0 -1 -1 -1 0 -1 -1 -1 0] Zc % Convert non-zeros to '#'. Implicit display (char(0) is displayed as space) % STACK: [' ### ### ### ' '# # # #' '# # # #' '# # # #' ' ### ### ### ']

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

Редактировать -11 байт: от @DLoscидея использования списков целых чисел вместо строк.

Объяснение

n = 3 ||answer||

Математика 12, 83 байта

WBtTh!-GtQ*Q:Z)Zc

Использует очевидный прием делимости и Математикахороший анализ Юникода

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

 

Ostost


Рег
18 May, 2011

Тем
65

Постов
181

Баллов
546
  • 26, Oct 2024
  • #16

лен # , 21 19 18 байт

n

Не устраивает количество байт...

Немного лучше.

-1 байт путем неявного объединения новых строк.

 

Nhicerk3512


Рег
04 Feb, 2012

Тем
69

Постов
194

Баллов
589
  • 26, Oct 2024
  • #17

Ретина 0.8.2, 79 байт

n+2

Попробуйте онлайн! Объяснение:

GH+→⁺²θ⁺ ×θ#

Преобразовать в унарный.

n

Повторите строку Fθ n с Nθ times.

NθFθGH+→⁺²θ⁺ ×θ#

Префикс строки ' #'[(v,0)∘.≠((n×n+1)⍴v←0,(n←⎕)⍴1),0] main(i,j,n){ scanf("%d",&n); ++n; for(i=-1;i++<n;puts("")) for(j=-1;j++<n*n-n; putchar("# "[!(j%n)^(i^n&&i)])); } s с суффиксом main(i,j,n){scanf("%d",&n);++n;for(i=-1;i++<n;puts(""))for(j=-1;j++<n*n-n;putchar("# "[!(j%n)^(i^n&&i)]));} . This indicates the pattern for the first line.

i=-1,j;main(n){for(n+=scanf("%d",&n);j=i++<n;puts(""))for(;j-->n-n*n;putchar("# "[!(j%n)^(i^n&&i)]));}

Добавьте еще одну такую ​​строку.

param($n)($t=(' '+'#'*$n)*$n);,(('#'+' '*$n)*$n+'#')*$n;$t

Добавить f: push rsi # Push n onto the stack. sl: .byte 0xB8, 0x20, 0x0A # These bytes combine with the next instruction to form # mov eax, 0x23B00A20. In particular, the lowest byte (AL) is 0x20 (' ') # and the second-lowest byte (AH) is 0x0A ('\n'). pl: mov al, 0x23 # (Executed for the middle lines) Set AL to 0x23 ('#'). pop rdx; push rdx # Set RDX to n. (This is 2 bytes; mov edx, [rsp] would be 3.) l: stosb # Write AL to the string, advancing the pointer. xor al, 3 # Change AL from ' ' to '#' or vice versa. pop rcx; push rcx # Set RCX to n. rep stosb # Write AL to the string RCX times, advancing the pointer. xor al, 3 # Change AL from ' ' to '#' or vice versa. dec edx # Subtract 1 from EDX. jnz l # If it's not zero, jump back. (Repeats n times.) stosw # Write AL and AH ('\n') to the string, advancing the pointer. dec esi # Subtract 1 from ESI. jns pl # If it's not negative (which occurs n times), # jump back to make a line starting with '#'. jpe sl # Jump back to make a line starting with ' ' # if the sum of the eight low bits is even. # This is true for -1 (…11111111) but not for -2 (…11111110). mov [rdi], dl # Add DL (the low byte of RDX), which is 0, to the string. pop rcx # Take n off the stack. ret # Return. to the original 56 B8 20 0A B0 23 5A 52 AA 34 03 59 51 F3 AA 34 03 FF CA 75 F3 66 AB FF CE 79 E9 7A E4 88 17 59 C3 линии. Они указывают шаблон для промежуточных линий.

'# '# Push "#" ú # Pad it with the (implicit) input amount of leading spaces R # Reverse it so the spaces are trailing × # Repeat this the (implicit) input amount of times as string Ć # Enclose; append its own head (the "#") и # Repeat it the (implicit) input amount of times as list ¬ # Push its first item (without popping the list) D # Duplicate it Ù # Uniquify its characters: "# " Â # Bifurcate; short for Duplicate & Reverse copy: " #" ‡ # Transliterate all "# " to " #" in the duplicated string .ø # Surround the list with this string as leading/trailing item » # Join by newlines # (after which the result is output implicitly)

Примените остальную часть сценария отдельно к каждой строке.

'#úR×Ćи¬DÙ‡.ø»

Повторяем каждую строку f n=unlines[[" # "!!(0^mod x(n+1)+0^y)|x<-[0..n*n+n]]|y<-[0..n]++[0]] times. This also leaves an extra copy of the two pattern characters on a line on its own.

" #"⊏˜·≠⌜´+⟜1(+⥊↑⟜1)¨1∾ט

Замените каждый ->n{[z=(" "+?#*n)*n,[?#+(" "*n+?#)*n]*n,z]*$/} with the last character on the line.

v\#*Ṅðp…£v\#?꘍*Ǐ¥J

Удалить последний символ в каждой строке, поскольку он соединяется со следующей строкой.

joe

Переместите последнюю копию первого символа шаблона в начало всей строки и удалите последнюю копию второго символа шаблона.

 

Qreplicawatch53


Рег
09 May, 2012

Тем
79

Постов
233

Баллов
648
  • 26, Oct 2024
  • #18

сетчатка, 40 байт

›D?*"ʀ$Ḋƒv꘍ƛ‛ #$İ∑

Попробуйте онлайн! Ссылка включает тестовые примеры. Пояснение: Просто скучное повторение строк. Последняя строка анализируется как j where the v\# # Fill 1..n with spaces ₌----- # Apply both to the stack... ≬--- # The next three elements as one ₅*Ṅ # Repeat each by its length and join with spaces ꘍ # And prepend n spaces to each # R # Reverse each of those so a # is at the start ₅* # Repeat each of those by the required length Ǐ # Append the first character (#) Ȯ # Push the item under (the # # #) to the stack JJ # Append that and prepend it # (C flag) join by newlines and centre представляет собой группирующую конструкцию и v\#₌≬₅*Ṅ꘍R₅*ǏȮJJ repeats the character or group the number of times given by the input.

 

Maxxis


Рег
30 Dec, 2009

Тем
78

Постов
214

Баллов
624
  • 26, Oct 2024
  • #21

Головаскии, 121 байт

{"# "(1,s)=\:1,/x#,s:&x,1}

Фу!

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

x,a,c=...," ","\n"b=a.rep;d=b(a..b("#",x),x)print(d..c..b(b("#"..b(a,x),x+1)..c,x)..d)

Код необходимо будет скопировать и выполнить, как показано:

0 1 1 1 0 1 1 1 0 1 1 1 0 -------------------------- 0 |0 1 1 1 0 1 1 1 0 1 1 1 0 1 |1 0 0 0 1 0 0 0 1 0 0 0 1 1 |1 0 0 0 1 0 0 0 1 0 0 0 1 <-- XOR TABLE 1 |1 0 0 0 1 0 0 0 1 0 0 0 1 0 |0 1 1 1 0 1 1 1 0 1 1 1 0

Но также он принимает ввод с помощью символьного кода, поэтому, например, если вы хотите ввести 4, вы должны ввести

Я считаю, что это совершенно справедливо :D

'# '{~(>:+*:)($=/~0,~])0,#&1

Разбивка кода:

 

Zedzag


Рег
13 Jul, 2011

Тем
86

Постов
177

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

Интересно