귀하의 언어로 번역;


25

관련 : ; # 인터프리터 작성; # 코드 생성

;# -회오리 바람 안내

이것은 두 개의 명령이있는 간단한 언어입니다. 유일한 데이터 구조는 누산기이며 0으로 초기화됩니다.

  1. ; 누산기 증가

  2. #누산기 모듈로 127의 값을 계산하고 해당 ASCII 문자를 인쇄하십시오. 그런 다음 누산기를 0으로 재설정하십시오.

소스 코드에는 추가 문자 (인쇄 가능한 ASCII + 공백)가 포함될 수 있지만 주석으로 취급되며 프로그램 실행에는 영향을 미치지 않습니다.

도전

대부분의 컴퓨터에는 ;#사전 설치되어 있지 않으므로 ;#코드를 다른 언어로 변환 할 수있는 도구를 사용하는 것이 매우 유용합니다 . 이 과제에서이를 달성하기위한 프로그램을 작성해야합니다.

입력

;#인수 또는 STDIN을 통해 가져온 일부 소스 코드 이 소스 코드에는 ;또는 이외의 (코멘트) 문자가 포함될 수 있습니다 #.

산출

제출시와 동일한 언어로 작성된 코드는 실행시 원래 ;#코드 와 동일한 문자열을 인쇄 / 반환합니다 . 이 결과 코드는 대상 문자열 다음에 줄 바꿈 문자를 출력 할 수 있습니다.

노트

주의해야 할 사항은 백 슬래시를 인쇄하거나 따옴표를 인쇄하는 코드와 같은 이스케이프 시퀀스입니다. 또한 ;#언어의 키워드 나 명령처럼 보일 수있는 코드를 찾아보십시오.

추가 제한

모든 프로그램은 반드시 종료되어야합니다 (일반적으로 이것을 기본값으로 간주하지만 누군가는 그것에 대해 물었으므로 여기에 설명하겠습니다).

input: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
output (python): print(";#")
input: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
output (element): \'`

34
내 컴퓨터는 ;#사전 설치되어 제공됩니다 ...
programmer5000

1
다른 것? 왜?
caird coinheringaahing

프로그램이 실행을 중지해야합니까? 또한 실제 코드 다음에 아무 것도 인쇄 할 수 없습니까?
완전히 인간적인

2
@totallyhuman 나는 모든 프로그램이 결국 중단되어야한다고 말할 것입니다.
PhiNotPi

1
우리는 입력하지 않은 문자 (또는 문자)를 포함하는 테스트 케이스 얻을 수하십시오 ;또는 #?
streetster

답변:


7

파이썬 2 , 76 69 바이트

암호

입력은 따옴표로 묶습니다.

for y in input('print').split("#")[:-1]:print`chr(y.count(";")%127)`,

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

설명

출력의 첫 부분은 기본적으로를 사용하여 입력에 의해 수행됩니다 input('print'). 입력을 해시 태그로 나누고 마지막 요소를 버립니다. ord (y % 127) 의 표현을 인쇄합니다 . 여기서 y 는 세미콜론의 발생 횟수입니다. 우리는을 추가 ,이 줄 바꿈 인쇄되지 않는 것을 확인하기 위해 인쇄의 끝에서.

이것은 Hello, World!-program에 다음과 같은 파이썬 코드를 줄 것입니다 .

print'H' 'e' 'l' 'l' 'o' ',' ' ' 'W' 'o' 'r' 'l' 'd' '!'

온라인 으로 시도 할 수 있습니다 .


5

brainfuck , 126 바이트

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

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

;#출력이 65536자를 초과하면 TIO 구현에서 출력 프로그램이 실패 합니다. 또한 이 문제를 피하면서 130 바이트 버전 [+]대신 을 출력 합니다 <.

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

설명

