Безмежний стіл


16

У цьому виклику ви збираєтесь розміщувати літери алфавіту в декартовій площині та виводити результат у вигляді тексту.

Ваша інформація буде складатися із списку списку з 3 параметрами:

  • Х координата
  • Y координати
  • Рядок

Як?

Ми знаємо, що декартові площини містять 2 осі (Х,Y) і 4 квадранти, де знаками координат (Х,Y) є (+,+) , (-,+) , (-,-) і (+,-) . Наприклад

Розглянемо наступну матрицю 3 на 3 як декартову площину

(-1,1)(0,1)(1,1)(-1,0)(0,0)(1,0)(-1,-1)(0,-1)(1,-1)

Якщо нам введено щось на зразок [[-1,1,L],[0,1,F]]нашої матриці, буде виглядати щось подібне

LЖ(1,1)(-1,0)(0,0)(1,0)(-1,-1)(0,-1)(1,-1)

І кінцевий вихід LF

На додаток до цього є деякі моменти, які ми повинні дотримуватися, щоб отримати правильний результат:

  • Коли координата X, Y повторюється, вам потрібно буде з'єднати рядки. Приклад: припустимо, що в (-1,1) Fрозміщується рядок , і потрібно розмістити рядок aв одній точці. Ви об'єднуєте обидва рядки, що призводять до цього, Faі це значення, яке буде входити (-1,1).
  • Ваш вихід повинен відповідати матриці. Приклад уявіть це як свій кінцевий результат:

Маriеiс(1,0)cуте(0,-1)(1,-1)

Ви повинні вивести

Ma  rie 
i   s       
cute

Чому?

Ви можете переглянути це як таблицю, де стовпці - це значення осі x, а рядки - вісь y.

        Column 1    |   Column 2    |   Column 3
        ----------------------------------------
Row 1   |  "Ma"     |      "r"      |     "ie" 
Row 2   |  "i"      |      "s"      |
Row 3   |  "cute"   |               |

Усі значення стовпців повинні мати однакову довжину

        Column 1    |   Column 2    |   Column 3
        ----------------------------------------
Row 1   |  "Ma  "   |      "r"      |     "ie" 
Row 2   |  "i   "   |      "s"      |
Row 3   |  "cute"   |               |

Остаточно ми виводимо результат

Ma  rie
i   s
cute

Випробування

Input
------------
[[3, 3, "c"]
[4, 1, "un"]
[5, 3, "e"]
[4, 3, "od"]
[4, 2, "lf"]
[1, 2, "go"]
[2, 1, "i"]
[2, 1, "s f"]]

Output
--------------
      code
go     lf 
  is f un

Input
--------------
[[0, 0, 's'],
[-1,1, 'M'],
[0, 1, 'r'],
[-1,1, 'a'],
[1, 1, 'i'],
[-1, 0, 'i'],
[1, 1, 'e'],
[-1,- 1, 'c'],
[-1,- 1, 'u'],
[-1, -1, 'te']]

Output.
----------------
Ma  rie
i   s
cute

Примітки

  • Це повинен бути
  • Ви можете обернути координати в єдиний список, наприклад [[3, 3], "c"]
  • Ви можете взяти дані в будь-якому розумному форматі
  • Ви можете припустити, що у введенні не буде будь-якого числа або порожніх пробілів. наприклад , Там може бути що - щось подібне , a aале ніколи 1або " "або 1aабо1 1


1
@KevinCruijssen Ви можете припустити, що у вводі не буде будь-якого числа або порожніх пробілів. Там може бути щось на кшталт, a aале ніколи, 1або `` або 1aабо1 1
Luis felipe De

1
@LuisfelipeDejesusMunoz Дякую О, і ще одне питання, я впевнений, що більше людей хочуть знати: хто така Марі? ; p
Кевін Круїссен

2
@KevinCruijssen Моя розчавленість 5 років тому: c
Luis felipe De

1
Чи можемо ми взяти вклад як список названих кортежів? Що - щось на зразок цього: (int a,int b,string c)?
Втілення

Відповіді:


8

JavaScript (ES8),  186 180  179 байт

Збережено 1 байт завдяки @Shaggy

a=>(g=d=>a.some(([x,y,s])=>(w[x+=d]>(l=((r=o[y=d-y]=o[y]||[])[x]=[r[x]]+s).length)||(w[x]=l),x|y)<0,w=[o=[]])?g(-~d):o.map(r=>w.map((w,x)=>(r[x]||'').padEnd(w)).join``).join`
`)``

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

Негативні показники в JS (або їх відсутність)

Враховуючи масив A[], в JS цілком законно робити щось подібне A[-1] = 5. Однак це не збереже значення в самому масиві. Натомість вона неявно примусить цей негативний індекс до рядка ( "-1") та встановить відповідне властивість у навколишньому об’єкті масиву.

Погана новина полягає в тому, що властивості не можна віддати за допомогою таких методів, як map():

a = [];
a[1] = 3;
a[-1] = 5;
a.map((v, i) => console.log(v + ' is stored at index ' + i))

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

Наведений вище код буде відображатися тільки 3 is stored at index 1.

Можливим рішенням буде:

a = [];
a[1] = 3;
a[-1] = 5;
Object.keys(a).map(k => console.log(a[k] + ' is stored with key ' + k))

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

Але:

  • Це не дуже зручно для гольфу.
  • Клавіші не сортуються в цифровому порядку.

Що ми тут робимо

ху

ху

Ось що ми робимо замість цього:

  • г=0
  • хх+гуг-у
  • х<0у<0г+1

