왼손 vs. 오른손 — 타이피스트 도전


32

당신의 임무는 키보드의 양쪽을 서로 맞대고 같은 언어로 출력하는 표준 키보드의 왼쪽에있는 키만을 Pollinium milk; plump pumpkin; lollipop?사용하고 다른 하나는 출력하는 오른쪽에있는 키를 사용하여 두 개의 프로그램 을 작성하는 것입니다. Weatherheaded sweetheart haberdasheress!.

규칙

왼쪽 프로그램에 허용되는 정확한 키는 다음과 같습니다.

123456!@#$%^QWERTYqwertyasdfghASDFGH`zxcvb~ZXCVB

그리고 오른쪽 프로그램 :

7890-=&*()_+uiop[]UIOP{}jkl;'\JKL:"|nm,./NM<>?

솔루션 중 하나 또는 둘 다 또는 둘 다에 사용할 수있는 네 개의 비어있는 키 Esc( \x1b), Tab( \x09), Space( \x20) 및 Enter( \x0a및 / 또는 \x0d)가 있습니다.

점수는 두 프로그램의 총 바이트 수입니다. 이라는 용어를 사용하는 동안 program제출물은 전체 프로그램이거나 평소와 같이 기능 일 수 있으며 두 유형 모두 다른 유형 (예 : 하나의 전체 프로그램 및 하나의 기능) 일 수 있습니다.

결과는 원하는 텍스트를 포함해야합니다. 정확한 텍스트가 텍스트 안에 나타나는 한, 앞뒤 공백은 아무 문제가 없습니다.

표준 허점은 금지되어 있습니다.

각 언어에서 가장 짧은 솔루션이 이깁니다.


6
왜 H가 왼손입니까?
tsh

1
@ tsh 나는 각 "손"에 대해 더 많은 수의 기호를 유지하려고 키보드를 6/6 (또는 가능한 한 가깝게) 나누려고했습니다.
Dom Hastings

8
// 아마도 공백을 배워야하고 나중에 다시 배워야 할 것입니다.
tsh

@ tsh, 공백 답변이 불가피하다고 생각합니다! 그래도 얼마나 경쟁력이 있는지 잘 모르겠습니다! 아마도 나는 지금 너무 늦었을 것입니다!
Dom Hastings

요청한 텍스트를 포함하는 한 프로그램에 다른 (공백이 아닌) 출력이 있으면 괜찮습니까?
Grzegorz Oledzki

답변:


12

Perl 5 , 261 = 88 + 173 바이트

이것은 "언어 옵션이 중요하지 않은"문제가되는 예입니다. rigt side 솔루션은을 사용 -p하지만 왼쪽 은 사용 하지 않습니다. 그래서 같은 언어로 계산됩니까? 옵션은 왼쪽 / 오른쪽 문자 집합에서 가져와야합니까?

왼쪽 88

이 옵션이 코드로 계산되어야하고 왼쪽에서 가져 오거나 "언어 버전 설정에 포함되지 않는 옵션"에 해당하는 경우 다시 논쟁 가능 을 활성화하기 위해 -M5.10.0또는 -E명령 줄에서 사용say

say eYYYYZYEYWYYYYYWQYEYQWQEYQYYZYWYYYYYQYQW^q%565504004w4052bw!504!w!04!204bw56550!6!h%

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

오른쪽 173

