소스 코드를 바꾼다. 입력을 바꾼다!


31

립 오프립 오프립 오프추출 . 그들을 찬성하라!

작업을 수락하려면 입력 / 인수 ¹를 출력 / 반환하는 프로그램 / 기능을 작성해야합니다. 까다로운 부분은 소스 코드 ²를 바꾸면 출력 / 결과도 바꾸어야한다는 것입니다.

  1. 솔루션이 수용 할 수있는 2D 데이터 종류를 선택할 수 있습니다. 예를 들어 목록, 행렬, 문자열 목록 등입니다. 처리하는 목록을 지정하십시오. 입력이 항상 직사각형이고 각 치수를 따라 길이가 1 이상이라고 가정 할 수 있습니다.

  2. 전치 목적으로 소스 코드의 짧은 행은 직사각형이 될 때까지 후행 공백으로 채워진 것으로 간주되지만 이러한 채워진 후행 공백은 코드 길이에 영향을 미치지 않습니다.

이것은 이므로 대상은 원래 소스 코드 (전치 된 버전이 아닌)의 바이트 수를 최적화하는 것입니다.

솔루션에 숫자 행렬이 있고 소스 코드가

AB
DEF

입력 / 인수는 [[1,2],[3,4],[5,6]]입니다. 내가 쓰면

AD
BE
 F

대신 출력 / 결과는이어야합니다 [[1,3,5],[2,4,6]].

솔루션에 줄 바꿈으로 구분 된 문자열이 있고 소스 코드가

ABC

입력 / 인수는 "96\n"입니다. 내가 쓰면

A
B
C

대신 출력 / 결과는이어야합니다 "9\n6\n".


23
세상에 멈출 수 있을까요?
JL2210

3
@ Night2 아니요, 문제가 복잡합니다.
Adám

14
아니요, 작품에 큰 것이 있습니다.
Adám

7
이러한 과제는 심각한 주석 남용없이 절차 언어에서는 불가능합니다.
JL2210

2
@ JL2210 변환 .
Adám

답변:


27

파이썬 3 + numpy, 45 바이트

lambda\
a:a
ma= """
b.    "
dT"   "
a "
\ """

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

@EriktheOutgolfer 덕분에 이전 버전의 버그를 지적했습니다.

조옮김 :

lambda\
a:a.T  
ma= """
b     "
d "   "
a "    
\ """  

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

함수는 numpy 행렬을 입력으로 사용하고 numpy 행렬을 출력합니다. 이 솔루션은 다른 많은 솔루션과 마찬가지로 주석에 의존하지 않고 여러 줄 문자열을 사용합니다.


3
정말 깔끔합니다!
Adám

흠, 나는 전치 된 버전에 공백이 채워질 것이라고 확신합니다. 따라서 마지막 줄에는 후행 공백이 포함될 것이므로 \를 던질 것 SyntaxError입니다. 이 문제를 해결하려면 따옴표를 양방향으로 이동해야합니다.
Outgolfer Erik

@EriktheOutgolfer가 수정되었습니다. 감사.
Joel


13

R , 5 4 바이트

#t
I

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

I전치 t될 때 항등 함수 또는 전치 함수 중 하나 인 R 함수 . TIO의 바닥 글에는 두 출력이 모두 표시됩니다.

바이트를 저장해 준 @RobinRyder에게 감사드립니다!


당신은 최종 필요하지 않습니다 #.
로빈 라이더

@RobinRyder 감사합니다! 어떤 이유로 나는 그것이 불필요하다는 진술을 보았지만 사각형에 채워 넣었습니다.
Nick Kennedy

10

C (GCC) , 209 (205) 203 201 바이트

표준

f(n,L,r,c)char**L;{for(c=0;0?L+  c:c<n;c+=puts(""))for(r=0;0?r :L[c][r];r++)putchar(L[ c ][ r ]);}/*
          \\\      \\      1 [0][]      \ \\\  \   \\      1 <n          \  \\\\\\   r+-c c+-r    */

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

전치

