Helloellolloloo Worldorldrldldd


50

입력 한 단어를 받아 그 단어를 빼고 첫 글자를 뺀 프로그램을 만든 다음 모든 글자가 사라질 때까지 반복합니다. 예를 들어, cat될 것입니다 catatt, 그리고 hello될 것입니다 helloellolloloo.


영어 알파벳의 26 글자 중 하나를 입력 하십시오. 공백으로 구분 된 여러 단어가있을 수 있으며 모든 단어에 변경 사항을 적용해야합니다.

출력
추가 된 글자가 더 이상 없을 때까지 각 단어의 첫 글자가 누락 된 후 두 번째 글자가 누락 된 상태로 입력 된 단어.

더 많은 예 :

ill eel 출력 illlll eelell

laser bat 출력 laserasersererr batatt

darth vader 출력 dartharthrththh vaderaderdererr

이것은 코드 골프이므로 가장 짧은 코드가 승리합니다.

설명 :
입력 또는 출력을 목록으로 취급 할 수 있습니다. 공백 대신 줄 바꿈을 사용하여 단어를 구분할 수 있습니다. 입력에 후행 공백을 추가 할 수 있습니다.


22
솔직히 말하면, 여러 단어는 다소 성가신 일입니다. 분할이 필요하고 각 단어에 기능을 적용한 다음 다시 참여하면됩니다. 또한 공간을 수동으로 확인해야하는 많은 양의 esolang들에게 상당히 쇠약합니다
Jo King

4
단어 목록으로 입력을 받아 출력 할 수 있습니까?
Quintec

4
어떤 길이의 단어를 처리해야합니까?
MickyT

5
공백 대신 출력에서 ​​단어를 줄 바꿈으로 구분해도 괜찮습니까?
JayCe

10
1.새로운 허용량 (배열 I / O, 후행 공간 등)으로 사양을 업데이트하십시오 2.. 기존 솔루션을 활용하여 바이트를 절약 할 수있는 경우 기존 솔루션에 알려주십시오.
Shaggy

답변:


34

apt -m, 6 3 바이트

입력과 출력은 단어의 배열입니다.

£sY

시도 해봐


설명

        :For each word in the input array
£       :Map each letter at index Y
 sY     :  Slice the current word from index Y

1
정말 컴팩트합니다. 좋은!
qazwsx

9
@qazwsx : 이제 50 % 작아 졌습니다 !
Shaggy

1
하지가 £UTF-8 2 바이트?
Vi.

7
@Vi, 여기 UTF-8을 사용하지 않습니다.
얽히고 설킨

36

brainfuck , 60 56 바이트

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

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

후행 공백이 필요하고 선행 공백을 인쇄합니다. 이 두 가지 모두 우회 될 수 있지만 112 바이트로 끝납니다 .

설명

,[  Loop over each byte of input
  Tape: 32 w o r-32 d'
  >++++++++[-<----<++++>>]   Subtract 32 from the character and add 32 to the previous char
  Tape: 32 w o r d-32 0'
  <[>>]<   If the last character was a space
  Tape: 32 w o r d-32 0'
  or
  Tape: 32 w o r d' space-32
  [
    [<]>.   Move to the end of the word and print out the space
    [   Loop over each letter
      [-]    Remove the first letter (initially space)
      >[.>]  Print the rest of the word
      <[<]>  Move back to the first letter
    ]
    Tape: clear
  ]
,]  Get the next byte of input

21

하스켈, 36 21 바이트

map$concat.scanr(:)""

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

편집 : 새로운 IO 형식으로 인해 -15 바이트 (공백으로 구분 된 단어 대신 단어 목록)


로 교체 scanr (:) ""하여 5자를 줄일 수 tails있습니다.
Frerich Raabe

1
@FrerichRaabe : 예,하지만 import Data.List점수에 17 바이트를 추가 해야합니다 .
nimi

18

-p, 36 25 23 바이트

s!\b|\S!$'=~s/ .*//r!eg

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

이것은 단일 regsub입니다. 먼저 모든 단어 경계 또는 공백이 아닌 문자와 일치합니다.

[][H][e][l][l][o] [][W][o][r][l][d]

이러한 각 일치 항목은 나머지 단어로 바꿔야합니다.

[→Hello][Hello][ello][llo][lo][o→] (...)

$'일치 후 문자열 부분을 저장하는 특수 변수로이를 수행 할 수 있습니다 . 그러나, 우리는 중첩 된 regsub 적용 할 필요가 s/ .*//있는 최초의 우주 과거의 모든 것을 제거 그것에을 $'입력의 나머지 단어를 제거하기 위해.

