Chơi với rùa nhạc


20

Hai đứa tôi thích chơi với đồ chơi sau:

Rùa

Các khu vực màu với hình dạng bên trong có thể được chạm vào và rùa sau đó chiếu sáng khu vực và phát âm thanh hoặc nói tên của màu sắc hoặc hình dạng bên trong. Nút giữa thay đổi chế độ. Có một chế độ trong đó các khu vực phát các nốt nhạc khác nhau khi chạm vào, với một nút xoắn: nếu đứa trẻ chạm vào ba khu vực liên tiếp theo chiều kim đồng hồ, một giai điệu 1 đặc biệt sẽ được phát. Nếu ba khu vực liên tiếp chạm được đặt ngược chiều kim đồng hồ, giai điệu 2 đặc biệt sẽ được phát.

Các thách thức

Hãy mô phỏng logic bên trong của đồ chơi. Cho một chuỗi có 3 lần nhấn của đứa trẻ, trả về hai giá trị riêng biệt, mạch lạc nếu ba lần nhấn dành cho các khu vực liên tiếp (theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ) và giá trị khác biệt thứ ba nếu không.

Chi tiết

  • Các khu vực đầu vào sẽ được đặt tên với mỗi ký tự, có thể là màu của chúng: ROYGBcho màu đỏ, cam, vàng, xanh lá cây và xanh dương; hoặc hình dạng của chúng: HSRTCcho hình trái tim, hình vuông, ngôi sao ( R), hình tam giác và hình tròn. Trường hợp không quan trọng, bạn có thể chọn làm việc với đầu vào và đầu ra chỉ bằng chữ hoa hoặc chữ thường.
  • Chương trình sẽ nhận được một chuỗi (hoặc mảng char hoặc bất cứ thứ gì tương đương) với ba lần nhấn. Ví dụ (sử dụng các màu sắc): RBO, GYO, BBR, YRG, YGB, ORB...
  • Chương trình sẽ đưa ra ba giá trị riêng biệt, mạch lạc để thể hiện ba kết quả có thể xảy ra: giá trị thứ nhất nếu sự kết hợp không kích hoạt giai điệu đặc biệt, giá trị thứ hai nếu sự kết hợp kích hoạt giai điệu đặc biệt theo chiều kim đồng hồ và giá trị thứ ba nếu sự kết hợp kích hoạt giai điệu ngược chiều ngược chiều. Ví dụ: 0không có sự kết hợp đặc biệt nào, 1đối với giai điệu được kích hoạt bởi sự kết hợp theo chiều kim đồng hồ và -1đối với giai điệu được kích hoạt bởi sự kết hợp ngược chiều kim đồng hồ.
  • Bạn không cần phải lo lắng về việc xử lý đầu vào sai.

Các trường hợp thử nghiệm

Input   Output      // Input based on colors
--------------
RBO     0           // No special combination
GYO     -1          // Counterclockwise melody triggered
BBR     0           // No special combination
YRG     0           // No special combination
YGB     1           // Clockwise melody triggered
ORB     -1          // Counterclockwise melody triggered
OOO     0           // No special combination
BRO     1           // Clockwise melody triggered

Đây là , vì vậy có thể mã ngắn nhất cho mỗi ngôn ngữ sẽ giành chiến thắng!


Được [0,0], [1,0], [0,1]cho phép như đầu ra? Tôi thấy câu trả lời Mathicala đang làm điều đó và nó sẽ tiết kiệm được 3 byte trong câu trả lời 05AB1E.
Kevin Cruijssen

1
@KevinCruijssen tất nhiên bạn có thể. Các giá trị đầu ra có thể là bất cứ thứ gì miễn là chúng khác biệt và nhất quán.
Charlie

Câu trả lời:


12

Java 8, 48 39 33 byte

s->"ROYGBRO BGYORBG".indexOf(s)|7

-6 byte nhờ @RickHitchcock , vì vậy hãy đảm bảo nâng cấp anh ấy !

