시간 설정


27

화살표 키로 제어 할 수있는 다음 24 시간 시계를 상상해보십시오.

╔══╗ ┌──┐
║00║:│00│
╚══╝ └──┘
 HH   mm

위쪽 화살표를 두 번 누르면 ( ↑↑) 현재 포커스 된 시간 입력이 증가합니다.

╔══╗ ┌──┐
║02║:│00│
╚══╝ └──┘
 HH   mm

오른쪽 화살표 ( )를 누르면 다른 입력에 초점이 맞춰집니다.

┌──┐ ╔══╗
│02│:║00║
└──┘ ╚══╝
 HH   mm

아래쪽 화살표를 세 번 누르면 ( ↓↓↓)이 입력이 줄어 듭니다.

┌──┐ ╔══╗
│02│:║57║
└──┘ ╚══╝
 HH   mm

간단히 말해 :

  • 위쪽 화살표 ( )는 현재 활성화 된 입력을 증가시킵니다.
  • 아래쪽 화살표 ( )는 활성 입력을 줄입니다.
  • 오른쪽 화살표 ( )는 초점을 오른쪽 입력으로 이동시킵니다.
  • 왼쪽 화살표 ( )는 초점을 왼쪽 입력으로 이동시킵니다.
  • 시간 입력에 대해 예상대로 상하 움직임이 반복됩니다.
  • 좌우 움직임이 반복되지 않습니다.

도전

시계는 00:00시간 입력이 활성화 된 상태에서 시작합니다 (첫 번째 회로도 참조). 입력 명령 목록이 제공되면 결과 시간을 HH:mm형식으로 출력하십시오 .
입력은 문자열 또는 목록 (또는 동등한 언어) 일 수 있으며 다른 입력 방향은 아래 옵션 중 하나 일 수 있습니다.

  • ↑↓←→
  • udlr
  • ^v<>
  • 프로그램에 GUI가있는 경우 실제 화살표 키 누름

표준 허점이 적용됩니다.

테스트 사례

↑↑→↓↓↓ = 02:57
↓→↑←↑→↓ = 00:00
↓→→↓ = 23:59
←←←←→↑ = 00:01
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓→↓ = 23:59

1
@JonathanFrech 주어진 옵션 중 하나 인 4 개의 고유 한 값 (예 :)을 선택하면 0123다른 언어에는 도움이되지 않고 특정 언어에서는 훨씬 쉽게 문제를 해결할 수 있습니다.
Nit

1
@LuisfelipeDejesusMunoz 예, 실제로 입력 규칙에 따라 작성되었습니다.
Nit

3
나는 이것이 초를 포함한다면 더 어려울 것이라고 생각합니다. 이것은 현재 더 많은 논리를 가지고있을 것이다
Jo King

3
코나미 코드를 처리하기위한 특별한 규칙이 없습니다.
코어 덤프

1
@coredump 고려해 보았지만 대부분의 언어에서 대답의 핵심보다 더 많은 공간이 필요할 것입니다.
Nit

답변:


39

Chrome 67 (중국어 간체), 39 바이트 HTML

<input type=time value=00:00 autofocus>

Screenshot

Chrome은 다른 언어로 다른 UI 구성 요소를 표시합니다. 간단한 시간 입력이라도 영어 (미국)를 사용하는 경우 AM / PM이 표시됩니다. Chrome 언어를 변경하여 테스트하려면 변경 방법을 정리하지 마십시오.


2
Dudee !! hahah 나는 유효하지 않다라고 생각한다
Luis felipe De jesus Munoz

2
두 번 치는 AM/PM것은 나를 위해 간다
Jo King

1
@ JoKing 로케일 / 설정에 따라 다르다고 생각합니까?
Nit