+++[->+++++<]>[->++++>+++<<]        initialize tape with 60 and 45
,[                                  for each input byte:
  +<++++++[-<++++>>------<]         subtract 35 (#) from byte
  >[<]<<[                           if byte was #
         >>>>>[--<--.++>]           output + (43) a number of times equal to accumulator
         <+.-<.<<<<                 output . (46) and < (60)
  ]
  >[->>-<<]>>                       subtract 24 from what's left of byte
  [[-]<]                            check difference and clear if nonzero
  >[                                if byte was originally 59 (;)
   >>++++[-->]<[<]                  add 4 to accumulator cell, then subtract 2 if nonzero. Since BF cells are mod 256, this creates an accumulator mod 127.
  ]
,]

5

공백, 291 바이트

NSSTTNNSTNNSTNNSTTNNSSTSNSSNSNSTNTSTTTSSSTSSSTTNTSSTSNSNTSSSSNSSSTTSSSNTSSTNTSSSTNNSNTSNNSSSSSNSNNNSTSSNNSTSTNNSTSTNNSTSNNSTTNNSTSNNSTNNSTSTNNSTTNNSTNNSTNNSNTTNNSSSSTNNSTSSNNSTSNNSTTNNSTSNNSTSSNNSNTSNNSSTNSSSTSTSNTNSSNTNNSSSSNNSTNNSTNNSSNSSSTSSSSSNTNSSNTNNSSSTNNSTSNNSTSNNSSSNSSSTSSTNTNSSNTN

S를 공백으로, T를 탭으로, N을 줄 바꿈으로 바꿉니다.

공백에서 공백을 생성하는 것이 세상에서 가장 효율적인 것은 아닙니다. 모든 종류의 동적 코드를 생성하려면 비트 단위 연산이없는 언어에서 코드 크기가 폭발 할 수있는 상당한 비트 트위들 링이 필요합니다. 따라서이 프로그램은 소스 프로그램을 일대일로 변환하는 대신 스마트 한 작업을 시도하지 않습니다. 다음과 같이 분해됩니다.

early:
    call S
    call S
    call N
start:
    push  0
    dup
    ichr
    get
    push  35
    sub
    dup
    jz    hash
    push  24
    sub
    jz    semi
    jmp   start
hash:
    pop
    call SSS
    call TTT
    call TTT
    call T
    call N
    call T
    call S
    call TTT
    call N
    call S
    call S
    jmp   early
semi:
    call SSS
    call T
    call N
    call T
    call SSS
    jmp   start
N:
    push 10
    pchr
    ret
SSS:
    call S
    call S
S:
    push 32
    pchr
    ret
TTT:
    call T
    call T
T:
    push 9
    pchr
    ret

프로그램에서 생성 된 코드는 다음과 같습니다.

push  0
push  1
add
push  1
add
push  1
add
push  1
add
push  1
add
push  1
add
push  1
add
push  1
add
push  1
add
push  1
add
push  1
add
push  127
mod
pchr
push  0
push  1
add
...

나를 위해 작동하지 않습니다. Haskell로 작성된 원래 공백 인터프리터에서는 부호 비트를 숫자에서 생략 할 수 없으므로 "SSN"은 0을 푸시하는 올바른 방법이 아닙니다.
aschepler

공백 사양의 모호함과 원래 참조 인터프리터와 실제 사양의 차이로 인해 의도 된 동작이 무엇인지 판단하기가 어렵습니다. 원래 사이트에 나열된 몇 가지 예제 프로그램은 실제로 서명이 필요없는 동작을 필요로했으며, 더 많은 다른 구현에도 있습니다. 내 자신 구축하는 동안 나는이 문제로 여러 번 실행 WS JIT 컴파일러를 하고, 결국 나는 다른 구현과 호환성을 위해 함께 스틱하기로 결정
CensoredUsername

4

V , 19 20 28 바이트

버그 수정, #끝에 없는 경우 파산

버그 수정, 구현 mod 127

Í;û127}
éiA0Í#/0
ò/;
x

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

생성 된 코드 사용해보기

설명:

Í;û127}                            ' Delete runs of 127 `;`s (mod 127)
éi                                 ' Insert an `i` in front of input
  A<C-v><esc>0<esc>                ' Append <esc>0 to input
                   Í#/<C-v><C-v>0  ' Replace all `#` with `<C-v>0`
ò                                  ' Recursively
 /;                                ' Go to the next `;`
<C-a>                              ' Increment the next number come across

V에서는 삽입 모드에서을 사용하여 ASCII 문자를 코드로 삽입 할 수 있습니다 <C-v><Code>. V 코드는 모두를 #로 대체합니다 <C-v>0. 여기서 0은 의사 누산기입니다 #. 각각 #은 누산기를 0으로 재설정하여 1 개당 1 개씩 잘 작동합니다. 그런 다음 코드는 발견 된 각 세미콜론에 대해 증분을 수행합니다.이 번호는 찾은 다음 숫자를 증가시킵니다. 이는 다음 누산기입니다. 은 0명령어가 실패하지 않도록 마지막에 첨부되는 ;뒤에 오는 것없이 S #.

16 진 덤프 :

00000000: e969 4116 1b30 1bcd 232f 1616 300a f22f  .iA..0..#/..0../
00000010: 3b0a 7801                                ;.x.

3

05AB1E , 20 19 18 16 바이트

-1 덕분에 아드 난
-2 덕분에 carusocomputing
-2 덕분에 케빈 Cruijssen

'#¡¨vy';¢ƵQ%„çJJ

온라인으로 사용해보십시오! (실행 된 05AB1E 코드 출력 포함)

'#¡              # Split on #
   ¨             # remove the last element
    vy           # For each...
      ';¢        #   count the number of ;s
         ƵQ%     #   Mod by 127
            „çJ  #   Push çJ („çJ should work, but it doesn't for some reason)
               J # Join stack and output implicitly

';¢할 수있다 g, žy어떻게 든 일을 왜 단지 전체 단어를 철자가 따옴표로 둘러싸하지 않을 수 있습니다 (128)는 밀어?
Magic Octopus Urn

1
';¢이외의 문자가있는 경우를 사용해야 ;합니다. žy<와 동일합니다 127. 문자 중 하나가 따옴표 인 경우 따옴표로 묶은 단어를 인쇄하면 끊어집니다.
Riley

@carusocomputing 나는 당신을 핑하는 것을 잊었다 ...
Riley

1
@carusocomputing 및 Riley : ƵQ127 의 압축 버전입니다 .
Adnan

@Adnan 왜 / 어떻게?
매직 문어 Urn

2

파이썬 2 , 75 바이트

lambda s:"print"+`''.join(chr(x.count(';')%127)for x in s.split('#')[:-1])`

온라인으로 사용해보십시오! (번역 된 파이썬 코드 실행 결과 포함)

많은 바이트에 대한 ovs 덕분에!

설명

이 프로그램은 #을 번역합니다. 코드를 #s ( s.split('#')[:-1]) 로 나누고 각 청크 mod 127 ( x.count(';')%127for x in ...) 의 세미콜론 수를 세고 각각의 ASCII 문자 ( chr(...)) 로 변환하여 코드를 작성합니다 . 그런 다음이 목록을 연결 ( ''.join(...))하고 문자열 (백틱)의 Python 표현으로 변환하고 문자열 ( "print"+...) 을 인쇄하기위한 기본 Python 프로그램에 삽입 합니다.


2

젤리 ,  25 24  16 바이트

ṣ”#Ṗċ€”;%127;€”Ọ

동등한 젤리 코드를 인쇄하는 전체 프로그램 (모나 딕 링크로 혼합 유형 목록 목록을 반환합니다).

첫 번째 예는 온라인으로 사용해보십시오! 이 프로그램 을 생성 합니다 .

방법?

;s 사이 #의 각 런 에서 s를 카운트하여 각각의 모듈로 (127)를 취하고 각각의 뒤에 순서 명령, monadic atom에 캐스트를 추가합니다 .

