Hệ thống phân loại kỳ lạ


14

Weirdo Incorporates có một cách phân loại nhân viên kỳ lạ theo số ngày họ có mặt trong văn phòng:

  0 -  13 : F  
 14 - 170 : E
171 - 180 : D
181 - 294 : C
295 - 300 : B
301 - 365 : A

Note: The range is inclusive (i.e. 0-13 means 0 days and 13 days both will evaluate
as grade 'F').

Mục tiêu:

Viết chương trình / chức năng xuất / trả lại điểm của một nhân viên trong số ngày [trong phạm vi bao gồm 0-365] mà nhân viên tham dự.

Quy tắc:

  • Bạn có thể lấy đầu vào dưới dạng chuỗi hoặc số nhưng phải xuất dưới dạng chuỗi / bảng chữ cái (Bạn có thể chọn chữ thường hoặc chữ hoa.)
  • Tiêu chuẩn áp dụng.
  • Đây là , vì vậy chương trình ngắn nhất tính bằng byte sẽ thắng!

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

12  => F
15  => E
301 => A
181 => C

Bảng điểm:





1
@ Mr.Xcoder Tôi nhớ rằng nó đã được thảo luận trong hộp cát rằng nó không phải là bản sao của điều đó vì nó không có phạm vi có kích thước bằng nhau và có các hậu tố như +/ -.
Erik the Outgolfer

1
Chúng ta có thể có được một bảng điểm?
jrtapsell

Câu trả lời:


4

Thạch ,  18 17 15  14 byte

NịØAx“A©r½ɗÇ‘¤

Một liên kết đơn âm lấy một số và trả về một ký tự.

Hãy thử trực tuyến! hoặc xem tất cả các cặp đầu vào-đầu ra .

Làm sao?

NịØAx“A©r½ɗÇ‘¤ - Link: number, d
N              - negate d
             ¤ - nilad followed by link(s) as a nilad:
  ØA           -   uppercase alphabet yield = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     “A©r½ɗÇ‘  -   code-page indices = [65,6,114,10,157,14]
    x          -   times = 'A'x65+'B'*6+'C'x114+'D'x10+'E'*157+'F'*14
 ị             - index into (1-indexed & modular - hence the negation to allow all Fs
                                                   to be together at one end)

12

Javascript (ES6), 51 byte

n=>"ABCDEF"[(n<14)+(n<171)+(n<181)+(n<295)+(n<301)]

Giải pháp thay thế (dài hơn):

53 52 byte (-1 byte nhờ @Arnauld)

n=>"FEDCBA"[n>300?5:n>294?4:n>180?3:n>170?2:+(n>13)]

55 53 byte (-2 byte nhờ @Neil)

n=>"AFEDCB"[[14,171,181,295,301].findIndex(m=>n<m)+1]

55 byte

n=>"FEDCBA"[[13,170,180,294,300].filter(m=>n>m).length]

Đoạn mã ví dụ:

f=
n=>"ABCDEF"[(n<14)+(n<171)+(n<181)+(n<295)+(n<301)]
console.log(f(12))
console.log(f(15))
console.log(f(301))
console.log(f(181))


1
Điều đó tóm tắt các điều kiện là tuyệt vời !!! Chúc tôi có thể upvote một lần nữa !!! : D
chính thức tuyên bố

Tôi có thể lưu hai byte trên một trong những giải pháp thay thế của bạn:n=>"AFEDCB"[[14,171,181,295,301].findIndex(m=>n<m)+1]
Neil

-1 byte cho giải pháp thay thế đầu tiên của bạn:n=>'FEDCBA'[n>300?5:n>294?4:n>180?3:n>170?2:+(n>13)]
Arnauld

7

TI-Basic, 40 byte

