!끼워 넣다! ! n! b! e! t! w! e! e! n!


24

여기 에서 게시했습니다 .

이 문제는 질문 에서 크게 "증거"됩니다 . @Akababa에게 감사드립니다!

이 작업에서는 문자열의 시작과 모든 문자 뒤에 느낌표를 삽입해야합니다.

규칙

  • 빈 문자열이 아닌 입력이 항상 있습니다. 입력에는 탭도 포함되지 않습니다. 입력에 확장 할 수없는 ASCII 인쇄 가능 문자와 줄 바꾸기 만 포함되어 있다고 가정 할 수 있습니다.
  • 언어에서 줄 바꿈을 감지 할 수 없으면 입력에 후행 줄 바꿈이 포함되지 않습니다.
  • 이것은 대회입니다. 가장 짧은 답변이 이길 것입니다.

  • 줄 바꿈 4 개는 개행으로 구분 된 느낌표 5 개를 생성합니다. 이것을 마크 다운 텍스트로 작성하는 것은 매우 어렵 기 때문에 대신 설명되어 있습니다.
12 34 5 6
129591 129012 129127 129582

0

출력

!1! ! 2! !삼! ! 4! ! 5! ! 6!
! 1! 2! 9! 5! 9! 1! ! 1! 2! 9! 0! 1! 2! ! 1! 2! 9! 1! 2! 7! ! 1! 2! 9! 5! 8! 2!
!
! 0!
asd afjoK ak : e
kPrLd
    FOJOE;
    KFO
KFkepjgop sgpaoj faj

출력

! a! s! d! ! a! f! j! o! K! ! a! k! :! e!
! k! P! r! L! d!
! ! ! ! ! f! O! J! O! E!;!
! ! ! ! ! K! F! O!
! K! F! k! e! p! j! g! o! p! ! s! g! p! a! o! j! ! ! ! f! a! j!

하나의 문자 만있는 기본 테스트 사례 :

에이

출력

!에이!

(자동 완성! 농담, 그런 것은 없습니다.) 느낌표가 포함되어 있습니다.

!!
!!
!!
!!
!!

출력 :

!!!!!
!!!!!
!!!!!
!!!!!
!!!!!


7
나는 공감대를 이해하지 못한다-이것은 분명하고 잘 쓰여진 도전이다. 다시 : 중복되는 것은 아닙니다 ( '!'앞에 큰 차이가 있습니다).
Jonathan Allan

1
언어 a\n와와 의 차이점을 알 수없는 경우 줄 a바꿈이 없어야합니까?
주세페

13
다운 홀트는 샬레가 설명하는 것처럼 모든 업 보트 사이에 삽입됩니다.
A̲̲

2
이것은 죽었다.
V. Courtois

답변:



12

파이썬 3 , 27 바이트

lambda s:f"!{'!'.join(s)}!"

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

솔직히, 누군가 작은 바이트 수로이 작업을 수행하는 멋진 방법을 보여줄 수 있기를 바랍니다.


이것은 빈 줄을 제대로 처리하지 못합니다
플레이크

@flakes 무슨 뜻인가요? 빈 문자열을 의미하는 경우 빈 문자열을 처리 할 필요가 없습니다 (이 !!경우 출력 에 관계없이 의미가 있습니다). 문자열을 의미하는 경우 \n올바른 출력은 !\n!입니다.
Jonathan Allan

3
@JAD 내가 볼 수있는 한, 예제에는 빈 문자열이 없습니다. 뿐만 아니라 첫 번째 규칙은 문자 그대로 "항상 비어 있지 않은 문자열 입력이있을 것입니다."
Monica Monica 복원

1
아 나는 틀렸다. 첫 번째 예제는 입력 중간에 빈 줄이 있습니다. 그러나이 답변은 느낌표를 중간에 배치하는 것을 처리합니다 !\n!\n!. 잘 하셨어요.
플레이크






8

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

문자 배열로 입력을받습니다.

s=>`!${s.join`!`}!`

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


자바 스크립트 (ES6),  23  20 바이트

@ShieruAsakoto 덕분에 3 바이트 절약

