Tôi thậm chí không phải tôi chỉ lẻ!


36

Nhiệm vụ của bạn rất đơn giản: viết chương trình nhận một số nguyên làm đầu vào và xuất nó nếu nó là số lẻ và không làm gì khác (không được phép tạm dừng). Thách thức là, bạn chỉ có thể sử dụng các byte lẻ.

Bạn có thể tùy ý nối một dòng mới vào đầu ra.

Đây là mã golf, câu trả lời ngắn nhất trong (lẻ) byte thắng.

Sơ hở tiêu chuẩn bị cấm. Hơn nữa, bạn không thể sử dụng các phiên bản ngôn ngữ mới hơn so với việc đăng thử thách này.

Ví dụ đầu vào> đầu ra:

13 > 13

42 >


10
Tôi đánh giá thấp thử thách này vì đây là thử thách "Làm X mà không có Y".
Nữ tu bị rò rỉ

4
Chính xác thì does nothing otherwisecó nghĩa là gì? Trong Haskell, một hàm có kiểu Int -> Int hoặc trả về một số nguyên hoặc không dừng hoặc ném một số lỗi. Nếu đầu vào là thậm chí không nên trả lại, vì vậy sẽ không tạm dừng hoặc ném lỗi trong trường hợp này được chấp nhận?
Laikoni

2
Nếu bạn muốn biết liệu bạn có thể sử dụng mã nguồn của mình không, hãy thử các tập lệnh này trong bảng điều khiển trình duyệt của bạn. Tạo bộ ký tự hợp lệ : alphabet=new Set(Array(256).fill(0).map((v,i)=>i).filter(v=>v%2).map(String.fromCharCode));. Kiểm tra xem nguồn có hợp lệ không : [..."SOURCE CODE"].every(v=>alphabet.has(v)). Xem các ký tự không hợp lệ trong nguồn : [...new Set("SOURCE CODE")].filter(v=>!alphabet.has(v)). Hãy nhớ để thoát khỏi dấu ngoặc kép của bạn, "=> \";)
kamoroso94

14
@LeakyNun "làm X mà không có Y" không đề cập đến các thách thức nguồn bị hạn chế chung , nhưng các thách thức cấm bạn sử dụng các tính năng nhất định của ngôn ngữ. Thử thách này không phải là điều đó và cũng không có bất kỳ vấn đề nào khiến cho những thách thức thực sự "làm X mà không có Y" trở thành vấn đề.
Martin Ender

1
@Laikoni Vì đã có một số câu trả lời đi vào một vòng lặp vô hạn, tôi sẽ nói rằng việc thể hiện một hành vi như vậy là ổn. Không trở về có thể được hiểu là không làm gì.
M.Herzkamp

Câu trả lời:



67

Lenguage , 645529908926937253684695788965635909332404360034079 9394157991500940492270727190763049448735 1174269736137617561533841898064735499551 22933829371515

Điều đó gần bằng 2 duodecillion byte.

Các tập tin dịch sang chương trình brainfuck sau đây:

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

Lấy đầu vào dưới dạng mã ASCII, với giá trị tối đa là 256. Sử dụng gói.


@Okx Sai lầm của tôi. Nhưng tại sao bạn không sử dụng ,[<<+>+>-]<[>>+<<-]+>>[-[->]<]<[<[<]>.<]?
dùng202729

1
Làm thế nào về ,[[>]++[-<]<+>>]>[<<<.<]chỉ với 3452857532394791089951 byte?
Jo King

Trên thực tế, vì các vòng lặp vô hạn được cho phép, cũng ,-[-->++<]>+.hoạt động
Jo King

20

Mã máy x86-64, 8 byte

Lấy cảm hứng từ giải pháp của Bruce Forte , nhưng hơi dưới mệnh. :-)

8D 07          lea      eax, [rdi]    ; put copy of input parameter in EAX
D1 EF          shr      edi, 1        ; shift LSB into CF
             InfiniteLoop:
F3 73 FD       rep jnc  InfiniteLoop  ; test CF; infinite loop back here if input was even
C3             ret                    ; return with original input in EAX if it was odd

Một tham số nguyên duy nhất được lấy trong thanh EDIghi, theo quy ước gọi System64 AMD.

Một bản sao của giá trị này ban đầu được tạo ra và đưa vào EAXđể có thể trả lại nếu thích hợp. ( LEAđược sử dụng thay vì bình thườngMOV vì chúng ta cần một lệnh có byte lẻ.)

