Zaman ayarı


27

Ok tuşları ile kontrol edilebilecek aşağıdaki 24 saatlik saati hayal edin:

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

Yukarı oka iki kez ( ↑↑) basmak o andaki odaklanmış saat girişini arttırır:

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

Sağ oka ( ) basmak diğer girişi odaklar.

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

Aşağı ok tuşuna üç kez ( ↓↓↓) basmak bu girişi azaltacaktır.

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

Kısaca koymak:

  • Yukarı ok ( ) mevcut aktif girişi arttırır.
  • Aşağı ok ( ) aktif girişi azaltır.
  • Sağ ok ( ) odağı sağ girişe taşıyacaktır.
  • Sol ok ( ) odağı soldaki girişe taşıyacaktır.
  • Yukarı ve aşağı hareket, bir zaman girişi için beklendiği gibi dönecektir.
  • Sol ve sağ hareket etrafında dolaşmaz.

Meydan okuma

Saat 00:00aktif giriş saati ile başlar (ilk şemaya bakın). Bir giriş komutu listesi göz önüne alındığında, ortaya çıkan zamanı HH:mmbiçiminde verin.
Giriş, farklı giriş yönlerinin aşağıdaki seçeneklerden biri olabileceği bir dize veya bir liste (veya dil eşdeğeriniz) olabilir:

  • ↑↓←→
  • udlr
  • ^v<>
  • Programın GUI'si varsa, gerçek ok tuşuna basar

Standart boşluklar uygulanır.

Test durumları

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

1
@JonathanFrech Verilen seçeneklerden biri, herhangi bir benzersiz değer seçmek (örneğin 0123), bazı dillerde başkalarına fayda sağlamazken mücadeleyi çok daha kolaylaştıracaktır.
Nit

1
@LuisfelipeDejesusMunoz Evet, bu aslında giriş kuralları çerçevesinde yazılmıştır.
Nit

3
Sanırım bu, saniyeler dahilse daha zor olurdu. Bu, hangisinin odakta olduğu konusunda daha fazla mantığa sahip olacaktı
Jo King,

3
Konami kodunu işlemek için özel bir kural eksik.
coredump

1
@coredump Bunu göz önüne aldık, ancak çoğu dilde cevabın çekirdeğinden daha fazla yer kaplar.
Nit

Yanıtlar:


39

Google Chrome 67’de Çince (Basitleştirilmiş), 39 bayt HTML

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

Screenshot

Chrome, farklı UI bileşenlerini farklı dillerde gösterir. Basit bir zaman girişi bile: İngilizce (ABD) kullanıyorsanız, AM / PM gösterilecektir. Chrome'un dilini değiştirerek bunu test etmek istiyorsanız. Nasıl değiştireceğinizi toparlamayın.


2
Dudee !! hahah bence geçerli değil tho
Luis felipe De jesus Munoz

2
Sağa iki kez vurmak AM/PMbenim için de geçerli
Jo King

1
@JoKing Yerel ayarlara / ayarlara bağlı olduğunu düşünüyorum?
Nit

1
@JoKing Yerel ayarlara bağlı. Belki de Chrome'unuzun dilini Çince Basitleştir olarak değiştirmeyi deneyebilir misiniz? (Geri nasıl değiştireceğinizi
toparlamayın

1
Firefox 61.0.1 üzerinde çalışıyor
Francisco Hahn


6

Stax , 36 35 33 32 bayt

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

Koş ve hata ayıkla

Kullanır lrud.

Açıklama:

'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 Core) , 149 132 bayt

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}";}

Çevrimiçi deneyin!

Kullanarak ^v<>.

Bu, C # 'daki modulo operatörünün beklendiği gibi çalışmadığını fark etti, çünkü C #' da -1 % 60 = -1, sonunda bu garip işlemi yapmam gerekiyor.


(H [1]% 60 + 60)% 60 yerine (h [1] +60)% 60 kullanılamaz mı?
IanF1

2
@ IanF1 hayır yapamazsınız. Kullanıcı aşağı düğmesine 100 kez basarsa ne olur? Veya 1000 kere mi?
Charlie

açıklığa kavuşturduğun için teşekkürler :) bu yolun moduloyu anında uygulamaktan daha kısa olması şaşırtıcıydı (59 yerine -1 yerine).
IanF1

5

Lua (love2d çerçevesi), 311 308 bayt

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

Uncrumbeled versiyonu:

--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

Muhtemelen hala% 100 okunması kolay değildir, çünkü tüm if'ler bir trinary deyimiyle değiştirilmiştir (..ve .. or) :)

