태그 보관물: code-challenge

code-challenge

클러스터 크기 극복 대부분의 프로그램은 길이가

플래시 스토리지의 신뢰성에 부응하여 모든 프로그램을 오래된 1,440 KiB 플로피 중 하나에 저장하기로 결정했습니다. 그러나 3,000 개의 프로그램을 복사하지 않은 후 디스크가 가득 찼습니다. 어떻게 가능합니까? 코드 골프 기술에 능숙하면 대부분의 프로그램은 길이가 100 바이트가 아니므로 충분한 공간이 남아 있어야합니다 …

수퍼 유저에 대해 질문 한 후, 파일 시스템의 클러스터 크기 , 즉 FAT12 디자이너의 악의적 인 음모로 인해 플로피의 상당 부분을 사용하지 않고 실제로 필요한 것보다 더 많이 사게됩니다.

플로피를 더 사시겠습니까? 못! 여러 프로그램을 하나의 파일로 저장하면 클러스터 크기는 문제가되지 않습니다. 동일한 소스 코드에 대해 서로 다른 컴파일러 / 통역가 다르게 작동하기 때문입니다.

태스크

단일 클러스터 (512 바이트 이하)에 맞는 폴리 글롯을 작성하고 가능한 많은 다음 작업을 해결하십시오.

  1. 모든 입력을 읽고 인쇄하십시오.

  2. 안녕하세요, 세계를 인쇄하십시오 ! .

  3. 행 / 인수 ( name )를 입력으로 읽고 생일 축하합니다. [name]! .

  4. 모든 입력을 읽고 인쇄하기를 좋아합니다. 하나 이상의 tabulators (0x09)가 포함되어 있고 공백이 싫어요! 그렇지 않다면.

  5. 두 줄 / 인수를 읽고 두 번째가 첫 번째의 하위 문자열이면 틀린 값을 인쇄하고 그렇지 않은 경우 거짓 값을 인쇄하십시오.

  6. 행 / 인수를 읽고 문자가 엄격하게 오름차순이면 거짓 값을, 그렇지 않으면 거짓 값을 인쇄하십시오.

  7. 행 / 인수 및 문자를 읽고 해당 문자의 모든 항목에 대한 색인을 인쇄하십시오.

  8. 행 / 인수를 읽고 발생 수가 가장 많은 문자를 인쇄하십시오.

  1. 0 에서 255 사이의 두 정수를 읽고 합계를 인쇄하십시오.

  2. 0 에서 255 사이의 단일 정수를 읽고 7 의 몫과 몫을 7로 인쇄합니다 .

  3. 1 에서 255 사이의 단일 정수를 읽고 복합 숫자 (1도 소수도 아님)이면 거짓 값을, 그렇지 않으면 거짓 값을 인쇄하십시오.

  4. 1 에서 255 사이의 단일 정수를 읽고 2의 거듭 제곱이면 참 값을, 그렇지 않은 경우 거짓 값을 인쇄하십시오.

  5. 0 에서 255 사이의 두 정수를 읽고 더 큰 정수를 인쇄하십시오.

  6. 16 진수 표현으로 0 에서 255 사이의 10 진수를 읽습니다 .

  7. 0 에서 255 사이의 단일 정수를 읽고 해밍 가중치 (1 비트 수)를 인쇄하십시오.

  8. 단일 정수 읽기 N 사이의 113 및 인쇄 F , NN 번째 피보나치 수가 .

    예를 들어, 입력의 13경우 print를 입력하십시오 233.

  1. 입력 라인 / 인수를 읽고 프레임을 구성하십시오.

    예를 들어, input의 Programming Puzzles & Code Golf경우 다음을 인쇄하십시오.

    +---------------------------------+
    | Programming Puzzles & Code Golf |
    +---------------------------------+
    
  2. 직사각형의 문자 블록을 읽고 시계 방향으로 1/4 회전시킵니다.

    예를 들어, 입력의 경우

    tye
    xll
    epb
    tma
     id
     sa
    s e
    i r
    hsn
    Tiu
    

    이것을 인쇄하십시오 :

    This  text
    is  simply
    unreadable
    
  3. 1 에서 40 사이의 정수를 읽고 해당면의 다이아몬드를 인쇄하십시오.

    예를 들어, input의 3경우 다음을 인쇄하십시오.

      /\
     /  \
    /    \
    \    /
     \  /
      \/
    
  4. 이것을 인쇄하십시오 :

    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    

채점

단일 512 바이트 클러스터에 맞는 단일 파일에 많은 수의 프로그램을 통합 할 수있는 답이 이깁니다. 타이는 바이트 수로 나뉩니다 (낮을수록 좋습니다).

