Xác định xem một số có chia hết cho 13 không (không sử dụng chính 13) [đã đóng]


31

Thách thức của bạn, nếu bạn chọn chấp nhận nó, là tạo một hàm hoặc một chương trình xuất ra "có" nếu một số đã cho chia hết cho 13 và xuất ra "không" nếu không.

Quy tắc:
- Bạn không được phép sử dụng số 13 ở bất cứ đâu.
- Không có từ đồng nghĩa cop-out cho 13 hoặc (như sử dụng 15 - 2).
- Điểm thưởng sẽ được trao cho việc không sử dụng mô-đun, tiền thưởng bổ sung cho việc không sử dụng phép chia.

Chấm điểm:
- Điểm của bạn sẽ là số byte trong mã của bạn ( không bao gồm khoảng trắng ) nhân với phần thưởng của bạn.
- Nếu bạn không sử dụng mô-đun, phần thưởng đó là 0,90; nếu bạn không sử dụng phép chia, phần thưởng đó là 0,90.
- Nếu bạn không sử dụng, phần thưởng đó là 0,80.
- Điểm của bạn càng thấp thì càng tốt.

Đầu vào sẽ luôn là một số nguyên lớn hơn 0 và nhỏ hơn 2 ^ 32.
Đầu ra của bạn phải là "có" hoặc "không" đơn giản.

Làm rõ:
- Sử dụng một số phương pháp đường vòng để tạo số 13 để sử dụng là chấp nhận được. Các từ đồng nghĩa số học đơn giản như (10 + 3) không được phép.
- Hàm hoặc chương trình phải xuất ra "có" hoặc "không" theo nghĩa đen nếu số đã cho chia hết cho 13.
- Như mọi khi, các giải pháp thông minh được khuyến nghị, nhưng không bắt buộc.


là 'đúng' hay 'sai' là đầu ra hợp lệ?
Blazer

8
JavaScript (27 ký tự) function f(n){return "yes"}. Điều này sẽ trả về 'có' cho tất cả các số có thể chia cho 13
ajax333221

5
"(Không bao gồm khoảng trắng)" luôn luôn dẫn đến một trong hai tình huống sau: chương trình mã hóa nội dung của nó trong khoảng trắng hoặc chương trình được viết bằng Khoảng trắng (ngôn ngữ lập trình) .
JiminP

4
Using some roundabout method of generating the number 13 for use is acceptable.Làm thế nào để bạn xác định "vòng xoay đủ" là gì?
Cruncher

3
@ Thành thật mà nói, tôi đã không nhận ra rằng nó đã 2 tuổi, nó mới hoạt động gần đây. Đối với đề xuất của bạn, tôi không muốn thay đổi ninja vì không phải OP một câu hỏi với 2 trang câu trả lời ..
Cruncher

Câu trả lời:


24

Java (điểm 60,8 59,2)

void t(int n){System.out.print(Math.cos(.483321946706122*n)>.9?"yes":"no");}

Điểm: (76 - 2 khoảng trắng) ký tự * 0.8 = 59.2


Khéo léo. Tôi thích nó!
mellamokb

println-> print?
Geobits

@Geobits, đúng.
Peter Taylor

19

ASM - 16 bit x86 trên shell lệnh WinXP

thực thi - 55 byte * 0.8 = 44

nguồn - 288 ký tự * 0,8 = 230,4

Số 13 thậm chí không xuất hiện trong tệp .com đã lắp ráp.

Lắp ráp bằng A86.

    mov si,82h
    xor ax,ax
    xor cx,cx
a:  imul cx,10
    add cx,ax
    lodsb
    sub al,48
    jnc a
    inc cx
h:  mov dl,a and 255
c:  loop g
    sub dl,a and 255
    jz e
    mov dl,4
e:  add dl,k and 255
    mov dh,1
    mov ah,9
    int 21h
    ret
g:  inc dl
    cmp dl,c and 255
    jne c
    jmp h
k:  db 'yes$no$'

Tôi hiểu rằng giải pháp này rất thông minh, nhưng vì đây là môn đánh gôn, chúng ta có nên nâng cao các giải pháp ngắn nhất thay vì các giải pháp thông minh nhất không?
mellamokb