1
@JoKing 로케일에 따라 다릅니다. Chrome 언어를 중국어 간체로 변경해 보셨습니까? (다시 변경하는 방법을
정리

1
그것은 firefox 61.0.1에서 작동합니다
Francisco Hahn


6

Stax , 36 35 33 32 바이트

áXò↑─↨√▓|êóÇiU&≡Q#┤Æ⌡⌠╟C▐╜√⌡∟▄╩╠

실행 및 디버깅

사용합니다 lrud.

설명:

'l/{'r/Bs$2lmM{${:14-m|+i36*24+%2|zm':* Full program,
'l/                                     Split the string on "l"
   {        m                           Map over the resulting array
    'r/                                   Split at "r"
       B                                  Uncons left, first on TOS (top of stack)
        s                                 Swap to get tail to top
         $                                Flatten; this removes multiple 'r's
          2l                              Listify two items, BOS (bottom of stack) is first element
             M                          Transpose: get [hour commands, minute commands]
              {                    m    Map:
               $                          Flatten
                {    m                    Map over single commands:
                 :1                         Number of set bits: 5 for 'u', 3 for 'd'
                   4-                       Subtract 4: u -> 1, d -> -1
                      |+                  Sum
                        i                 Iteration index: hours -> 0, minutes -> 1
                         36*24+           Multiply by 36, add 24: 0 -> 24, 1 -> 60
                               %          Modulo, this does -5 % 60 = 55
                                2|z       Stringify, left-padding with "0" to length 2
                                    ':* Join on ":"
                                        Implicit output



5

C # (. NET 코어) , 149132 바이트

s=>{var p=0;int[]h={0,0};foreach(var c in s)h[p=c<63?c/2%2:p]+=c>62?c>95?-1:1:0;return$"{(h[0]%24+24)%24:D2}:{(h[1]%60+60)%60:D2}";}

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

사용 ^v<> .

이것은 C #에서 모듈로 연산자가 예상대로 작동하지 않는다는 것을 깨달았습니다 .C #에서는 -1 % 60 = -1결국 이상한 동작을 수행해야합니다.


(h [1] % 60 + 60) % 60을 (h [1] +60) % 60으로 바꿀 수 없습니까?
IanF1

2
@ IanF1 아니오 당신은 할 수 없습니다. 사용자가 아래쪽 버튼을 100 번 누르면 어떻게됩니까? 아니면 1000 번?
Charlie

명확하게 해주셔서 감사합니다 :)이 방법이 모듈로를 적용하는 것보다 짧다는 것이 놀랍습니다 (-1 대신 59).
IanF1

5

Lua (love2d 프레임 워크), 311 308 바이트

l,b,d,t,f,a=love,{24,60},{1,-1},{0,0},1,{"left","right","up","down"}function c(n,i)t[f]=(n+d[i])%b[f]end function l.draw()h,m=t[1],t[2]l.graphics.print((h<10 and 0 ..h or h)..":"..(m<10 and 0 ..m or m),0,0)end function l.keypressed(k)for i,n in pairs(a)do f=k==n and(i>2 and(c(t[f],i-2)or f)or i)or f end end

스크램블되지 않은 버전 :

--initialize all needed values
l,b,d,t,f,a=love,{24,60},{1,-1},{0,0},1,{"left","right","up","down"}

--increase the numbers depending on the focus and up or down
function c(n,i)
  t[f]=(n+d[i])%b[f]
end 

--draw the time to the screen
function l.draw()
  h,m=t[1],t[2]
  l.graphics.print((h<10 and 0 ..h or h)..":"..(m<10 and 0 ..m or m),0,0)
end

--get the keys and check if it is an arrow key
function l.keypressed(k)
  for i,n in pairs(a)do
    f=k==n and(i>2 and(c(t[f],i-2)or f)or i)or f 
  end 
end

모든 if가 삼진 진술 (.. 및 .. 또는)과 교환되기 때문에 여전히 100 % 읽기 쉽지 않을 것입니다 :)

사랑으로 main.lua에서 시작하면 창이 나타나고 화살표 키를 눌러 숫자를 변경할 수 있습니다


가독성을 위해 확장 된 버전을 게시 할 수 있습니까
-aaaaa는 Monica

확실히, 나는 확장 버전을 추가했습니다 문제 없음 :)
Lycea

4

MATL , 57 56 55 바이트

1Oi9\"@5<?y@3-ZS*+}wx7@-X^w]]wx&Zjh24 60h\'%02d:%02d'YD

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

복소수를 사용하여 시간과 분을 나타내며 실수 부분은 시간과 허수 부분입니다.

의견 :

1     % Push 1 on the stack
      % represents which timer box we're in, starts at hour box
      % imaginary number j would represent minutes box
O     % Push initial hour and minutes 0+0j
i9\   % Fetch input, mod each character's ASCII value by 9.
      % Gives 4 1 8 6 for ^ v > < respectively
"     % iterate through (modded) input
  @5<?     % Push current input, see if it's < 5 
           % if so, it's an up or down time change
    y        % so copy out the box indicator (1 or j)
    @3-      % Subtract 3 from the current input
    ZS       % Take the result's sign (-1 for v, 1 for ^)
    *        % Multiply indicator with that
    +        % Add the result to the time value
  }        % else, it's a right or left arrow
    wx       % so bring out the box indicator and delete it
    7@-      % Subtract current input from 7. 1 for < and -1 for >
    X^       % Take the square root of that. 1 for < and j for >
    w        % switch stack to bring time value on top again
  ]       % end if
]     % end loop
wx    % bring box indicator out, delete it
&Zj   % split the complex time value to real and imaginary
h     % then concatenate them into an array
24 60h\ % mod hour and minute values by 24 and 60 respectively
'%02d:%02d'YD % sprintf the time array with 0-padding