Eğer bir main.lua'da sevgi ile başlarsanız o zaman bir pencere açılacak ve sayıları değiştirmek için ok tuşlarına basabilirsiniz.


ayrıca okunabilirlik için genişletilmiş sürümü de gönderebilir misin
aaaaa, Monica

elbette, sorun değil genişletilmiş bir versiyonunu ekledim :)
Lycea

4

MATL , 57 56 55 bayt

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

Çevrimiçi deneyin!

Karmaşık sayıları kullanarak saati ve dakikayı temsil eder, gerçek kısım saatler ve hayali kısım dakikalardır.

Yorumlarla:

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 bayt

(Daha fazla golf tarafından -11 bayt)

( Davіd'ın döngü metodunu kullanarak -1 bayt )

<?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);

Çalıştırmak için:

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

Örnek:

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

Veya çevrimiçi deneyin!

Notlar:

  • Bazı baytları kaydetmek için, dize sarmalayıcısı olarak tek / çift alıntı içermeyen dizeler kullandım. Bu nedenle, error_reporting=0seçenek uyarı vermemek için kullanılır.
  • Giriş komutları: u d l r

128 bayt, -6: Çevrimiçi dene! (Güzel çözüm, btw :)
Davіd

@ Davіd: Teşekkürler, ancak güncellemenizin iki sorunu var. Öncelikle $ h ayarlanmadığı için başlangıçta düşürmek başarısız oluyor: Çevrimiçi deneyin!
Gece2

@David: İkinci sorun saat / dakikayı 24/60 kereden daha fazla değiştirdiğimizde oluyor: Çevrimiçi deneyin!
Gece2

@ Davіd: Fakat döngü metodunuz sayesinde 1 bayt daha azaltabilirim: Çevrimiçi deneyin!
Gece2

ah, tamam, üzgünüm tamamen işe yaramadı :)
Davіd

4

JavaScript, 104 103 bayt

Girişi kullanarak karakter dizisi olarak girdi <>^v.

a=>(a.map(z=>z<"^"?a=z<">":a?x+=z<"v"||23:y+=z<"v"||59,x=y=0),g=n=>`0${n}`.slice(-2))(x%24)+`:`+g(y%60)

Çevrimiçi deneyin


3

Haskell, 236 bayt

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

fana işlevi ve tür vardır 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"

Esasen uve vkarşılıklı olarak özyinelemeli tür fonksiyonlardır Integer -> Integer -> String -> String. Set üzerindeki saati, dakikayı ve bir karakter listesini alırlar {v,^,<,>}ve zaman dizesini döndürürler. usaat kadranı vurgulanmış ise, yinelemeli çağırma gibi davranan ulistenin baş olup olmadığını {v,^}vev listenin baş ise{<,>} . vbenzer ancak dakika kadranı için.

Geriye kalan her şey sadece karakterleri kurtarıyor.


3

Lua , 132 bayt

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'

Çevrimiçi deneyin!


açıklama

Bu isimsiz bir işlevdir (kullanım şekli bağlantıda gösterilir).

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

Çıktı HH:mmbir tablodan ziyade formatta olmalıdır
Jo King

2

Java 8, 121 bayt

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);}

Jonathan Frech'in C cevabı limanı . Kabul eder ^v<>. Burada çevrimiçi deneyin .


2

Jöle , 36 bayt

O%5;4ṣ3œṡ€4Z%3’§§%"“ð<‘DŻ€ṫ€-j”:32 için çalışması gerektiğini düşünüyorum , ancak œṡ şu anda bir hata var gibi görünüyor .

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

Sonucu STDOUT'a (monadik bir link olarak) karışık bir tamsayılar listesi (tek haneli olanlar da dahil) ve karakterlere döndüren tam bir program : .

udlrGiriş seçeneğini kullanır .

Çevrimiçi deneyin! Veya bir test odasına bakın .

Nasıl?

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

QBasic , 229 bayt

Tuş vuruşları olarak giriş alan ve konsola çıkan bir komut dosyası.

Not: terminal "sadece sözdizimi vurgulaması için dahil edilmiştir ve bytecount'a katkıda bulunmaz

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

Yorumlananlar

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
Olmamalı mıydı (m+y)?
Neil

Notta, olmamalıdır mu edilmesi yapmak ?
Jonathan Frech

@JonathanFrech - Evet öyle olmalı. Dilbilgimi kontrol altında tuttuğun için teşekkürler
Taylor Scott

Üzgünüm, bir msebepten birkaç dakika olduğunu düşündüm ... Yorumlu versiyonunun daha okunaklı olduğunu gördüm.
Neil,