sub("FEDCBA",sum(Ans≥{0,14,171,181,295,301}),1

6

J , 31 byte

'FEDCBA'{~13 170 180 294 300&I.

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

Giải trình

'FEDCBA'{~13 170 180 294 300&I.  Input: n
          13 170 180 294 300     Constant array [13, 170, 180, 294, 300]
                            &I.  Use it with interval index to find which of
                                 the intervals (-∞, 13], (13, 170], (170, 180],
                                 (180, 294], (294, 300], (300, ∞) n can be inserted at
        {~                       Index into
'FEDCBA'                         This string and return that char

Lần đầu tiên tôi thấy dyadic I.trong tự nhiên. Khéo léo.
cole

@cole Tôi tin rằng tôi đã sử dụng nó một vài lần trong quá khứ trong môn đánh gôn.
dặm

6

Python 3 , 50 byte

Cảm ơn @jferard cho -4 byte.

lambda n:chr(70-sum(n>ord(x)for x in"\rª´ĦĬ"))

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

Python 3 , 54 byte

lambda n:chr(70-sum(n>x for x in[13,170,180,294,300]))

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

Đã lưu 2 byte nhờ @mathmandan và gián tiếp nhờ @JonathanFrech.

Python 2 , 56 byte

lambda n:"ABCDEF"[sum(n<x for x in[14,171,181,295,301])]

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


1
54 byte : lambda n:chr(70-sum(n>x for x in[13,170,180,294,300])). (Xem câu trả lời của @Jonathan Frech tại codegolf.stackexchange.com/a/142244/36885 )
mathmandan


cổng ruby: ->n{(70-"ĬĦ´ª\r".chars.count{|i|n>i.ord}).chr}cùng kích cỡ
Asone Tuhid

4

C, 62 61 byte

Cảm ơn @Jonathan Frech vì đã tiết kiệm một byte!

f(n){putchar(70-(n<14?0:n<171?1:n<181?2:n<295?3:n<301?4:5));}

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

C, 57 byte

#define f(n)70-(n<14?0:n<171?1:n<181?2:n<295?3:n<301?4:5)

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

C (gcc), 54 byte

f(n){n=70-(n<14?0:n<171?1:n<181?2:n<295?3:n<301?4:5);}

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

C (gcc), 50 byte

Sử dụng giải pháp của @Herman Lauenstein .

f(n){n=65+(n<14)+(n<171)+(n<181)+(n<295)+(n<301);}

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



Tại sao không gửi phiên bản ngắn nhất làm giải pháp chính của bạn?
Xù xì

@Shaggy Những người yêu cầu khu nghỉ mát gcc có hành vi không xác định, vì vậy tôi muốn giữ những người được xác định rõ ở trên cùng, và sắp xếp chúng từ cũ nhất đến mới nhất và đồng thời từ dài nhất đến ngắn nhất có vẻ tốt đối với tôi.
Steadybox

3

Kotlin , 56 byte

{v->'F'-listOf(13,170,180,294,300).filter{it<v}.count()}

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

Làm đẹp

{ v->
    // Count the grades passed, then subtract that from F
    'F' - listOf(13,170,180,294,300)
            .filter { it < v }
            .count()
}

Kiểm tra

var x:(Int)->Char =
{v->'F'-listOf(13,170,180,294,300).filter{it<v}.count()}

fun main(args: Array<String>) {
    println(x(12))
    println(x(15))
    println(x(301))
    println(x(181))
}

+1. Tôi đã chỉnh sửa câu trả lời của bạn thành một định dạng chính thức hơn, hy vọng bạn sẽ không phiền.
chính thức tuyên bố


3

Japt , 23 21 byte

'Gc-[#ªT#´D294L*3]è<U

Thử nó


Giải thích

Đầu vào ngầm định của số nguyên U.

'Gc-

Trừ đi từ các điểm mã của chuỗi (ký tự đơn) G...

è<U

Số lượng phần tử ít hơn U...

[#ªT#´D294L*3]

Trong mảng 170 ( ), 0 ( T), 180 ( ), 13 ( D), 294 (bằng chữ) & 300 ( L*3), do đó, được định dạng và ra lệnh để tránh sử dụng dấu phẩy. 0có thể được loại bỏ (trừ đi từ mã Fthay thế) nhưng sau đó cần thêm dấu phẩy hoặc C*F(12 * 15) để sử dụng 180, cuối cùng không lưu byte.


3

R , 50 44 byte

LETTERS[6-sum(scan()>c(13,170,180,294,300))]

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

giống như câu trả lời javascript, nhưng sử dụng vector hóa R và LETTERS dựng sẵn để rút ngắn hơn một chút.

Cảm ơn rturnbull đã loại bỏ 6 byte cuối cùng.



Trong thực tế, 44 byte chỉ bằng cách biến nó thành một chương trình đầy đủ thay vì một hàm.
rturnbull

@rturnbull ah, tôi đã định nói "không cần bạn phải bọc nó bằng cách catkhác sử dụng source(program,ec=T)và tính ec=Tlà cờ (theo sự đồng thuận meta trên các chương trình R), nhưng bằng một sự đồng thuận meta mới hơn, chúng tôi không đếm cờ lâu hơn, vì vậy tôi là một giải pháp hoàn toàn hợp lệ.
Giuseppe


2

Recursiva , 49 30 byte

Y(++++<a301<a295<a181<a171<a14

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

Cho phép tôi trả lời câu hỏi của riêng tôi bằng ngôn ngữ của riêng tôi. : D

  • đã lưu 19 byte bằng cách sử dụng kỹ thuật từ @Herman Lauenstein thật tuyệt vời câu trả lời JS

Giải trình:

Y(++++<a301<a295<a181<a171<a14
      <a301<a295<a181<a171<a14 calculate true/false for all the conditions
  ++++                         sum up all the conditions to obtain n which can be either 0,1,2,3,4 or 5
 (                             yield upper-case Alphabet
Y                              Get n-th element   


2

Pyke , 28 byte

G6<13T17*180T30*294]5FhQ>)s@

Hãy thử nó ở đây!

Giải trình

G6<13T17*180T30*294]5FhQ>)s@ - Full program. T is the constant for 10.

G                            - The lowercase alphabet.
 6<                          - With the letters after the index 6 trimmed.
   13                        - The literal 13.
     T17*                    - The integer 170, composed by 17 * 10, to save whitespace.
         180                 - The literal 180.
            T30*             - The integer 300, composed by 30 * 10. 
                294          - The literal 294.
                   ]5        - Create a list of 5 elements.
                     FhQ>)   - For each element in the list.
                      h      - Increment.
                       Q     - The input.
                        >    - Is smaller ^^ than ^? Yields 1 for truthy and 0 for falsy.
                         )s  - Close loop and sum.
                           @ - Get the index in the alphabet substring explained above.


1

Bình thường, 30 byte

@GtlfgTQmCdc"\r ª ´ & , m"d

Trang web dường như không hiển thị ký tự có mã điểm 1, vì vậy bạn cần chèn một ký tự có mã điểm 1 trước & ,,mlúc kết thúc

(Thay thế tất cả 1s bằng ký tự bằng mã điểm 1):

@GtlfgTQmCdc"\r ª ´ 1& 1, 1m"d

1

Bình thường , 25  26  byte

@<G6sgRQ[13*17T180*30T294

Xác nhận tất cả các trường hợp thử nghiệm.

Giải trình

@<G6sgRQ[13*17T180*30T294 - Full program.

  G                       - The lowercase alphabet.
 < 6                      - With the letters after the index 6 trimmed. We will call "S".
        [                 - Initialise a list literal.
         13               - The literal 13.
           *17T           - The integer 170, composed by 17 * 10, so save whitespace.
               180        - The literal 180.
                      294 - The literal 294.
                  *30T    - The integer 300, composed by 30 * 10.
     gRQ                  - For each element, return 1 if is is ≥ the input. 0 otherwise.
    s                     - Sum.
@                         - Get the index into S of ^.
                          - Output implicitly.         

1

Ly , 74 byte

n(14)L["F"o;]p(171)L["E"o;]p(181)L["D"o;]p(195)L["C"o;]p(301)L["B"o;]"A"o;

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

Một cách tiếp cận if-chain đơn giản. Tôi nghi ngờ nó có thể được thực hiện ngắn hơn nhiều.


Là những (...)yêu cầu cần thiết? PS nvm, Rõ ràng là họ.
chính thức tuyên bố


1

Java 8, 55 byte

n->n<14?'F':n<171?'E':n<181?'D':n<295?'C':n<301?'B':'A'

Hãy thử nó ở đây.

Thay thế 57 byte :

n->(char)(n<14?70:n<171?69:n<181?68:n<295?67:n<301?66:65)

Hãy thử nó ở đây.

60 byte thay thế :

n->"FEDCBA".charAt(n<14?0:n<171?1:n<181?2:n<295?3:n<301?4:5)

Hãy thử nó ở đây.

Có thể một số loại công thức có thể được tìm thấy để có được 0-5 một cách ngắn hơn so với n<14?0:n<171?1:n<181?2:n<295?3:n<301?4:5sử dụng phương pháp cuối cùng. Vẫn đang điều tra việc này.


1

PowerShell , 59 byte

(,'F'*14+,'E'*157+,'D'*10+,'C'*114+,'B'*6+,'A'*65)["$args"]

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

Tương tự như câu trả lời Jelly của Jonathan Allen, trong đó chúng ta đang xây dựng một mảng gồm tất cả các chữ cái được nối với nhau, sau đó lập chỉ mục vào mảng đó với đầu vào $args.


1

Thỏ ~ , 50 byte

(Không soạn thảo, trả lời câu hỏi. Tôi vừa hoàn thành trình thông dịch (yay) và muốn thử và giải quyết một cái gì đó. Đây cũng là điều đầu tiên về môn đánh gôn của tôi

=>FEDCBA$<({.0-\_-^\-&^?n&&}_}\>\{{\>:.¤})Ð"ỤṅỌrḲA

Về cơ bản, nó có sự khác biệt từ một lớp đến 14.157,10,114,6,65 tiếp theo (được mã hóa thành ỤṅỌrḲA ) và trừ đi từ đầu vào. Nếu tìm thấy một số âm, nó sẽ ngừng phát triển theo trình tự 'FedCBA' và xuất ra chữ cái.

Giải thích nhỏ về đoạn cú pháp đẹp này

Rabbit ~ sử dụng bộ nhớ dựa trên lưới với một hoặc một số dấu mũ bạn có thể di chuyển xung quanh; giải pháp này sử dụng 2.

=>FEDCBA$<({.0-\_-^\-&^?n&&}_}\>\{{\>:.¤})Ð"ỤṅỌrḲA - Full program.

  FEDCBA                                           - Load bytes into grid
                                          Ð"ỤṅỌrḲA - Load bytes 14,157,10,114,6,65 into second line of data grid
=                                                  - Read input
 >       <      _ ^   ^     _  >   >               - Move caret (most instructions read from the grid below the active caret)
        $                                          - Create a new caret
          (                              )         - Loop
           {.0             } }   {{     }          - Conditional statement checking if value at caret == 0 then move active caret to next grade else print and quit
              -  -  -                              - Subtract 
               \   \          \ \                  - Cycle active caret
                     &   &&                        - Bitwise and to see if number is negative
                       ?n                          - Get negative sign bit
                                    :.             - Print value at caret as character
                                      ¤            - Terminate program

Đẹp. Có cách nào để thử trực tuyến không?
chính thức

Không phải lúc này ^^
Adam

1

Excel, 53 byte

Tổng các điều kiện, sau đó trả về ký tự ASCII cần thiết:

=CHAR((A1<14)+(A1<171)+(A1<181)+(A1<295)+(A1<301)+65)

Các giải pháp thay thế:

Điều kiện tổng hợp, trả về chỉ mục chuỗi (63 byte):

=MID("ABCDEF",(A1<14)+(A1<171)+(A1<181)+(A1<295)+(A1<301)+1,1)


1

Jotlin , 48 41 byte

{v->'F'-l(13,170,180,294,300).f{a<v}.l()}

Toàn bộ chương trình:

var x:(Int)->Char =
{v->'F'-l(13,170,180,294,300).f{a<v}.l()}

println(x(12))
println(x(15))
println(x(301))
println(x(181))

Chuyển câu trả lời trước đây của tôi về Kotlin ở đây .


1

V , 37 34 byte

aFEDCBA5äh113äh9äh156äh13ähÀ|vyVp

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

Hexdump:

00000000: 3133 4146 1b31 3536 4145 1b39 4144 1b31  13AF.156AE.9AD.1
00000010: 3133 4143 1b35 4142 1b36 3441 411b eec0  13AC.5AB.64AA...
00000020: 7c76 7956 70                             |vyVp

Ý kiến ​​cơ bản:

  • In FEDCBA , tạo 5 bản sao của B, 113 bản sao của C, vv dẫn đến chuỗiFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBBBBA (Có lẽ có một cách hiệu quả hơn để làm điều này)
  • Chuyển đến ncột thứ ( nlà đối số đầu tiên), sao chép một ký tự đơn và thay thế toàn bộ chuỗi bằng nó.


1

Perl 6, 42 39 byte

{chr(65+[+] "\rª´ĦĬ".ords »>»$_)}

1

Stax , 18 byte

5"«µħĭ",+|oH-VA@]

Chạy và gỡ lỗi trực tuyến!

Giải trình

Số byte được tính bằng CP437.

5"«µħĭ",+|oH-VA@]
5            -        5 minus the result of the following
 "«µħĭ"                   [14, 171, 181, 295, 301]
        ,+                Append input
          |oH             Index of last element if the array were to be sorted
              VA@]    Letter in the alphabet with the given index

0

C #, 110 byte

x=>{if(x<14)return"F";if(x<171)return"E";if(x<181)return"D";if(x<295)return"C";if(x<301)return"B";return"A";};

Dùng thử trực tuyến


2
Bạn có thể rút ngắn đáng kể lambda của mình bằng cách sử dụng toán tử ba lần ?:nhưx<14?"F":x<170?"E":x<180?"D":x<294?"C":x<300?"B":"A"
Bradley Uffner
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.