입력을 문자열로받습니다.

s=>[,...s,,].join`!`

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


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

@tjjfvi가 제안합니다

입력을 문자열로받습니다.

s=>s.replace(/|/g,"!")

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



@tjjfvi 멋진 하나!
Arnauld

5
나는 당신의 23에 대한 20을 가지고 있습니다 :s=>[,...s,,].join`!`
Shieru Asakoto

7

R , 25 바이트

function(x)gsub("","!",x)

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

문자형 벡터를 받아들이고 반환하는 함수입니다.


tio.run/##K/r/P724NElDSUlHSVFJpzg5MU9DR11dU/O/…scan(,'') 와 같이 함수 형식을로 전환하여 3 바이트를 면도 할 수 있습니다.
Sumner18

@ Sumner18 감사합니다. 나는 그것으로 시작했지만 공백으로 입력을 나눕니다.
Nick Kennedy

1
@ Sumner18 도전 과제는 줄 바꿈으로 입력을 처리하도록 요청합니다.이 작업은 수행 할 수 없습니다 scan(그러나 Nick의 솔루션은 적어도 출력을 표시하는 경우 처리 cat합니다).
Robin Ryder

7

8086 머신 코드, .COM 형식 (MS-DOS 2+), 32 바이트

(에뮬레이터에 따라 -1 : 아래 참조)

타이핑하면 버퍼링이 없기 때문에 이상한 결과를 출력하므로 최상의 결과를 위해 파일에서 표준 입력을 리디렉션합니다. 또한 개행은 다음과 같이 저장되기 때문에 조금 이상하게 보입니다.CR LFCR부품 놨 출력까지.

이 프로그램은 실제 MS-DOS 에뮬레이션 (예 : PCjs)에서 잘 동작하지만 DOSBox는 Ctrl + Z EOF (어셈블리 목록의 주석 참조)에 문제가있는 것 같으므로 DOSBox에서 콘솔을 사용하여 입력 하지 마십시오. 추가 확인을 추가하십시오!

BB 01 00 53 59 BA 0B 01 B4 40 CD 21 4A 4B B4 3F CD 21 85 C0 74 09 B4 40 43 41 CD 21 49 EB EE C3

몇 가지 흥미로운 점 :

  • 나는 (이미 실행했던 메모리를 재사용하여 일부 데이터 공간을 저장 21H에서이 INT 21H될 일이 !)

  • 나는이었다 거의 내가 페이지에서 발견 한 재미있는 트릭 사용할 수 "BCD 지침의 숨겨진 힘을" 내가 사용할 수있는 것 AAA대신에 표준의 TEST비교 AL한 바이트를 저장, 0을. 불행히도, 이것은 완전히 문서화되어 있지 않으므로 신뢰할 수 없었습니다. 예를 들어 PCjs는 캐리 및 보조 캐리 플래그 외에는 아무것도 조정하지 않습니다. :-(

조립 코드 (TASM 이상적인 모드) :

IDEAL
MODEL   TINY

CODESEG
ORG 100H

;; DOSBox (tested with 0.74-2) didn't seem to handle Ctrl-Z as EOF
;; so uncomment the ";;" lines to run it there.
MAIN:
    MOV     BX,1
    PUSH    BX
    POP     CX
    MOV     DX,OFFSET MAIN_1+1  ; The 21H in INT 21H
    MOV     AH,40H
MAIN_1:
    INT     21H
    DEC     DX
    ;;PUSH  DX
    ;;POP   SI
IO_LOOP:
    DEC     BX
    MOV     AH,3FH
    INT     21H
    ;;; This should work on an non-emulated PC. 
    ;;;AAA      ; AL=0?
    TEST    AX,AX
    JZ      DONE
    ;;CMP   [BYTE PTR SI],1AH
    ;;JZ    DONE
    MOV     AH,40H
    INC     BX
    INC     CX
    INT     21H
    DEC     CX
    JMP     IO_LOOP
DONE:
    RET
ENDS
END MAIN


6

페페 , 47 바이트

REREEeRErEErREeeEeeeeEREEeeREEeereeREEEEeeEReee

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

설명:

REREEeRE # Push 0,then input (str),then 0 -> (R)
         # The zeroes are pushed to correct the inserting
rEE # Begin loop labelled 0 -> (r)
  rREeeEeeeeE # Push "!" -> (R)
              # r flag inserts it instead of pushing
  REEeeREEee # Move pointer pos 2 steps forward -> (R)
ree # Loop while (R) != 0
REEEEeeE # Remove characters of (R) that are in stack of (r)
         # Removes the 0 in (R)
Reee # Output (R)

이 코드를 어떻게 작성합니까? 사용하는 코드 변환기가 있습니까? 시도하고 쓰는 것이 미친 것 같습니다
Cruncher

1
@Cruncher 1) 나는 이것을 나의 가이드로 사용한다. 2) 아니요, 코드 변환기를 사용하지 않고 가이드를 사용하여 코드를 작성합니다.
u_ndefined