21
@mellamokb: Từ những gì tôi đã đọc trên meta, một số người cho rằng bỏ phiếu là một đánh giá cao cho một giải pháp thông minh / bất thường. Nếu chúng ta chỉ bỏ phiếu cho câu trả lời ngắn nhất, sẽ không có bất kỳ điểm nào trong việc bỏ phiếu. Tôi đoán 'tick' đi đến đoạn mã ngắn nhất như là một dấu hiệu của danh tiếng tối thượng. Sau đó, một lần nữa, một giải pháp đơn giản trong golfscript sẽ luôn nhỏ hơn một giải pháp thực sự thông minh trong C - vậy ai xứng đáng với số phiếu? Cuối cùng, phiếu bầu không quan trọng, đó là về việc vui chơi.
Skizz

1
quy tắc : The input will always be an integer greater than 0 and less than 2^32. Bạn không thể sử dụng 16 bit
Fabricio

@Fovenio: Tất cả các số 16 bit nhỏ hơn 2 ^ 32. :-)
Skizz

lol .. bằng cách nào đó bạn đúng. Nhưng bạn không thể xử lý 2 ^ 32-1 = p
Fabricio

17

Con trăn 3.x: 54 * 0.8 = 43.2

Nó có thể là một bản sao để có một chuỗi dài 13, nhưng ở đây nó có:

print('no' if any((' ' * int(input())).split('             ')) else 'yes')

Nó hoạt động bằng cách xây dựng một chuỗi n không gian (sự lựa chọn dấu phân cách là tùy ý, nhưng tôi đã chọn không gian vì lý do rõ ràng) và tách các chuỗi con 13 không gian cho đến khi bạn còn lại một chuỗi chứa n% 13 khoảng trắng.


4
+1. Tôi thích sự phân chia bởi khoảng trắng 13 ký tự. Chuyển nó sang Python 2 và sử dụng một kỹ thuật từ câu trả lời của tôi đưa nó xuống điểm 35,2:print 'yneos'[any((' ' * input()).split(' '))::2]
Steven Rumbalski

Tôi sắp sửa nói: bạn có thể thay thế ' 'bằng ' '*6+' 'để tiết kiệm 5 ký tự - nhưng sau đó tôi tìm thấy không gian mà không đếm hết ...
kratenko

15

GolfScript, 32 ký tự