추가 규칙

  • 점수에 대해 청구하는 각 작업마다 동일한 파일 (바이트 당 바이트)이이 특정 작업을 해결하는 전체 언어를 선택한 언어로 구성해야합니다.

  • 각 작업은 다른 언어로 해결해야합니다.

    같은 언어의 다른 버전이 아닌 경우 언어는 다른 것으로 계산됩니다. 예를 들어 JavaScript, Python 및 TI-BASIC이 하나만 있지만 C, C ++, Octave 및 MATLAB은 서로 다른 네 가지 언어입니다.

  • 각 작업에 대해 선택된 언어는 일반적인 프로그래밍 언어 정의를 만족시켜야 합니다 .

    또한 2015 년 9 월 9 일 이전에 언어가 게시되고 구현되어 있어야합니다.

  • 컴파일러 / 인터프리터는 예상되는 동작을 생성하기 위해 비표준 플래그가 필요하지 않을 수 있습니다.

    이 규칙의 예외에는 특정 언어를 지정하거나 (단일) 파일에서 프로그램을 읽거나 배너를 억제하는 데 필요한 플래그가 포함됩니다.

  • 각 작업의 입력은 인쇄 가능한 ASCII 문자 (0x20 ~ 0x7E)와 줄 바꿈 (0x0A)으로 구성되며 길이 는 255 바이트를 초과하지 않습니다 .

  • 작업에서 달리 명시하지 않는 한 모든 정수 는 십진수 또는 단항으로 읽을 수 있습니다.

  • 유효하지 않은 입력의 동작은 정의되어 있지 않습니다.

  • STDIN (또는 가장 가까운 대안) 또는 명령 행 인수로 입력을 읽을 수 있습니다.

    작업에서 두 ​​개의 입력을 읽어야하는 경우 원하는 순서대로 원하는 1 바이트 구분 기호로 구분하여 명령 행 인수 또는 STDIN과 다른 명령 행 인수로 읽을 수 있습니다.

    입력 조각 중 하나가 줄인 경우 가능한 한 구분 기호는 줄 바꿈입니다.

  • 출력을 STDOUT (또는 가장 가까운 대안)으로 인쇄하십시오. STDERR에 대한 모든 출력은 무시됩니다.

  • 각 작업마다 표준 규칙이 적용됩니다.

    특히, 이것은 출력하드 코딩하는 것을 제외 하고 기본적으로 금지 된 허점을 포함하며 , 이는이 챌린지에 대해 명시 적으로 허용됩니다.



답변

12 개 언어, 418 바이트

"1\"# &&+.@\""" "" "
#=
''''
<<s
""'("']0=~2base{+}*}
 ?
 :_7/!\_7%!@
"
R"Happy Birthday, "[?S"!"*"
>0[0>i:0(?v:{)?v0n;\!/
$'main';n1< .95<
 \@-[I love tabs!]o#
  \ >qi---@
( @-[ ]e<''';print hex(
input())#-[I hate spaces!]o#"]];ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>"))?(!?)
'''=#print(([1 1;1 0]^int(readline()))[1,2])
#=
Tr is here.
>Tr, Hello, World!
>X Tr
s
l=gets
a='+-'+?-*~/$/+'-+'
puts a+'
| %s |
'%l+a#=#.91<0#'''#";

이것은 재미있는 도전입니다. 더 많은 언어를 사용하기가 점점 어려워지고 있지만이 바이트가 많으면 아마 한 가지 더 할 수 있습니다.

2D 언어를 무료로 사용합니다. 사이에 문자 참고 [ ]@-[ ]e<라인이 탭입니다. 또한 \nTRANSCRIPT가 작동 하려면 줄 끝 이 필요합니다 .

전주곡 (작업 1 / 고양이)

(
      )?(!?)

?(!?),[.,]BF에서 직접 번역 한 것입니다 . Prelude ()루프는 BF []루프 처럼 작동 하므로 (가장 왼쪽 열 )에서 코어 프로그램 이전 까지 모든 것이 실행되지 않습니다.

Prelude의 구문 규칙은 괄호를 일치시켜야하며 (왼쪽에서 오른쪽으로 열을 읽음) 열당 하나의 괄호 만있을 수 있습니다. 그 외에는 매우 쉬운 언어입니다.

Python 인터프리터를 사용중인 경우 NUMERIC_OUTPUT로 설정되어 있는지 확인하십시오 False.

스크립트 작성 (작업 2 / Hello world)

Tr is here.
>Tr, Hello, World!
>X Tr

TRANSCRIPT는 대화 형 소설을 기반으로 한 주제별 솔란입니다. TRANSCRIPT가 인식하지 못하는 라인은 무시되므로 쉽게 맞출 수 있습니다.

Tr is here.Tr문자열 변수를 선언 하고 두 번째 줄은 변수의 내용을로 설정합니다 Hello, World!. 그런 다음 X Tr( X검사 용) 문자열을 출력합니다.

TRANSCRIPT는 적응하기가 매우 쉽지만 매우 장황한 언어이므로 가장 어려운 문제를 해결했습니다.

분열 (작업 3 / 생일 메시지)