6

미로 ,  19 11 10  9 바이트

33
..
",@

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

방법?

우리는 왼쪽 상단에서 오른쪽으로 향하여 0의 무한 스택으로 미로에 들어갑니다 ...

                         I / O    stack
                                  0,0,0,...
3 - pop * 10 + 3                  3,0,0,0,...
  - 2 neighbours, forward
3 - pop * 10 + 3                  33,0,0,0,...
  - 2 neighbours, forward
. - pop & print chr          !    0,0,0,...
  - T junction from the side
  -   TOS==0, forward
, - read chr or -1       L        76,0,0,0,...   or   -1,0,0,0
  - T junction from the base
  -   if TOS > 0 right:
" -     no-op                     76,0,0,0,...
  -     2 neighbours, forward
. -     pop & print chr      L    0,0,0,...
  -     T junction from the side
  -       TOS==0, forward
3 -       ...back to the start
  -   elif TOS == -1 left:
@ -     exit                                          we're out!


  * right, but on the first occasion (from above) we hit the wall and turn
    around, so that's like a left

운 좋게도 인쇄 할 수없는 것을 처리 할 필요가 없습니다 ,.





4

6502, 12 바이트 (Apple II의 경우 13 바이트)

6502

기계 코드는 한 쌍의 제로 페이지 위치가 문자 입력 ($ FE) 및 출력 (FF) 하드웨어에 연결되어 있다고 가정합니다. 많은 6502 기반 시스템은 이러한 방식으로 I / O를 용이하게하지만 I / O 주소는 대개 제로 페이지에 있지 않습니다.

단순화를 위해 Py65를 사용 했습니다. 는 Python으로 작성된 6502 마이크로 컴퓨터 시스템 시뮬레이터 인 .

다음은 Py65의 메모리 덤프입니다. $ FE 및 $ FF와 겹치지 않도록 다음 코드를 제로 페이지의 어느 곳에 나로드 할 수 있습니다.

       PC  AC XR YR SP NV-BDIZC
6502: 0000 00 00 00 ff 00110010
.mem 0:b
0000:  a9  21  85  ff  a5  fe  f0  fc  85  ff  d0  f4

Windows 명령 창에서 실행하면 원하는 텍스트를 붙여 넣기 (Ctrl + V)하거나 간단히 입력 할 수 있습니다. 입력하는 경우 줄 바꾸기 (같은 ASCII 문자)를 보려면 Ctrl + J를 누르십시오. 프로세서를 중단하고 Py65 명령 프롬프트로 돌아가려면 Ctrl + C를 누르십시오.

당연히 어셈블리 코드를 읽기가 더 쉽습니다.

       PC  AC XR YR SP NV-BDIZC
6502: 0000 00 00 00 ff 00110010
.d 00:0b
$0000  a9 21     LDA #$21
$0002  85 ff     STA $ff
$0004  a5 fe     LDA $fe
$0006  f0 fc     BEQ $0004
$0008  85 ff     STA $ff
$000a  d0 f4     BNE $0000

명확성을 위해 다음은 CBA65 형식 의 어셈블리 코드 입니다.

