Kenarlıksız masa


16

Bu meydan okumada alfabedeki harfleri Kartezyen bir düzlemde yerleştirecek ve sonucu metin olarak çıkaracaksınız.

Girişiniz 3 parametreli bir liste listesinden oluşacaktır:

  • X koordinatı
  • Y koordinatı
  • sicim

Nasıl?

Kartezyen bir düzlemde ( X , Y ) koordinatlarının işaretlerinin ( + , + ) , ( - , + ) , ( - , - ) ve ( + ) olduğu 2 eksen (X,Y) ve 4 çeyrek daire içerdiğini biliyoruz. , - ) . Örneğin(X,Y)(+,+)(-,+)(-,-)(+,-)

Aşağıdaki 3 x 3 matrisi Kartezyen düzlem olarak düşünün

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

Eğer girdiye [[-1,1,L],[0,1,F]]matrisimiz gibi bir şey verilirse,

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

Ve son çıktı LF

Buna ek olarak, doğru çıktıyı elde etmek için izlememiz gereken bazı noktalar vardır:

  • Bir X, Y koordinatı tekrarlandığında, dizeleri birleştirmeniz gerekir. Örnek: (-1,1) 'de dizenin Fyerleştirildiğini ve dizeyi aaynı noktaya yerleştirmeniz gerektiğini varsayalım . Sonuç olarak her iki dizeyi birleştirirsiniz Fave bu da (-1,1) değeridir.
  • Çıktınızın matriste tutarlı olması gerekir. Örnek bunu nihai sonucunuz olarak hayal edin:

Mbirrbenebens(1,0)cute(0,-1)(1,-1)

Çıktı almalısınız

Ma  rie 
i   s       
cute

Neden?

Bunu, sütunların x ekseninin ve y ekseninin satırlarının olduğu bir tablo olarak görüntüleyebilirsiniz.

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

Tüm sütun değerleri aynı uzunlukta olmalıdır

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

Sonuç olarak sonucu çıkarırız

Ma  rie
i   s
cute

Test Durumları

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

notlar

  • Bu golfü olmalı
  • Koordinatları tek bir listeye sarabilirsiniz, örn. [[3, 3], "c"]
  • Girdiyi istediğiniz formatta alabilirsiniz
  • Yalnızca girişte herhangi bir sayı veya boş alan olmayacağını varsayabilirsiniz. örneğin gibi bir şey olabilir a aama asla 1ya " "ya 1aya1 1


1
@KevinCruijssen Yalnızca girişte herhangi bir sayı veya boş alan olmayacağını varsayabilirsiniz. a aAsla 1veya `` veya 1aveya1 1
Luis felipe De jesus Munoz

1
@LuisfelipeDejesusMunoz Teşekkürler. Oh, ve bir soru daha eminim ki burada daha fazla insan bilmek ister: Marie kim? ; p
Kevin Cruijssen

2
@KevinCruijssen Ezilme 5 yıl önce: c
Luis felipe De jesus Munoz

1
Girdiyi adlandırılmış grupların bir listesi olarak alabilir miyiz? Böyle bir şey: (int a,int b,string c)?
Cehalet

Yanıtlar:


8

JavaScript (ES8),  186, 180  179 bayt

@Shaggy sayesinde 1 bayt kaydedildi

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`
`)``

Çevrimiçi deneyin!

JS'deki negatif endeksler (veya bunların eksikliği)

Bir dizi verildiğinde A[], JS'de böyle bir şey yapmak tamamen yasaldır A[-1] = 5. Ancak, bu olacak değil dizideki kendisi değerini kaydedin. Bunun yerine, dolaylı bir dize (Bu negatif endeksi zorlamak olacaktır "-1") ve karşılık gelen set özelliği de çevredeki nesne dizinin.

Kötü haber, özelliklerin aşağıdaki gibi yöntemlerle tekrarlanamamasıdır map():

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

Çevrimiçi deneyin!

Yukarıdaki kod sadece görüntülenecektir 3 is stored at index 1.

Olası bir çözüm şöyle olacaktır:

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

Çevrimiçi deneyin!

Fakat:

  • Bu çok golf dostu değil.
  • Tuşlar sayısal sırada sıralanmamıştır.

Burada ne yapıyoruz

xy

xy

Bunun yerine yaptıklarımız:

  • ile başlıyoruzd=0
  • xx+dyd-y
  • x<0y<0d+1