~){.14base{+}*.@<}do('no''yes'if

Tôi muốn thử một cái gì đó khác với mọi người, vì vậy giải pháp của tôi tính toán gốc số 14 của số, bằng cách liên tục chuyển đổi số thành cơ sở 14 và tính tổng các chữ số cho đến khi kết quả không còn nhỏ hơn nữa. Điều này về cơ bản giống như tính toán modulo 13 còn lại, ngoại trừ kết quả sẽ nằm trong phạm vi từ 1 đến 13 thay vì 0 đến 12.

Vì việc kiểm tra xem gốc kỹ thuật số bằng 13 có khó không nếu không sử dụng chính số 13 (hoặc một số cách giải quyết khập khiễng như 12 + 1), điều tôi thực sự làm là tăng số đầu vào lên một trước vòng lặp và giảm kết quả sau đó. Theo cách đó, kết quả cho các số chia hết cho 13 trên thực tế sẽ bằng 0, dễ kiểm tra hơn nhiều.

Đây là một phiên bản bình luận của chương trình:

~              # evaluate the input, turning it from a string to a number
)              # increment by one
{              # start of do-loop 
    .          # make a copy of the previous number, so we can tell when we're done
    14 base    # convert the number to base 14
    { + } *    # sum the digits
    . @ <      # check if the new number is less than the previous number...
} do           # ...and repeat the loop if so
(              # decrement the result by one
'no' 'yes' if  # output 'no' if the result is non-zero, 'yes' if it's zero

Chương trình này sẽ thực sự xử lý bất kỳ đầu vào số nguyên không âm nào, vì GolfScript sử dụng số học bignum. Tất nhiên, đầu vào cực lớn có thể tiêu tốn quá nhiều thời gian và / hoặc bộ nhớ.

Mã này không sử dụng trực tiếp mô đun hoặc phân chia, mặc dù nó sử dụng toán tử chuyển đổi cơ sở của GolfScipt, gần như chắc chắn thực hiện một số phân chia và phần còn lại trong nội bộ. Tôi sẽ để lại cho GigaWatt để quyết định xem điều này có đủ điều kiện cho tôi nhận tiền thưởng hay không.


Nếu chỉ có tất cả mọi người sẽ nhận xét mã golfscript của họ rất tốt. Kudos
skibrianski

13

C, 68 * 0,8 = 54,4

Sau 24 câu trả lời, vẫn chưa có ai nghĩ ra thuật toán rõ ràng này:

f(x){puts("no\0yes"+3*((x*330382100LL>>32)-(~-x*330382100LL>>32)));}

Tôi đã chờ đợi ai đó thực hiện một phép nhân đối ứng số nguyên. Đây không chỉ là một giải pháp tao nhã cho thách thức, mà đây còn là một kỹ thuật hữu ích theo đúng nghĩa là tối ưu hóa hiệu suất.
Sir_Lagsalot

Điều này vẫn còn hiệu lực mặc dù nó rất không chuẩn?
oldrinb

1
@oldrinb, tôi thấy không có yêu cầu tuân thủ tiêu chuẩn trong câu hỏi. Nói chung, việc tuân thủ tiêu chuẩn nghiêm ngặt là cực kỳ khó chịu trong môn đánh gôn.
ugoren

Bạn có thể giải thích tại sao điều này làm việc?
Vedaad Shakib 16/07/2015

@ user2767189, đó là một kỹ thuật gọi là "bội số đối ứng" - về cơ bản là một cách để thực hiện phép chia cho X bằng cách nhân với (2 ^ K / X). Trong trường hợp này X là 13 và 330382100 * 13 gần như chính xác là 2 ^ 32.
ugoren 16/07/2015

11

JavaScript (27.9)

Phiên bản hiện tại (31 ký tự * 0,90 tiền thưởng = 27,9).

alert(prompt()*2%26?'no':'yes')

Bản trình diễn: http://jsfiddle.net/9GQ9m/2/

Chỉnh sửa 1: Bỏ phần thưởng thứ hai bằng cách sử dụng mô-đun để giảm điểm đáng kể và tránh forvòng lặp. Cũng loại bỏ ~~và lưu hai ký tự (cảm ơn @copy).


Phiên bản cũ hơn (48 ký tự * 0,80 tiền thưởng = 38,4)

for(n=~~prompt()*2;n-=26>0;);alert(n?'no':'yes')​

Nhân tất cả mọi thứ với hai và sử dụng 26 thay vì ... không thấy điều đó sẽ đến.
Ông Llama

Bạn có thể bỏ qua ~~đầu vào hợp lệ giả định; nếu không prompt()<<1sẽ làm việc quá.
sao chép

Mặc dù tôi sẽ thừa nhận về mặt kỹ thuật nó không đạt đến giới hạn 2 ^ 32 nữa bằng cách sử dụng phương pháp này ..
mellamokb

1
Trong thực tế, nó hoạt động vượt quá 2 ^ 32 kể từ khi bạn bỏ bất kỳ toán tử bitwise nào.
sao chép

3
Điều này vẫn đang sử dụng một số nhanh chóng số học để xác định mức chia hết cho 13 và có một quy tắc nói rằng không có cảnh sát số học ...
WallyWest

7

BrainFuck

Điểm: 200 * 0,8 = 160

>++++++[>++++++++<-]>>,[<[-<+>>-<]<[->+<]>>>[->++++++++++<]>[-<+>]<<[->+<],]++++
+++++++++>[>+<-<-[>>>]>>[[-<<+>>]>>>]<<<<]>[<<<[-<++>]<++++++++++++++.+.>]<<[[-<
++++++<++++++++>>]<-----.<---.>------.>]

Đọc từ stdin. Có lẽ không phải là giải pháp thông minh nhất, nhưng nhận được bất cứ điều gì hoạt động trong BF là tốt. Nó khá nhỏ gọn mặc dù.


Bất kỳ lời giải thích về cách thức hoạt động? Có vẻ như mặc định BrainFuck sẽ nhận được phần thưởng 0,8 vì đơn giản là nó không có phân chia hoặc mô đun.
Ông Llama

@GigaWatt nó tính toán mô-đun.
sao chép

1
Vâng, nhưng ý tôi là nó không sử dụng toán tử mô đun (vì nó không có toán tử). Do đó, nó sẽ luôn nhận được tiền thưởng cho việc không sử dụng nó. Ngoài ra, pic sinh học tốt đẹp.
Ông Llama

@GigaWatt Tôi không đồng ý với bạn, chỉ trả lời câu hỏi của bạn.
sao chép

7

Scala (38 * 0,9 = 34,2)

Tương tự như 0xD(hex) hoặc 015(oct).

Giá trị ASCIICR là 13.

def t(n:Int)=if(n%'\r'==0)"yes"else"no"

1
Tôi tự hỏi sẽ mất bao lâu trước khi tôi thấy ai đó khai thác các giá trị ascii.
Ông Llama

1
Bạn có thể thêm số điểm vào bài viết của bạn xin vui lòng? Nên là 38 * 0,9 = 34,2.
mellamokb

5

Haskell, 28 * 0,8 = 22,4

f x|gcd 26x>2="yes"|1<3="no"

5

Con trăn

f=lambda n:1==pow(8,n,79)

Ví dụ

[i for i in range(100) if f(i)]

cho

[0, 13, 26, 39, 52, 65, 78, 91]

1
Bây giờ cái này tôi thích. tuy nhiên cần phải có / không theo tiêu chí thử thách và bạn nên đăng điểm của mình (25 * .08 = 20)
Blazer

f=lambda n:pow(8,n,79)-1 and "no" or "yes"sửa nó, 43 * 0.8 = 34.4
ugoren

4

C, 54,4 == 68 * .8   80 * .8

char*f(c){char*s=" yes\0\rno";while(c&&*s++);return c>0?f(c-*s):++s;}

Sử dụng tốt \r- tôi nghĩ nó chỉ tốt cho hỗ trợ Windows. Nhưng tại sao c>0khi nào csẽ làm?
ugoren

@ugoren: không được, hãy nghĩ về nó.
đã ngừng quay ngược chiều

Bạn nói đúng, tôi đã nhầm lẫn bằng cách nào đó. Tôi đã suy nghĩ về những con số trên 2 ^ 31, nơi >0không tốt. Nhưng thay vì nhận thấy rằng chức năng của bạn không hỗ trợ họ, tôi nghĩ ==là tốt.
ugoren

4

ECMAScript 6, 25 × 0,9 = 22,5

Vâng, đó là một cách nhàm chán để nhận được 13.

n => n % '             '.length ? 'no' : 'yes'

tôi đã cố gắng tìm hiểu làm thế nào điểm của bạn quá thấp, sau đó tôi nhận ra thiên tài trong việc sử dụng khoảng trắng cho số của bạn ... lol
mellamokb

1
+1 vì lạm dụng các quy tắc. Nếu tôi nói họ, đó sẽ là "không tính khoảng trắng KHẮC PHỤC". Vì vậy, có ai sẽ cung cấp cho chúng tôi một giải pháp 0 byte?
ugoren


3

APL ((21 - 1) × 0,8 = 16)

'yes' 'no'[1=⎕∨⌊⍟9*6]

⎕IOnên được đặt thành 0 để điều này hoạt động chính xác trong Dyalog APL. Để tạo 13, chúng ta lấy sàn ( ) của logarit tự nhiên ( ) là 9 thành lũy thừa 6 ( 9*6). Sau đó, chúng tôi tìm thấy GCD ( ) của đầu vào ( ) và 13 của chúng tôi và sau đó chúng tôi kiểm tra xem nó có bằng 1. Điều này được sử dụng để lập chỉ mục ([...] ) vectơ của câu trả lời.

Nếu bất cứ ai muốn trở thành nhà mô phạm về việc đề cập đến byte trong đặc tả điểm, thì điểm cho phiên bản được mã hóa UTF-8 của điều này là (29 - 1) × 0.8 = 22.4. :)


