줄을 딸꾹질


16

당신의 도전은 문자열을 딸꾹질하는 프로그램이나 함수를 작성하는 것입니다. 문자열을 입력으로 사용하고 (표준 방법을 통해) 다음 단계를 수행하십시오.

  1. 1에서 10 사이의 정수형 정수 n을 생성해야 합니다.
  2. n 초 동안 기다리십시오 .
  3. 입력 의 초기 / 다음 n 문자 또는 n 문자 미만인 경우 나머지 입력을 인쇄하십시오 .
  4. 인쇄 할 입력이 남아 있으면 1 단계로 돌아갑니다.

규칙

  • 입력은 항상 ASCII 문자 (32-126) 만 포함하는 비어 있지 않은 문자열입니다.
  • 대기 시간은 정확히 n 초일 필요는 없지만 n의 10 % 내에 있어야합니다 .
  • 텍스트 섹션이 인쇄 될 때마다 후행 줄 바꿈을 인쇄 할 수 있습니다.

여기의 공백은 1 초를 나타냅니다. 입력이 Hiccupinator!인 경우 출력은 다음과 같습니다.

   Hic     cupin a          tor!

채점

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다 .


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Dennis

대기 / 시간 개념이없는 언어에 공백을 사용할 수 있습니까?
FliiFe

나는 모든 언어가 출력을 생산하지 않고 시간을 보내는 방법을 가지고 있다고 내기했다. @FliiFe!
Omar 1

답변:


9

스크래치, 16 블록 + 6 바이트

암호

입력이 이미 문자 목록으로 정의되었다고 가정합니다 ( ["H","e","l","l","o"," ","W","o","r","l","d"])


이 방법으로 골프를 탈 수 있습니까?
OldBunny2800 1

유효한 점수 매기기 방법이 아닙니다. 메타 포스트를 참조하십시오 .
mbomb007

지역 사회 합의에 따라 기꺼이 고치겠습니까?
OldBunny2800

1
나는 스크래치가 없다. 답변을 게시 한 것은 귀하의 책임입니다. ScratchBlocks2는 프로젝트에서 텍스트 코드를 생성하는 생성기와 함께 제공됩니다.
mbomb007

5

푸쉬 , 20 17 16 또는 13 바이트

허용되는 내용에 따라 두 가지 솔루션이 있습니다.

16 바이트 :

@$LT1U&Wm:v;O"cI

명령 행에 인수를 제공하십시오 $ pushy hiccup.pshy 'hiccupinator'. 이것은 각각의 '딸꾹질'다음에 줄 바꿈 문자가 인쇄됩니다. 고장은 다음과 같습니다.

                      % Implicit: input on stack as charcodes
@                     % Reverse input, so chars are pulled from start
 $             I      % While there are items on stack:
   T1U                %   Push a random number, 1-10
      &W              %   Wait that many seconds
  L     m:            %   min(time waited, chars left) times do:
          v;          %     Pull a char from the input.
            O"c       %   Print & delete pulled chars

13 바이트 :

위의 답변을 코딩하는 동안이 훨씬 짧은 솔루션을 생각해 냈습니다.

N@$L1TU&Wm:'.

비슷한 작업을 수행하지만 더 적은 바이트로 새 문자열을 구성하는 대신 문자열에서 직접 인쇄합니다. 이것은N 프로그램 시작시 줄 바꿈 문자를 방지 . 그렇지 않으면 각 문자가 줄 바꿈 문자가됩니다.

그러나 이것을 테스트하는 동안 버그 stdout가 있음을 알았습니다. 라인 버퍼링되어 프로그램이 전체 길이를 기다린 다음 딸꾹질 된 문자열을 표시합니다.

간단한 추가 를 통해 최신 커밋 에서이 문제를 해결했습니다 ..flush() 이 기술적으로 단지 버그를 수정, 언어에 새로운 기능을 추가하는 것이 아니라, 당신의 계정에이 대답을하지 않으면 이해 :) -

분석은 다음과 같습니다.

        % Implicit: input on stack as charcodes