Я думаю , що ви можете зберегти байти, оголошуючи oв w: w=[o=[]].
Shaggy

@Shaggy Я думаю, що це справді безпечно. Спасибі. :)
Арнольд


5

APL (Dyalog Unicode) , 39 байт SBCS

Анонімна лямбда з виправленням, приймаючи * списки координат і рядків як аргументи зліва та справа.

{⊃,/↑¨↓⌽m⊣m[c],←⍵⊣m←(⊃⌈/c1+⍺-⌊/⍺)⍴⊂''}

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

{} "Dfn"; Ліві (координати) і праві (рядки) аргументи і :

⊂'' вкладений порожній рядок, тому використовуйте як заповнення для масиву

()⍴ Циклічно r формується в масив таких розмірів:

  ⌊/⍺ найменше значення вздовж кожної осі координат

  ⍺- відніміть це від усіх координат

  1+ додати це до одного (оскільки ми хочемо включити діапазон)

  c← зберігати в c(для c координати)

  ⌈/ найвище значення вздовж кожної осі

   розпакуйте для використання в якості розмірів

m← зберігати в m(для m atrix)

⍵⊣ відмовтеся від цього на користь струн

m[c],← додайте їх до mкоординатc

m⊣ відмовитися від тих, хто на користь внесених змін m

 дзеркало

 розділити на список списків рядків

↑¨ змішайте кожен список рядків у матрицю символів, засипавши пробілами

,/ зменшити горизонтальним конкатенацією

 розпакуйте (оскільки зменшення знижує ранг від 1 до 0)


* Якщо потрібно взяти один аргумент переплетених координат і рядків, це буде на 5 байт довше.


4

05AB1E , 45 44 байт

WsàŸãεUõIvyнXQiyθ«]IZsß->ôεíDéθgjí}øRJʒðKĀ}»

Приймає вхідні координати як внутрішній список.

Спробуйте в Інтернеті або перевірте всі тестові випадки .

Пояснення:

Wsà           # Get the minimum and maximum of the (implicit) input-list
   Ÿ          # Create a list in the range [min, max]
    ã         # Create each possible pair by taking the cartesian product with itself
ε             # Map each coordinate to:
 U            #  Pop and store the coordinate in variable `X`
 õ            #  Push an empty string ""
  Iv          #  Loop `y` over the input-items:
    yн        #   Get the coordinates of item `y`
      XQi     #   If it's equal to variable `X`:
         yθ   #    Get the string of item `y`
           «  #    Concat it to the (non-)empty string
]             # Close the if-statement, loop, and map
 IZsß         # Get the maximum and minimum of the input-list
     -        # Subtract them from each other
      >       # And increase it by 1
       ô      # Split the list into parts of this size
ε             # Map each part to:
 í            #  Reverse each inner string
  Déθg        #  Get the length of the longest inner string
      j       #  Prepend spaces to each item up to that length
       í      #  And reverse every item back again
              #  (so the spaces are trailing instead of leading)
            # After the map: zip/transpose; swapping rows/columns
  R           # Reverse the entire list
   J          # Join each inner list together to a single string
ʒðKĀ}         # Remove all strings consisting only of spaces
     »        # Join the strings by newlines (and output implicitly)

3

Вугілля деревне , 60 байт

≔Eθ§ι¹η≔Eθ§ι⁰ζF…·⌊ζ⌈ζ«≔E…·⌊η⌈η⭆θ⎇∧⁼ι§μ⁰⁼κ§μ¹§μ²ωε⮌εM⌈EεLκ±Lε

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Пояснення:

≔Eθ§ι¹η≔Eθ§ι⁰ζ

Витягніть координати з вхідних даних.

F…·⌊ζ⌈ζ«

Переведіть петлю на x-координати.

≔E…·⌊η⌈η⭆θ⎇∧⁼ι§μ⁰⁼κ§μ¹§μ²ωε

Проведіть петлю над y-координатами, витягуючи та з'єднуючи всі рядки за заданими координатами.

⮌ε

Друкуйте рядки у зворотному порядку, коли y-координати будуть перевернуті порівняно з системою координат Вугілля.

M⌈EεLκ±Lε

Перехід до початку наступного стовпця.


3

Perl 5 -p00 -MList::Util=max , 148 байт

s/(\S+) (\S+) (.*)
/$a{$1}=max$a{$1},length($h{$2}{$1}.=$3);''/ge;for$y(sort{$b-$a}keys%h){map{printf"%-$a{$_}s",$h{$y}{$_}}sort{$a-$b}keys%a;say""}

ТІО

Як

  • s/(\S+) (\S+) (.*) /... ;''/ge;, прапори заміни/g цикл/e eval, заміна оцінює порожню лінію очищення вводу / за замовчуванням
  • $a{$1}=max$a{$1},length($h{$2}{$1}.=$3), автоматично оживляє карту% h карти, клавіші першого рівня якого yдругого рівня xі з'єднують рядок $3зі значенням, отримують довжину та автоматично збільшують другу карту% a, чиї ключіx та значення максимум довжини над стовпцем ( x)
  • for$y(sort{$b-$a}keys%h){... ;say""}, для індексів рядків $yу ключах%h упорядкованих числовим зворотом, say""наприкінці для друку нового рядка
  • map{ ... }sort{$a-$b}keys%a , для індексу стовпців $_у ключах% відсортовано числово
  • printf"%-$a{$_}s",$h{$y}{$_}, друкуйте рядок, вирівняний ліворуч із шириною стовпця

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