1
Tôi rất muốn được mô phạm về byte.
Steven Rumbalski

1
Ohhhhhhhh snap bạn di- int .
Dillon Cower

3

C, 88

Thủ thuật Fibonacci.

f(n){return n<2?n:f(n-1)+f(n-2);}main(x){printf("%s",x%f(7)?"No":"Yes",scanf("%d",&x));}

2
Bạn đang sử dụng 13 qua f (7) ... Điều đó hơi bẻ cong quy tắc một chút ...
WallyWest

3

Perl - 44 × 0,8 = 35,2

#!perl -p
map$_+=4*chop,($_)x10;$_=chop^$_*3?'no':yes

Đếm shebang là một byte.

Tôi hơi trễ trò chơi, nhưng tôi nghĩ tôi sẽ chia sẻ thuật toán, vì không có bài viết nào khác cho đến thời điểm này đã sử dụng nó.

Điều này hoạt động theo quan sát rằng nếu n chia hết cho 13 , thì ⌊ n / 10 + n% 10 * 4 cũng chia hết cho 13 . Các giá trị 13 , 2639 tự chu kỳ. Tất cả các bội số khác của 13 cuối cùng sẽ đạt được một trong các giá trị này không quá log 10 n lần lặp.


Trong các căn cứ khác

Phải thừa nhận rằng, choplà một chút của một cảnh sát. Với đại diện cơ sở 10, nó tương đương với divmod. Nhưng thuật toán hoạt động hoàn hảo trong các cơ sở khác, ví dụ cơ sở 4 hoặc 8.