Lấy màu chữ hoa làm Chuỗi đầu vào. Đầu ra -1cho không, 7cho chiều kim đồng hồ, và 15ngược chiều kim đồng hồ.

Hãy thử trực tuyến.

Giải trình:

s->      // Method with String parameter and integer return-type
   "ROYGBRO BGYORBG".indexOf(s)
         //  Get the index of the input in the String "ROYGBRO BGYORBG",
         //  which will result in -1 if the input is not a substring of this String
    |7   //  Then take a bitwise-OR 7 of this index, and return it as result

Câu trả lời cũ 39 byte:

s->(char)"ROYGBRO BGYORBG".indexOf(s)/7

Lấy màu chữ hoa làm Chuỗi đầu vào. Đầu ra 9362cho không, 0cho chiều kim đồng hồ, và 1ngược chiều kim đồng hồ.

Hãy thử trực tuyến.

Giải trình:

s->      // Method with String parameter and integer return-type
   (char)"ROYGBRO BGYORBG".indexOf(s)
         //  Get the index of the input in the String "ROYGBRO BGYORBG",
         //  which will result in -1 if the input is not a substring of this String
         //  And cast it to a char (-1 becomes character with unicode value 65535)
    /7   //  Integer-divide it by 7 (the char is implicitly converted to int doing so)

2
Tôi nghĩ 9632 là giá trị nhất quán và nhất quán tốt nhất tôi từng thấy trong các câu trả lời này cho đến nay :)
Misha Lavrov

@MishaLavrov Nó cũng có thể là 10922(chia số nguyên theo /6) hoặc 8191(chia số nguyên theo /8), nhưng tôi chọn /7vì đó là chỉ mục của không gian trong Chuỗi. :)
Kevin Cruijssen

1
@RickHitchcock Cảm ơn! Tôi nghĩ rằng tôi đã thử một số thao tác bitwise, nhưng dường như không đủ chính xác ..
Kevin Cruijssen

6

JavaScript (ES6), 41 byte

Lấy tên viết tắt màu làm đầu vào. Trả về 2cho không, truecho chiều kim đồng hồ hoặc falsengược chiều kim đồng hồ.

s=>~(x='ROYGBRO_ORBGYOR'.search(s))?x<5:2

Hãy thử trực tuyến!


3
Ít nhất một câu trả lời từ Arnauld tôi có thể hiểu !! :)
Charlie

3
@Charlie Tôi nghĩ Arnauld bị bệnh hoặc gì đó .. Không chỉ câu trả lời của anh ấy dễ đọc và dễ hiểu, nó còn dài hơn câu trả lời Java của tôi! o.Ô Một cái gì đó rõ ràng là sai ở đây. ; p
Kevin Cruijssen

s=>('ROYGBRO_ORBGYOR'.search(s)+8)/8|0
l4m2

1
Bạn thậm chí royg, người anh em?
Quentin

6

Python 2 , 36 byte

lambda i:'ROYGBRO ORBGYOR'.find(i)/7

-1- Không có
0- Theo chiều kim đồng hồ
1- Ngược chiều kim đồng hồ

Hãy thử trực tuyến!


Heh, những bộ óc tuyệt vời (hoặc một cái gì đó) ... codegolf.stackexchange.com/a/174635/53748 (nếu tôi đã thấy điều này trước khi tự mình thử, tôi sẽ chỉ cho bạn tiết kiệm byte: p)
Jonathan Allan

@Jonathan ALLan Đừng lo lắng, chuyện xảy ra: D Tôi đã nêu lên câu trả lời của bạn, vì tôi không thể không thích nó!
Xác chết

5

Excel, 29 byte

=FIND(A1,"ROYGBRO_RBGYORB")<6

Màu sắc chữ hoa làm đầu vào.

Trả về #VALUE!không có mẫu, TRUEcho chiều kim đồng hồ, FALSEcho ngược chiều kim đồng hồ.

Có thể bọc trong IFERROR( ,0)cho +11 bytesđến xử lý ngoại lệ, và trở lại '0' cho không-pattern trường hợp để thay thế.


5

05AB1E , 15 11 byte

