ตารางไร้ขอบ


16

ในการท้าทายนี้คุณจะต้องวางตัวอักษรจากตัวอักษรในระนาบคาร์ทีเซียนและส่งออกผลลัพธ์เป็นข้อความ

ข้อมูลที่คุณป้อนจะประกอบด้วยรายการ 3 พารามิเตอร์

  • พิกัด X
  • พิกัด Y
  • เชือก

อย่างไร?

เรารู้ว่าระนาบคาร์ทีเซียนมีแกน 2 แกน(X,Y)และจตุภาคที่ 4 ซึ่งสัญญาณของพิกัด(X,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]]เมทริกซ์ของเราจะมีลักษณะคล้ายกับ

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

และผลลัพธ์สุดท้าย LF

นอกจากนั้นยังมีบางจุดที่เราต้องทำตามเพื่อให้ได้ผลลัพธ์ที่ถูกต้อง:

  • เมื่อ X, Y coord ซ้ำแล้วซ้ำอีกคุณจะต้องเชื่อมโยงสตริง ตัวอย่าง: สมมติว่าใส่สตริง (-1,1) Fและคุณต้องวางสตริงaในจุดเดียวกัน คุณทำการต่อสตริงทั้งสองเข้าด้วยกันFaซึ่งเป็นค่าที่จะเป็น (-1,1)
  • ผลลัพธ์ของคุณจะต้องสอดคล้องกับเมทริกซ์ ตัวอย่างลองจินตนาการว่านี่เป็นผลลัพธ์สุดท้ายของคุณ:

MaRผมอีผมs(1,0)ยูเสื้ออี(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
ลูอิส felipe De jesus Munoz

1
@LuisfelipeDejesusMunoz ขอบคุณ โอ้และอีกคำถามหนึ่งฉันมั่นใจว่าผู้คนที่นี่อยากรู้เพิ่มเติม: ใครคือมารี ; P
Kevin Cruijssen

2
@KevinCruijssen ความสนใจของฉัน 5 ปีที่แล้ว: c
Luis felipe De jesus Munoz

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

ลองออนไลน์!

แต่:

  • นี่ไม่ใช่เกมที่เป็นมิตรกับกอล์ฟ
  • คีย์ไม่เรียงตามลำดับตัวเลข

เราทำอะไรที่นี่

เราต้องการทำงานกับค่าบวกของทั้งสองอย่างแน่นอน x และ Y เพื่อหลีกเลี่ยงปัญหาที่อธิบายไว้ข้างต้น

เราสามารถทำการส่งผ่านข้อมูลครั้งแรกโดยมองหาค่าต่ำสุดที่ x และค่าต่ำสุดของ Y. แต่นั่นจะค่อนข้างยาว

นี่คือสิ่งที่เราทำแทน:

  • เราเริ่มต้นด้วย d=0
  • เราดำเนินการซ้ำ x ถูกแทนที่ด้วย x+d และ Y ถูกแทนที่ด้วย d-Y
  • ถ้าเรามีทั้ง x<0 หรือ Y<0 สำหรับรายการใด ๆ เรายกเลิกและเริ่มต้นความพยายามอีกครั้งด้วยซ้ำ d+1

ฉันคิดว่าคุณสามารถบันทึกไบต์ด้วยการประกาศoภายใน:w w=[o=[]]
ขนด

@Shaggy ฉันคิดว่ามันปลอดภัยแน่นอน ขอบคุณ :)
Arnauld


5

APL (Dyalog Unicode) , 39 ไบต์SBCS

ไม่ระบุชื่อแลมบ์ดารับ * รายการพิกัดและสตริงเป็นอาร์กิวเมนต์ซ้ายและขวา

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

ลองออนไลน์!

{} "dfn"; อาร์กิวเมนต์ (พิกัด) ซ้ายและขวา (สตริง) คือและ:

⊂'' สตริงว่างที่ล้อมรอบดังนั้นใช้เป็นเติมสำหรับอาร์เรย์

(... )⍴ วนr eshape เป็น array ของมิติต่อไปนี้:

  ⌊/⍺ ค่าต่ำสุดตามแต่ละแกนของพิกัด

  ⍺- ลบออกจากพิกัดทั้งหมด

  1+ เพิ่มไปที่หนึ่ง (เนื่องจากเราต้องการช่วงรวม)

  c← เก็บไว้ในc(สำหรับ oordinates)

  ⌈/ ค่าสูงสุดตามแต่ละแกนของเหล่านั้น

   เปิดออกเพื่อใช้เป็นมิติ

m← เก็บในm(สำหรับm atrix)

⍵⊣ ทิ้งสิ่งนั้นไว้ในความโปรดปรานของสตริง

m[c],← ต่อท้ายmที่พิกัดc

m⊣ ยกเลิกผู้ที่โปรดปรานแก้ไขเพิ่มเติม m

 กระจกเงา

 แบ่งออกเป็นรายการของรายการสตริง

↑¨ ผสมแต่ละรายการของสตริงลงในเมทริกซ์อักขระการเติมด้วยช่องว่าง

,/ ลดการเรียงต่อกันในแนวนอน

 เปิดออก (เนื่องจากการลดจะลดอันดับจาก 1 เป็น 0)


* หากต้องการอาร์กิวเมนต์หนึ่งตัวของ interwoven พิกัดและจำเป็นต้องใช้สตริงมันจะมีความยาว 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""}

TIO

อย่างไร

  • 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, สำหรับดัชนีคอลัมน์$_ในคีย์% a เรียงลำดับตัวเลข
  • printf"%-$a{$_}s",$h{$y}{$_}, สตริงการพิมพ์ชิดขอบซ้ายกับความกว้างของคอลัมน์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.