N       % Set trailing newlines to False
@       % Reverse stack (so the charcodes are pulled off in order)
$       % While there are items left to print:
L       %    Push stack length
1TU     %    Push a random number 1-10
&W      %    Wait that amount of time
m:      %    min(time waited, chars left) times do:
'.      %      Pop and print last char

PPCG의 관례는 언어가 구현 (버그 및 모두)에 의해 정의된다는 것입니다. 커밋이 도전을 발표 한 이후로, 그 부분은 비 경쟁적입니다.
Luis Mendo

@LuisMendo 좋아요, 설명 주셔서 감사합니다 :)
FlipTack

좋은 답변 BTW :-)
Luis Mendo

4

자바 스크립트 (ES6) 91 89 바이트

f=s=>s&&setTimeout(_=>console.log(s.slice(0,n))|f(s.slice(n)),(n=1+Math.random()*10)<<10)

console.log(2 + f.toString().length); 
f('Hello sweet world!')                                       

@zeppelin 덕분에 2 바이트를 절약했습니다.

대기하여 대기 시간에 대한 10 % 허용 오차를 남용 n<<10 === 1024*n 밀리 초)으로 .

대기 시간이 n의 10 % 이내 여야한다고 말했기 때문에 1 바이트를 절약하고 1 초가 아닌 999 밀리 초 동안 기다리기로 결정했습니다.

@ETHProductions 덕분에 더 이상 999 밀리 초 침묵이 필요하지 않습니다.


1
흠, new Date () % 10 이 어떤 측정 값으로 "무작위"로 계산 되는지 확실하지 않습니다 .
zeppelin

@zeppelin 표준 정의에 따른 공정한 포인트는 계산되지 않습니다. ( meta.codegolf.stackexchange.com/a/1325/56071 ). 그에 따라 변경하겠습니다.
Lmis

"| 0"을 제거하여 바이트 쌍을 저장할 수도 있습니다.
zeppelin

2
알다시피, 당신은 3 바이트로 1000도 표현할 수 있습니다 : 1e3;-)
ETHproductions

1
> (1 + 0.099999 * 10) * 999> 1997 True,이 문제를 해결하려면 * 999를 << 10으로 대체 할 수 있습니다. (1 + 0.099999 * 10) << 10 => 1024, (1 + 0.99999999 * 10) << 10 => 10240
zeppelin

4

파이썬 2, 93 92 바이트

import random,time
def F(s):
 if s:n=random.randint(1,10);time.sleep(n);print s[:n];F(s[n:])

Flp.Tkc 덕분에 -1 바이트

random.randint과 를 줄이는 방법이 있다고 확신 time.sleep하지만 from random,time import*작동하지 않습니다 ...


1
from random,time import*파이썬은 라이브러리를 가져올 모듈을 알지 못하므로 작동하지 않습니다.
Outgolfer Erik

파이썬 3은 1 바이트 더 깁니다. 대괄호 앞에 '('print '와'i '사이의'와 ')'를 삽입하십시오
george