Đã lưu 4 byte nhờ Kevin CruijssenMagic Octopus Urn .

Sử dụng hình dạng.
Đầu ra [0, 0]cho không , [1, 0]cho chiều kim đồng hồ[0, 1]cho truy cập chiều kim đồng hồ

‚.•ÌöJη•så

Hãy thử trực tuyến! hoặc như một bộ thử nghiệm

Giải trình

‚            # pair the input with its reverse
  .•ÌöJη•     # push the string "hsrtchs"
         så   # check if the input or its reverse is in this string

1
Rất giống như câu trả lời của tôi 15-byte mà tôi sắp sửa bài: .•1´₃éC•Â‚εXå}¥kết quả là [0], [1]hoặc [-1], vì vậy 1 từ tôi. Btw, tôi nghĩ (không chắc chắn), bạn có thể tiết kiệm ba byte bằng cách loại bỏ ba ngoái, xuất ra [0, 0], [1, 0][0, 1]như giá trị khác biệt. Tôi thấy rằng câu trả lời Mathicala cũng làm như vậy. Sẽ yêu cầu OP xác minh.
Kevin Cruijssen

Chỉ cần hỏi OP và bạn thực sự được phép bỏ ba byte cuối cùng. Miễn là ba đầu ra đều nhất quán và khác biệt thì nó vẫn ổn.
Kevin Cruijssen

2
‚.•ÌöJη•sålà 11 byte nếu [1,0], [0,1] and [0,0]được coi là duy nhất (trừ khi tôi thiếu một cái gì đó rõ ràng ở đây, thêm ƶOvào cuối của 11-byter đó vẫn là 13 cho cùng một câu trả lời 0, 1, 2 mà bạn có bây giờ). Các trường hợp thử nghiệm . Các trường hợp thử nghiệm 2 . Đảo ngược thứ tự loại bỏ sự cần thiết cho vòng lặp.
Bạch tuộc ma thuật Urn

Theo nhận xét về chủ đề ban đầu, 11-byter sẽ ổn, vì nó sử dụng 3 giá trị riêng biệt, bạn có thể đánh bại Jelly với giá trị đó :).
Bạch tuộc ma thuật Urn

@KevinCruijssen Cảm ơn bạn! Tôi dường như luôn nghĩ về duy nhất là "một chữ số" mà không có lý do :)
Emigna

4

JavaScript (ES6), 32 byte

s=>'ROYGBRO_ORBGYOR'.search(s)|7

Trả về -1 nếu không có kết hợp, 15 nếu ngược chiều kim đồng hồ, 7 nếu theo chiều kim đồng hồ.


4

Ngôn ngữ Wolfram (Mathicala) , 42 36 byte

{"ROYGBRO","ORBGYOR"}~StringCount~#&

Hãy thử trực tuyến!

Đếm số lần đầu vào xuất hiện trong cả hai "ROYGBRO""ORBGYOR". Trả về {1,0}theo chiều kim đồng hồ, {0,1}ngược chiều kim đồng hồ và {0,0}không có sự kết hợp đặc biệt.

Với chi phí chỉ thêm một byte, chúng ta có thể nhận được kết quả đầu ra 0không có gì, 1theo chiều kim đồng hồ và 2ngược chiều kim đồng hồ với "ROYGBRO.ORBGYORBGYOR"~StringCount~#&.


4

mã máy x86, 39 36 byte

00000000: f30f 6f11 b800 0000 0066 0f3a 6310 0c89  ..o......f.:c...
00000010: c883 c807 c352 4f59 4742 524f 2042 4759  .....ROYGBRO BGY
00000020: 4f52 4247                                ORBG

Hội,, tổ hợp:

section .text
	global func
func:					;the function uses fastcall conventions
					;no stack setup needed because we don't need to use stack
	movdqu xmm2,[ecx]		;Move DQword (16 bytes) from 1st arg to func(ecx) to SSE reg
	mov eax, msg			;Load address of constant str 'msg' into eax
	PcmpIstrI xmm2, [eax], 1100b	;Packed Compare String Return Index, get idx of [eax] in xmm2
	mov eax, ecx			;Move returned result into reg eax
	or eax, 7			;Bitwise OR eax with 7 to get consistent values
	ret				;return to caller, eax is the return register