f 
( 
n 
, 
L 
, 
r 
, 
c 
) 
c\
h\
a\
r 
* 
* 
L 
; 
{ 
f\
o\
r 
( 
c 
= 
0 
; 
01
? 
L[
+0
 ]
 [
c]
: 
c 
< 
n 
; 
c 
+\
= 
p\
u\
t\
s 
( 
"\
" 
) 
) 
f\
o\
r 
( 
r 
= 
0 
; 
01
? 
r<
 n
: 
L 
[ 
c 
] 
[ 
r 
] 
; 
r 
+\
+ 
) 
p\
u\
t\
c\
h\
a\
r 
( 
L 
[r
 +
c-
 c
] 
[c
 +
r-
 r
] 
) 
; 
} 
/*
*/

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


8

하스켈 , 51 바이트

이 버전은 유효하지만 []입력으로 제공 될 때 정지되지 않습니다 .

f
--(:[|,<zabf=]f
--abx(y-i$]
-- ):x) pf;x[:x
 y =y

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

전치 됨, 75 바이트

f---
 ---y
 (a
 :b)=
 [x:y
 |(x
 ,y)
 <-
 zip
 a$f
 b];
 f x
 = [
 ] :
 f x

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

하스켈 , 51 바이트

이 버전은 유효하지만 []바뀐 버전의 입력으로 충돌 합니다.

f
--d[(idi)z[.]d!0
-- m!)|,<i0.$ !]
-- a! (_-p
 p=p

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

하스켈 , 75 67 57 바이트

Ørjan Johansen 덕분에 최소 7 바이트 절약

이 버전 은 입력으로 []제공 될 때 출력 됩니다 [].

f
--[[d(i<di)z[.$!0
--]]=!)$|,<i0.d!]
-- ;[! >(_-p ]
 f=f

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

전치



@ ØrjanJohansen 감사합니다! 나는 이전에 그런 것을 시도했지만 작동시키지 못했습니다. 60에서 3 바이트를 더 빼내는 방법도 있습니다.
밀 마법사





3

, 19 바이트

A¿⁰«
‖⁰¿
↗⁰
¿⁰
⁰¿
«

온라인으로 사용해보십시오! 입력을 문자열 배열로 취합니다. 설명 : 명시 적 입력을 내재적으로 인쇄하지만 ¿⁰조건 0은 조건부로 항상 거짓입니다. «그런 다음 결코 실행되지 않는 의미없는 숯 코드 블록을 시작합니다. (이러한 바이트 중 일부를 제거 할 수도 있지만이 경우 Charcoal이 프로그램을 올바르게 구문 분석하는지 확실하지 않습니다.) 전치 된 17 바이트 :

A‖↗¿⁰«
¿⁰⁰⁰¿
⁰¿
«

온라인으로 사용해보십시오! 설명 : 조옮김 명령 추가를 제외하고 이전 프로그램과 거의 동일‖↗ .

원래 프로그램과 전치 프로그램이 모두 18 바이트 인 대체 솔루션이 있습니다.

A⊞υ”y
‖υ⁺y
↗⁺
⊞⁺
υ

온라인으로 사용해보십시오! 설명 : 위와 같이; ⊞υ미리 정의 된 빈 목록으로 값을 푸시합니다 (출력에 영향을 미치지 않음). ”y임의의 문자열을 시작합니다 (프로그램 끝 또는 일치시 종료 ). 조옮김 :

A‖↗⊞υ
⊞υ⁺⁺
υ⁺
”y
y

온라인으로 사용해보십시오! 설명 : A‖↗위와 같이; ⊞υ위와 같이; 여기서 작은 차이점은을 반복하고 싶지 않기 때문에 작은 문자열의 연결을 푸시한다는 것 입니다.


3

뇌 플랙 (BrainHack) , 382 (375) 337 바이트

코멘트가 없습니다!

  ( <( <>)<> ><>) ({})  {}{}   {( )()<({}<{}<><>>{}<><>{}) ( <>) ({}<><( [ ]({}<{}( )<({}()<{}<><>>){} ><><{}<< ><> ( [ ]( <>)<>)>{}<>>>)){}>)> ( ){ {}[]} <>[]{
(({}({}  ( ))   <>( ))[( [ ])])({}[ ] [ ](   )  (   ) < ><>{}  <>(   ){{}()<( )( ({} {  [ ](   )   } <>)  (  (())  {{}()<{}    >}  )  ) >}    )}[] {} ( ){} ( ){}({}<>)<>([])}<>

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

입력의 경우 처음 두 숫자는 행렬의 차원이고 나머지는 행렬의 내용입니다. 출력은 같은 형식으로 제공됩니다.

전치

Brain-Flak (BrainHack) , 465 바이트

 (
 (
({
 }
<(
({
 }
<
>
)(
<
>)
 )
>
<
>
)<
 >
((
{
})
))
 [
 (
{
}[
{
}]
 )
 ]
 )
{(
({
 }
)[
(
)]
<
([
{
}]
<( 
{
}
<
>)
<
>
>(
{
}
<
>)
<
><
{
}>
)<
 >
({
 }
<
>
)<
 >
((
{
}
<
>)
<{
({
 }
[(
 )
]<
((
{
})
<(
{
}(
({
 }
)
<{
(
{
}[
(
)]
<(
{
}
<
>)
<
>
> 
)}
{
}<
 >
>)
<
>
<(
{
}
<(
<(
 )
>)
<
>
 {
({
 }
[(
 )
]<
({
 }
<
>
)
<
>>
)}
>
{
})
<
>
>)
>
)>
)}
{
}
>
)
>)
 }
([
 ]
)
{{
 }
{
}(
[
])
}{
 }
<
>(
[
])
{{
 }
 (
 {
 }
 <
 >
 )
 <
 >
 (
 [
 ]
 )
 }
 <
 >

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




2

하스켈 ,153 144 바이트

(감사합니다, Sriotchilism O'Zaic )

f
 [
 ]=
   [
   ];
    f(
     x:
      l)
       =(
        :)
         x l
-- :   z $
-- f   i f
-- [   p
-- ]   W
--     i
--     t
--     h

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

그것을 바꾸어보십시오!


다음 은 구조를 유지하면서 144 바이트 버전입니다. ( 조옮김 ).
밀 마법사

다음 은 여전히 ​​비슷하지만 구조적 변화가있는 70 바이트 버전입니다. ( 조옮김 ).
밀 마법사

감사. 두 번째 버전은 중심 아이디어가 없지만 ( foldr두 버전 모두 재귀를 재사용 ) 그렇지 않습니다.
시계 반대 방향으로 돌리지

코드가 시계 반대 방향으로 바뀌었기 때문에이 챌린지와 사용자 이름이 서로 모순됩니다. ; p
Kevin Cruijssen

2

APL (Dyalog Unicode) , 7 바이트

{⍵

⍵}

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

조옮김 :

{⍉⍵
 }

아마도 다소 지루한 대답이지만 어쨌든 여기에갑니다.

인라인 함수 정의 {...}는 여러 줄에 걸쳐있을 수 있습니다. 이 경우 각 줄이 순차적으로 실행되지만 할당이없는 모든 줄은 즉시 계산 된 값을 반환합니다. 첫 번째 함수는 하고 두 반환합니다 ⍉⍵.

더 지루한 답변은 주석 남용입니다.

APL (Dyalog Unicode) , 4 바이트

⍝⍉

TIO가 필요하지 않습니다.


1

05AB1E , 3 바이트

øø
q

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

øq
ø

그것을 바꾸어보십시오.

설명:

다른 언어들과 달리, 줄 바꿈은 05AB1E에서 단순히 무시되므로 2 바이트가 가능하지 않다고 생각합니다 (잘못 입증되고 싶지는 않지만).

ø    # Transpose the (implicit) input
 ø   # Transpose it back
  q  # Stop the program (and output the top of the stack implicitly as result)

ø    # Transpose the (implicit) input
 q   # Stop the program (and output the top of the stack implicitly as result)
  ø  # No-op, since the program has already stopped





0

, 13 바이트

qo
~
z
`

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

바뀐 버전 :

q~z`
o

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

입력 형식

입력 형식은 표준 CJam 배열 형식입니다. [[1 2] [3 4]]

충돌 버전 없음, 12 바이트

어레이를 인쇄 한 일반 버전이 충돌 합니다. 충돌하지 않는 버전은 다음과 같습니다.

qo{
~
z
` };

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

또는 전치 :

q~z`
o
{  };

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

저장 될 수있는 여분의 바이트가있을 수 있습니다. 모든 개선을 환영합니다.


0

Zsh , 75 바이트

  <<<${(F)@}
fa<
o[<
r+$
 +{
si(
;]F
i+)
==a
&$}
&s
r[
ei
p+
e1
a]
t

$
#
s

TIO : 일반 조옮김

기본 인쇄 아래의 쓰레기는 무해하며, 줄 바꿈 후 fa<및 종료시 오류를 인쇄합니다 . 해당 오류를 제거하려면 86 바이트입니다.

전치 버전이 여기에 있습니다. 인쇄 후 <줄 끝에 오류가 발생하여 종료됩니다.

 for s;i=&&repeat $#s
 a[++i]+=$s[i+1]
<<<${(F)a}
<
<
$
{
(
F
)
@
}

0

룬 마법 , 88 바이트

vrlril1-{)?\:',=4*?~r0[
i! '${U [0r/?*7̸0l{$
$ka6 ̹\!$,'/;? =  ̹
'              ̸

$

온라인으로 사용해보십시오!
그것을 바꾸어보십시오!

입력은 각 값에 대해 공백으로 구분 되며 행에 대해 쉼표로 구분 되며 (줄 바꿈은 선택 사항 임) 문자열과 0이 아닌 숫자를 모두 지원합니다. 공백과 줄 바꿈으로 입력이 자동으로 분리되므로 입력 구문 분석이 쉬워집니다. 예를 들어 입력은 다음과 같습니다.

1 2 3 , 4 5 6 , 7 8 9

중첩 배열 형식으로로 표시됩니다 [[1,2,3],[4,5,6],[7,8,9]]. 들쭉날쭉 한 배열에 대한 최소한의 지원 (마지막 배열 만 짧을 수 있음)이지만 입력이 직사각형 일 것으로 예상되므로이 요구 사항을 충족합니다.

출력은 동일한 형식으로 표시됩니다 (줄 바꿈을 사용하여 바뀐 버전 출력, 대신 공백을 사용하도록 0 바이트가 다릅니다). 일반 버전에는 후행 공백이 있고, 전치 된 버전에는 후행 쉼표와 줄 바꿈이 있습니다 (인쇄 할 데이터가 더 이상 없는지 확인하기 어렵 기 때문에).

일반 버전에는 이상한 곳에 수정 자 문자가 있습니다 (예 : 7̸0 있지만 소스가 바뀔 때 정상적인 위치에서 명령의 가장 왼쪽 열만 사용해야하기 때문입니다.

설명

전치 된 소스에 대한 설명은 전치되지 않은 형식입니다. 화살표는 다양한 블록의 출입구에서 IP 방향성을 나타냅니다.

→rlril1-{)?\:',≠4*?~r0[    Initial position. Read and parse input.
           ↓               Input loop exit and direction

입력을 읽고 ,문자를 찾으면 새 서브 스택이 푸시됩니다. 이를 통해 각 스택은 각 행을 메모리에 별도로 보유 할 수 있습니다. 위에서 다음 섹션으로 들어갑니다.

           ↓
.. '${̹L [0r/?*7≠0l{̹$       When no more input:
      ↑    ↓

[0(왼쪽으로 실행)은 첫 번째 행과 마지막 행 사이의 경계 역할을하는 빈 스택을 설정 한 다음 첫 번째 스택 ( )으로 회전하고 요소 및 회전 스택 인쇄를 시작합니다. 이 i!실행되지 않으며 {̹L [0r한 번만 실행됩니다. 크기가 0 인 스택이 발견되면 루프가 종료됩니다.

      ↑    ↓
$ka6  \!$,'/;?             Row separation formatting

빈 스택이 발견되면 a ,및 줄 바꿈이 인쇄되고 값 루프가 다시 입력됩니다. 실행 .되지 않은 명령 인 실행 순서 (가독성을 위해 미러링 됨) : \',$!.6ak$?....../. 줄 바꿈 대신 공백을 인쇄 ak하도록 변경 했습니다 '<space>.

프로그램이 빈 스택에서 쓰려고하면 실행이 중지됩니다. 그렇기 때문에 마지막 행 흔들림 만 제대로 작동 ,하고 출력에 후행이있는 이유는 무엇입니까? 프로그램이 더 이상 데이터가 없다는 것을 알기 전에 쉼표가 이미 인쇄되었습니다.

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