Sana bildirerek bir bayt kurtarabilirim oiçinde w: w=[o=[]].
Shaggy

@Shaggy Bence bu gerçekten güvenli. Teşekkürler. :)
Arnauld

5

Piton 2 , 188 185 181 bayt

s=sorted;d={};k={}
for x,y,c in input():d[x]=d.get(x,{});k[~y]=d[x][y]=d[x].get(y,'')+c
for y in s(k):print''.join('%*s'%(-max(map(len,d[x].values())),d[x].get(~y,''))for x in s(d))

Çevrimiçi deneyin!


5

APL (Dyalog Unicode) , 39 bayt SBCS

Anonim infix lambda, sol ve sağ argümanlar olarak * koordinat ve dizgileri listeler.

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

Çevrimiçi deneyin!

{} "Dfn"; Sol (koordinatlar) ve sağ (dize) argümanları şunlardır ve :

⊂'' ekli boş dize, bu nedenle bir dizi için dolgu olarak kullanın

(... )⍴ siklik r , aşağıdaki boyutların bir diziye eshape:

  ⌊/⍺ koordinatların her ekseni boyunca en düşük değer

  ⍺- tüm koordinatlardan çıkart

  1+ bunu bir tane ekleyin (kapsayıcı aralığı istediğimizden)

  c← mağaza ciçin ( c oordinates)

  ⌈/ bunların her ekseni boyunca en yüksek değer

   boyut olarak kullanmak için ambalajından çıkarın

m← mağazada m( m atrix için)

⍵⊣ dizeleri lehine at

m[c],← bunları mkoordinatlara eklec

m⊣ değiştirilenler lehine olanları at m

 ayna

 dizelerin listelerine bölün

↑¨ her dizgi listesini boşluklarla doldurmak için bir karakter matrisine karıştırın

,/ yatay birleştirme ile azalt

 paketten çıkarma (azaltma, sıralamayı 1'den 0'a düşürdüğü için)


* Tek bir iç içe koordinat ve dizge argümanı almak gerekiyorsa, 5 bayt daha uzun olacaktır.


4

05AB1E , 45 44 bayt

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

Girdi koordinatlarını bir iç liste olarak alır.

Çevrimiçi deneyin veya tüm test senaryolarını doğrulayın .

Açıklama:

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

Kömür , 60 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Açıklama:

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

Koordinatları girişten çıkarın.

F…·⌊ζ⌈ζ«

X koordinatlarının üzerinden geçin.

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

Verilen koordinatlardaki tüm dizeleri ayıklayarak ve birleştirerek y koordinatlarının üzerinden geçin.

⮌ε

Kömürlerin koordinat sistemine göre y koordinatları ters çevrildikçe, dizeleri ters sırada yazdırın.

M⌈EεLκ±Lε

Sonraki sütunun başına git.


3

Perl 5 -p00 -MList::Util=max, 148 bayt

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""}

TIO

Nasıl

  • s/(\S+) (\S+) (.*) /... ;''/ge;, ikame bayrakları /gdöngü /edeğerlendirme, değiştirme boş takas satırı giriş / varsayılan değişken olarak değerlendirir
  • $a{$1}=max$a{$1},length($h{$2}{$1}.=$3), birinci düzey anahtarları yikinci düzey olan xve dizeyi $3değere birleştiren haritanın% h haritasını otomatik olarak canlı hale getirir, uzunluğu alır ve anahtarları olan ikinci bir haritayı% a otomatikleştirirx ve sütun üzerinde maksimum uzunluğu değer ( x)
  • for$y(sort{$b-$a}keys%h){... ;say""}, sayısal olarak ters sıralanmış $ytuşlardaki satır indeksleri için %h,say"" için, sonunda yeni satır yazdırmak için
  • map{... }sort{$a-$b}keys%a, sütun dizini için$_ % a tuşlarındaki sayısal olarak sıralanmış
  • printf"%-$a{$_}s",$h{$y}{$_}, sütun genişliğiyle sola hizalanmış yazdırma dizesi

3

Temiz , 212 206 bayt

import StdEnv,StdLib
? =minList
m=maxList
c=flatten
$a#(x,y,z)=unzip3 a
=flatlines(map c(transpose[[ljustify(m(map length l))k\\l<-[reverse[c[s\\(u,v,s)<-a|u==i&&v==j]\\j<-[?y..m y]]],k<-l]\\i<-[?x..m x]]))

Çevrimiçi deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.