Mã giả kiểu Python của thuật toán trên (cơ sở 10):

def div13(n):
    while n > 40:
        q, r = n // 10, n % 10
        n = q + 4*r
    return n in [13, 26, 39]

Trong cơ sở 2:

def div13(n):
    while n > 40:
        q, r = n >> 1, n & 1
        n = q + 7*r
    return n in [13, 26, 39]

Trong cơ sở 4:

def div13(n):
    while n > 40:
        q, r = n >> 2, n & 3
        n = q + 10*r
    return n in [13, 26, 39]

Trong cơ sở 8:

def div13(n):
    while n > 40:
        q, r = n >> 3, n & 7
        n = q + 5*r
    return n in [13, 26, 39]

vv Bất kỳ cơ sở nhỏ hơn 13 hoạt động tốt như nhau.


2

Javascript: 59 * 0.8 = 47.2 (?)

bí ẩn :

function r(n){
  for(c=0;n>c;n-=12,c++);
  return n==c?'yes':'no';
}

Bao gồm cải tiến của mellamokb (57 * 0.8 = 45.6):

function r(n){
  for(c=0;n>c;n-=12,c++);
  return n-c?'no':'yes'
}

1
Bạn có thể lưu hai ký tự bằng cách thay đổi trở lại return n-c?'no':'yes'và bỏ dấu chấm phẩy thứ hai.
mellamokb

@mellamokb Bắt tốt. Có lẽ có thể cải thiện hơn nữa bằng cách viết nó trong Ruby, hoặc một cái gì đó cho phép định nghĩa hàm nhỏ gọn hơn.
Supr

Ngoài ra còn có một tiêu chuẩn được chấp nhận về CG để sử dụng promptcho đầu vào và alertđầu ra, giúp chương trình tương tác và tiết kiệm một vài ký tự.
mellamokb

2

Perl: (51-4 dấu cách) * 0.9 = 42.3

say+<>%(scalar reverse int 40*atan2 1,1)?'no':'yes'

40 * atan2 (1,1) -> 31.41592 (PI * 10)


2

Perl (19.8)

21 byte * .9

say2*<>%26?"no":"yes"

chú thích: chương trình Perl đầu tiên của tôi từ trước đến nay. Tôi đánh máy yếu là tốt cho golf tôi đoán.


Tôi đã thấy rằng một cách tốt để đo lường kiến ​​thức về ngôn ngữ của bạn là thử và chơi gôn. Thường yêu cầu biết các trường hợp cạnh. Ngoài ra, điểm của bạn thực sự là 23 * 0,90 (khoảng trắng không được tính).
Ông Llama

Nghĩ rằng tôi đã chiếm khoảng trắng. Đã sửa bây giờ. Cảm ơn đã chỉ ra rằng.
Steven Rumbalski

Ồ Không có tình yêu cho Perl. Không thể nói tôi thích nó.
Steven Rumbalski

2

trong C (K & R): 47 * 0,8 = 37,6

f(i){for(;i>0;i-=__LINE__);puts(i?"no":"yes");}

EDIT1: được loại bỏ tất cả các phụ thuộc vào các chức năng bên ngoài, ở trên sẽ hoạt động miễn là bạn đặt dòng này trên dòng thứ 13 của tệp! :) Nếu __LINE__được thay thế bằng cách nói 0xdthì có thể lưu thêm 5 ký tự (điểm: 33,6)


7
Nếu điều này cần ở dòng thứ 13, bạn cần thêm 12 dòng mới vào mã của mình và do đó, vào điểm số của bạn: nó trở thành 59 * 0,8 = 47,2
Vereos


2

JavaScript (108 ít hơn 0 cho khoảng trắng) => 108, x 0,8 (không có mô đun, không phân chia) = 86,4