4

PHP , 145 (134) 133 바이트

(골프 더 11 바이트)

( Davіd 의 루프 방법 을 사용하여 1 바이트 )

<?for($h=$m=0,$a=h;$c=$argv[++$i];)$c<l?$$a--:($c>r?$$a++:$a=$c<r?h:m);$h%=24;$m%=60;printf('%02d:%02d',$h<0?$h+24:$h,$m<0?$m+60:$m);

그것을 실행하려면 :

php -n -d error_reporting=0 <filename> <command_1> <command_2> ... <command_n>

예:

php -n -d error_reporting=0 time_setter.php u u r d d d l d

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

노트:

  • 일부 바이트를 절약하기 위해 작은 / 큰 따옴표가없는 문자열을 문자열 래퍼로 사용했습니다. 그래서error_reporting=0 옵션은 경고를 출력하지 않는 데 사용됩니다.
  • 입력 명령 : u d l r

128 바이트, -6 : 온라인으로 사용해보십시오! (좋은 해결책, btw :)
Davіd

@ Davіd : 감사합니다.하지만 업데이트에는 두 가지 문제가 있습니다. 먼저 $ h가 설정되어 있지 않으므로 시작시 줄이면 실패합니다. 온라인으로 시도하십시오!
Night2

@David : 두 번째 문제는 시간 / 분을 24/60 번 이상 위 / 아래로 전환하면 발생 합니다.
Night2

@ Davіd : 그러나 루프 방법 덕분에 1 바이트를 더 줄일 수 있습니다. 온라인으로 시도하십시오!
Night2

아, 좋아, 미안 그것은 완전히 작동하지 않았다 :)
Davіd


3

하스켈, 236 바이트

f=u 0 0
k _ _ _ _ _ h m[]=z h++':':z m
k a b c d e h m(q:s)=case q of{'^'->e(a h)(b m)s;'v'->e(c h)(d m)s;'>'->v h m s;'<'->u h m s}
u=k(o(+)24)id(o(-)24)id u
v=k id(o(+)60)id(o(-)60)v
o f m x=mod(f x 1)m
z n|n<10='0':show n
z n=show n

f주요 기능이며 유형은 String -> String다음 과 같습니다.

*Main> f "^^>vvv"
"02:57"
*Main> f "v>^<^>v"
"00:00"
*Main> f "v>>v"
"23:59"
*Main> f "<<<<>^"
"00:01"
*Main> f "vvvvvvvvvvvvvvvvvvvvvvvvv>v"
"23:59"

기본적 uv유형의 상호 재귀 기능은 다음과 같습니다 Integer -> Integer -> String -> String. set의 시간, 분 및 문자 목록을 가져 와서 {v,^,<,>}시간 문자열을 리턴합니다. u시간 다이얼이 강조되는 경우, 재귀 적으로 호출하는 역할을 u목록의 머리에있는 경우 {v,^}, 그리고 v리스트의 머리에있는 경우 {<,>}. v비슷하지만 분 다이얼과 비슷합니다.