-p옵션으로 실행하십시오 (올바른 문자로 구성됨)

}{*_=\(uuuuuuuuuuuuuiuuuuuuuuuuiuuuuuuuuuuuuuui&Uiipjipjiijij0puiipjiipp0jijipjipjipipp7|Ouiujujjuiuuu0kouuujuiju0jijujuikjujukk7&"7oulio7iouloli77ooliou7liiu7o7lu7io7o77i")

이것은 거의 확실하게 개선 될 수 있지만, 현재로서는 무언가를 작동시키기에 충분하지 않았습니다. 에 대한 액세스 권한을 가지고 있지 print, say, $_sub{}까다로운 출력한다

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


플래그에 대해 전혀 걱정하지 않고 이것이 유효하다는 것이 기쁩니다. 내가 eval통해 전화로 땜질했던 것보다 훨씬 짧은 솔루션 &{(u&I.._)[9-7].O.(P|'"'&_).("U::u"&"o::o").("&"|p).(uo&il).(u&i.._)[9-8].("{|o"&"}uu").(j..u)[9]}!
Dom Hastings

12

공백 , 1175 1143 655 645 638 632 639 578 (293 + 285) 바이트

; p;
스택을 거꾸로 채우고 어떤 종류의 루프로 끝까지 인쇄하여 확실히 골프를 칠 수는 있지만 이것은 두 번째 공백 프로그램 일 뿐이므로 아직 알아 내지 못했습니다. .. 편집 : 골프.

7 바이트 내가 맞춤법이 틀린 때문에 pumpkin같은 pumkin.. (감사 알아 줘서, @ fənɛtɪk .)

문자 S(공백), T(탭) 및 N(줄 바꾸기)가 강조 표시로만 추가되었습니다.
[..._some_action]설명으로 만 추가되었습니다.

왼쪽 Pollinium milk; plump pumpkin; lollipop?:

[S S T  T   S T T   T   T   N
_Push_-47_?][S S S T    S N
_Push_2_p][S S S T  N
_Push_1_o][S T  S S T   N
_Copy_1st_p][S S T  T   S T N
_Push_-5_i][S S T   T   S N
_Push_-2_l][S N
S _Duplicate_-2_l][S S S T  N
_Push_1_o][S T  S S T   N
_Copy_1st_l][S S T  T   S S T   T   T   S N
_Push_-78_space][S S T  T   T   S S T   T   N
_Push_-51_;][S S S N
_Push_0_n][S S T    T   S T N
_Push_-5_i][S S T   T   T   N
_Push_-3_k][S S S T S N
_Push_2_p][S S T    T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S S T  S N
_Push_2_p][S S T    T   S S T   T   T   S N
_Push_-78_space][S S S T    S N
_Push_2_p][S S T    T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S T    T   S N
_Push_-2_l][S S S T S N
_Push_2_p][S S T    T   S S T   T   T   S N
_Push_-78_space][S S T  T   T   S S T   T   N
_Push_-51_;][S S T  T   T   N
_Push_-3_k][S S T   T   S N
_Push_-2_l][S S T   T   S T N
_Push_-5_i][S S T   T   N
_Push_-1_m][S S T   T   S S T   T   T   S N
_Push_-78_space][S S T  T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S T    T   S T N
_Push_-5_i][S S S N
_Push_0_n][S S T    T   S T N
_Push_-5_i][S S T   T   S N
_Push_-2_l][S N
S _Duplicate_-2_l][S S S T  N
_Push_1_o][S S T    T   T   T   T   S N
_Push_-30_P][N
S S N
_Create_Label_LOOP][S S S T T   S T T   T   S N
_Push_110][T    S S S _Add][T   N
S S _Print_as_char][N
S N
N
_Jump_to_Label_LOOP]

온라인으로 시도하십시오 (원시 공백, 탭 및 줄 바꾸기 만).

오른쪽 Weatherheaded sweetheart haberdasheress!:

[S S T  T   S S S T S S N
_Push_-68_!][S S S T    T   T   S N
_Push_14_s][S N
S _Duplicate_14_s][S S S N
_Push_0_e][S S S T  T   S T N
_Push_13_r][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   S N
_Push_14_s][S S T   T   S S N
_Push_-4_a][S S T   T   N
_Push_-1_d][S S S T T   S T N
_Push_13_r][S S S N
_Push_0_e][S S T    T   T   N
_Push_-3_b][S S T   T   S S N
_Push_-4_a][S S S T T   N
_Push_3_h][S S T    T   S S S T S T N
_Push_-69_space][S S S T    T   T   T   N
_Push_15_t][S S S T T   S T N
_Push_13_r][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   T   N
_Push_15_t][S S S N
_Push_0_e][S N
S _Duplicate_0_e][S S S T   S S T   S N
_Push_18_w][S S S T T   T   S N
_Push_14_s][S S T   T   S S S T S T N
_Push_-69_space][S S T  T   N
_Push_-1_d][S S S N
_Push_0_e][S S T    T   N
_Push_-1_d][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   S T N
_Push_13_r][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   T   N
_Push_15_t][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S T    T   T   T   S N
_Push_-14_W][N
S S N
_Create_Label_LOOP][S S S T T   S S T   S T N
_Push_101][T    S S S _Add][T   N
S S _Print_as_char][N
S N
N
_Jump_to_Label_LOOP]

온라인으로 시도하십시오 (원시 공백, 탭 및 줄 바꾸기 만).


설명:

먼저 스택을 뒤집어 빌드합니다. 숫자 푸시는 다음과 같이 수행됩니다.

  • S 시작시 : 스택 조작 사용
  • S: 다음 숫자를 스택에 푸시
  • S/ T: S양수이고 T음수 인 부호 비트
  • 일부 TS다음 N스택 (이진로두고 수 : T=1S=0).

그런 다음 스택을 뒤집어 반복하여 모든 것을 문자로 인쇄합니다. 다음과 같이이 작업을 수행합니다.

  1. 0을 누릅니다 ( SSSN)
  2. 위에서 설명한대로 반전 된 문자를 나타내는 모든 숫자를 누릅니다.
  3. Label_0( NSSN) 만들기
    1. 스택 상단을 복제합니다 ( SNS)
    2. 이 값이 0 인 경우 : Label_1( NTSTN)로 이동
    3. 그렇지 않은 경우 : 스택 상단을 튀어 문자 ( TNSS) 로 인쇄하십시오.
    4. Label_0( NSNN)로 이동
  4. 만들기 Label_1( NSSTN)

위의 두 프로그램의 기본 레이아웃입니다. 이 기본 레이아웃의 변경 로그는 바이트 수를 더욱 줄였습니다.

  1. 모든 숫자는 같은 양만큼 ( 첫 번째 프로그램 에서, 두 번째 프로그램에서 ) 낮아져 현재 낮은 숫자에 사용되는 이진수를 줄이고 단계 3.2와 3.3 사이에 다음 두 하위 단계가 추가됩니다.100 110102 101

    • SSSTTSTTTSN프로그램 1에서 110 ( )을 누르 거나 SSSTTSSTSTN프로그램 2에서 101 ( )을 누릅니다.
    • 스택의 상위 두 값을 서로 팝하고 추가하면 결과가 스택의 새 상단입니다 ( TSSS)
  2. 또한 사용한 SNS골프에 사용되는 스택의 상단 복제 어떤 경우에는 ll, ll, eess.

  3. 또한 4 단계 (create Label_1)가 완전히 제거되었습니다. 오류와 함께 종료되지만 여전히 모든 것을 올바르게 출력합니다 ( meta에 따라 허용됨 ).

  4. n스택 상단에서 '0 번째 값 을 복사 할 수 있습니다 ( STS+ 0-indexed 사용 n) 경우에 따라 새 숫자를 만드는 것보다 짧습니다.
    첫 번째 프로그램에서 나는이 일을했습니다 두 번째 ppop( STSSTN(복사 1 일)보다 짧은 SSSTTSSN, 두 번째는 ( 'P'에 대한 번호를 생성))l 에서 lol( STSSTN(복사 1 일)보다 짧은 SSSTSSSN'L'의 수를 생성 ( )) 제 pp p( STSSTN(사본 1)이보다 짧은 SSSTTSSN( 'P'의 개수를 생성)) 제 ppumlp( STSSTTN(사본 3)은보다 짧은 SSSTTSSN'P'의 개수를 생성 ()) 제 ppmup( STSSTSN( 사본 2)보다 짧음SSSTTSSN) 제 ( 'P'의 개수를 생성) m에서 m m( STSSTN보다 짧은 (사본 1)를 SSSTSSTN( 'm'의 개수를 생성)) 제 iini( STSSTN(사본 1)이보다 짧은 SSSTSTN( 'I'에 대한 번호를 생성) ).
    두 번째 프로그램에서는이 작업이 수행되지 않습니다. 일부 사이의 거리는 ere또는 처럼 꽤 짧지 ded만 'e'( SSTTN) 또는 'd'( SSTTSN) 의 숫자를 만드는 것은 copy 1st ( STSSTN) 보다 짧거나 같은 길이 이므로이 트릭을 적용 할 수 없습니다 바이트를 저장하는 두 번째 프로그램. 참고 : 골프 단계 7 이후에이 모든 것이 더 이상 적용되는 것은 아닙니다.

  5. 두 프로그램 모두 루프의 1 단계를 SSSN(Push 0)에서 SSN(Push error_value)로 변경하고 3.1 ( SNSDuplicate) 및 3.2 ( NTSTNIf 0 : Exit) 단계를 제거했습니다 . 이제 SSN액세스하려고하면 알 수없는 값 의 오류와 함께 종료됩니다 .

  6. SSN두 프로그램에서 (error_value)를 완전히 제거했습니다 . 이제 스택에 아무것도 남지 않은 상태에서 추가 기능을 수행하려고하면 " Ca n't do Infix Plus " 오류와 함께 중지됩니다 .

  7. 상수의 값은 변경 100102110101각각있다. 여기에110 상수 를 생성하는 데 사용되는 Java 프로그램이 있습니다 . 그리고 여기에101 상수 를 생성하는 데 사용되는 Java 프로그램이 있습니다. 지금은 적습니다새로운 값은 많은 경우에 복사본보다 짧기 때문에 다시 밀어 넣기가 짧기 때문에 위의 4 지점에서 설명한 것보다 복사가 사용됩니다.


ST 항목은 숫자를 이진수로, 공백은 0, 탭은 1입니다. 출력은 TNSS이므로 각 프로그램의 시작 부분에 추가로 두 개의 공백이 있습니다. 또한 바이트를 저장하여 복제 한 다음 각 문자에 대해 더하거나 빼고 마지막 값을 반복합니다.
Jo King

1
당신은 호박을 잃어 버렸습니다.
fəˈnɛtɪk

@ fəˈnɛtɪk Whoops lol .. 주목 해 주셔서 감사합니다.
케빈 크루이 센

4

Lenguage, this many bytes

왼쪽은 65721878296123796350462639500449228197646164622176218219262161264085219054330862921130017235140285847450697804123168755463678390611789188813352602373675420824698785508893489685489807676509031860196742608788337382365939621331808046993938743187441299393 a 다음 브레인 퍽 프로그램에 해당 문자 :

-[--->+<]>-----.[--->+<]>-.---..---.+++++.-----.++++++++++++.--------.[->+++++<]>-.+[----->+<]>.----.+++.-.--[->+++<]>.+[-->+<]>++.[-->+++++++<]>.----.+++++++++.--------.+++.[------->++<]>.[-->+++++++<]>.+++++.--------.+++.-----.--.+++++.[-->+<]>++++.+[-->+<]>++.++[--->++<]>.+++.---..---.+++++++.-.+.[--->++++<]>-.

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

오른쪽에는 636605880289050800007960838028215177632402180834140124157618258152393860687206680356620669530585999501769442445842690365640523699585001167392310123764258380235064746704898152544431842440556280249638840374132783257375880144623575829131522611446544303839106505176776161206935275549421170646618266717893044911373119804737614528140의 반복 인 p다음 브레인 퍽 프로그램에 해당 문자 :

+[--->++<]>+.++[->++++<]>+.----.--[--->+<]>-.------------.---.+++++++++++++.----------.---.----.+++.+.-.-[--->+<]>-.---[->++++<]>-.++++.[->+++<]>..[--->+<]>---.------------.---.----.--[--->+<]>---.++.[---->+<]>+++.-[--->++<]>--.-------.+.+++.+++++++++++++.--------------.---.--[--->+<]>--.-----------.---.+++++++++++++.-------------.[--->+<]>----..+[-->+++++<]>-.

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



3

핵분열 , 958 + 752 = 1710 바이트

._.

왼쪽

D
z
^@$$$$$$$$$$$$$$$$$$$@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~@!!@~~~@!@$$$$$@!@~~~~~@!@$$$$$$$$$$$$@!@~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~~@!@$$$@!@~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~~@!@$$$$$$$$$@!@~~~~~~~~@!@$$$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@$$$$$@!@~~~~~~~~@!@$$$@!@~~~~~@!@~~@!@$$$$$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@$$$@!@~~~@!!@~~~@!@$$$$$$$@!@~@!@$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!V

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

권리

                                           } \} \    } \      } \    } \   } \   } \    } \   } \       } \    } \   } \ } \       } \   } \                                           } \   } \    } \    } \   } \   } \   } \} \      } \    } \    } \                                           } \ } \ } \   } \    } \   } \   } \    } \   } \   } \   } \    } \      } \ 