R"Happy Birthday, "[?S"!"*
                   \!/

첫 번째 부분을 인쇄하고 입력을 작은 2D 루프로 분류 한 후 후행 느낌표를 출력합니다. 이 R표시는 원자가 여기서 오른쪽으로 움직이기 시작한다는 것을 나타냅니다.이 프로그램은 어디에서나 이동할 수 있기 때문에 유용합니다.

레일 (작업 4 / 탭)

$'main'
 \@-[I love tabs!]o#
  \ >qi---@
  @-[ ]e<
         -[I hate spaces!]o#

Fission과 마찬가지로 Rail은 2D 언어로 어디에서나 이동할 수있는 장점이 있습니다. 실행은 기능 $의 시작부터 main남동쪽으로 향합니다.

먼저 \s를 아래로 향하고 에서 좌회전하여 -쳐서 [<tab>]탭을 누르 십시오. e<그런 다음 EOF를 기준으로 분기합니다. EOF 인 경우 "I hate spaces!"중단하기 전에 아래로 향하고 인쇄 하고 그렇지 않으면 위로 향합니다. 위로 향한 경우 다음 문자를 읽고 탭과 비교하여 다시 한 번 분기합니다. 탭이 있으면 "I love tabs!"중지하기 전에 위로 향하고 인쇄하면 중지하고 입력 루프를 계속하십시오.

이 프로그램은 꽤 비싸지 만, TRANSCRIPT가 Hello World를 채택한 이래로 Rail을 선택하기가 쉽지 않았습니다.

> <> (작업 6 / 오름차순 입력)

"1\"#      \""" "" "


>0[0>i:0(?v:{)?v0n;
       ;n1< .95<


        .91<

그렇지 않으면 1엄격하게 오름차순으로 인쇄 합니다 0.

> <>는 또 다른 2D 언어이며 실행은 왼쪽 위에서 시작합니다. "..."내부 문자를 한 번에 하나씩 밀어주는 문자열 모드입니다. 첫 번째 문자열을 누른 후에는 #IP를 왼쪽으로 반영하고 더 많은 문자열을 밀고 치기 전에 (> <>는 환상적 임) \, 우리를 위쪽으로 반사시키는 거울입니다.

프로그램의 맨 아래 에는 핵심 프로그램이있는 곳으로 .91<순간 이동합니다 (9, 1). 이렇게 0[하면 문자열에서 모든 정크가 제거 0되고 마지막 문자 읽기를 나타 내기 위해 0을 푸시 한 다음 한 번에 하나씩 문자를 읽는 것이므로 여전히 오름차순입니다.

순간 이동 대신 핵심 프로그램을 아래로 이동하는 것이 더 나을 수도 있지만 나중에 필요한 경우 나중에 처리하겠습니다.

Befunge (작업 9 / 추가)

"1\"# &&+.@

여기 에서 찾은 통역사와 함께 테스트했습니다 . 이것은 쓸모없는 줄을 밀고 #공간을 뛰어 넘기 시작하는 매우 간단한 프로그램 입니다. 그 후 그것은 단지 핵심 프로그램 &&+.@입니다.

미로 (작업 10 / Divmod by 7)

"1
 =
 '
 <
""'("']
 ?
 :_7/!\_7%!@

편리 '하고 "미로에서 걷기 경로처럼 행동 미로 NOP를이다. 지저분한 탐색은 건너 뛰지 만 기본적으로 ?핵심 프로그램의 시작 인을 누르기 전에 계속 돌아 다니고 돌아 다니는 많은 것들이 있습니다.

Prelude를 설명하기 위해 프로그램이 완전히 플러시되지 않습니다 (예 : ?Prelude에서 입력 읽기).

파이썬 2 (태스크 14 / 16 진수)

"1\"# &&+.@\""" "" "
#=
''''
xxx
xxx''';print hex(
input())#xxx
'''
xxx
xxx'''#";

xxx들 여러 문자열이나 주석으로 주석 관련이없는 부분을 나타냅니다. 그 사이 print hex(input())에는 핵심 프로그램이 있습니다. 이것은 Leading과 함께 출력 0x되지만, 괜찮다고 가정합니다 (그렇지 않으면 쉽게 해결할 수 있습니다).

첫 번째 줄은 문자열 "1\"# &&+.@\""다음에 2가옵니다 " ". 이 세 문자열은 파서에 의해 연결되어 사용되지 않은 채로 남습니다 (이 첫 번째 줄은 나중에 Ruby와 Julia에서도 비슷하게 작동합니다).

GolfScript (작업 15 / 해밍 무게)

"1\"# &&+.@\""" "" "
#=
''''
<<s
""'("']0=~2base{+}*}

첫 번째 줄은 세 개의 문자열을 누르고 두 번째 줄은 주석입니다. ''''두 개의 문자열을 더 누른 다음 <<두 개의 비교를 수행합니다 ( s무시 됨). 마지막으로 ""'("'또 다른 두 문자열을 푸시합니다.

이 모든 쓰레기는 배열에 싸서 ]0=처음에 스택에 입력 된 첫 번째 요소 ( )를 가져 와서 제거됩니다 . 그런 다음로 입력을 평가하고 ~이진수로 변환 2base한 다음 비트를와 합산합니다 {+}*. 다음 }은 타의 추종을 불허하며 나머지 프로그램을 주석 처리합니다.

줄리아 (태스크 16, 피보나치)

"1\"# &&+.@\""" "" "
#=
xxx
xxx=#print(([1 1;1 0]^int(readline()))[1,2])
#=
xxx
xxx=#.91<0#xxx

#=여러 줄 주석을 시작하고 여러 줄 주석을 =#끝냅니다. 핵심 프로그램은 행렬 지수를 사용하여 피보나치 수 ( Rosetta 에서 가져온)를 계산 합니다.

루비 (작업 17 / ASCII 프레임)

"1\"# &&+.@\""" "" "
#=
''''
<<s
xxx
s
l=gets
a='+-'+?-*~/$/+'-+'
puts a+'
| %s |
'%l+a#xxx

이 프로그램은 입력이 후행 줄 바꿈으로 끝나지 않는다고 가정합니다.

우리는 쓸모없는 문자열, 주석, 또 다른 쓸모없는 문자열과 대부분의 프로그램을 주석 처리하는 heredoc이 있습니다. 그 후에 핵심 프로그램이 있고 한 줄 #주석이 이어집니다 .

CJam (태스크 19 / 다이아몬드)

"1\"# &&+.@\""" "" "
#=
''''
<<s
""'("xxx
"
R"xxx"[?S"!"*"
xxx
xxx"ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>"xxx
xxx
xxx";

첫 번째 줄의 끝에있는 두 개의 공백 문자열은 CJam을 만족시키는 것 #=입니다. 두 개의 이항 연산자 이기 때문 입니다. 나는 이것에 대해 너무 자세하게 설명하지는 않지만 기본적으로 핵심 프로그램은 단순한 혼란입니다.

ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>

사이.

GolfScript와 CJam의 주요 차이점은 CJam에서 작은 따옴표 '는 문자열을 시작하고 끝내지 않고 대신 다음 문자를 스택으로 푸시한다는 것입니다. 이것은 CJam에서

'("'

a ("누르면 문자열이 시작됩니다 (첫 번째 문자는 '), 위는 GolfScript의 단순한 단일 문자열입니다.

온라인으로 사용해보십시오 . Prelude를 설명 1>하는 대신 사용됩니다 (.


여기 12 개 언어, 373 바이트를 . 일부 작업이 이동하고 TRANSCRIPT가 제거되어 (레일이 너무 비싸게 됨) 구성표 (치킨)가 추가되었습니다. 주요 게시물을 업데이트하는 데 시간이 오래 걸리기 때문에 이것이 업데이트 될 골프장입니다.

"1\"09!#.&&+.@"" "" "#|"
#=
''''
<<s
11]0=~2base{+}*}
 ?
 :_7/!\_7%!@
"
R"Happy Birthday, "[?S"!"*"
>0[0>i:0(?v:{)?v0n;\!/
$'main';n1< .95<
(-[Hello, World!]o#''';print(input()in input());'''"]];ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>"=#print(([1 1;1 0]^int(readline()))[1,2])#=)?(!?)
s
l=gets
a='+-'+?-*~/$/+'-+'
puts a+'
| %s |
'%l+a# =##'''#";e# |#(print(format"~x"(eval(read))))

종료되지 않은 여러 줄 주석이 STDERR에 오류를 발생시키기 때문에 Julia에 대해 몇 바이트를 절약 할 수 있습니다.


답변

7 개 8 9 10 언어 398 431 447 507 바이트

이것은 아마도 현재 솔루션에 가장 적합한 것입니다.

#if      + 0+0/*^",v  +- '[.,][[" ,yadhtrib yppaH"l?!;offf4+ + +0.0 +aa<*/
a=0--0;b=input();print(sorted(set(b))==list(b));[[""""                 ^ <
print("Hello, World!")--[[vv? +<
#endif/*  >.!0 + +1ffr"!"~< */
#include<stdio.h>/*>:1 +?!^>i:1^*/
int main(){int a=1,b=1,c,i;scanf("%d",&i);if(1//**/1==2
){printf("%x",/*>&:7/.7%.@*/i);}else{for(;--i-1>0;a=b,b=c)c=a +b;printf("%d",b);}}/*]]--"""]];#@;_J + + \+*\-hhlz \+s[\|dzd\|)J "` + +,*.]]]*/SSSTNSSNSNSTNTTTTTSSSTNSNSTNTTTTTTSSTNTTSNSSNNSSSNTTTTNSTNNNN

마지막 줄에는 SE가 먹지 않도록 인코딩 된 공백 코드가 있습니다. 코드를 실행하려면 S공백, T탭 및 줄 N바꿈으로 모두 바꿉니다.

C89, 과제 16

다음은 컴파일러가 보는 것입니다.

int main(){int a=1,b=1,c,i;scanf("%d",&i);if(1/ 1==2
){printf("%x",i);}else{for(;--i-1>0;a=b,b=c)c=a+b;printf("%d",b);}}

그 밖의 모든 내용은 주석 또는 내부로 제거됩니다 #if 0.

C ++, 작업 14

C89와 C ++를 구별하기 위해 여기서 도난당한 트릭을 사용했습니다 .

int main(){int a=1,b=1,c,i;scanf("%d",&i);if(1
){printf("%x",i);}else{for(;--i-1>0;a=b,b=c)c=a+b;printf("%d",b);}}

루아, 과제 2

기본 구조는 다음과 같습니다.

#comment
a=0--comment
print("Hello, World!")--[[
... multiline comment ...
]]--comment

Brainfuck, 작업 1

나는 무한 루프 나 길 .,을 찾지 않아야했습니다 . Lua의 여러 줄 주석도 BF 주석의 두 배입니다. 처음 2자를 제외한 모든 것은 큰 NOP 루프입니다.

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

파이썬, 작업 6

다시 말하지만, 언어 별 기능을 사용하여 다른 코드를 NOP하거나 주석 처리하고 있습니다.

#comment
a=0--0;b=input();print(sorted(b)==list(b));[["""
... multiline string ...
"""]];#comment

피스, 과제 17

Pyth는 이것에 좋습니다. 오류시 자동 종료# 되는 while True:루프 로 첫 번째 를 사용합니다 . 그래서 나는 대부분의 코드를 문자열로 만들고 ( 루프를 일찍 끝내는 것을 피하기 위해 ) 루프를 끝내고 파이썬 주석에 의해 생성 된 다른 코드를 종료하고 작업을 수행합니다. 비어 있지 않은 모든 문자열이로 바뀌 었 으므로 여전히 기능적으로 동일합니다.;" string "

#if      + 0+0/*^" string " ,yadhtrib yppaH" string """" string "Hello, World!" string "!"  string "%d"  string "%x" string "%d" string """]];#@;_J + + \+*\-hhlz \+s[\|dzd\|)J " string

> <>, 작업 3

이것은 매우 흥미 롭습니다. 장애물을 피하기 위해 필요한 곳에서 점프를 사용하여 코드에서 실행이 바운스됩니다. 관련 부품 :

#                  v            " ,yadhtrib yppaH"l?!;offf4+ + +0.0 +aa<*/
                   i                                                   ^ <
                   !      vv? +<
          >.!0 + +1ffr"!"~<
                   >:1 +?!^>i:1^

별이 빛나는 임무 9

여기서 나는 “언어를 제외한 모든 문자를 버리기”시작했다. 다른 것이 제거되면 다음과 같습니다.

      + +*,  + '., , + + +. +*                  ,  +*  . + + *.* +*  ,,,,**,*..*, +,* + + +* + ` + +,*.*

코드는 코드의 시작과 끝을 사용하여 힘든 시간을 피하기 위해 점프와 함께 대부분의 구두점을 건너 뜁니다. 코드는 기능적으로

      + +*,  + + +,*.*

Befunge-98, 작업 10

> <>와 유사하게 작동합니다. 운 좋게도, #<>의 ​​미러이고 Befunge의 건너 뛰기이므로 다른 동작을 구현할 수 있습니다. 또한 0/0 == 0.

#if      + 0+0/*^
                >&:7/.7%.@

공백 , 작업 13

이것이 제가 마지막으로 맞았던 것입니다. 처음 몇 줄은 “일반”코드의 공백과 줄 바꿈 만 포함하므로 스택에 0을 밀어 넣습니다. 코드는 인코딩됩니다. S공백, T탭 및 줄 N바꿈으로 모두 대체하십시오 .

SSSSSSSSSSSSSSSN
SSSSSSSSSSSSSSSSSSN
SSN
SSSSSN
SN
SSN
SSSSSSSSSSSTN
SSN
SN
STN
TTTTTSSSTN
SN
STN
TTTTTTSSTN
TTSN
SSN
N
SSSN
TTTTN
STN
N
N

답변

17 가지 버전의 Pip, 383 바이트 (잘못된)

이 질문은 샌드 박스로 작성되었지만 언어 Pip 의 모든 개정판을 빗질 하고 17 개를 사용하여 폴리 글롯을 생각해 냈습니다. 슬프게도, 같은 언어의 버전은 현재 챌린지 규칙에 의해 허용되지 않지만 Dennis의 허락과 면책 조항으로 작업 내용을 게시하고 있습니다.

원시 코드

I!ga:0m@0:0v:uIN[(oTM0,0i)EN1N1Y1RCkw(hR`1.+0``&2o`)@>3@AB0`u`rZ4AB6({a}V7)BN8AZ9@m]Iv<2W##YqlPByc:((J['.'@]X4)X4RL3)Jnc.:n.RVcc:cRL4|0Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}m:'+.'-X#a+2.'+.n."| "Iv=5La{i+:oSio}j:ak:bPv=11?a>1&0INa%(2,a)[((J_M ZRVl)|0)Jnl?lJnlcJnd.n.RVdm.a.RVmih:$+TBa({j@aEQk}FI0,#a).saTB16a>b?abh=1ua//7.s.a%7a+bbINa"Happy Birthday, ".a.'!"Hello, World!"]@v

전략

Pip에서 소문자는 변수입니다. 대문자는 더 복잡합니다. 연산자 나 변수가 될 수있는 최대 2 개의 문자로 나뉩니다. 대문자 토큰이 변수 또는 연산자로 구체적으로 정의되지 않은 경우, 정의되지 않은 변수 인 것으로 가정되며 nil로 평가됩니다.

따라서 두 버전의 Pip을 구별하려면 두 버전 중 최신 버전에 추가 된 변수 또는 알파벳 연산자를 찾아야합니다. 이전 버전에서는 대신 0이됩니다. 이 코드 v:uIN[...]는 테스트하려는 각 버전에 대한 이러한 검사 중 하나를 포함하는 큰 목록을 작성하고 해당 목록에 몇 개의 unil이 있는지 ( 변수는 nil로 명시 적으로 초기화 됨) 확인하고 숫자를 v( “version”에) 저장합니다. .

다른 계산이 끝나면 도전 과제에서 17 가지 작업의 결과를 계산하고 v이것이 어떤 버전인지에 따라 하나를 선택하는 데 사용 되는 또 다른 큰 목록 이 있습니다.

버전 및 작업

0.15.09.04

진단 : (oTM0,0i)( 문자열의 각 끝에서 0 문자를 자르면 빈 문자열이 대신 빈 문자열로 인덱싱되면 nil 이 발생하는 Tri M연산자 의 버그가 수정 되었습니다)

작업 18 : Iv<2W##YqlPBy(설정 : v2보다 작은 경우 stdin에서 모든 행을 읽음 ) 다음에 ((J_M ZRVl)|0)Jn(행 목록을 역전하고, 전치하고, 문자열로 다시 조인)

0.15.08.06

진단 : EN1( EN운송 연산자 추가 )

작업 1 : Iv<2W##YqlPBy다음에 (상기와 같은 설정 코드) l?lJnl(바꿈 조인)

0.15.08.03

진단 : 1N1( 운영자의 N짧은 버전으로 추가됨 IN)

작업 20 : c:((J['.'@]X4)X4RL3)Jnc.:n.RVcc:cRL4|0(설정 : 체스 판의 상반부와 하반부를 포함하는 목록을 생성하고에 저장 c) 다음에 cJn(개행에 참여)

0.15.08.01

진단 : Y1(추가 된 Y포크 연산자)

작업 19 : Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}(설정 : v3 인 경우 , 다이아몬드의 상반신을 쌓아 올린 후 d) 다음에 d.n.RVd(하반신을 뒤집어 줄 바꿈)

0.15.06.19

진단 : RCk( RAndom CHoice 운영자 추가 )

작업 17 : m:'+.'-X#a+2.'+.n."| "(설정 : 빌드 +----+\n| 문자열 입력 m) 다음에 m.a.RVm(랩핑 입력 m및 반전 m)

0.15.06.12

진단 : k(사전 초기화 된 k변수 ", "; 이전에는 정의되지 않았으므로 nil)

작업 16 : Iv=5La{i+:oSio}( v5 인 경우 피보나치 수 생성 i) 및i

0.15.06.08 (참고 : 버전 커밋은 다음 커밋까지 변경되지 않았습니다)

진단 : w(사전 초기화 된 w변수를로 `\s+`)

작업 15 : h:$+TBa(입력을 이진수와 합계로 변환하고 h나중에 작업 12 에 대한 결과 저장 )

0.15.05.29

특수 증상: (hR`1.+0``&2o`)@>3@AB0

이 버전 &은 정규식 대체 (sed에서 영감을 얻음)에서 일치하는 전체 문자열의 대체 패턴으로 추가 되었습니다. 위의 코드는 h( 100)를 사용하여 대체합니다 `&2o`(예 : "1002o"최신 버전이지만 단순히 "&2o"이전 버전). 그런 다음 모든 (3 후 문자 조각 "2o"최신 버전에서, ""그 문자열로 인덱스 이전 버전에서) 및 시도. 빈 문자열로 인덱싱하면 nil이 발생합니다.

작업 7 : j:ak:b(설정 : 복사 지역 바르 a, b글로벌 바르로는 j, k그들이 함수 내에서 사용할 수 있습니다 있도록) 다음 ({j@aEQk}FI0,#a).s(의 인덱스에 대한 필터 a해당 문자가 동일 곳 b, 공간에 가입)

0.15.05.26

진단 : `u`(추가 된 패턴 유형; 이전 버전에서 백틱은 인식 할 수없는 문자로 무시되며 표현식 u은, nil로 평가됨 )

작업 14 : aTB16( To Base 16 로 변환 )

0.15.05.24

진단 : rZ4( r참조 될 때마다 0과 1 사이의 임의의 값을 반환하는 특수 변수가 생성되었습니다 . 이전에 정의되지 않았으므로 표현식은 nil로 평가됨)

과제 13 : a>b?ab(삼항 표현)

0.15.05.12

진단 : rZ4( ZIP 운영자 추가 )

작업 12 : h=1(작업 15의 비트 합은 1이어야 함)

0.15.05.11

진단 : AB6( AB솔 루트 값 연산자 추가 )

작업 11 : Pv=11?a>1&0INa%(2,a)[...]@v( v11 인 1경우 입력이 1보다 크고 작은 숫자가 입력을 정확하게 나눕니다 0. 그렇지 않은 경우 v다른 항목이있는 경우 v출력 할 항목을 결정하기 위해 목록의 색인으로 사용 )

0.15.05.02

진단 : ({a}V7)(추가 된 V연산자; V정의되지 않은 경우 인수 nil 및 7을 {a}첫 번째 인수를 리턴 하는 함수 로 보냄)

작업 10 : a//7.s.a%7(입력은 7로 나누어지고 모드 7은 공백으로 분리됨)

0.15.04.26

진단 : BN8( BItwise Negation operator 추가 )

과제 9 : a+b

0.15.04.23

진단 : AZ( AZ대문자로 사전 초기화 된 변수)

작업 5 : bINa( IN발생 횟수 제공)

0.15.04.20

진단 : m@0:0다음에9@m

m변수 이것이 커미트에서 1000 preinitialized되는 @오퍼레이터 lvalues를 돌려 고정시켰다 이전 m@0에는 경고를 할당하고 아무 작업도 수행하지 않았습니다. 따라서 첫 번째 명령문은 버그 수정 후로 설정 m되며 0000이는에 대한 올바른 색인입니다 9. pre-bugfix, mstays 1000, 이것은 유효한 인덱스가 아닙니다. (지표는 아직 주기적이지 않았습니다.)

작업 3 : "Happy Birthday, ".a.'!

0.15.04.18

이전의 모든 진단으로 인해 진단 목록에 nil이 추가됩니다.

작업 2 : "Hello, World!"


다른 코드의 대부분은 다양한 버전에서 오류를 피하기 위해 조정해야합니다. 이 게시물은 이미 너무 길어서 내가 설명하지 않은 내용에 대해 알고 싶으면 난해한 대화방에 대해 토론 해 봅시다 .


답변

6 개 언어, 226 바이트 ( \x1b허용 되는 방식에 따라 229 개 )

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;#<?die("\x1bc".max($argv[1],$argv[2]));/*
$a=['Hello','World'];//;printf"%s, %s!
",$a[0]||'Happy Birthday',$a[1]||pop;#";$a="\
#";alert(prompt().match("\t")?"I hate tabs!":"I love spaces!");/\]/

따라서, 나는 최선의 언어 선택을하지 않았다고 생각하며 이것이 특히 경쟁적이지 않다고 생각하지만 그럼에도 불구하고 이것은 흥미로운 도전을 발견했습니다! 전반적으로 많은 과제가 완료되지는 않았지만 공백이나 비슷한 문제에 도전 할 수는 있지만 이것이 지금까지 내가 얻은 것입니다.


1. 브레인

[+.]>>+[>,]<[<]>>[.>]>[<.[],[][,],,[],[].]

http://copy.sh/brainfuck/http://brainfuck.tk/ 에서 테스트되었습니다 .

무시 된 문자를 모두 제거한 후에는 위의 프로그램 만 남았습니다.이 언어는 다른 언어의 기호 사용을 우회하기 위해 빈 루프가 추가 된 예제 고양이 프로그램입니다.

2. 루비

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;
$a=['Hello','World'];//;printf"%s, %s!
",$a[0]||'Happy Birthday',$a[1]||pop;

용법:

ruby cluster

위의 모든 주석을 제거한 후의 코드입니다. 우리는 우리가 포함하는 배열 생성의 비 펀지-93 및 브레인 퍽 코드를 포함하는 일부 일반 식을 정의하는 바와 같이, 제 1 라인은 루비 완전히 쓸모 Hello하고 World그리고 사용하여 인쇄 printf(추가하는 ,등을 !).

3. 펄

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;
$a=['Hello','World'];//;printf"%s, %s!
",$a[0]||'Happy Birthday',$a[1]||pop;

용법:

perl cluster <name>

루비와 매우 유사한 것을 제외하고 우리가 배열 참조를 저장하고 이후 $a우리가 접근하려고 할 때, $a[0]우리는 도전 3의 텍스트로 교체 할 수 있도록이 비어 Happy Birthdaypop(이 프로그램 명령 줄 프로그램의 마지막 인수 ).

4. 자바 스크립트

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;
$a=['Hello','World'];
",$a[0]||'Happy Birthday',$a[1]||pop;#";$a="\
#";alert(prompt().match("\t")?"I hate tabs!":"I love spaces!");/\]/

사용법 : 브라우저 콘솔에 붙여 넣고 실행하십시오.

루비 펄 동일 첫번째 라인 본질적 쓸모 생성 RegExp개체, 우리는 다음에서 쓸모없는 배열을 저장 $a하고 인스턴스화 개의 불필요한 문자열 번 루비 / 펄 코드를 포함하고, 개행을 함유 한과를 #그러면, prompt()입력 및 alert()결과는 예상 우리는 대부분의 인간들에 의해 도전을 RegExp받습니다.

9. 펀지 -93

/&&#[+.#]@

http://www.quirkster.com/iano/js/befunge.html에서 테스트되었습니다 .

내가 이해 한대로 /스택을 나누고 NaN위 사이트에서 푸시 하는 것 외에는 아무런 영향을 미치지 않는 결과를 푸시하고 &정수 입력을 요청하므로 챌린지 9에서 필요한 두 숫자를 스택으로 읽 #습니다. [이것은 brainfuck에 대한 +다음 스택에 상위 2 개의 숫자를 더한 다음 다시 brainfuck를 위해 .출력 #]하고 @종료합니다.

13. PHP (Bash에서 실행)

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;#<?die("\x1bc".max($argv[1],$argv[2]));

용법:

php cluster <x> <y>

PHP에서 <?태그에 포함되지 않은 것은 그대로 출력되므로 Befunge-93 및 brainfuck 코드가 die()출력되므로 코드에서 바로 화면을 출력 하고 처음 두 인수 중 하나를 명확하게 출력합니다 ( \x1bc) max().


답변

6 개 언어, 450 404 바이트

bash, brainfuck, C, gawk4, JavaScript 및 Minimal-2D

/*\t/#[R,+/D
/\t/ # UL.-L<script>var s=prompt().split(' ');alert(+s.pop()+ +s.pop())</script>
sed "s/^\(.*\)$/Happy Birthday, &!/;q"&&0
/\t/#*/
#define func
func main(){puts("Hello, World!");}
//{split($0,b,_);for(i in b)a[NR][i]=b[i++]}END{for(;j++<i;print"")for(k=NR;k;)printf a[k--][j]}
#//]++++++++[>+>+>++++++>++++++++<<<<-]>>++>--<<[>>>>>+++[<++++[<<....>....>-]<<<.>>>>-]<<<[>>+<<-]<[[>+<-]<]>>-]

업데이트 : 약간 골프를 쳤다. 무엇을 추가해야할지 잘 모르겠으며, 경쟁 멤버가 다른 작업에 언어를 사용하는 방법에 대해 어떻게 생각하는지 잘 모르겠습니다. brainfuck 알고리즘을 설명하려고합니다.

글쎄요, 이것이 나의 최초의 폴리 글롯 경험 이었으므로 처음부터 모든 것을 배워야했습니다. awk로 시작하는 것은 내가 생각하기에 가장 현명한 아이디어가 아니었다. 완료된 작업의 수가 관련되어 있기 때문에 가장 쉬운 작업부터 시작했습니다. 그것이 현명한 움직임인지 확실하지 않습니다. 이 여섯 가지를 함께 사용하는 데 어려움이 있었기 때문에 골프는 그리 많지 않지만 짧게 유지하기 위해 최선을 다했습니다.

다음은 언어와 알파벳순으로 수행하는 작업입니다. 더 자세히 테스트 할 수있는 쉬운 방법을 보여 드리겠습니다. 이 중 일부는 버전에 따라 다를 수 있으므로 사용한 도구의 버전 번호를 알려 드리겠습니다.

배쉬, 작업 3

글쎄, 내가 sed를 사용했다는 것은 명백하다. 나는 어떻게 든 sed 스크립트를 넣으려고했지만 제대로 작동하지 않아 bash 경로를 갔다. 내가 그것을 먹는 방식으로, 그것은 C 주석 안에 있으며 awk는 그것을 평가합니다 False.

sed --version 준다 sed (GNU sed) 4.2.2

bash --version 준다 GNU bash, Version 4.3.30(1)-release (x86_64-pc-linux-gnu)

sed 부분은

sed "s/^\(.*\)$/Happy Birthday, &!/;q"

입력을 그룹화하여 새 문자열에 붙여 넣고 결과를 인쇄합니다. 꽤 일반적인 것들.

brainfuck, 작업 20

글쎄 이것은 항상 추측하기가 꽤 쉽습니다. #//C와 awk로 시작하는 줄 은 무시됩니다. 아니면 적어도 그 뒤에 쓰레기와 함께 살 수 있습니다.

bf 준다 bf - a Brainfuck interpreter version 20041219

이것은 압축 코드입니다. 첫 번째 줄은 다른 언어의 쓰레기 일뿐입니다.

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

나는 그것이 어떻게 작동하는지 설명하려고 노력할 것이다

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

이것은 테이프를 정렬하고 이것에 대한 포인터

0 8 10 46 64 C2 C1
  ^

8을 유지하는 셀은 다음 루프의 전역 카운터이며
동일한 행이 3 회 인쇄 된 횟수입니다.

[>>>>>+++

C1같은 줄의 수를 3으로 설정

    [<++++

한 줄에있는 C2....@@@@” 의 수를 4로 설정

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

전체 라인의 감소하는 인쇄 C2과정에서을
C2그것이 줄 바꿈 및 감소를 인쇄 제로입니다 C1.

경우 C1IS는 마법이 발생 제로

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

46은 64
10 뒤로 이동 하고 글로벌 카운터는 1 오른쪽으로 이동

>>-]

프로그램이 종료되는 0이면 전역 카운터가 감소 합니다.

C, 과제 2

“Hello, World!”를 인쇄하여 C의 마지막 작은 능력을 모두 소모합니다. 누군가가 일을해야 했어

gcc --version 준다 gcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2

실제 C 코드

#define func
func main(){puts("Hello, World!");}
#

#define func이와 AWK가 좋아하는 것입니다. 이것이 awk 함수라고 생각합니다. func의 약자는 개괄적 인 기능입니다.

gawk4, 작업 18

나는 여기에 거의 모든 것에 awk를 사용했기 때문에 이것이 있어야한다고 결정했습니다.

awk --version 준다 GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)

awk는 이것을 본다

/*\t/
/\t/
sed "s/^\(.*\)$/Happy Birthday, &!/;q"&&0
/\t/
func main(){puts("Hello, World!");}
//{split($0,b,_);for(i in b)a[NR][i]=b[i++]}END{for(;j++<i;print"")for(k=NR;k;)printf a[k--][j]}
#

를 포함한 검색 패턴은로 \t평가됩니다 false. 입력 할 수 없다고 생각하기 때문에 여기에서 탭을 선택했습니다. sed로 평가됩니다 false. "the string"&&0거짓으로 평가됩니다. 기능은 괜찮습니다. 빈 패턴이 일치하면 프로그램이 실행되며 입력에 사용됩니다.

이거 야

입력

탄성
팔리
ucfit
srigs

산출

supe
rcal
이프 라
길리
stic

모든 입력 라인의 길이가 같아야합니다. 공백을 채워서 채우십시오.

자바 스크립트, 작업 9

이것이 너무 쉬웠 기 때문에 이것이 합법적인지 확실하지 않습니다. 프로그램 파일에 html 엔딩을 제공하고 브라우저에서 파일을 열면 (Firefox 40.0.3 및 chrome 45.0.2454.85 사용) 입력하라는 메시지가 표시됩니다. 공백으로 구분 된 두 개의 숫자를 입력해야하며 그 숫자의 합계를 알려줍니다.

<script>var s=prompt().split(' ');alert(+s.pop()+ +s.pop())</script>

최소 2D , 작업 1

이것은 주석 행에 맞추기가 매우 쉽습니다. 파이썬으로 실행 하는 인터프리터를 사용 하여 이것을 테스트했습니다. 입력을 출력으로 인쇄합니다. 프로그램은 다음과 같습니다

R,+/D
UL.-L

RUDL은 오른쪽, 위, 아래 및 왼쪽입니다. 따라서 올바르게 시작하고 stdin에서 메모리로 문자를 읽고 추가합니다. 메모리 값이 0이면 슬래시는 다음 명령을 건너 뜁니다.이를 끝내기위한 것입니다. 값이 -1 인 문자를 읽으면 입력이 종료 된 것입니다. 따라서 -1을 읽으면 D를 건너 뛰고 종료됩니다. 다른 것을 읽으면 왼쪽으로 내려가 1을 메모리에 다시 추가하고 문자를 stdout에 인쇄합니다. 그런 다음 왼쪽으로 이동하여 다시 시작합니다.

테스팅

면책 조항 : 귀하의 시스템 손상으로 인한 책임은 없습니다.

이것은 bash & co, gawk (다차원 배열을 사용하기 때문에 버전 4 이상), gcc, python, bf를 brainfuck 인터프리터 및 Firefox로 설치했다고 가정합니다.

쉽게 만들려면 프로그램 소스를이라는 파일에 복사하십시오 cluster.html. bash 태스크를 위해 해당 파일을 실행 가능하게하십시오. Minimal-2d대한 인터프리터를 복사 minimal2D.py하여 동일한 디렉토리에 이름이 지정된 파일에 붙여 넣으십시오 . 그런 다음 다음 스크립트를 스크립트 파일에 복사하여 붙여 넣은 다음 동일한 디렉토리에 넣고 실행 가능하게 만들고 실행하십시오. 이것을 읽으면 아마도 많은 설명이 필요하지 않으며 어쨌든 실행되도록 할 것입니다.

#!/bin/bash
# Task  3: bash
echo "Dr. Hfuhruhurr" | ./cluster.html 2>/dev/null;echo
# Task 18: awk 
printf "elaic\nparli\nucfit\nsrigs\n" | awk -f cluster.html 2>/dev/null;echo
# Task  2: C
cp ./cluster.html ./cluster.c;gcc -w -o cluster cluster.c;./cluster;rm cluster cluster.c;echo
# Task  1: Minimal-2D
python minimal2D.py cluster.html <<<"This
has
to be
copied     !!!";echo
# Task 20: brainfuck
bf cluster.html;echo
# Task  9: JavaScript
firefox cluster.html 2>/dev/null
#google-chrome cluster.html 2>/dev/null

거기에는 테스트를 개별적으로 실행하는 명령도 있습니다.

즐기세요!


답변