2 바이트 동안 @nwellnhof 에게 감사드립니다 .


당신은 대체 할 수 있습니다 [^ ]\S.
nwellnhof


17

젤리 , 3 바이트

ḊƬ€

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

K이제 어레이 입 / 출력이 허용되므로 더 이상 필요하지 않습니다 .

ḊƬ€
  €   For each word:
Ḋ       Remove the first letter
 Ƭ      until there are none left.

나는 당신이 필요하다고 생각합니다 ḊƬẎ)(또는 ḊƬF)원하는 경우).
Outgolfer Erik

@EriktheOutgolfer 나는 그렇게 생각하지 않습니다. 각 단어는 출력에서 ​​별도의 배열로 표시됩니다
dylnan

1
배열이 중첩되어 있고 그것을 허용하기 위해 질문에 아무것도 지정되어 있지 않기 때문에 주장 할 수 있는지 확실하지 않습니다.
Outgolfer Erik

15

APL (Dyalog), 19 9 바이트

{⌽∊,\⌽⍵}¨

내 두뇌를 조깅 해주신 @ H.PWiz에게 감사합니다

APL의 모든 문자열이 문자 배열이기 때문에 작동합니다.

{⌽∊,\⌽⍵}¨ 
        ¨ - for each string
      ⍵} - string argument - ex. "hello"
     ⌽ - reverse - "olleh"
   ,\ - scan magic - "o" "ol" "oll" "olle" "olleh"
  ∊ - enlist(join together) "oolollolleolleh"
{⌽ - reverse - "helloellolloloo"

TIO


15

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

@ShieruAsakoto 덕분에 1 바이트 절약

I / O 형식 : 단어 배열.

a=>a.map(g=w=>w&&w+g(w.slice(1)))

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


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

I / O 형식 : 단어 배열.

a=>a.map(w=>w.replace(/./g,"$&$'"))

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


2
44 :s=>s.replace(/\S+/g,g=s=>s&&s+g(s.slice(1)))
Shieru Asakoto

1
오늘의 "새로운 것"에 감사드립니다. 에 대해 알지도 못하는 $'(또는 $<backtick>).
얽히고 설킨

13

R , 82 75 67 바이트

write(sapply(x<-scan(,""),substring,1:(y=max(nchar(x))),y),1,y,,"")

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

JayCe 덕분에 몇 바이트 절약

출력을 개행으로 분리합니다.

sapply(...)식은 적절한 부분 문자열로 구성된 행렬 / 열 벡터를 생성하고 ""필요에 따라 채워집니다 . write그런 다음 행렬 요소를 한 줄에 인쇄하여로 y구분합니다 "".


4
졸린 아기를 안고 다른 방법으로 골프를 쳤다. 나중에 설명을 추가합니다.
주세페

2
단어의 길이가 제한되면 (예 : 99 자 또는 ~ 1e6) 다음과 같이 ...substring,1:1e6,1e6)...또는 유사한 바이트를 노크 할 수 있습니다.
MickyT

2
줄 바꿈으로 단어를 구분할 수있는 경우 : tio . 나는 이것을 의견으로 물었다. @MickyT 님의 의견에 응할 수 있습니다
JayCe

@JayCe는 MickyT의 제안을 통합하기 전에 67 바이트 가 될 수 있습니다.
Giuseppe

8

brainfuck , 94 93 바이트

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

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

  • 한 바이트 덕분에 저장된 Nitrodon - 골프 .[-]>[.>]<[<]>[.>]<[<]>[-]>.

설명

[[[ (dynamic) tape layout: ... NUL STR ... STR CHR FLG BUF SPC NUL ... ]]]

load a 32 into SPC
-[-[-<]>>+<]>-

while FLG
<<+[

 read a word
 [
  clear FLG; read CHR
  [-]<,
  copy CHR to BUF (using FLG as a temporary)
  [->+>+<<]>[-<+>]
  subtract SPC from BUF and save SPC
  >>[-<->>+<]
  move tape layout one to the right
  <
 ]

 strip trailing space; set FLG to true
 << [>>+<<[-]]
 to STR's first character
 <[<]>
 print word in all reduced forms
 [
  [.>]<[<]>[-]>
 ]

 print SPC; move to FLG
 >>>>.<<
]

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

속성

Esolang의 brainfuck constant collection 은 초기 공간로드에 사용되었습니다.


이것은 끝나지 않는 것 같습니다. 그게 의도입니까?
조 왕