1
이것을 미니 피에 적응시키기 (Python 3) : while v1:n=ri(1,10);_i("time").sleep(n);p(v1[:n]);v1=v1[n:];(명령 줄 인수에서 입력을
받음

이 1 바이트를 재귀 함수로 짧게 작성할 수 있습니다. import random,time, 그리고 def F(s):개행if s:n=random.randint(1,10);time.sleep(n);print s[:n];F(s[n:])
FlipTack

3

펄 6 , 62 바이트

{$_=$^a;while $_ {sleep my \t=(1..10).roll;put s/.**{0..t}//}}

넓히는

{ # block lambda with parameter 「$a」

  $_ = $^a; # declare parameter, and store it in 「$_」
            # ( the input is read-only by default )

  while $_ {
    # generate random number and sleep for that many seconds
    sleep my \t=(1..10).roll;

    put
      s/              # substitution on 「$_」 ( returns matched text )
        . ** { 0..t } # match at most 「t」 characters
      //              # replace it with nothing
  }
}

1

배치, 131 바이트

@set/ps=
:l
@set/an=%random%%%10+1
@timeout/t>nul %n%
@call echo(%%s:~0,%n%%%
@call set s=%%s:~%n%%%
@if not "%s%"==2" goto l

사용 set/pn=<nul이 공백을 트림 것을 제외하고 더 좋은 효과를 준 것입니다.


1

Pyth, 16 바이트

Wz.d_JhOT<zJ=>zJ

온라인으로 시도 할 수 있지만 온라인 인터프리터는 프로그램이 완료된 후에 만 ​​출력을 표시하므로 제대로 작동하지 않습니다.

설명

Wz         While z (the input) is not empty:
     hOT   Get a random number between 1-10 (inclusive)
    J      Set the variable J to that number
 .d_       Sleep for that number of seconds
 <zJ       Get and implicitly print the first J characters of the input
  >zJ      Get all characters of z at and after index J
 =         Set z to that string

1

MATL , 19 바이트

`10YrtY.ynhX<:&)wDt

작동 원리

온라인으로 사용해보십시오! 온라인 컴파일러는 일시 중지와 함께 점차적으로 출력을 생성합니다.

`         % Do...while loop
  10Yr    %   Random integer from 1 to 10
  tY.     %   Duplicate. Pause that many seconds
  y       %   Duplicate the second-top element. This is the remaining string; or it
          %   takes the input implicitly in the first iteration
  n       %   Number of elements
  hX<     %   Minimum of the number of elements and the random number
  :       %   Range from 1 to that
  &)      %   Apply as index. Push the substring as given by the index and the
          %   remaining substring
  w       %   Swap
  D       %   Display
  t       %   Duplicate the remaining substring. This is used as loop condition:
          %   if non-empty execute next iteration
          % End loop implicitly

1

베이컨 , 93 바이트

BASIC의 솔루션. RANDOM () 함수는 0에서 n-1 사이의 숫자를 생성하므로 0에서 10 사이의 숫자를 얻으려면 RANDOM (11)을 사용해야합니다.

INPUT s$
WHILE LEN(s$)>0
n=RANDOM(11)
SLEEP n*1000
?LEFT$(s$,n),SPC$(n);
s$=MID$(s$,n+1)
WEND

샘플 세션, 첫 번째 줄은 입력이고 두 번째 줄은 출력입니다.

Hiccupinator!
Hiccupi       nato    r!

2
당신이 말하는 것이 사실이라면 랜덤 함수는이어야합니다 n=RANDOM(10)+1. 코드 라인은 1-10이 아닌 0-10의 숫자를 생성합니다.
Octopus

1
@Octopus 중요하지 않습니다. 시간이 지나면 절전 모드가되고 출력이 출력되지 않기 때문입니다.

내 설명에서 오타가 수정되었습니다.
피터

1

펄, 42 바이트

41 바이트 코드 + 1 -n.

$|=$-=--$-||sleep 1+rand 10,print for/./g

처음에는 끝까지 아무것도 표시되지 않으므로 출력을 플러시하도록 Perl을 강제 실행해야 했으므로 설정했습니다 $|. 우리 $-는 문자 수를 추적하여 print음수가 될 수 없으므로 (따라서 사용할 수 --$-있고 비어있을 때 틀릴 것입니다) 그리고 또한 이것 floor의 반환을 사용하고 있기 때문에 문자 수 sleep입니다. 정말 중요하지 않습니다.

용법

perl -ne '$|=$-=--$-||sleep 1+rand 10,print for/./g' <<< 'Hello, World!'
    Hell      o, Wor     ld!
# spaces showing delay!

0

루비, 56 바이트

f=->s{n=sleep rand 1..10;print s.slice!0,n;f[s]if s!=""}

재귀 람다. 처럼 전화하십시오 f["Hello, World!"].


0

> <> (물고기) 103 88 바이트

5>:?vl1-?!v+40.    >~
   1x2v   
>^  0  |:!/>:?!v1-b2.
^-1}< <     |~!/:?!^1-i:1+?!;of3.

온라인 통역사를 찾았습니다!

이 문제를 먼저 시도하십시오 (골프 아님).

물고기는 접근 가능한 타이머를 가지고 있지 않기 때문에 일정한 양의 루프를 기다립니다 (틱).

편집 1 : 마지막 줄을 맨 위로 옮겼습니다 (마지막 2 문자로 시작 값을 재사용했습니다 (15 바이트 절약).


0

배쉬, 78 바이트

아무도 Bash 솔루션을 아직 게시하지 않았으므로 여기에 하나가 있습니다. 간단하지만 충분히 작습니다.

골프

H() { N=$(($RANDOM%10+1));sleep $N;echo ${1:0:$N};S=${1:$N};[ "$S" ] && H $S;}

테스트

>H "It's the Hiccupinator"
It's the
Hiccupi
n
ator

0

PHP, 81 바이트

for(;''<$s=&$argv[1];$s=$f($s,$n))echo($f=substr)($s,0,sleep($n=rand(1,10))?:$n);

다음과 같이 사용하십시오.

php -r "for(;''<$s=&$argv[1];$s=$f($s,$n))echo($f=substr)($s,0,sleep($n=rand(1,10))?:$n);" "Hiccupinator!"

0

C ++ 14, 202 바이트

#import<thread>
void f(auto c){if(c.size()<1)return;int n=(uintptr_t(&c)%99)/10+1;std::this_thread::sleep_for(std::chrono::seconds(n));std::cout<<c.substr(0,n)<<std::endl;f(n<c.size()?c.substr(n):"");}

입력은 std::string

언 골프 및 사용법 :

#include<iostream>
#include<string>

#import <thread>

void f(auto c){
  if (c.size() < 1) return;
  int n=(uintptr_t(&c) % 99) / 10 + 1;
  std::this_thread::sleep_for(std::chrono::seconds(n));
  std::cout << c.substr(0,n) << std::endl;
  f(n < c.size() ? c.substr(n) : "");
}

int main(){
  std::string s="abcdefghijklmnopqrstuvwxyz";
  f(s);
}

using namespace std;모든 std::s 에서 5 바이트를 저장해야합니다
Alfie Goodacre

5 @AlfieGoodacre std::(가) 하나를 golfed에 있습니다 만 사용 코드 만 4
칼 Napf

아 동일합니다!
Alfie Goodacre

0

C #, 205 바이트

void X(string s){Random r=new Random();int n=r.Next(1,11);while(n<s.Length){Console.WriteLine(s.Substring(0,n));s.Remove(0,n);n*=1000;System.Threading.Thread.Sleep(n);n=r.Next(1,11);}Console.WriteLine(s);}

나는 이것이 파괴 될 수 있다고 확신한다. 나는 그것이 서있는 것처럼 전혀 최적화하지 않았다.

언 골프 :

void X(string s)
{
    Random r = new Random();
    int n = r.Next(1,11);
    while(n < s.Length)
    {
        Console.WriteLine(s.Substring(0,n));
        s.Remove(0,n);
        n *= 1000;
        System.Threading.Thread.Sleep(n);
        n = r.Next(1,11);
    }
    Console.WriteLine(s);
}

0

PHP, 74 바이트

for($s=$argv[1];$s[$p+=$n]>"";print substr($s,$p,$n))sleep($n=rand(1,10));

로 실행하십시오 php -r 'code' "string".


0

C, 149 바이트, 테스트되지 않음

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int f(char *s){int n;while(*s){sleep(n=rand()%10+1);for(;*s&&n--;s++)printf("%.*s",1,s);}}

실행하려면 추가

int main(){f("Programming Puzzles & CodeGolf");}

그런 다음 컴파일하고 실행하십시오.


0

파이썬 3, 99 자

i=input()
import os,time
while len(i):n=1+ord(os.urandom(1))%10;time.sleep(n);print(i[:n]);i=i[n:]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.