Sau đó, giá trị trong EDIđược dịch chuyển sang phải 1, trong đó đặt bit đã chuyển sang cờ mang (CF). Bit này sẽ là 0 nếu số chẵn hoặc 1 nếu là số lẻ.

Sau đó, chúng tôi kiểm tra CF bằng cách sử dụng JNChướng dẫn, sẽ chỉ phân nhánh nếu CF bằng 0 (nghĩa là số chẵn). Điều này có nghĩa là chúng ta sẽ đi vào một vòng lặp vô hạn cho các giá trị chẵn. Đối với các giá trị lẻ, chúng tôi rơi vào và giá trị ban đầu (in EAX) được trả về.

Có một chút mẹo với JNC hướng dẫn, mặc dù vậy, nó có REPtiền tố! Thông thường, REPcác tiền tố chỉ được sử dụng với các hướng dẫn chuỗi, nhưng vì các hướng dẫn sử dụng của Intel và AMD đều đồng ý rằng không liên quan / không cần thiết / dư thừaREP các tiền tố bị bỏ qua, chúng tôi ném một lệnh vào nhánh ở đây để làm cho nó dài 3 byte. Theo cách đó, phần bù tương đối được mã hóa trong lệnh nhảy cũng là số lẻ. (Và tất nhiên,REP bản thân nó là một tiền tố byte lẻ.)

Cảm ơn lòng tốt RETđược mã hóa bằng một byte lẻ!

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


Trong trường hợp bạn không nghĩ trả về giá trị nếu nó lẻ hoặc đi vào một vòng lặp vô hạn nếu nó thậm chí (để bạn không bao giờ quay lại) đáp ứng các yêu cầu "đầu ra" của thử thách hoặc bạn chỉ muốn một cái gì đó thú vị hơn, đây là một hàm điều đó đưa giá trị ra một cổng nối tiếp (tất nhiên chỉ khi nó là số lẻ).

Mã máy x86-64 (đầu ra cổng nối tiếp), 17 byte

8D 07         lea   eax, [rdi]   ; put copy of input parameter (EDI) in EAX

B1 F7         mov   cl, 0xf7     ; put 0xF7 into low-order bits of CX
B5 03         mov   ch, 0x03     ; put 0x03 into high-order bits of CX
FE C1         inc   cl           ; increment low-order bits of CX to 0xF8 (so all together it's now 0x3F8)
0F B7 D1      movzx edx, cx      ; move CX to DX ("MOV DX, CX" would have a 16-bit prefix of 0x66)

D1 EF         shr   edi, 1       ; shift LSB of input parameter into CF
73 01         jnc   IsEven       ; test CF: branch if 0 (even), fall through if 1 (odd)
EF            out   dx, eax      ; output EAX (original input) to I/O port 0x3F8 (in DX)
            IsEven:
C3            ret                ; return

Điều làm cho điều này thú vị hơn một chút là mã làm được nhiều hơn , điều đó có nghĩa là khó khăn hơn khi thực hiện tất cả bằng cách sử dụng các hướng dẫn được mã hóa chỉ bằng các byte lẻ. Tất nhiên, điều này cũng có nghĩa là nó thất bại ở môn đánh gôn, vì vậy đây là một sự đánh đổi mà bạn muốn thú vị và đầy thách thức, hay bạn muốn ngắn?

Dù sao, công dụng này x86 OUThướng dẫn để ghi vào I / O port 0x3F8, đó là tiêu chuẩn COM1 cổng nối tiếp trên một máy tính. Tất nhiên, điều thú vị là tất cả các cổng I / O tiêu chuẩn (nối tiếp và song song) đều có địa chỉ chẵn, vì vậy chúng không thể được mã hóa thành lệnh ngay lập tức cho OUThướng dẫn hoặc chuyển trực tiếp vào thanh ghi. Bạn phải khởi tạo với một giá trị nhỏ hơn giá trị thực và sau đó tăng giá trị trong thanh ghi. Bạn cũng bị giới hạn trong việc sử dụng các thanh ghi nhất định cho thao tác vì bạn cần các thanh ghi được mã hóa bằng các byte lẻ trong hướng dẫn khi được sử dụng làm toán hạng.

Ngoài ra, tôi đã phải khởi tạo thanh DXghi (thông qua thanh CXghi) ở đầu vòng lặp, mặc dù điều này chỉ cần nếu giá trị là số lẻ, để đảm bảo rằng JNClệnh sẽ có phần bù lẻ. Tuy nhiên, vì những gì chúng ta bỏ qua là OUThướng dẫn, tất cả các mã này làm là lãng phí chu kỳ và các thanh ghi cào; nó không thực sự xuất ra bất cứ thứ gì, vì vậy nó không phá vỡ các quy tắc.

Cuối cùng, chức năng này sẽ trở lại (sau khi đã hoàn thành hoặc không thực hiện đầu ra cho cổng nối tiếp) với giá trị đầu vào còn lại EAX. Nhưng điều đó không thực sự phá vỡ bất kỳ quy tắc nào; tất cả các chức năng trong ngôn ngữ lắp ráp sẽ trả về với một giá trị trong EAXcâu hỏi chỉ là một giá trị quan trọng hoặc giá trị rác . Điều đó được xác định bởi tài liệu của hàm (về cơ bản, nó trả về một giá trị hay nó trả về void) và trong trường hợp này, tôi đang ghi lại nó là không trả về giá trị. :-)