section .data
	msg db 'ROYGBRO BGYORBG'

Hãy thử trực tuyến!

Đầu ra 23không dành cho, 7theo chiều kim đồng hồ và 15ngược chiều kim đồng hồ. Dựa trên câu trả lời của @RickHitchcock.

Đã lưu 3 byte bằng cách sử dụng lệnh so sánh chuỗi SSE thay vì sử dụng libc.


1
Bạn có thể đếm các byte mã máy ở đây không, vì các byte đó dựa vào sự sắp xếp của strstr trong nhị phân? Bạn không thể lấy những byte tương tự trong bối cảnh khác và mong chúng hoạt động như nhau.
Robert Fraser

Có những thay thế mã máy thuần túy không dựa vào thư viện tiêu chuẩn strchr.com/strcmp_and_strlen_USE_sse_4.2
Robert Fraser

@RobertFraser Vị trí của hàm được giải quyết trong quá trình liên kết, số byte sẽ luôn giống nhau vì địa chỉ của hàm strstrsẽ luôn là địa chỉ 32 bit (4 byte). Mã máy trong bài viết của tôi là không liên kết.
Logern

1
Tôi đoán đó là một khu vực màu xám. Hàm dựa vào dữ liệu trong tệp đối tượng (sơ đồ liên kết) trước khi có thể được sử dụng. Nhưng bạn có thể lập luận rằng điều đó không khác gì một lambda Java cần một khai báo kiểu.
Robert Fraser

Lưu ý để tuân thủ hoàn toàn với ABI, bạn phải sử dụng xmm5 hoặc xmm6 là các thanh ghi được lưu bởi người gọi, thay vì xmm2 được lưu callee (nhưng không nên tốn bất kỳ byte nào).
Robert Fraser


3

APL (Dyalog), 22 18 byte

+/(⍷-⍷∘⌽)∘'ROYGBRO'

-4 byte nhờ @ngn

Có một chuỗi các chữ cái đầu màu. Đầu ra 0 không có mẫu đặc biệt, -1 cho ngược chiều kim đồng hồ, 1 cho chiều kim đồng hồ.

Hãy thử trực tuyến!


3

Python 2 , 45 43 byte

lambda i,a='ROYGBRO':(i in a)-(i[::-1]in a)

Hãy thử trực tuyến!

Với ý tưởng từ và tín dụng nghiêm túc đến @DeadPossum

-2 với lời cảm ơn @JoKing. Bây giờ đầu ra -1 = ngược chiều kim đồng hồ, 0 = không, 1 = chiều kim đồng hồ.

Nỗ lực ban đầu của tôi là dưới đây cho mục đích lịch sử.

Python 2 , 52 51 byte

lambda i,a='ROYGBRO':((0,1)[i[::-1]in a],2)[i in a]

Hãy thử trực tuyến!

0 = none, 1 = ngược chiều kim đồng hồ, 2 = chiều kim đồng hồ



@DeadPossum Điều đó thật tuyệt vời và đủ khác biệt với tôi để bạn đăng bài làm câu trả lời của riêng bạn. Tôi sẽ upvote.
ElPedro

3

Python 2 ,  35  36 byte

+1 - vì một số lý do tôi nghĩ tất cả các nút sẽ khác biệt> _ <

Được phát triển độc lập với những gì tôi vừa thấy (và hiện đã được bình chọn) bởi Dead Possum

lambda s:'ORBGYO.BROYGBR'.find(s)/7

Hãy thử trực tuyến!


Tôi nghĩ bạn cần tách các chuỗi ký tự. Điều này trả về 0 (ngược chiều kim đồng hồ) cho "RBR", không có trong danh sách kết hợp của bạn.
Rick Hitchcock