; ASSEMBLE:
; cba65 bangit
;
; LOAD/RUN
; python3 py65/monitor.py -i 00fe -o 00ff -l bangit.bin
; goto 0000

        .FILES  BIN=256

; I/O LOCATIONS
GETC    .EQU    $FE             ; (1) MOVING PY65'S GETC TO ZP SHAVES 1 BYTE
PUTC    .EQU    $FF             ; (1) MOVING PY65'S PUTC TO ZP SHAVES 2 BYTES

        .ORG    $0000

VROOM   LDA     #'!'
        STA     PUTC
VROOM2  LDA     GETC
        BEQ     VROOM2
        STA     PUTC
        BNE     VROOM

        .END

애플 II

위의 코드는 널이 입력이 없음을 나타내므로 널이 아닌 값이 리턴 될 때까지 폴링을 계속합니다.

비교를 위해 Apple I 및 Apple II는 키보드 I / O 주소의 비트 7을 설정하여 새 문자의 가용성을 알립니다. 그런 다음 문자를 가져온 후 지워야합니다. 이러한 시스템에서 문자 I / O는 일반적으로 하드웨어에 직접 액세스하는 대신 시스템 모니터 루틴을 호출하여 수행됩니다.

RDKEY ($ FD0C) 및 COUT ($ FDED)을 호출하면 위와 동일한 Apple II를 13 바이트로 코딩 할 수 있으며 RAM의 어느 곳에서나 실행할 수 있습니다. 다음은 Apple // e 에뮬레이터, Android 9의 a2ix 에서 실행 한 코드 입니다.

Return 키를 누르면 줄 바꿈과 동일한 효과가 있습니다.

*300L

0300-   A9 A1       LDA   #$A1
0302-   20 ED FD    JSR   $FDED
0305-   20 0C FD    JSR   $FD0C
0308-   20 ED FD    JSR   $FDED
030B-   F0 F3       BEQ   $0300

느낌표의 일반 ASCII 값 # $ 21 대신 # $ A1이 대신 사용됩니다. 표준 ASCII 값을 COUT으로 전송하면 "역 모드"로 표시되고 흰색은 검정색으로 표시되기 때문입니다. ASCII를 일반 흰색으로 검은 색으로 표시하려면 COUT을 호출하기 전에 누산기의 문자 값에 # $ 80을 추가해야합니다. RDKEY는 hi- 비트 세트를 가진 문자를 반환하기 때문에 어셈블리 프로그램은 일반적으로 문자를 사용하기 전에 ASCII 값을 얻기 위해 문자 비트를 지 웁니다.


1
사이트에 오신 것을 환영합니다! :)
Rahul Bharadwaj

@Rahul 감사합니다!
lee

4

배쉬 , 36 바이트

while read -n1 c;do printf \!$c;done

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

이것은 마지막 줄에 대한 입력을 종료하는 개행을 계산합니다! 표.


환영! 코드 전용 답변은 자동으로 품질이 낮은 것으로 표시되므로 설명이나 인터프리터 등에 링크를 추가하는 것을 고려하십시오.
mbomb007

@ mbomb007, 포인터 주셔서 감사합니다.
22:42에

1
불행히도 이것은 !입력 끝에 추가하지 않습니다 .
Kritixi Lithos

@Cowsquack : 내 터미널에서 입력을 종료하는 줄 바꿈이! 추가되었습니다. tio.run에서 캐리지 리턴으로 입력을 종료해야합니다. 온라인으로 사용해보기에 대한 링크를 업데이트했습니다.
spuck

4

MarioLANG , 95 94 90 89 69 바이트