Không có liên kết TIO cho cái này, vì nó không thực hiện đầu ra cho các cổng nối tiếp. Bạn sẽ cần sắt thực sự, hoặc một trí tưởng tượng.


+1 để giải thích! Tại sao bạn có thể sử dụng Mov trong dòng thứ hai nhưng không phải trong dòng đầu tiên?
M.Herzkamp

Ngoài việc mã hóa đó là một MOVlệnh, toán hạng của nó cũng phải được mã hóa theo byte. Trong trường hợp này, đó sẽ là các thanh ghi nguồn và đích (mặc dù các toán hạng cũng có thể là các giá trị ngay lập tức, giống như các hằng số). Các thanh ghi khác nhau ánh xạ tới các byte khác nhau và một số byte đó là chẵn. Vì vậy, ví dụ, những gì tôi muốn sử dụng sẽ là mov eax, edi, nhưng đó là 89 F8bằng byte. Xem cách nhiều hơn bạn từng muốn biết về mã hóa ở đây, trong phần "mã" . @ M.Herzkamp
Cody Grey


9

05AB1E , 3 byte

Éi=

Mã tương ứng với các giá trị byte C9,69,3Dhoặc 201,105,61tất cả đều là số lẻ.

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

Giải trình

É     # input % 2 == 1
 i    # if true
  =   # print without popping

= # print without newlineđó thực sự được in với dòng mới mà không xuất hiện
Erik the Outgolfer 11/07/17

@EriktheOutgolfer: Đúng. Tôi sẽ sửa lời giải thích.
Emigna

Thật không may, É×dường như không hoạt động):
kalsowerus

@kalsowerus: Vâng, tôi cũng nhận thấy điều đó. Hoạt động chính xác với một Dở phía trước, nhưng đó thậm chí và không ngắn hơn. Lý do nó không hoạt động là đầu vào ẩn lặp đi lặp lại được lấy làm đối số thứ hai.
Emigna

@Emigna nhưng điều kỳ lạ là, hoán đổi hai giá trị hàng đầu trên ngăn xếp hai lần, khiến nó hoạt động tốt ...
kalsowerus

5

MATL , 3 byte

o?G

MATL sử dụng các ký tự ASCII, vì vậy o?Gtương ứng với byte (trong hệ thập phân) 111, 63, 71.

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

Giải trình

o     % Push (implicit) input modulo 2
?     % If nonzero
  G   %   Push input
      % End (implicit)
      % Display stack contents (implicit)

5

Haskell , 36 33 byte

c[1]=1;c[m]=1+1+c[m-1-1];o	m=c[m]

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

Sử dụng: o 7 yiedls 7,o 8 đi vào một vòng lặp vô hạn.

Thuật toán thực tế là

o 1 = 1
o m = 2 + o(m-2)