다른 모든 것은 문자를 저장하는 것입니다.


3

루아 , 132 바이트

loadstring's,t,m=1,{0,0},{24,60}for c in(...):gmatch"."do t[s]=(t[s]+(("d u"):find(c)or 2)-2)%m[s]s=("lr"):find(c)or s end return t'

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


설명

이것은 익명 함수입니다 (사용 방법은 링크에 표시됨).

s=1 -- s will control the selection (1 is hour and 2 min)
t={0,0} -- is the time itself
m={24,60} -- is the maximum for each 'box' (hour or min)
-- I've actually used Lua's multiple variable assignment: s,t,m=1,{0,0},{24,60}

for c in (...):gmatch(".") do -- go through each character of the input
  t[s] = (t[s] + (("d u"):find(c) or 2)-2) % m[s] -- set the current 'box' as
          t[s] +   -- itself plus ...
                  ("d u"):find(c) or 2   -- it's index on the string "d u" (that means it's going to be 1 or 3)
                                         -- or 2 if it wasn't found (if the current character doesn't sum or subtract from the box)
                                       -2   -- this adjusts the result 1, 2 or 3 to being -1, 0 or 1
                                            -- making the inputs 'd' and 'u' as -1 and +1 respectively, and an input different from both as 0
         (                               ) % m[s]   -- modulo of the maximum of the selected 'box'

  s=("lr"):find(c) or s
    ("lr"):find(c)   -- if the current input character is l or r, then set 's' (the 'box' selection) to being 1 or 2.
                   or s   -- else let it as is
end
return t -- returns 't', a table with hour and minutes respectively

결과는 HH:mm표가 아닌 형식이어야합니다.
Jo King

2

자바 8, 121 바이트

c->{int i=0,m[]={0,0,0};for(int t:c)if(t<63)i=t%4;else m[i]+=(t&8)>0?1:119;return"".format("%02d:%02d",m[0]%24,m[2]%60);}

포트 조나단 FRECH 의 C의 대답 . 수락 ^v<>합니다. 여기에서 온라인으로 사용해보십시오 .


2

젤리 , 36 바이트

나는 O%5;4ṣ3œṡ€4Z%3’§§%"“ð<‘DŻ€ṫ€-j”:32에서 작동해야 한다고 생각 하지만 œṡ 현재 버그가있는 것 같습니다 .

O%5;4ṣ3i€4$œṖ"$Z%3’§§%"“ð<‘DŻ€ṫ€-j”:

STDOUT에 결과를 인쇄하는 전체 프로그램 (모나 딕 링크로 실제로는 정수 (단일 숫자 임에도 불구하고)과 문자 ( : .

사용 udlr입력 옵션을 .

온라인으로 사용해보십시오! 아니면 테스트 스위트를 .

방법?

O%5;4ṣ3i€4$œṖ"$Z%3’§§%"“ð<‘DŻ€ṫ€-j”: - Link: list of characters (in 'udlr')
O                                    - to ordinals
 %5                                  - modulo five  ...maps u:2, d:0, l:3, r:4
   ;4                                - concatenate a 4 (to always end up with both hrs & mins - even when no r is ever pressed)
     ṣ3                              - split at threes (the l presses)
       i€4$œṖ"$                      - a replacement for œṡ€4 (split each at first occurrence of)...
              $                      - | last two links as a monad:
          $                          - |   last two links as a monad:
         4                           - |     literal four
       i€                            - |     for €ach get first index of (4) else yield 0
             "                       - |   zip with:
           œṖ                        - |     partition at indices
               Z                     - transpose (to get a list of two lists of lists)
                %3                   - modulo by three. To replace any 4(r) with 1
                                     -  ...while keeping any 0(d) as 0, or 2(u) as 2
                  ’                  - decrement. All r are now 0, d are -1 and u are 1
                   §                 - sum each
                    §                - sum each. Now we have the total increase value as
                                     -    ...integers for each of hrs and mins
                       “ð<‘          - code-page indices list = [24,60]
                      "              - zip with:
                     %               -   modulo
                           D         - to decimal lists
                            Ż€       - prepend each with a zero (to cater for values less than ten)
                              ṫ€-    - tail each from index -1. Keeps rightmost two digits of each only)
                                  ”: - literal character ':'
                                 j   - join
                                     - as full program implicit print (smashes the digits and characters together)


2

Q 기본 , 229 바이트

키 입력으로 입력을 받아 콘솔로 출력하는 스크립트입니다.

참고 : 터미널 "은 구문 강조에만 포함되며 바이트 수에 영향을주지 않습니다.

z$=CHR$(0)
DO
x=0
y=0
SELECT CASE INKEY$
CASE z$+"K"
r=0
CASE z$+"M"
r=1
CASE z$+"H"
x=1
y=1
CASE z$+"P"
x=23
y=59
END SELECT
IF r THEN m=(m+y)MOD 60ELSE h=(h+x)MOD 24
CLS
?RIGHT$("00000"+LTRIM$(STR$(h*1000+m)),5)
LOCATE 1,3
?":"
LOOP

댓글

z$=CHR$(0)                                      ''  Set var to null char
DO                                              ''
    x=0                                         ''  Set Hours Shift to 0 
    y=0                                         ''  Set Minutes Shift to 0 
    SELECT CASE INKEY$                          ''  Take keystroke input
        CASE z$+"K"                             ''  If is Left Arrow
            r=0                                 ''    Bool to modify right (minutes) 
        CASE z$+"M"                             ''  If is Right Arrow
            r=1                                 ''    Bool to modify left (hours)
        CASE z$+"H"                             ''  If is Up Arrow
            x=1                                 ''    Set Hours Shift to 1 
            y=1                                 ''    Set Minutes Shift to 1
        CASE z$+"P"                             ''  If is Down Arrow
            x=23                                ''    Set Hours Shift to 23 
            y=59                                ''    Set Minutes Shift to 23 
    END SELECT                                  ''
    IF r THEN m=(m+y)MOD 60ELSE h=(h+x)MOD 24   ''  Shift Minutes If `r=1` Else Shift Hours
    CLS                                         ''  Clear Screen
    ?RIGHT$("00000"+LTRIM$(STR$(h*1000+m)),5)   ''  Use math to concat Hours and Minutes 
                                                ''  then Convert to String and prepend 0s 
                                                ''  to a length of 5
    LOCATE 1,3                                  ''  Cursor to the the third digit
    ?":"                                        ''  Overwrite that digit with a `:`
LOOP                                            ''  Loop

1
그렇지 (m+y)않습니까?
Neil

메모에서, 안 않습니다 ?
Jonathan Frech

@JonathanFrech-그렇습니다. 문법 검사를 해주셔서 감사합니다
Taylor Scott

죄송합니다, m어떤 이유로 몇 분 동안 인 것 같습니다 ... 귀하의 의견을 인용 한 버전이 더 읽기 쉽습니다.
Neil

2

파워 쉘, 109 103 바이트

-6 바이트 감사 AdmBorkBork

$t=0,0
$args|%{$t[+$i]+=. @{l={$i=0};r={$i=1};u={1};d={119}}.$_}
"{0:00}:{1:00}"-f($t[0]%24),($t[1]%60)

테스트 스크립트 :

$f = {

$t=0,0
$args|%{$t[+$i]+=. @{l={$i=0};r={$i=1};u={1};d={119}}.$_}
"{0:00}:{1:00}"-f($t[0]%24),($t[1]%60)

}

@(
    ,('02:57',('u','u','r','d','d','d'))
    ,('00:00',('d','r','u','l','u','r','d'))
    ,('23:59',('d','r','r','d'))
    ,('00:01',('l','l','l','l','r','u'))
    ,('23:59',('d','d','d','d','d','d','d','d','d','d','d','d','d','d','d','d','d','d','d','d','d','d','d','d','d','r','d'))
) | % {
    $e, $c = $_
    $r = &$f @c
    "$($r-eq$e): $r"
}

산출:

True: 02:57
True: 00:00
True: 23:59
True: 00:01
True: 23:59

설명

기본 아이디어는 사용하는 것입니다 [hashtable]하는 keys제어 명령하고 valuesscriptblocks됩니다. 이 코드는 인수에서 각 명령에 대한 스크립트 블록을 실행합니다.


1
바이트를 저장하는 $i=0것처럼 배열 인덱스를 캐스팅하여 제거 할 수 있습니다 $t[+$i]. 온라인으로 사용해보십시오!
AdmBorkBork


1

perl -F // -E, 72 바이트

$x=H;/u/?$$x++:/d/?$$x--:($x=/l/?H:M)for@F;printf"%02d:%02d",$H%24,$M%60

1

파이썬, 120 바이트

o,i=[0,0],0
for s in list(input()):i=(i+(s=='r')-(s=='l')>=1);o[i]+=(s=='u')-(s=='d')
print'%02d:%02d'%(o[0]%24,o[1]%60)

이것은 변수에 입력을받는 스 니펫처럼 보입니다. 일반적으로 전체 프로그램 (프로그램 인수 또는 표준 입력에서 입력) 또는 함수 (함수 매개 변수에서 입력)를 표시하려면 응답이 필요합니다.
OOBalance

1
또한, 벽에이 실행이 말의 입력하지 않을 경우 ld또는 rru원인 i의 범위 (0,1) 떠날과 o[i]이후에 액세스 할 수 있습니다?
OOBalance

@OOBalance 아 기능이나 필요하다는 것을 상기시켜 주셔서 감사합니다 unput(). 요구 사항에서 나는 L과 R의 행동이 루프 주위에 (즉 더 않을 생각 LL)
AAAAA는 분석 재개 모니카 말한다

@aaaaaa 루핑 없음은와 lll동일하지 않습니다 r. 유효한 입력 이 ll있거나 rr테스트 케이스에도 있습니다 (예 : 세 번째 입력 참조).
Nit

이 답변은 현재 출력하는 대신 세 번째 테스트 사례에 IndexError가 23:59있습니다. 온라인으로 사용해보십시오!
0 '


1

R, 368 355 바이트

f=function(){C=as.character
i=ifelse
p=paste0
r=1:10
h=C(0:23);m=C(0:59)
h[r]=p(0,h[r])
m[r]=p(0,m[r])
x=y=z=1
while(T){print(p(h[x],":",m[y]))
v=1
n="[UDLRS]"
while(!grepl(n,v))v=toupper(readline(n))
if(v=="L")z=1 else if(v=="R")z=0
if(v=="S")T=F
if(v=="U")if(z)x=i(x==24,1,x+1)else y=i(y==60,1,y+1)
if(v=="D")if(z)x=i(x==1,24,x-1)else y=i(y==1,60,y-1)}}

확실히 최선의 접근 방법은 아니지만 작동합니다.

기능 : 기능 실행, 각 문자를 입력 (감소) 또는 왼쪽 / 오른쪽으로 이동, "s"를 입력하면 "게임"이 종료됩니다. 캐치는 한 번에 하나의 문자 만 허용한다는 것입니다.

-13 bytes 일부 값을 하나의 행으로 통합하고 break를 사용하는 대신 T를 F로 덮어 쓰고 제거 할 공백이 여러 개 발견되었으며 대신 문자열이 변수에 저장 됨

f=function(){C=as.character                             # Abbreviate functions
i=ifelse
p=paste0
r=1:10                                                  # Initialize and format values
h=C(0:23);m=C(0:59)
h[r]=p(0,h[r])
m[r]=p(0,m[r])
x=y=z=1
while(T){print(p(h[x],":",m[y]))                        # Begin while loop and print time
v=1                                                     # Initial value reset each iteration to retrieve a new direction
n="[UDLRS]"                                             # Used for verification and request
while(!grepl(n,v))v=toupper(readline(n))                # Will only accept proper directions or stopping rule
if(v=="L")z=1 else if(v=="R")z=0                        # Evaluate for hour or minute
if(v=="S")T=F                                           # Stopping rule, overwrite True to False
if(v=="U")if(z)x=i(x==24,1,x+1)else y=i(y==60,1,y+1)    # Rules for Up
if(v=="D")if(z)x=i(x==1,24,x-1)else y=i(y==1,60,y-1)}}  # Rules for Down

R 문자열 및 / 또는 벡터를 허용하도록 대체 형식을 편집 중이며 다음 주에 게시됩니다.


1

SmileBASIC, 123 바이트

@L
B=BUTTON(2)D=(B==1)-(B==2)S=S+!S*(B>7)-S*(B==4)H=(H+D*!S+24)MOD 24WAIT
M=(M+D*S+60)MOD 60?FORMAT$("%02D:%02D",H,M)GOTO@L

BUTTON() 각 비트가 버튼을 나타내는 정수를 반환

1 = up
2 = down
4 = left
8 = right
...

BUTTON(2) 방금 누른 버튼 만 누르고 있습니다 (보지 않은 상태).

WAIT 필요하기 때문에 BUTTON프레임 당 한 번만 업데이트 (1/60 초) 필요합니다. 그렇지 않으면 동일한 버튼 누름이 여러 번 감지됩니다.

확실히 더 짧을 수 있습니다


0

05AB1E , 38 37 바이트

'l¡ε'r¡}0ζćs˜‚€S„udS1®‚:OŽ9¦2ä%T‰J':ý