1
@ 조킹 네. 특정 구현에서는 테이프 한계를 초과하여 오류로 종료됩니다.
Jonathan Frech


6

Vim , 47 바이트 (38 키 스트로크)

Vim 버퍼에서 입력을 유일한 라인으로 시작하십시오.

:s/<Space>/\r/g<CR>ggqaywPlxqqb99@aj0q99@bgg99J

설명

이렇게하면 각 단어가 고유 한 줄에 들어가고 각 줄을 반복 한 다음 다시 결합됩니다. 단어가 99자를 초과하거나 입력에 99 개를 초과하면 중단됩니다.

  1. :s/<Space>/\r/g<CR> 공백을 새 줄로 바꿉니다 ( \r)
  2. gg 첫 번째 줄의 시작 부분에 커서를 놓습니다.
  3. qa매크로 기록을 시작 합니다 :
    • yw 나머지 단어를 빼앗아
    • P 커서 뒤에 놓는다
    • lx 후자의 첫 글자를 제거
    • q매크로 기록 중지
  4. qb매크로 b 기록 시작 :
    • 99@a매크로 아흔 아홉 번 실행 합니다 (문자 제한 소개)
    • j0 다음 줄의 시작 부분에 커서를 놓습니다.
    • q매크로 b 기록 중지
  5. 99@b매크로 b를 아흔 아홉 번 실행 합니다 (단어 제한 소개)
  6. gg 첫 번째 줄에 커서를 놓습니다.
  7. 99J 공백으로 다음 90 개의 줄을 조인 합니다 (단어 제한).

다른 2 바이트 (2 키 스트로크)의 경우 단어 제한을 999로 확장 할 수 있습니다. 다른 4 바이트, 9999 등


6

껍질 , 6 4 바이트

Jonathan Allan 덕분에 -2 바이트 (입력을 목록으로 가져옴)!

moΣṫ

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

설명

입력을 문자열 목록으로 가져와 다음 함수를 매핑합니다.

Σṫ  -- example argument: "abc"
 ṫ  -- tails: ["abc","bc","c"]
Σ   -- concat: "abcbcc"

분할 및 결합은 더 이상 필요하지 않을 수 있으며 현재 이러한 사양은 주석입니다.
Jonathan Allan



5

16 비트 x86 어셈블리 코드, 24 바이트

     47             inc    di
     B020           mov    al,20h
l1:  3806           cmp    [si],al
     7212           jb     l5 ;less means end of string
     7401           je     l2  ;equal means space was seen
     4F             dec    di ;overwrite extra space
l2:  E80300         call   l3
     46             inc    si ;move to next character in word
     75F1           jne    l1
l3:  56             push   si
l4:  3806           cmp    [si],al
     A4             movsb      ;copy character
     77FB           ja     l4  ;until either zero or space is seen
     5E             pop    si
l5:  C3             ret

소스 문자열에 대한 si = 포인터, 출력 버퍼에 대한 di = 포인터로 호출하십시오.
소스 문자열을 끝내려면 0 바이트가 필요합니다.
코드는 16 비트 또는 32 비트 또는 64 비트에서 동일합니다 (si / di는 esi / edi 또는 rsi / rdi가 됨).
확장 된 호출로 인해 32 비트 코드가 2 바이트 더 큽니다.
64 비트 코드는 rsi / rdi의 inc / dec가 접두사를 사용하기 때문에 여전히 3 바이트 더 큽니다 (하지만 32 비트 메모리 공간 내에있는 것으로 확인되면 해당 패널티를 피하기 위해 다시 esi / edi가 될 수 있음). .


4

MATL , 18 16 바이트

"@gXH"HX@Jh)]0&h

입력은 단어의 셀형 배열입니다. 온라인으로 사용해보십시오!

설명

"         % Implicit input: cell array of strings. For each cell
  @g      %   Push content of current cell, that is, a word
  XH      %   Copy into clipboard H
  "       %   For each letter
    H     %     Push word
    X@    %     Push iteration index
    Jh)   %     Index from that until the end into current word
  ]       %   End
  0       %   Push 0. Will be cast to char. Char(0) is displayed as space
  &h      %   Concatenate horizontally all elements so far. Implicit display


4

C ++ (클랑) , 174 바이트

#include<map>
#include<string.h>
std::string r(std::string w){while(auto x=strchr(w.c_str(),32))return r(w.substr(0,x-w.c_str()))+" "+r(x+1);return w!=""?w+r(w.substr(1)):w;}

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