Vấn đề đầu tiên tôi gặp phải là thiếu không gian và (, bởi vì một hàm olấy một đối số mthường được định nghĩa là o m=...hoặc o(m)=.... Tuy nhiên, tôi phát hiện ra rằng một nhận xét nội tuyến cũng {- some comment -}hoạt động như dấu phân cách mã thông báo, do đó, một định nghĩa o{--}m=...là có thể theo các quy tắc nhất định. Chỉnh sửa: Ørjan Johansen chỉ ra rằng người ta có thể sử dụng ký tự tab thay vì khoảng trắng, tiết kiệm ba byte: o m=...

Vấn đề thứ hai là cuộc gọi đệ quy o(m-2). -2chỉ là -1-1, nhưng ở đây thủ thuật bình luận không hoạt động vì các dấu ngoặc đơn là bắt buộc. Tôi đã sửa lỗi này bằng cách để hàm hoạt động trên danh sách đơn có chứa một số: o[m-2]tuy nhiên, vì đây không phải là cách cung cấp đầu vào tiêu chuẩn, tôi đã thuê ngoài tính toán cho hàm trợ giúp hoạt cđộng trên danh sách và gọi ctừ ođó có định dạng đúng .


Bạn có thể sử dụng một tab thay vì một khoảng trắng.
Ørjan Johansen

@ RjanJohansen Tôi có thể xác minh rằng nó hoạt động với \tthay vì {--}.
Esolanging Fruit

@ RjanJohansen Cảm ơn, đó là điều tốt để biết.
Laikoni

5

Python REPL, 38 byte

Lấy đầu vào làm giá trị của biểu thức trước bằng cách sử dụng _. Đầu ra sẽ là một chuỗi (biểu diễn chuỗi của số nguyên cho số lẻ hoặc chuỗi trống cho số chẵn).

'%s'%[['']+[_]][-1][[_%[1+1][-1]][-1]]

Dùng thử trực tuyến

Để chạy nó trong một vỏ thực tế, bạn có thể thử nó ở đây . Nhập đầu vào, nhấn enter. Dán mã, nhấn enter.

Giải trình:

Điều này mất một thời gian để tìm ra. Không nhân, không phân nhánh, không cắt, không dấu phẩy, không dấu chấm, không nhập, không dấu ngoặc, khôngexec , không eval, không printvà không có hàm. Tôi có một giải pháp làm việc với đầu ra đó bằng stderr, nhưng sau đó tôi nhận ra rằng chúng ta phải xuất số nguyên thực tế, không chỉ là giá trị trung thực / falsey.

Tôi sử dụng dấu ngoặc thay cho dấu ngoặc đơn với [expression][-1] . Đơn giản hóa mà biến mã trên thành '%s'%(['']+[_])[_%(1+1)].

Vì không thể có dấu phẩy, tôi đã sử dụng danh sách bổ sung để tạo ['',_]. Sử dụng định dạng chuỗi, thu được kết quả mong muốn.


Thanh danh. Như một phần thưởng, nó cũng hoạt động cho Ruby IRB :) Nitpick: trả lại một chuỗi cho các số lẻ có ổn không, có thể trả lại một chuỗi trống cho các số chẵn không?
Eric Duminil

Không làm gì và in hay trả lại không có gì giống nhau, tôi nghĩ vậy. Theo một cách nào đó, chuỗi rỗng là không có gì.
mbomb007

Vâng, tôi đã thực sự nitpicking. Nó vẫn trả về một chuỗi thay vì không có gì. Trong Python REPL, tôi muốn nói rằng đó Nonesẽ là một trận đấu thậm chí còn tốt hơn ''. Dù sao, điều đó vẫn tốt hơn 10000 lần so với bất cứ điều gì tôi có thể nghĩ ra.
Eric Duminil

@EricDuminil Tôi có thể trở lại False. Idk làm thế nào bạn có thể nhận được None, mặc dù.
mbomb007

4

CJam, 6 byte

q_iY%%

113 95 105 89 37 37

Chương trình này lấy mod 2 của đầu vào (gọi là r ) và in mọi r ký tự thứ trong chuỗi đầu vào. Nếu số đầu vào là số lẻ, nó sẽ in toàn bộ chuỗi, nhưng nếu được yêu cầu in mỗi ký tự thứ 0, chương trình sẽ đưa ra một lỗi.

Hãy thử nó ở đây


Tốt đẹp! Tôi đã định đăng bài qi_Y%]W%{}/M?và sau đó tôi thấy điều này.
Esolanging Fruit

4

Hình khối , 23 19 17 byte

;;u!I1)%/;O=!;;/;

Thử nó!

