경계선없는 테이블


16

이 도전에서는 알파벳 문자를 직교 평면에 배치하고 결과를 텍스트로 출력합니다.

입력 내용은 3 개의 매개 변수가있는 목록 목록으로 구성됩니다.

  • X 좌표
  • Y 좌표

어떻게?

직교 평면에는 2 개의 축 (엑스,와이)(X,Y) 좌표 의 부호 가 (+,+) , (,+) , (,)(+,) . 예를 들어

직교 평면으로 다음 3 x 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]]행렬과 비슷한 것이 보일 것입니다.

에프(1,1)(1,0)(0,0)(1,0)(1,1)(0,1)(1,1)

그리고 최종 결과물 LF

그 외에도 올바른 출력을 얻기 위해 따라야 할 몇 가지 사항이 있습니다.

  • X, Y 좌표가 반복되면 문자열을 연결해야합니다. 예 : (-1,1)에서 문자열 F이 배치 되었다고 가정 하고 문자열 a을 동일한 지점에 배치해야합니다 . 결과로 나오는 두 문자열을 연결하면 Fa그 값이 (-1,1)이됩니다.
  • 출력은 행렬과 일치해야합니다. 예를 들어 이것을 최종 결과로 상상하십시오.

미디엄아르 자형나는이자형나는에스(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"   |               |

Finnaly 우리는 결과를 출력

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또는``나 1a1 1
루이스 펠리페 드 예수님 무 노즈

1
트윗 담아 가기 오, 그리고 한가지 더 질문 여기에 더 많은 사람들이 알고 싶어 할 것입니다 : Marie는 누구입니까? ; p
Kevin Cruijssen

2
오년 전에 내 호감을 @KevinCruijssen : C
루이스 펠리페 드 예수님 무 노즈

1
명명 된 튜플 목록으로 입력 할 수 있습니까? 이와 같은 것 : (int a,int b,string c)?
무지의 구현

답변:


8

자바 스크립트 (ES8)  186 180  179 바이트

@Shaggy 덕분에 1 바이트 절약

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

난 당신이 선언 바이트를 저장할 수 있다고 생각 ow: w=[o=[]].
얽히고 설킨

@Shaggy 정말 안전하다고 생각합니다. 감사. :)
Arnauld


5

APL (Dyalog Unicode) , 39 바이트 SBCS

왼쪽 및 오른쪽 인수로 좌표 및 문자열의 목록을 취하는 익명의 람다 람다.

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

온라인으로 사용해보십시오!

{} "dfn"; 왼쪽 (좌표) 및 오른쪽 (문자열) 인수는 다음 같습니다.

⊂'' 빈 문자열로 묶이므로 배열의 채우기로 사용하십시오.

(... )⍴ 순환 r에 다음 차원 배열로 eshape을 :

  ⌊/⍺ 좌표의 각 축을 따라 가장 낮은 값

  ⍺- 모든 좌표에서 빼기

  1+ 하나를 추가하십시오 (포괄 범위를 원하기 때문에)

  c← 매장에서 c(용 의 C oordinates)

  ⌈/ 그것들의 각 축을 따라 가장 높은 값

   포장을 풀고 치수로 사용

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 좌표가 Charcoal의 좌표계와 비교 될 때 문자열을 역순으로 인쇄하십시오.

M⌈EεLκ±Lε

다음 열의 시작으로 이동하십시오.


3

펄 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평가, 대체는 빈 지우기 라인 입력 / 기본 변수로 평가
  • $a{$1}=max$a{$1},length($h{$2}{$1}.=$3), 첫 번째 레벨 키가 y두 번째 레벨 인 맵의 맵 % h를 자동으로 활성화하고 x문자열 $3을 값에 연결 하고 길이를 가져오고 키 x와 값이 열에 대한 최대 길이 인 두 번째 맵 % a를 자동으로 활성화합니다 ( x)
  • for$y(sort{$b-$a}keys%h){... ;say""}, 줄 바꿈을 인쇄하기 위해 마지막 으로 숫자 역순 $y으로 %h정렬 된 키의 행 인덱스say""
  • map{... % a 키의 }sort{$a-$b}keys%a열 인덱스 $_의 경우 숫자로 정렬
  • printf"%-$a{$_}s",$h{$y}{$_}열 너비로 왼쪽에 정렬 된 인쇄 문자열

3

클린 , 212206 바이트

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

온라인으로 사용해보십시오!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.