@RickHitchcock ah Tôi đã giả sử 3 lần nhấn khác nhau mà chắc chắn là không chính xác. Điều đó sẽ làm cho điều này thực sự chính xác giống như của Dead Possum!
Jonathan Allan

Không thể xóa khỏi điện thoại di động ... sẽ xóa hoặc giải quyết sau
Jonathan Allan

Vâng, nó có thể mơ hồ, nhưng một trong những trường hợp thử nghiệm ("OOO") cho thấy họ có thể lặp lại.
Rick Hitchcock

@RickHitchcock yep đó là những gì tôi thấy sau bình luận của bạn - cảm ơn!
Jonathan Allan

2

Stax , 14 13 byte

ù♀e▌d─█£F'♦O▬

Chạy và gỡ lỗi nó

Đầu ra là

  • 1 không có sự kết hợp đặc biệt
  • 2 cho giai điệu ngược chiều kim đồng hồ
  • 3 cho giai điệu theo chiều kim đồng hồ

2

Pip , 19 byte

Y"ROYGBRO"OaNyaNRVy

Đầu ra 10cho chiều kim đồng hồ, 01ngược chiều kim đồng hồ, 00cho cả không. Hãy thử trực tuyến!

Giải trình

                     a is 1st cmdline argument
Y"ROYGBRO"           Yank that string into y variable
           aNy       Count of occurrences of a in y
          O          Output without newline
                RVy  y reversed
              aN     Count of occurrences of a in that string
                     Print (implicit)

2

J , 21 byte

-&(OR@E.&'ROYGBRO')|.

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

-&(OR@E.&'ROYGBRO')|.  Monadic 2-verb hook. Input: a string.

                   |.  Map over [input string, input string reversed]:
      E.&'ROYGBRO'     Find exact matches of input in 'ROYGBRO'
  (OR@            )    Reduce with OR; is it a substring of 'ROYGBRO'?
-&                     Reduce with -; result is 1 for CW, -1 for CCW, 0 otherwise

Đạt được số lượng tối đa của tái sử dụng chức năng.



1

R , 38 byte

grep(scan(,''),c('ROYGBRO','ORBGYOR'))

Hãy thử trực tuyến!

Trả về:

  • Không có sự kết hợp đặc biệt: integer(0)
  • Giai điệu ngược chiều kích hoạt: 2
  • Giai điệu theo chiều kim đồng hồ được kích hoạt: 1

1

Than , 18 byte

≔ROYGBROηI⁻№ηθ№⮌ηθ

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

 ROYGBRO            Literal string
≔       η           Assign to variable
            η   η   Value of variable
               ⮌    Reversed
             θ   θ  Input string
           №  №     Count matches
          ⁻         Subtract
         I          Cast to string
                    Implicitly print


1

Sạch sẽ , 63 byte

import StdEnv,Text
$s=map((>)0o indexOf s)["ROYGBRO","BGYORBG"]

Hãy thử trực tuyến!

[True, True]không có tiếng ồn đặc biệt, [True, False]ngược chiều kim đồng hồ, [False, True]theo chiều kim đồng hồ.


0

Japt, 17 14 byte

Lấy màu sắc làm đầu vào, viết thường. Trả về 0theo chiều kim đồng hồ, 1ngược chiều kim đồng hồ hoặc -1nếu không có kết hợp.

`ygß`ê qÔbøU

Thử nó


Mở rộng

`...`            :Compressed string "roygbrow"
     ê           :Palindromise
       qÔ        :Split on "w"
         b       :Index of the first element
          ø      : That contains
           U     :  The input string

0

Ruby , 53 36 byte

->n{"\a\fDch+".index(""<<n%111)&./3}

Hãy thử trực tuyến!

Đầu vào: số nguyên 3 chữ số, trong đó các chữ số thể hiện màu sắc:

  • 1 - đỏ
  • 2 - cam
  • 3 - màu vàng
  • 4 - màu xanh lá cây
  • 5 - màu xanh

Đầu ra: 0 cho chiều kim đồng hồ, 1 cho ngược chiều kim đồng hồ, nilngược lại.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.