@, kết thúc một chương trình Cubix, là ascii 64, vì vậy thật không may, điều này thực sự chỉ đi vào một vòng lặp vô hạn sau khi thử nghiệm tính kỳ lạ. Không có liên kết TIO vì nó sẽ hết thời gian.

= (ascii 61) là một no-op trong Cubix.

Đây là một sửa đổi nhỏ của thuật toán trước đó (cùng # byte) thực sự hoạt động cho các số nguyên âm.

Phiên bản khối:

    ; ;
    u !
I 1 ) % / ; O =
! ; ; / ; . . .
    . .
    . .

Thuật toán:

  • I (73) : đọc trong đầu vào dưới dạng số
  • 1 (49) : đẩy 1
  • ) (41) : tăng
  • % (37) : lấy mod
  • / (47) : rẽ trái
  • ! (33) : bỏ qua hướng dẫn tiếp theo nếu lẻ
    • 1;;/; ;(59): chuẩn bị ngăn xếp cho đầu ra
    • O (79) : Đầu ra dưới dạng số.
    • Sau đó, nó nhập lại thuật toán nhưng Iđọc phần 0cuối của đầu vào, vì vậy chúng tôi được đảm bảo nhập vào nhánh chẵn
  • u (117) : quay tay phải
  • ;;;!I : vòng lặp, không có hiệu quả.

@MickyT không thành công cho đầu vào tiêu cực, đó là lý do tại sao tôi tránh sử dụng?
Giuseppe

Xin lỗi, tôi đã không kiểm tra đúng cách
MickyT

3

Than , 9 byte

¿﹪Iθ÷χ⁵→θ

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

Về cơ bản, nó in ngay đầu vào nếu nó không phải là bội số của 10/5 ( ²char thậm chí nằm trong trang mã Char Char ). Các ký tự được sử dụng là:

  • ¿: mã BF.
  • : mã A5.
  • : mã C9.
  • θ: mã F1.
  • ÷: mã AF.
  • χ: mã E3.
  • : mã B5.
  • : mã 13.

Trên thực tế gần cuối là dư thừa nhưng sau đó tôi thấy rằng câu trả lời phải có một chiều dài kỳ lạ ...

Giải trình:

¿      if (
 ﹪      Modulo (
  Iθ      the input as number,
  ÷χ⁵      χ (predefined value: 10) divided by 5 = 2 ) [is 1])
 →θ      then print rightwards the input as string

Bạn đang in và sau đó di chuyển sang phải; in ngay sẽ thực sự được →θ.
Neil

@Neil oops, cố định. Ít nhất điều đó không làm mất hiệu lực câu trả lời của tôi ... :-D
Charlie

3

mã máy x86_64 (Linux), 12 11 byte

Thật không may 0x80là thậm chí, nhưng nó vẫn hoạt động (giả sử "không làm gì" có nghĩa là không quay trở lại):

0000000000000000 <odd>:
   0:   8d 07                   lea  (%rdi), %eax
   2:   83 e7 01                and    $0x1, %edi
   5:   83 ff 01                cmp    $0x1, %edi
   8:   75 fb                   jne       5  <odd+0x5>
   a:   c3                      retq

-1 byte, cảm ơn @CodyGray!

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


1
Vì đây là x86-64, nên lea (%edi),%eaxyêu cầu tiền tố ghi đè kích thước địa chỉ ( 0x67) khi nguồn là thanh ghi 32 bit. Bạn có thể loại bỏ điều đó bằng cách làm lea (%rdi),%eax. Điều đó tiết kiệm một byte và thực sự sẽ làm cho mã hiệu quả hơn một chút (tiền tố làm chậm quá trình giải mã và điền vào i-cache). Có một số điều khác bạn có thể làm để rút ngắn điều này hơn nữa, nhưng về cơ bản nó tạo thành một bản viết lại hoàn chỉnh, vì vậy tôi sẽ đăng câu trả lời của riêng tôi. :-) Tôi cũng đã ủng hộ điều này, tất nhiên! (Ồ, chỉ cần nhận ra rằng bạn có thể đã sử dụng tiền tố để làm cho bước nhảy bù lẻ. Chà, bạn sẽ cần nhiều phép thuật hơn.)
Cody Gray