++++++
======< >)
>+++++++",+[
=======<.==<
>+++++++!(.-
========#===

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

MarioLANG을 처음 사용 해보니 정말 재미있었습니다!

-20 바이트에 대한 Jo King 덕분에

설명:

이름에서 알 수 있듯이 MarioLANG은 Super Mario Bros의 게임처럼 실행되도록 만들어졌으며 BF와 유사하게 작동하며 메모리가 셀 테이프로 배열되어 있습니다. 증가, 감소, 인쇄 (아스키 또는 숫자로)하고 현재 메모리 셀을 읽고, 테이프를 따라 왼쪽이나 오른쪽으로 이동하는 연산자가 있습니다.

Mario (명령 포인터)는 항상 의도 한 동작 방향을 오른쪽으로 설정하여 프로그램의 왼쪽 상단 셀에서 시작합니다. Mario 아래에 바닥과 같은 물체가없는 경우 (=, "또는 #) 바닥이있는 물체에 도달 할 때까지 떨어지게됩니다. Mario가 프로그램 공간을 벗어나면 게임 오버로 인해 프로그램이 종료됩니다. (

이 특정 프로그램은 기본적으로 설정과 루프의 두 부분으로 나눌 수 있습니다.

   Setup                          Loop
-----------------------------------------------
                       |
++++++                 |          
======<                |          >)
>+++++++               |          ",+[
=======<               |          .==<
>+++++++               |          !(.-
========               |          #===

설정 섹션에서, 우리는 "!"의 ASCII 값인 33에 도달 할 때까지 첫 번째 메모리 셀을 증가시킵니다. 충분히 쉬운; 이것이 골프를 타면 순전히 모양의 문제입니다. Mario는 왼쪽 상단에서 시작하여 10 개의 동전을 집어 들고 11 번을 집어들 때 떨어지기 시작하고 방향을 바꾼 다음 반복합니다. 그는 방향을 바꾸지 않고 마지막 11 개의 코인을 줍습니다. 맨 오른쪽 맨 아래 "+"에서 설정 섹션을 종료합니다.

루프 섹션에서 Mario는 엘리베이터에 도달하여 시작합니다. "!" 운전자는 그를 정지시켜 엘리베이터에 남아있게합니다. 도중에 해당 ASCII 문자를 현재 메모리 셀 값 (이것은 항상 33, "!")으로 인쇄 한 다음 메모리의 다음 셀로 전환합니다. 마리오는 정상에 도달하고 자신의 방향을 오른쪽으로 설정합니다. 그는 넘어지고 입력에서 문자를 ASCII 값으로 읽습니다 (또는 문자가없는 경우 -1). MarioLANG의 유일한 제어 측정 값은 현재 메모리 셀의 값이 0 인 경우 명령을 건너 뛰는 것이므로 증가합니다. 만약 그렇다면, 마리오의 방향 변경을 건너 뛰므로 다음 층에서 곧바로 그의 운명에 도달 할 것입니다. 그렇지 않은 경우 방향을 왼쪽으로 설정합니다. 아래 층에서 왼쪽으로 걸어 가면 현재 셀이 이전 값으로 감소합니다.


이전 버전 (89 바이트) :

+++++++++++>,
==========@"+
+++++++++++)[
@==========.==<
+++++++++++!(.-
===========#===

카운터 대신 곱셈 루프를 사용하여 62 바이트
Jo King

이제 멋지다. 설명을 다시 할 시간이 생기면 바로 업데이트하겠습니다. 감사합니다.
Monica Monica 복원

1
아하! 8 * 4 + 1 대신 5 * 6 + 3을 곱하여 60 바이트
Jo King

남자, 나는 그것이 당신의 첫 로데오가 아니라는 것을 알고 있습니다. 그러나 이것은 정말로 인상적입니다. xD
복원 Monica Monica

사실, 이것은 처음으로 MarioLANG 골프입니다. 방금 다른 2D 언어뿐만 아니라 brainfuck에 대한 경험이 있습니다
Jo King





3

삼각형 , 15 13 바이트

B\3;#*~.,</@<

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

Triangular에 조건부 정지 연산자가 있다는 것을 기억 한 후 -2 바이트.

나는 이것이 이것에 도달하는 것만 큼 짧다고 믿는다. 삼각형 조건부 방향으로 변화 연산자를 가지고 있지만 불행하게도 다른 조건문 다르게 작동합니다. 다른 모든 사람은 ToS <= 0인지 확인하지만 방향 변경 조건은 ToS! = 0을 확인합니다. 그렇지 않은 경우의 형식으로 10 바이트가됩니다 Bq3~#*/@<<.

언 골프 드 :

    B
   \ 3
  ; # *
 ~ . , <
/ @ <
----------------------------------------------------
B3*              - Push 11 and 3, then pop both and push their product.
    <,<          - Change directions 3 times (to save 2 bytes on last line)
        @/       - Print Top of Stack value as a character, do not pop
          ~;\    - Push a character from input to ToS. Halt if ToS <= 0. Change Direction.
              #  - Print ToS as a character and pop

이전 버전 (15 바이트) :

B.3\.*#).(/?~@<

3

간단한 템플릿 , 23 바이트

이것은 내가 쓴 언어이며 템플릿을위한 것이었지만 잘되었습니다.

!{@eachargv.0}{@echo_}!

ungolfed 코드가 표시되면 거의 설명이 필요하지 않습니다.

!{@each argv.0 as char} {@echo char}!{@/}

그리고 설명 :

  • !-리터럴 !문자를 인쇄합니다
  • {@each argv.0 as char}-값을 변수로 설정하여 모든 문자를 반복합니다 char( 선택 사항 , 기본 변수는 _). 컴파일러
    argv.0render()메소드에 전달 된 첫 번째 매개 변수 입니다.
  • {@echo char}!- char변수와 리터럴 !문자를 출력합니다 .
    골프 버전의 경우 기본 변수 _가 대신 사용됩니다.
  • {@/}-루프를 닫습니다 ( 선택 사항 ).

순수한 SimpleTemplate 솔루션 :

{@fn x}!{@eachargv.0}{@echo_}!{@/}{@/}

함수를 만듭니다 x동일한 결과를 출력 를 .

다음과 같이 사용할 수 있습니다.

{@call x "this is an example"}

이 모든 것을 시도해 볼 수 있습니다. http://sandbox.onlinephpfunctions.com/code/f6baff8d411fc8227ece81eccf05b6e7d3586bfa .

라인 (908)에, 당신은 변수를 사용할 수 있습니다 $golfed, $ungolfed그리고 $fn모든 버전을 테스트 할 수 있습니다.



그러나 문자 배열을 사용할 수 있으면 코드가 단순화됩니다 (20 바이트).

!{@echoj"!" argv.0}!

그리고 골퍼되지 않은 :

!{@echo separator "!" argv.0}!

기본적으로 배열의 모든 항목을 "!"로 묶고 리터럴로 묶습니다 !.
컴파일러 클래스의 제한으로 인해 공간은 필수입니다 (골프 버전).

이 코드는 순수한 SimpleTemplate 에서 사용하기가 매우 어렵습니다 (예를 들어 함수를 사용).

{@fn x}!{@echoj"!" argv.0}!{@/}

{@// alternative: @call str_split into a "a char array"}
{@set a "a", " ", "c", "h", "a", "r", " ", "a", "r", "r", "a", "y"}

{@call x a}

@call함수는 PHP에 존재하는 함수를 호출 할 수 있으며 이는 순수한 SimpleTemplate 솔루션 이 아닙니다 .



2

Gema , 11 자

\A=\!
?=?\!

운수 나쁘게 ! Gema에서 주석을 시작하므로 이스케이프 처리해야합니다.

샘플 실행 :

bash-5.0$ echo -ne '1 2 3 4 5 6\n129591 129012 129127 129582\n\n0' | gema '\A=\!;?=?\!'
!1! !2! !3! !4! !5! !6!
!1!2!9!5!9!1! !1!2!9!0!1!2! !1!2!9!1!2!7! !1!2!9!5!8!2!
!
!0!

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


2

젤리 , 5 바이트

Ż”!ṁż

문자열을 허용하는 전체 프로그램으로 결과를 인쇄합니다.

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

방법?

Ż”!ṁż - Main Link: list of characters, s   e.g. "abc"
 ”!   - character '!'                           '!'
   ṁ  - mould like:
Ż     -   s with a zero prepended              "!!!!"
    ż - zip together with s                    ["!a","!b","!c",'!']
      - implicit (smashing) print              !a!b!c!



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