O________________________________________I'/O\/O\__u'/O\____i'/O\++p'/O\___/O\_i'/O\__u'/O\___/O\_____i'/O\++p'/O\+++/O\+/O\_______/O\_i'/O\_________________________________________I'/O\_u'/O\++p'/O\____/O\___/O\_i'/O\_u'/O\/O\____i'/O\++u'/O\__u'/O\_________________________________________I'/O\_/O\+/O\+++/O\____/O\___/O\_i'/O\++p'/O\___/O\_i'/O\_u'/O\____/O\____i'/O\+++++++P'L

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

좋아, 여기에 우리는 평범한 행운을 빕니다. 실제로 ._.
Fission의 첫 번째 멋진 기능은 AKA atom :이라는 명령 포인터를 만드는 4 개의 명령이 있다는 것입니다. RLDU따라서 왼쪽 및 오른쪽 그룹에 대한 두 개의 명령이 있습니다.
두 번째 행운의 부적은 출력 !과에 대한 두 가지 명령으로 O, 다른 그룹에서 발생합니다.
세 번째 매력. 두 출력 코만 트는 원자 질량에 해당하는 ASCII 출력을 출력합니다. 그래서 나는 그것을 어떻게 바꿔야합니다. 운이 좋은 날! 모두 + (+1 mass)_ (-1 mass)한 그룹 및 모든 필요한 세에 $ (+1 energy), ~ (-1 energy), @ (swap mass and energy)다른 그룹에 있습니다.