Ngoài ra, giải pháp thực sự thông minh cho TIO! Tôi đã bỏ qua nó trong hầu hết các câu trả lời của tôi vì tôi không muốn viết tất cả các mẫu soạn thảo trong "chân trang" để in đầu ra bằng asm. Cuối cùng tôi đã phá vỡ và làm điều đó vào một ngày khác, nhưng đây là một ý tưởng tốt hơn nhiều , cho phép bạn sử dụng C cho mọi thứ khác. Tôi sẽ ăn cắp điều này từ bây giờ! :-)
Cody Grey

Chúc mừng cho đầu vào của bạn, tôi là một người mới hoàn thành việc lắp ráp nhưng điều này dường như đủ dễ dàng! Tò mò cho giải pháp của bạn. Oh, tín dụng đi vào @ceilingcat - Tôi đã ăn cắp nó bản thân mình;)
ბიმო

Tôi thực sự không tiết kiệm cho bạn một byte byte Những gì bạn có bây giờ có một byte chẵn ( F6) cho JNEhướng dẫn bởi vì nó có phần bù chẵn. Đó là những gì tôi muốn nói đến từ phụ huynh cuối cùng mà tôi đã chỉnh sửa thành bình luận đầu tiên của mình. Bạn thực sự cần tiền tố đó để tạo ra một liên kết lẻ. Hoặc bạn phải viết lại mã theo một cách khác. Tôi đã chơi với một loạt các biến thể khác nhau. Tôi thực sự đã xem xét điều này tối qua và đang cố gắng tìm ra một cách tốt để sử dụng OUTđể đưa ra các giá trị kỳ lạ, nhưng không có giải pháp tốt nào thực sự xảy ra với tôi. Cái nhìn sâu sắc ở đây đối với tôi là đi vào một vòng lặp vô hạn cho các giá trị chẵn.
Cody Grey

Đây thực sự là một thử thách ngớ ngẩn, bởi vì không có giải pháp hợp lý nào hoạt động. Nó thực sự chỉ kiểm tra mức độ bạn biết các góc tối nghĩa của tập lệnh x86. Tôi thậm chí đã thử BThọ hướng dẫn mà không ai sử dụng bao giờ (thật không may, tất cả các mã hóa đăng ký đều là byte). Tôi nghĩ rằng có thể thú vị hơn khi viết mã xuất ra một cổng nối tiếp, thay vì chỉ trả về một giá trị hoặc bất cứ điều gì, nhưng điều đó làm cho số byte được đếm ở đó (đặc biệt là vì các địa chỉ cổng nối tiếp trong hex là chẵn!), Vì vậy tôi đã từ bỏ nó
Cody Grey

3

Toán học, 20 byte

Xuất hiện là giải pháp đầu tiên trong ngôn ngữ không chơi gôn.

a=1+1;g[i_/;!a\[Divides]i]=i

Trong MacintoshChineseTraditionalmã hóa ký tự. \[Divides]{161, 253} (2 byte)

Phiên bản thay thế (23 byte)

\[CapitalAlpha]=1+1;\[CapitalGamma][\[CapitalChi]_/;\[CapitalAlpha]\[LeftFloor]\[CapitalChi]/\[CapitalAlpha]\[RightFloor]\[NotEqual]\[CapitalChi]]=\[CapitalChi]

hoặc (hiển thị bằng Unicode)

Α=1+1;Γ[Χ_/;Α⌊Χ/Α⌋≠Χ]=Χ

trong Symbolmã hóa ký tự. (chỉ sử dụng các ký tự 1 byte)

Giải pháp xác định một hàm g(hoặc Γ) mà, đánh giá đầu vào khi đầu vào là số lẻ và theo nghĩa đen là "không làm gì" (không đánh giá) khi đầu vào là chẵn.


+1 byte ( ;ở cuối) nếu số byte phải là chẵn; và \[Divides]cũng có bảng mã Unicode kỳ lạ.
dùng202729

Bạn không cần I[1+1], bạn chỉ có thể sử dụng {1+1}. Ngoài ra, bạn đã kiểm tra xem các byte của dấu ngoặc sàn có hợp lệ không? Nếu vậy, bạn có thể có được 2từ \[LeftFloor]E\[RightFloor].
Martin Ender

@MartinEnder Chỉ Symbollàm cho sàn có giá trị, nhưng nó đã không phải Evà cũng không \[ExponentialE].
dùng202729