b=b=>{a=z,a=a+"";return+a.slice(0,-1)+4*+a.slice(-1)};z=prompt();for(i=99;i--;)z=b();alert(b()-z?"no":"yes")

Phương pháp này sử dụng thuật toán sau: 1. Lấy chữ số cuối cùng, nhân nó với bốn, thêm nó vào phần còn lại của số bị cắt. 2. Lặp lại bước 1 cho 99 lần lặp ... 3. Kiểm tra lại một lần nữa bằng bước 1, nếu số kết quả là chính nó, bạn đã tìm thấy bội số của 13.

Cập nhật trước đó, loại bỏ varvà đảo ngược logic tại cảnh báo để loại bỏ nhiều ký tự hơn bằng cách sử dụng điều kiện trừ-sai.

Về mặt kỹ thuật, kết quả cuối cùng là cuối cùng bạn sẽ đạt được một số có hai chữ số như 13, 26 hoặc 39 mà khi chạy qua bước 1 một lần nữa sẽ cho 13, 26 hoặc 39 tương ứng. Vì vậy, thử nghiệm cho lần lặp 100 giống nhau sẽ xác nhận tính phân chia.


2

Cheddar, 20 byte (không lọc)

Điểm là 20 * 0,9 = 18

n->n*2%26?'no':'yes'

Một câu trả lời thẳng thắn.


2

Lisp thường gặp (71 byte * 0,8) = 56,8

Đệ quy đơn giản, thực sự.

(defun w(x)(if(> x 14)(w(- x 13))(if(> 14 x 12)(print'yes)(print'no))))

Ung dung:

(defun w (x)
  (if (> x 14)
      (w (- x 13))
      (if (> 14 x 12)
          (print 'yes)
          (print 'no))))

2

Hồng ngọc ( 50 48 * 0,9 = 43,2)

Cách sử dụng thông minh eval

eval x="p gets.to_i*3%x.length == 0? 'yes':'no'"

1

D 56 ký tự .80 tiền thưởng = 44,8

bool d(double i){
    return modf(i*0,0769230769,i)<1e-3;
}

đây có thể là một khoản đồng thanh toán với việc sử dụng 1/13 và gấp đôi có thể lưu trữ chính xác bất kỳ số 32 bit nào

chỉnh sửa: điều này hoạt động bằng cách nhân với 1/13 và kiểm tra phần phân số nếu nó khác 0 (cho phép sai số làm tròn) hoặc nói cách khác, nó kiểm tra phần phân số của i / 13


không modf tính là sử dụng mô-đun?
Blazer

@Blazer không thực sự lấy phần phân số của đối số thứ nhất và trả về nó trong khi lưu trữ phần không thể tách rời trong đối số thứ hai
ratchet freak

Chỉ cần một lưu ý: kết quả (có / không) phải thực sự là đầu ra. Ngoài ra, tôi hơi tò mò về cách giải pháp này hoạt động. Một lời giải thích sẽ được nhiều đánh giá cao!
Ông Llama

1

Python 2.7

(20 - 1 khoảng trắng) * 0,9 (không phân chia) = 17,1

print input()%015==0

có / không thay vì đúng / sai: 31 * 0.9 (không chia) = 27.9

print'yneos'[input()%015!=0::2]

lợi dụng python intđể chuyển đổi các cơ sở khác từ chuỗi thành số nguyên cơ sở 10. bạn có thể thấy trong cả hai phiên bản họ sử dụng một cơ sở khác nhau (nhưng cùng độ dài ký tự)

chỉnh sửa: 1 char lưu trong có / không có phiên bản

chỉnh sửa2: 2 ký tự cạo khác!

chỉnh sửa 3: cảm ơn một lần nữa để bình luận! thậm chí nhiều nhân vật còn bị loại bỏ bằng cách sử dụng các biểu diễn bát phân dựng sẵn của python ( 015== 13...) thay vì bản dịch cơ sở của int


3
Tôi thấy một cảnh sát với các căn cứ khác nhau
ratchet freak

14 ở căn cứ 9? Tôi nên thấy rằng sắp tới.
Ông Llama

1
print['no','yes'][input()%int('d',14)==0
Steven Rumbalski

theo như tôi thấy, một cảnh sát được định nghĩa là một cái gì đó giống như 14-1hoặc 26/2. Tôi vừa lấy tự do sáng tạo để đại diện cho 13
Blazer

@StevenRumbalski cảm ơn vì đã tiết kiệm 1 char: P
Blazer

1

Perl, 95 * 0,8 = 76

$_=<>;
while($_>0){
$q=7*chop;
$d=3*($m=chop$q);
chop$d;
$_-=$d+$m}
if($_){print"no"}
else{print"yes"}

Các ngắt dòng đã được thêm vào cho rõ ràng. Tôi có thể đã có thể làm cho câu trả lời này ngắn hơn rất nhiều, nhưng tôi cảm thấy rằng câu trả lời này đại diện cho một cách tiếp cận vấn đề độc đáo.


1

Con trăn - điểm 27,9

(31 ký tự * 0,90) - bỏ qua một số phần thưởng cho mã ngắn hơn.

print'yneos'[2*input()%26>0::2]

phiên bản cũ hơn: (47 ký tự * 0,80) - trích xuất hoàn toàn câu trả lời Javascript của mellamokb, nhưng bằng Python.

n=2*input()
while n>0:n-=26
print'yneos'[n<0::2]

phiên bản cũ hơn: (60 ký tự * 0,80)

n=input()
while n>12:
 for _ in'x'*12+'!':n-=1
print'yneos'[n>0::2]

phiên bản cũ hơn: (105 ký tự * 0,80)

n=abs(input())
while n>12:n=abs(sum(int(x)*y for x,y in zip(`n`[::-1],n*(1,-3,-4,-1,3,4))))
print'yneos'[n>0::2]

Hmm, đây là một phương pháp tiện lợi. Mẫu 1, -3, -4 đó tương tự như những gì tôi thấy trên wikipedia. Vẫn mát mẻ để xem nó trong mã.
Ông Llama

@GigaWatt: Đó là nơi tôi đã nhận nó. Mẫu khác (1,10,9,12,3,4)sẽ lưu 1 ký tự nhưng sẽ không giải quyết đến giá trị nhỏ hơn 13.
Steven Rumbalski

1

Trong Q:

d:{$[0=x mod "I"$((string 6h$"q")[1 2]);`yes;`no]}
50*.9=45

Chào mừng đến với CodeGolf.SE. Bạn nên đặt mã của mình vào một codeblock và điểm nào bạn có thể sử dụng backticks trong đó bạn có nghĩa là backticks vì chúng không còn có ý nghĩa định dạng. Tôi đã thực hiện phần đầu tiên cho bạn, vui lòng kiểm tra và sửa bất kỳ lỗi nào tôi đã giới thiệu.
dmckee

1

Ngữ pháp tuyến tính phải - điểm

S->ε
S->1A
S->0S
S->9I
S->3C
S->5E
S->4D
S->2B
S->7G
S->6F
S->8H
F->3K
K->0F
A->2L
K->1G
A->5B
A->0J
B->7A
J->5A
G->6K
G->8S
H->9K
F->5S
K->2H
I->6E
I->5D
J->4S
D->8I
B->6S
K->9B
F->6A
G->9A
K->6L
K->4J
C->1E
L->8K
E->5C
B->4K
C->0D
J->2K
D->2C
A->9F
J->7C
C->6J
C->8L
E->0K
L->0C
B->9C
E->2S
L->6I
I->0L
J->0I
B->2I
I->3B
H->1C
I->7F
C->4H
F->1I
G->4I
I->0G
C->3G
F->8C
D->0A
E->3A
I->9H
A->7D
C->2F
H->7I
A->8E
F->9D
E->8F
A->6C
D->6G
G->0E
D->5F
E->9G
H->2D
D->7H
H->3E
I->2A
K->3I
C->9S
C->7K
E->4B
D->1B
L->1D
J->9E
I->1S
E->1L
J->8D
D->9J
L->2E
J->3L
B->5L
B->8B
L->7J
L->9L
G->1F
A->4A
K->5K
B->3J
H->6H
E->7E
J->1J
D->4E
G->2G
J->6B
D->3D
E->6D
H->4F
I->4C
C->5I
F->0H
H->5G
K->7S
G->3H
L->5H
H->8J
A->3S
H->0B
B->1H
G->7L
K->8A
F->2J
F->7B
L->4G
F->4L
A->1K
B->0G
G->5J
L->3F

Sau đó, tùy thuộc vào cách bạn chọn 'chạy' nó, nó sẽ xuất ra 'có' hoặc 'không'.

Không phải là một mục nghiêm túc, chỉ là một số niềm vui;)

EDIT: Có lẽ tôi nên giải thích một chút.

Một ngữ pháp là một tập hợp các quy tắc (sản phẩm) xác định một ngôn ngữ . Một ngôn ngữ có thể được coi là tất cả các chuỗi có thể được hình thành bởi một bảng chữ cái, phù hợp với các quy tắc ngữ pháp của nó.

Ở đây bảng chữ cái là tập hợp của tất cả các chữ số thập phân. Các quy tắc của ngữ pháp là tất cả các chuỗi phải tạo thành các số nguyên thập phân chia hết cho 13.

Chúng ta có thể sử dụng ngữ pháp ở trên để kiểm tra xem một chuỗi có thuộc ngôn ngữ của chúng ta hay không.

Các quy tắc của ngữ pháp chứa các ký hiệu đầu cuối (là các thành phần trong ngôn ngữ) cũng như các ký hiệu không đầu cuối được thay thế theo cách đệ quy.

Thật dễ dàng để giải thích những gì đang xảy ra với một ví dụ:

Hãy nói ví dụ rằng chuỗi chúng tôi đang kiểm tra là 71955.

Luôn có một ký hiệu bắt đầu (không phải là thiết bị đầu cuối), trong trường hợp ngữ pháp ở trên đây là 'S'. Tại thời điểm này, chúng tôi chưa đọc bất kỳ ký tự nào trong chuỗi của chúng tôi:

current pattern                    symbol read
S                                  ε

Bây giờ, chúng tôi đọc ký hiệu đầu tiên trong chuỗi của chúng tôi là '7', sau đó chúng tôi tìm một quy tắc trong ngữ pháp có bất kỳ ký tự không nào trong mẫu hiện tại của chúng tôi ở phía bên trái của '->' và đó có biểu tượng của chúng tôi ở phía bên phải của '->'. May mắn thay, có một (S-> 7G), vì vậy chúng tôi thay thế các biểu tượng không đầu cuối trong mẫu hiện tại của chúng tôi bằng phía bên phải của quy tắc mới:

current pattern                    symbol read
7G                                 7

Bây giờ chúng ta có mẫu 'G' không phải đầu cuối trong mẫu của chúng tôi và ký hiệu tiếp theo được đọc là '1', vì vậy chúng tôi tìm một quy tắc trong ngữ pháp bắt đầu bằng 'G-> 1 ". Chúng tôi thấy có một (G-> 1F), vì vậy chúng tôi thay thế thiết bị đầu cuối không bằng RHS của quy tắc mới của chúng tôi:

current pattern                    symbol read
71F                                1

Tiếp tục lặp lại quá trình này:

Quy tắc tiếp theo: F-> 9D

current pattern                    symbol read
719D                               9

Quy tắc tiếp theo: D-> 5F

current pattern                    symbol read
7195F                              5

Quy tắc tiếp theo: F-> 5S

current pattern                    symbol read
71955S                             5

Tại thời điểm này, chúng ta không còn ký hiệu nào trong chuỗi, nhưng chúng ta có một ký hiệu không đầu cuối khác trong đó. Chúng ta thấy từ quy tắc đầu tiên trong ngữ pháp mà chúng ta có thể thay thế 'S' bằng chuỗi trống (ε): S->

Làm như vậy cung cấp cho chúng tôi mẫu hiện tại: 71955ε tương đương với 71955.

Chúng tôi đã đọc tất cả các ký hiệu trong chuỗi của chúng tôi và mẫu không chứa các ký hiệu không phải đầu cuối. Điều đó có nghĩa là chuỗi thuộc về ngôn ngữ và do đó 71955 trên thực tế chia hết cho 13.

Tức là mục tiêu là có mẫu = chuỗi. Nếu bạn còn lại với bất kỳ ký hiệu không đầu cuối nào, sau khi đọc tất cả các ký hiệu trong chuỗi của bạn, chuỗi không thuộc về ngôn ngữ. Tương tự, nếu bạn vẫn có nhiều ký hiệu trong chuỗi của mình để đọc, nhưng không có quy tắc nào trong ngữ pháp cho phép bạn đi tiếp, thì chuỗi đó không thuộc về ngôn ngữ.


Tôi ... thậm chí không chắc những gì tôi đang nhìn ở đây.
Ông Llama

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.