또한 두 그룹의 원자를 제어하는 ​​거울이 있습니다! 하지만 첫 번째 프로그램에서는 사용하지 않았습니다

따라서 나를 막을 수있는 것은 없지만, 크기를 단계별로 설정하여 소형화 할 수는 없습니다.

첫 번째 프로그램

첫 번째 프로그램은 Dz^@$~!V

D   create atom, going down
z   set its mass to ASCII code of 'z'
^   split atom in 2, dividing their mass. One goes left, second - right

시작은 더 간단 할 수 있지만 (단지 R) 나누기를 사용하면 첫 글자에 약간의 바이트가 절약됩니다.
왼쪽으로가는 Atom은 주위를 둘러싼 다 V.
두 번째 원자는 고정 @...@!되어 각 문자가 출력 될 때 마다 반복되는 패턴 을 만나게됩니다 .

@   swap atom's mass and energy
... increament or decrement energy until it would match desired ASCII code
@   swap again
!   print character by atoms mass

결국 그것은 V첫 번째 원자의 운명을 만나고 공유 할 것 입니다. 키보드의 왼쪽 부분으로 그것들을 파괴하거나 멈추는 방법은 없습니다.

두 번째 프로그램

두 번째는 기복이 있습니다. 질량을 직접 바꿀 수있는 쉼표가 있지만 출력 명령은 O원자를 파괴하므로 어떻게 든 보존해야합니다. 원자가 왼쪽으로 이동
하면서 프로그램이 오른쪽에서 시작됩니다 L.

반복되는 패턴 :

} \
/O\...X'

'일부의 코드는, 그래서 풋 다음, 원자 '질량 문자의 ASCII 코드를 encoutered X먼저 저장되는 질량에 의해 변경되는 것보다, _그리고 +정확한 값으로.
가끔은 X'그냥 사용이 짧은 경우, 건너 뛴 것입니다 _+.

원자는 왼쪽에서 나오고, 두 번 거울에 쳐서 왼쪽에서칩니다 }. 이 경우 }두 개의 동일한 원자를 위아래로 보내는 클론처럼 작동합니다. 아래쪽 원자는 거울로 반사되어 왼쪽으로갑니다. 위로 원자 포장, 같은 거울을 맞았지만 아래에서 맞아서 맞고 O인쇄 하고 맞습니다 .
결국 마지막 원자는 O파괴되기 위해 최종 을 만난다 .

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