Tôi sợ bạn không được phép sử dụng các ký tự D; v; cũng không d, vì chúng có giá trị byte chẵn .. :(
Kevin Cruijssen

1
@KevinCruijssen \[Divides]là một ký tự đơn trong Mathicala , được biểu thị bằng 2 byte {161, 253}.
dùng202729

3

Perl, 54 byte

Yêu cầu -E.

Tôi thực sự rất thích thử thách này, tôi nghĩ tôi muốn thử và cải thiện câu trả lời này, nhưng tôi nghĩ đó có thể là thời gian ngắn nhất tôi có thể làm bây giờ. Tôi đã chơi và trả lời những câu trả lời này trong vài ngày nay, nhưng cảm thấy tôi hài lòng với giải pháp 54 byte!

s//A_=Y[;A_=A_%O?A_W''/;y/#A-_/#-A/;s/[#-}]+/uc/ee;say

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

Giải trình

Theo mặc định, hầu hết các hàm chuỗi của Perl hoạt động trên $_ , trống để bắt đầu.

Đầu tiên, s//A_=Y[;A_=A_%O?A_W''/thay thế chuỗi trống $_bằng A_=Y[;A_=A_%O?A_W'', sau đó y/#A-_/#-A/thay thế các ký tự dựa trên danh sách sau (char ở trên trở thành char bên dưới):

#ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
#$%&'()*+,-./0123456789:;<=>?@A

Những cập nhật $_nào có chứa $_=<>;$_=$_%2?$_:''. Tiếp theo s/[#-}]+/uc/eethay thế tất cả các ký tự [#-}]+bằng uc. Không có cái /eenày sẽ chỉ là chuỗiuc , nhưng /eeđánh giá nội dung của chuỗi hai lần. Đánh giá đầu tiên trả về kết quả của uc, đó là phiên bản chữ hoa $_nhưng vì $_không chứa các ký tự chữ cái, nên chỉ trả về toàn bộ chuỗi, sau đó lần thứ hai /eđánh giá lại chuỗi, đặt $_thành $_(số đầu vào) hoặc'' tùy thuộc vào việc có hay không không phải là số lẻ hay chẵn

Cuối cùng, vì $_bây giờ chứa những gì chúng ta muốn, chúng ta gọi say(đó là những gì đòi hỏi -Ethay vì -e) mà in $_theo dòng mới.


Thay thế Perl, 93 byte

92 byte mã + 1 cho -p, mà tôi cảm thấy sẽ làm cho nó không cạnh tranh.

s//_/g;s//uc/e;y/\x09-\x0b/_/;s/____/}[/;s/___/%C]/;s/_/{''H/;y/'{}1CDGH/'-)1-3+--/;s/[#-}]+/uc/ee

Chứa một tab và một tab dọc trong y/// , được chỉ định là \x09\x0b.

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


2

LOGO , 390 46 52 50 byte

[ask    1   se[make]iseq    1-3 cos ?/ask   1[1/sum 1   179]?]

Đó là danh sách mẫu trả về đầu vào nếu đầu vào là số lẻ và gây ra lỗi nếu đầu vào là chẵn.

Sử dụng:

show invoke [ask ... (paste code here) ... ] 5

đầu ra

5

vì 5 là số lẻ và

invoke [ask ... (paste code here) ... ] 6

sẽ gây ra lỗi vì 6 là chẵn.



2

TI-BASIC, 14 byte

Input Q
sinֿ¹(gcd(Q²,int(e
Q

Điều này sẽ gây ra lỗi tên miền (không in gì lên màn hình chính) trên một số chẵn.

Input Q             Q is a variable with an odd code. We cannot use "Ans" as it's even.

            int(e   floor(e) = 2; "2" is even.
         Q²         Q may be negative, so we square it which preserves parity.
     gcd(Q²,int(e   1 if Q is odd; 2 if Q is even.
sinֿ¹(gcd(Q²,int(e   Error iff Q is even.

Q                   If there was no error, print Q.

1

Bình thường , 14 11 10 9 byte

I + Q_ + K / Q + 3_1KQ 
I! SIcQ + 3_1Q
 I! U + 1_GQ1Q
? u + 1_GQ1k

Bộ thử nghiệm .


Đó là một cách thông minh, nhưng không phải là một cái gì đó giống như I%Qy1Qcũng hoạt động?
Jakube

@Jakube Tôi rõ ràng đã không tìm ra y1... Tuy nhiên, %thật không được phép, thật đáng buồn.
Nữ tu rò rỉ

Tại sao không? %có giá trị ascii 37 và là số lẻ.
Jakube

3
@Jakube vì hình như tôi đã tin tưởng danh sách này mà OP cung cấp (sai)
Leaky Nun

1

Japt , 4 byte

u)çU

Japt sử dụng ISO / IEC 8859-1 , do đó, điều này tương ứng với (theo số thập phân)117 41 231 85 .

Kiểm tra nó trực tuyến!

Giải trình

Uu)çU   Implicit: U = input integer
Uu)     Return Python-style U % (missing argument = 2). This gives 1 if U is odd, 0 if even.
   çU   Implicitly convert U to a string and repeat it that many times.
        Implicit: output result of last expression

Lần đầu tiên tôi đã thử các giải pháp sử dụng p, về cơ bản là çvới các đối số đảo ngược. Tuy nhiên, pthực hiện lũy thừa nếu đối số bên trái của nó là một số, vì vậy chúng ta cần chuyển đổi rõ ràng thành chuỗi. Giải pháp này hóa ra thực sự là một byte ngắn hơn, ngoài ra không chứa bất kỳ byte lẻ nào.


1

dc , 21 byte

[c]sa?kKKCI-1;1k%1!=a

Số thập phân: 91 99 93 115 97 63 107 75 75 67 73 45 49 59 49 107 37 49 33 61 97

Theo mặc định IO này , chương trình này để lại đầu vào trên ngăn xếp chính nếu nó là số lẻ và làm trống ngăn xếp khác. Điều này có thể được xác nhận bằng cách thêmf lệnh gỡ lỗi vào cuối chương trình như trường hợp trên trang TIO.

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

Giải trình

[    # Begin macro definition.
 c   # Clear the main stack.
]sa  # End macro definition and push the macro into register "a".
?k   # Prompt for input and store it into precision parameter "k".
KK   # Push two copies of the input to the main stack.
CI-  # Push C-I = 12-10 = 2 to the main stack  
1;1  # Push the value stored in the first index of array "1" (0 by default) 
     # to the main stack. 
k    # Push 0 into parameter "k" to reset the precision (otherwise the modulus 
     # function will not work correctly).
%    # Push the input (mod 2) to the main stack.
1!=a # If the input (mod 2) does not equal 1, execute the macro in register "a".
f    # OPTIONAL: Output the contents of the main stack.

1

TI-Basic, 18 byte

Đã lưu 2 byte nhờ lirtosiast

:Prompt Q
:While 5Q/ᴇ1-int(5Q/ᴇ1
:Q

tính bằng byte (+2 dòng mới = 3F)

:Prompt Q
 DD     51
:While 5Q/ᴇ1-int(5Q/ᴇ1
 D1    35 3B B1  35 3B  
        51 31     51 31
         83 71     83
:Q
 51

Xem http://tibasicdev.wikidot.com/one-byte-tokens


1
Tại sao không sử dụng fPart (?
lirtosiast

@lirtosiast dường như là một byte chẵn (BA = 186) theo tibasicdev.wikidot.com/one-byte-tokens
Oki

Ồ, tôi đã đọc sai mục nào là hàng và cột nào.
lirtosiast

1
Tôi tìm thấy Input Q[newline]sinֿ¹(gcd(Q²,int(e[newline]Q(14 byte). Tôi có thể gửi câu trả lời riêng biệt không?
lirtosiast

@lirtosiast Wow! Nó chắc chắn đủ khác nhau cho một câu trả lời riêng biệt. Thích nó
Oki


0

Bash , 31 byte

read a
[ $[a%2] = 0 ] ||echo $a

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

Giải trình:

read a                   reading the input and define it on the variable a
[ $[a%2] = 0 ]      outputs exit status 0 when a/2 is 0 and exit status 1 if not.
||                           evaluates only when the exit status left of it is 1
echo $a                displays the variable a

Bạn dường như đã bỏ lỡ rằng đây là một thách thức nguồn bị hạn chế - bạn đang sử dụng các byte bị cấm. ( rd $20|hvà dòng mới.)
rjan Johansen

Tôi đoán @ ØrjanJohansen đã sửa
ADDB

2
À, không. Không có giới hạn về độ dài của chương trình, nhưng mỗi ký tự trong đó phải có giá trị byte lẻ.
Ørjan Johansen
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.