용도 udlr방향에 대한뿐만 아니라, 사용할 수 있습니다 ^v<>(문자가 같은 바이트 카운트 ↑↓←→그래서 인코딩이 ASCII로 변경해야하기 때문에, 많은에 의해 바이트 수를 증가시킬 것들을 사용하여, 05AB1E의 코드 페이지의 일부가 아닌).

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

'l¡            '# Split the (implicit) input on "l"
                #  i.e. "lllrurulddd" → ["","","","ruru","ddd"]
   ε   }        # Map each item to:
    'r¡        '#  Split the item on "r"
                #   i.e. ["","","","ruru","ddd"] → [[""],[""],[""],["","u","u"],["ddd"]]
        0ζ      # Zip/transpose; swapping rows/columns, with "0" as filler
                #  i.e. [[""],[""],[""],["","u","u"],["ddd"]]
                #   → [["","","","","ddd"],["0","0","0","u","0"],["0","0","0","u","0"]]
ć               # Head extracted: pop and push the remainder and head-item to the stack
                #  i.e. [["","","","","ddd"],["0","0","0","u","0"],["0","0","0","u","0"]]
                #   → [["0","0","0","u","0"],["0","0","0","u","0"]] and ["","","","","ddd"]
 s              # Swap to get the remainder
  ˜             # Flatten it
                #  i.e. [["0","0","0","u","0"],["0","0","0","u","0"]]
                #   → ["0","0","0","u","0","0","0","0","u","0"]
               # Pair the head and remainder back together
                #  i.e. ["","","","","ddd"] and ["0","0","0","u","0","0","0","0","u","0"]
                #   → [["","","","","ddd"],["0","0","0","u","0","0","0","0","u","0"]]
    S          # Convert each item to a list of characters
                # (implicitly flattens and removes empty strings)
                #  i.e. [["","","","","ddd"],["0","0","0","u","0","0","0","0","u","0"]]
                #   → [["d","d","d"],["0","0","0","u","0","0","0","0","u","0"]]
      udS1®‚:  # Replace all "u" with "1" and all "d" with "-1"
                #  i.e. [["d","d","d"],["0","0","0","u","0","0","0","0","u","0"]]
                #   → [["-1","-1","-1"],["0","0","0","1","0","0","0","0","1","0"]]
              O # Then take the sum of each inner list
                #  i.e. [["-1","-1","-1"],["0","0","0","1","0","0","0","0","1","0"]]
                #   → [-3,2]
Ž9¦             # Push compressed integer 2460
   2ä           # Split into two parts: [24,60]
     %          # Modulo the two lists
                #  i.e. [-3,2] and [24,60] → [21,2]
      T        # Divmod each with 10
                #  i.e. [21,2] → [[2,1],[0,2]]
        J       # Join each inner list together
                #  i.e. [[2,1],[0,2]] → ["21","02"]
         ':ý   '# Join the list with ":" delimiter
                #  i.e. ["21","02"] → "21:02"
                # (and output the result implicitly)

내이 05AB1E 팁을 참조하십시오 (섹션 얼마나 큰 정수를 압축하는 방법을? ) 이유를 이해하는 Ž9¦것입니다 2460.

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