2

Powershell, 109 103 bayt

-6 bayt teşekkürler 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)

Test komut dosyası:

$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"
}

Çıktı:

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

açıklama

Temel fikir, kontrol komutları olan ve script blokları [hashtable]olan a kullanmaktır . Kod, her komut için scriptblock işlevini argümanlardan yürütür.keysvalues


1
$i=0Dizi baytınızı, $t[+$i]bazı baytları kaydetmek gibi kullanmaktan kurtulabilirsiniz . Çevrimiçi deneyin!
AdmBorkBork,

2

Perl 6 , 101 91 89 86 bayt

{$/=[];$!=0;$_>2>($!=$_-3)||($/[$!]+=$_-1)for .ords X%5;($0%24,$1%60).fmt("%02d",":")}

Çevrimiçi deneyin!

uldrKarakter dizisini alan ve verilen biçimde döndüren adsız kod bloğu


1

perl -F // -E, 72 bayt

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

1

Python, 120 bayt

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)

Bu değişkende giriş alan bir snippet'e benziyor. Genel bir kural olarak, tam bir program (program argümanlarından veya standart girdilerden girdi alarak) veya bir işlev (işlev parametrelerinden girdi alarak) sunmak için cevaplar isteriz.
OOBalance

1
Ayrıca, girişin (0,1) bir girişi, söylenmesi ldya da menzilden çıkmasına rruneden iolduğu ve o[i]sonrasında erişildiği zaman, bu bir duvarla karşılaşmaz mı?
OOBalance

@OOBalance oh, ya da işleve ihtiyacınız olduğunu hatırlattığınız için teşekkür ederiz unput(). Gereksinimlerden, L ve R işlemlerinin asla dönmeyeceğini düşündüm (yani hayır LL)
dolaşmadığını

@ aaaaaa Hiçbir döngü aracı lllaynı değildir r. Geçerli girdi olması llveya rrgeçerli olması durumunda, test testlerinde de yer almaktadır, örneğin üçüncü sınıfa bakınız.
Nit

Bu cevap şu anda çıktı vermek yerine 3. test senaryosunda IndexError'a sahip 23:59. Çevrimiçi deneyin!
0

1

Haskell , 186 bayt

f(0,0)'<'
f t i('^':r)=f(i#t$1)i r
f t i('v':r)=f(i#t$ -1)i r
f t i(x:r)=f t x r
f(h,m)_ _=s h++':':s m
('<'#(h,m))n=(mod(24+n+h)24,m)
(_#(h,m))n=(h,mod(60+n+m)60)
s n=['0'|n<10]++show n

Çevrimiçi deneyin!


1

R ', 368 355 bayt

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)}}

Kesinlikle en iyi yaklaşım değil, işe yarıyor.

İşlevsellik: Run işlevi, her harfi (in / de) kırışmak veya sola / sağa hareket ettirmek, "s" yazmak "oyunu" sonlandırmaktır. Buradaki yakalamak, bir seferde bir ve bir mektubu kabul edeceği.

-13 bytes Bazı değerleri tek satırda bir araya getirir, mola kullanmak yerine F olarak T üzerine yazar, ortadan kaldırmak için birkaç boşluk ve bunun yerine değişkende saklanan bir dize yazar.

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

Ayrıca, gelecek hafta gönderecek olan bir R dizesini ve / veya vektörünü kabul etmek için alternatif bir format da yapıyorum.


1

SmileBASIC, 123 bayt

@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() her bitin bir düğmeyi temsil ettiği bir tam sayı döndürür

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

BUTTON(2) sadece yeni basılmış düğmeleri döndürür (tutulmuyor)

WAIT gerekli çünkü BUTTON sadece kare başına bir kez güncelleme yapar (saniyenin 1 / 60'ı). Aksi takdirde, aynı düğmeye basıldığında birden çok kez algılanır.

Bu kesinlikle daha kısa olabilir


0

05AB1E , 38 37 bayt

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

udlrYol tarifleri için kullanır , ancak ^v<>aynı bayt sayısı için de kullanılabilir (karakterler↑↓←→ 05AB1E'nin kod sayfasının bir parçası değildir, bu nedenle bunları kullanmak bayt sayısını çok fazla artırır, çünkü kodlamanın ASCII olarak değiştirilmesi gerekir).

Çevrimiçi deneyin veya tüm test durumlarını doğrulayın .

Açıklama:

'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)

Benim bu 05AB1E ucu bakın (bölüm ne kadar büyük tamsayılar sıkıştırmak için? ) Anlamak için Ž9¦olduğunu 2460.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.