첫 번째 제출물이며 인쇄하는 대신 문자열을 반환하는지 알 수 없었습니다. :)


2
PPCG에 오신 것을 환영합니다! 예, 문자열을 반환해도됩니다. 당신이 주위에 붙어 있기를 바랍니다!
조 왕

불평등 연산자의 대칭을 사용하여 공백을 제거하고 바이트를 절약 return w!=""?할 수 있습니다 return""!=w?.
Jonathan Frech


3

, 14 바이트

⪫E⪪S ⭆ι✂ιμLι¹ 

온라인으로 사용해보십시오! 참고 : 후행 공간. 링크는 자세한 버전의 코드입니다. 설명:

   S            Input string
  ⪪             Split on spaces
 E              Map over each word
      ι         Current word
     ⭆          Map over each character and join
        ι       Current word
         μ      Current index
           ι    Current word
          L     Length
            ¹   Literal 1
       ✂        Slice
⪫               Join with spaces
                Implicitly print


3

-s , 11 바이트

J_@>,#_Mq^s

공백으로 구분 된 단어 목록을 stdin에서 가져옵니다. 온라인으로 사용해보십시오!

설명

             s is space (implicit)
        q    Read a line of stdin
         ^s  Split it on spaces
       M     Map this lambda function to each word:
 _            The word...
  @>          sliced starting at index...
    ,#_       range(len(word))
              This creates len(word) slices ["word" "ord" "rd" "d"]
J             Join those into a single string
             The resulting list of modified words is printed; the -s flag uses space
             as the separator





3

K (oK) , 17 13 바이트

{,/|:'|,\|x}'

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

접두사 익명 함수; 입력은 문자열 목록으로 간주되며 문자열 목록으로 표시됩니다.

@streetster에게 4 바이트 감사합니다.

어떻게:

{,/|:'|,\|x}' //Main function, argument x → ("ill";"eel")
            ' // For each element of the argument
         |x}  // Flip it. x → ("lli";"lee")
       ,\     // Concatenate each element, keeping intermediates. x → (("l";"ll";"lli");("l";"le";"lee")
      |       // Flip it again. x → (("lli";"ll";"l");("lee";"le";"l"))
   |:'        // Now flip each element. x → (("ill";"ll";"l");("eel";"el";"l"))
{,/           // Concatenation scan. x → ("illlll";"eelell")

목록을 반환하고 내 oK 솔루션을 살펴볼 수도 있습니다
streetster

@ streetster 아, 좋아. 나는 여전히 K를 배우는 과정에 있기 때문에 내 솔루션이 원하는만큼 짧거나 우아하지 않을 것입니다. 고마워요!
J. Sallé

반전하기 전에 평평하게하면 " {|,/,\|x}'
역각

3

공통 리스프 , 179 바이트

(defun r(s)(cond((endp s)nil)((eql(first s)#\Space)(princ " ")(r(rest s)))(t(q s)(r(rest s)))))(defun q (l)(cond((eql(first l)#\Space)t)((endp l)t)(t(princ(first l))(q(rest l)))))

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

이것은 편집을 환영합니다 골프를 처음 시도합니다


PPCG에 오신 것을 환영합니다. 공백을 제거 하면 29 바이트를 절약 할 수 있습니다 .
Jonathan Frech

FRECH 덕분에 @Johnathan 난 그냥 공백으로 업데이트
JRowan

네가 불필요한 공간을 놓친 것 같아.
Jonathan Frech

당신은 가장 가능성도 사용할 수 있습니다 car대신 first하고 cdr대신 rest더 골프 제출에.
Jonathan Frech

Na, 지금 잘 지내요 하하, 나중에 다시 와서 나중에 엉망으로 만들 수 있습니다. 임은 학습 혀짤배기 지금 선생님은 내가 그 일을하는 동안 그들은 내 머리에서 있었다 있도록 자동차 및 CDR을 사용하지 않을 말했다
JRowan

3

루아 , 70 바이트

for i=1,#arg do x=arg[i]for i=1,#x do io.write(x:sub(i))end print()end

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

설명

루아의 인수는 테이블에 저장됩니다 arg단항 연산자는 인덱스 1에서 시작 #테이블의 크기를 반환하고 함수는 s:sub(a,b)문자열을 기반으로 문자열을 반환하는 s정수로 구분 a하고 bB는 문자열의 나머지 부분을 반환 통과되지 않은 경우.

줄 바꿈을 피하기 위해 io.write()대신 사용해야 하고 반대 이유로 끝 부분에 print()추가 print()했습니다.

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