Jelly는 암시 적으로 각 값을 STDOUT으로 파이프합니다 . 즉, 72Ọ101Ọ108Ọ108Ọ111Ọ44Ọ32Ọ119Ọ111Ọ114Ọ108Ọ100Ọ33Ọprint 와 같은 프로그램을 통해 실행됩니다 Hello, world!.

ṣ”#Ṗċ€”;%127;€”Ọ - Main link: list of characters
 ”#              - literal '#'
ṣ                - split the result at #s
   Ṗ             - pop (remove the last result, list of trailing non-# characters)
      ”;         - literal ';'
    ċ€           - count for €ach
        %127     - modulo 127 (vectorises)
              ”Ọ - literal 'Ọ' (Jelly's cast to ordinal monadic atom)
            ;€   - concatenate for €ach - making a list of lists like [[72,'Ọ],[101,'Ọ'],...]
                 - implicit print (this smashes, printing something like: 72Ọ101Ọ...)

입력에 대한 참고 사항 : Jelly는 문자열 형식을 Python 형식으로 가져옵니다. 빈 프로그램은 입력 할 수있는 "", 그리고 해시 전용 프로그램 "#", "##"등 다른 조작이 입력 포함 된 백 슬래시 및 따옴표를 위해 요구 될 수있다.


2

입체적으로 , (138) 137 바이트

+1/1+54@6:5+1/1+5@6/1+52@6:4/1+5@6:1/1+54@6:4/1+5@6:5+2/1+4@6(~-61/1=7&6+5/1+51=7?6{+3/1+5@6}:5+3/1+3=7?6{+52@6:5+1@6-1@6+1@6:5+2/1+4@6})

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

참고 : 교체해야합니다 &6으로 ?6&는 TIO 작업하기. &6그래도 언어 사양에 있습니다.

작동 원리

+1/1+54@6        Output 'R'
:5+1/1+5@6       Output '3'
/1+52@6          Output 'D'
:4/1+5@6         Output '1'
:1/1+54@6        Output 'R'
:4/1+5@6         Output '1'
:5+2/1+4@6       Output '+'
(                Loop indefinitely
  ~                Get next character
  -61/1=7&6        If input is -1 (EOF), exit program
  +5/1+51=7?6{     If input is `;`
    +3/1+5@6         Output '0'
  }                End if
  :5+3/1+3=7?6{   If input is '#'
    +52@6            Output '@'
    :5+1@6           Output '6'
    -1@6             Output '-'
    +1@6             Output '6'
    :5+2/1+4@6       Output '+'
  }                End if
)                End loop

출력 프로그램 :

R3D1R1           Set top face to 1
+00...           Add top face to notepad, aka increment notepad
@6               Output notepad as character
-6               Set notepad to 0
...

다른 이름으로 저장 을 많이 에서 인수를 제거하는 바이트를 @6, %6하고 -6. 암시 적으로 호출 될 때 이전에 아무 것도하지 않은 명령은 이제 메모장을 사용합니다. 그래서 @와 동일 @6, %동일하다 %6
MD XF

1

자바 스크립트 (ES6), 101 바이트

s=>`_=>'${s.replace(/[^#;]/g,``)}'.replace(/;*(#|$)/g,(l,c)=>c&&String.fromCharCode(~-l.length%127))`

입력 문자열이 주어지면 불필요한 문자를 모두 삭제 한 후 다음 함수의 소스를 반환합니다.

_=>'...'.replace(/;*(#|$)/g,(l,c)=>c&&String.fromCharCode(~-l.length%127))

어디 ...세정 나타내는 ;#소스를.


1

C, 98 96 99 98 97 바이트

C가 해석되지 않았기 때문에 +3 바이트 :(

c,a;f(){printf("f(){puts(\"");for(;~c;c=getchar())c==59?a++:c==35?a=!printf(&a):a;puts("\");}");}

다음으로 실행 :

echo ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#" | ./a.out

인쇄합니다 :

f(){puts("Hello, World!");}

2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#f(){puts(""");}는 유효하지 않은을 생성합니다 . "백 슬래시를 인쇄하거나 따옴표를 인쇄하는 코드와 같은 이스케이프 시퀀스는 찾아야합니다."
hvd

@ hvd 고정 ....
MD XF

1

젤리 , 26 바이트

”‘x
f”;L%127Ç;“Ọø”
ṣ”#Ç€ṙ-

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

그리고 여기 젤리 코드를 사용해보십시오!

ṣ”#Ç€ṙ-      Main link, input is a string of ";;;;;;#lala;;;;;;;;;#"
ṣ”#          Split input on char #
   ǀ        Call helper link 1 for each segment
     ṙ-      Rotate returns 1 to the right (SPLIT introduces an empty element which is moved up front)

f”;L%127Ç;“Ọø”  Helper link 1, determines the number of increments
f”;             Throw out all but semicolons
   L%127        Take the count mod 127
        Ç       Call helper 2
         ;“Ọø”  Add a Jelly link that prints characters and splits print statements

”‘x             Helper 2, receives the count of ;'s
”‘              Return the character ‘ (Jelly's increment command
  x             Once for each ; in the input

젤리 출력은 Ọø‘‘‘‘‘‘‘‘‘‘‘‘‘Ọø‘‘‘‘‘‘‘‘‘‘Ọøchr (13) + chr (10)


나를 혼란스럽게하는 사용하기 가장 좋은 예 (공백 만 인쇄).
Jonathan Allan

1
@JonathanAllan TIO에 대한 링크가있는 예제를 추가했습니다.
steenbergh

1

PHP, 72 바이트

for(;~$c=$argn[$i++];)echo[Z=>'$n++;',B=>'echo~$n=~chr($n%127);'][a^$c];

1

> <>, 106 81 77 바이트

이것은> <> (물고기)에서 내 첫 골프입니다! 내가 말해야 할 꽤 흥미로운 언어. 많은 재미!

0n01.
>i:1+?!v:";"=?v"#"=?v
^ ;o";"<   .37<
^oo"1+"
^oooooooo'"~"1+%o0' <

연못에 오신 것을 환영합니다! 당신은 단축 할 수 i:1+?!i:0(?, 당신은 스택에 결과를 건설하고 출력 그것에 입력의 말을 기다렸다 경우 몇 바이트를 절약 할 수처럼 나 또한 생각합니다. 내 말은, 그것은 많은 os;)
Aaron

1

C # 169 바이트

골프 :

class P{static int Main(string[] args){var r="Console.Write(";foreach(var y in args[0].Split('#')){r+=(char)(-1+y.Split(';').Length%127);}System.Console.Write(r+");");}}

사람이 읽을 수있는 버전 :

class P
{
    static int Main(string[] args)
    {
        var r="Console.Write(\"";
        foreach (var y in args[0].Split('#'))
        {
            r +=(char)(-1+y.Split(';').Length% 127);
        }
        System.Console.Write(r+"\");");
    }
}

1

하스켈 , 106 102 바이트

';'!(x:a)=x+1:a;'#'!a=0:a;_!a=a;h s="main=putStr"++(show$""++(toEnum.(`mod`127)<$>init(foldr(!)[0]s)))

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

언 골프

step ';' (x:acc) = x+1:acc
step '#' acc = 0:acc
step _ acc = acc;

semicolonHash s = toEnum . (`mod` 127) <$> init (foldr step [0] s)

toHaskell s = "main = putStr " ++ (show $ "" ++ semicolonHash s)


1

MathGolf , 17 바이트

⌡(¶{gÉ'8=£♣(%$''\

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

설명

⌡                      decrement twice
 (                     decrement
                       this transforms ";;;#;;#" -> "888 88 "
  ¶                    split string on spaces
   {                   foreach...
    gÉ                 filter using next 3 characters
      '8               push single character "8"
        =              pop(a, b), push(a==b)
                       this filters out all non-";"
         £             length of array/string with pop
          ♣            push 128
           (           decrement
            %          modulo
             $         pop(a), push ord(a) or char(a) (gets character with code)
              ''       push single character "'"
                \      swap top elements

를 사용하여 모든 문자를 스택 (및 출력)에 넣을 수 있으므로 '<char>이러한 코드 블록의 시퀀스를 출력합니다.


채팅을 만드는 방법을 잊어 버렸습니다. 어쨌든``(스택 상단을 제외한 모든 것을 버립니다)는 현재 버그가 있습니다. 파이썬 FileNotFoundError를 제공합니다.
케빈 크루이 센

@KevinCruijssen README를 확인하십시오! 공백 문자가 두 개인 것을 피하기 위해 코드 페이지에서 해당 문자를 전환했습니다. 새로운 캐릭터는 Þ입니다.
maxb

예, @JoKing은 실제로로 변경되었다고 말했습니다 Þ. ( 그러나 내가 사용하는 문서는 여전히 이전 값을 나타냅니다. )
Kevin Cruijssen

1
@KevinCruijssen 아, 그 문서를 업데이트해야합니다. 상기시켜 주셔서 감사합니다! 둘 다 업데이트되도록 스크립트를 작성하려고합니다. 내가 그것을 얻을 때까지 이것을 사용하는 것이 좋습니다 .
maxb

1

MATL , 32 28 바이트

35lF4$Yb"@g59=z]xv127\!&D99h

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

strsplit오토 마톤 타입의 프로그램이 아닌 완전히 다른 접근법 .

      Yb % strsplit
    4$   %  with 4 inputs, namely:
35       %   Split on '#'
  lF     %   Do not (F) collapse delimiters (l).
         %   And of course the implicit program input.

"@g    ] % Loop over strings, convert each to a normal char array
   59=z  % How many equal to 59 ';'?

xv!127\  % Delete last element, concatenate and flip to horizontal, mod 127
&D       % Convert to MATL representation
  99h    % Append a 'c' to output ASCII.

0

실제로 , 25 바이트

'#@s⌠';@c7╙D@%⌡MdX$"♂cΣ"o

온라인으로 사용해보십시오!(변환 된 실제 코드 실행 결과 포함)

설명:

'#@s⌠';@c7╙D@%⌡MdX$"♂cΣ"o
'#@s                       split on "#"
    ⌠';@c7╙D@%⌡M           for each chunk:
     ';@c                    count ";"s
         7╙D@%               mod by 127 (2**7-1)
                dX         discard last value
                  $        stringify
                   "♂cΣ"o  append "♂cΣ":
                    ♂c       convert each value to an ASCII character
                      Σ      concatenate


0

푸리에, 32 바이트

$(I~S{59}{`^`}S{35}{`%127a0`}&i)

FourIDE에서 사용해보십시오!

푸리에는 기본적으로 ; #의 상위 집합 이기 때문에 이것은 매우 쉬운 도전이었습니다 .

;# command > Fourier equivalent
; > ^ (Increment the accumulator)
# > %127a0 (Modulo accumulator by 127, output corresponding code point and set accumulator to zero)

0

CJam, 14 바이트

q'#/);';fe=:c`

설명:

q               e# Read input
 '#/            e# Split on '#'
    );          e# Delete last element
      ';fe=     e# Count occurrences of ';' in each
           :c   e# Convert each to character (code point)
             `  e# Escape

0

APL, 31 바이트

{⍕'⎕UCS',⌽127|+/¨';'=⍵⊂⍨'#'=⍵}⌽

산출:

      ({⍕'⎕UCS',⌽127|+/¨';'=⍵⊂⍨'#'=⍵}⌽) ';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#'
⎕UCS 59 35
      ⍝ evaluate the output
      ⍎({⍕'⎕UCS',⌽127|+/¨';'=⍵⊂⍨'#'=⍵}⌽) ';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#'
;#

설명:

  • : 입력을 반대로
  • {... }:이 함수에 전달하십시오.
    • ⍵⊂⍨'#'=⍵: #문자열 에서 각각의 파티션
    • +/¨';'=: ;각 파티션 에서 s를 세십시오.
    • 127|모듈로 127
    • : 다시 뒤집어
    • '⎕UCS',: ⎕UCS유니 코드 함수 인 문자열을 추가합니다 .
    • : 문자열 표현

STDOUT에 대한 실제 출력이 동일하므로 를 제거 할 수 있습니다 .
Adám

0

루비 , 47 + 1 = 48 바이트

$_=gsub(/.*?#/){"$><<#{$&.count(?;)%127}.chr;"}

+1 바이트 -p.

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

@manatwork 덕분에 -30 바이트 !


안타깝게도이 요구 사항의 " ;또는 이외의 (코멘트) 문자를 포함 할 수 있습니다 #."
manatwork

@manatwork 고정, 나중에 골퍼를 만들 것입니다.
Pavel

정규식 /;+#//.*?#/및 코드 블록 s.length-1→ 을 변경하기에 충분했습니다 s.count(?;). 로 BTW, 수학도 잘못 %보다 더 높은 우선 순위가 -그렇게되어야한다, (s.length-1)%127. 그리고 .gsub의 코드 블록 $&에서 $1,,…을 사용하여 캡처 된 그룹에 액세스 할 수 있으므로 |s|일반적으로 코드 블록 매개 변수를 실행할 수 없습니다. 그리고 문자열 보간은 다음을 나타 {"$><<#{$&.count(?;)%127}.chr;"}냅니다. 온라인으로 사용해보십시오!
manatwork

@manatwork 너무 감사합니다! 귀하의 의견이 루비 지식을 두 배로 늘렸다 고 생각합니다.
Pavel

늦었지만 코드 도전 자체는 최근에 수정 된 답변에 의해 충돌했습니다. 직접 gsub수정 $_하므로 다시 할당 할 필요가 없습니다. 그러나 마지막에 주석 문자가 있으면 문제가 있습니다 #... 여기를 참조하십시오
Value Ink

0

Pyth, 25 23 24 바이트

j\\+"jk["mC%/d\;127Pcw\#

@FryAmTheEggman 덕분에 +1 바이트

시도 해봐!

1 자 문자열 만 사용하여 이스케이프해야하는 문자를 처리합니다.

샘플 출력 :

jk[\"

jk[\H\e\l\l\o\,\ \W\o\r\l\d\!

내; # 인터프리터를 사용합니다 .


#입력 이 없으면 인쇄 되지 않으므로 작동하지 않습니다 0. jk대신 이 문제를 해결할 수 있습니다 s.
FryAmTheEggman

0

C, 150 바이트

#include<stdio.h>
c;n=0;main(){puts("#include<stdio.h>\nmain(){");while(~(c=getchar()))c-35?c-59?:n++:(printf("putchar(%d);",n%127)&(n=0));puts("}");}

넓히는:

#include<stdio.h>
c;
n=0;
main(){
        puts("#include<stdio.h>\nmain(){");
        while( ~(
            c=getchar()
        ))
                c-35?
                        c-59?
                                :
                                n++
                        :
                        ( printf("putchar(%d);",n%127)
                        &(n=0))
                ;
        puts("}");
}

이 프로그램은 주석을 무시하고 무시하고 항상 올바른 출력 코드를 생성하는 완전한 프로그램입니다. 나는 EOF = -1이라고 가정

gcc 4.9.4로 컴파일 된 SystemResque-Cd 4.9.6에서 테스트되었습니다.


0

braingasm , 40 바이트

,[35-z["[127-s[127+.>]]<0*".]24-z[43.],]

놀랍게도 짧습니다.

,[                                    ,]     Read a byte until end of input
  35-                                          Subtract 35.
     z[                     ]                  If the result is zero,
       "[127-s[127+.>]]<0*".                     print the code for `#`.
                             24-               Subtract 24.
                                z[   ]         If the result is zero,
                                  43.            print the code for `;`

에 대해 생성 된 코드는 ;입니다 +. 현재 셀이 증가합니다.

생성 된 코드 #에는 수동 모듈로 작업이 수월합니다.

[127-s[127+.>]]<0*
[             ]       While current cell is not zero
 127-                   Subtract 127
     s[      ]          If result is negative
       127+.              Add 127 again and print current cell
            >             Step to next cell to break the loop
               <0*      Step back to first cell and clear it

0

Braingolf , 55 바이트

V#0VR&,l1-MvMR[R.#;e"+1"MM|.##e"@%+1~#"MMMMMM|$_vv]Rv&@

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

기본적으로 대체 ;1+, ##~1+%@A의 전부와 사전에 의해 좌우 0때문에 모나드 +연산자 지금 나뉩니다.

1+ 스택의 마지막 항목에 1을 추가합니다.

#~1+%@ char 값을 푸시 ~(126) 1을 더하여 127을 만들고 스택에 다른 항목과 모듈러스를 만든 다음 문자로 팝하고 인쇄합니다.

설명

V#0VR&,l1-MvMR                         Implicit input of each char to stack
[R.#;e"+1"MM|.##e"@%+1~#"MMMMMM|$_vv]
Rv&@

V#0                                    Create stack2, push char value of 0
   VR                                  Create stack3, return to stack1
     &,                                Reverse stack
       l1-                             Push length of stack - 1
          MvMR                         Move length to stack2, switch to stack 2
                                       Move length to stack3, switch back to stack1
[R................................vv]  Do-While loop, will run l times
                                       where l is length of input
  .#;                                  Duplicate last item and push char value of semicolon
     e                                 Pop last 2 items, if they are equal..
      "+1"                             ..Push char values of +1 in that order
          MM                           ..Move last 2 items to stack2
            |                          endif
             .##                       Duplicate last item and push char value of hash
                e                      Pop last 2 items, if they are equal..
                 "@%+1~#"              ..Push char values of @%+1~# in that order
                         MMMMMM        ..Move last 6 chars to stack2
                               |       endif
                                $_     Silently pop last item
Rv                                     Switch to stack2
  &@                                   Greedy char print, print every item in stack as char

0

q / kdb +, 42 바이트

해결책:

{-1_"c"$mod[;127](#:)@/:"#"vs x inter"#;"}

예 :

가 유의 ,(원자 대)리스트를 나타 내기 위해 사용된다뿐만 "\""아니라 원자 것보다, 하나 개의 요소의 목록이다.

q){-1_"c"$mod[;127](#:)@/:"#"vs x inter"#;"}";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#"
";#"
q){-1_"c"$mod[;127](#:)@/:"#"vs x inter"#;"}";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#"
,"\""

설명:

입력 문자열을 가져와 a #또는 a 가 아닌 것을 제거하고 ;on on list로 분할 #하고 각 목록의 요소 수를 세고 결과에서 mod 127을 수행하여 문자열로 캐스트하십시오.

{-1_"c"$mod[;127]count each"#"vs x inter"#;"} / ungolfed
{                                           } / lambda function
                                 x inter"#;"  / intersection of input and ';#' to clear out any 'comments'
                           "#"vs              / split string on hash
                 count each                   / length of each sub-list
        mod[;127]                             / 127 modulo result (vectorised)
    "c"$                                      / cast back to string
 -1_                                          / drop last character (assuming terminated string)

노트:

  • 입력이에 의해 종료되었다고 가정하고 #그렇지 않으면 마지막 청크가에 의해 잘못 삭제됩니다 -1_.
  • 입력에 포함 만 보장 된 경우 10 바이트 더 짧을 수 있습니다 ;#.

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