Sama, jumlah atau perbedaan!


32

Tulis kode sesingkat mungkin yang akan mengembalikan true jika dua nilai integer yang diberikan sama atau jumlah atau perbedaan absolutnya adalah 5.

Contoh uji kasus:

4 1 => True
10 10 => True
1 3 => False
6 2 => False
1 6 => True
-256 -251 => True
6 1 => True
-5 5 => False

Yang terpendek yang bisa saya buat dengan python2 adalah 56 karakter:

x=input();y=input();print all([x-y,x+y-5,abs(x-y)-5])<1

-9, terima kasih @ElPedro. Dibutuhkan input dalam format x, y:

x,y=input();print all([x-y,x+y-5,abs(x-y)-5])<1

9
selamat datang di PPCG! Ini adalah tantangan pertama yang bagus - tantangannya didefinisikan dengan jelas, ia memiliki banyak kasus pengujian, dan menggunakan I / O standar kami! Jika Anda tinggal sebentar dan terus memikirkan tantangan yang menarik, saya akan merekomendasikan menggunakan The Sandbox untuk mendapatkan umpan balik sebelum mempostingnya ke situs ini. Saya harap Anda menikmati waktu yang Anda habiskan di sini!
Giuseppe

Jawaban:



17

JavaScript (ES6), 28 byte

Mengambil input sebagai (a)(b). Mengembalikan atau .01

a=>b=>a+b==5|!(a-=b)|a*a==25

Cobalah online!


1
Sial, butuh waktu lama untuk mencari tahu bagaimana menangani perbedaan ini. :)
Vikrant Biswas


8

kode mesin x86, 39 byte

00000000: 6a01 5e6a 055f 5251 31c0 39d1 0f44 c601  j.^j._RQ1.9..D..
00000010: d139 cf0f 44c6 595a 29d1 83f9 050f 44c6  .9..D.YZ).....D.
00000020: 83f9 fb0f 44c6 c3                        ....D..

Majelis

section .text
	global func
func:					;inputs int32_t ecx and edx
	push 0x1
	pop esi
	push 0x5
	pop edi
	push edx
	push ecx
	xor eax, eax

	;ecx==edx?
	cmp ecx, edx
	cmove eax, esi

	;ecx+edx==5?
	add ecx, edx
	cmp edi, ecx
	cmove eax, esi
	
	;ecx-edx==5?
	pop ecx
	pop edx
	sub ecx, edx
	cmp ecx, 5
	
	;ecx-edx==-5?
	cmove eax, esi
	cmp ecx, -5
	cmove eax, esi

	ret

Cobalah online!


5

J , 12 11 byte

1 byte disimpan berkat Adám

1#.=+5=|@-,+

Cobalah online!

Penjelasan

Ini setara dengan:

1 #. = + 5 = |@- , +

Ini dapat dibagi menjadi rantai garpu berikut:

(= + (5 e. (|@- , +)))

Atau, divisualisasikan menggunakan 5!:4<'f':

  ┌─ =               
  ├─ +               
──┤   ┌─ 5           
  │   ├─ e.          
  └───┤          ┌─ |
      │    ┌─ @ ─┴─ -
      └────┼─ ,      
           └─ +      

Beranotasi:

  ┌─ =                                     equality
  ├─ +                                     added to (boolean or)
──┤   ┌─ 5                                   noun 5
  │   ├─ e.                                  is an element of
  └───┤          ┌─ |  absolute value         |
      │    ┌─ @ ─┴─ -  (of) subtraction       |
      └────┼─ ,        paired with            |
           └─ +        addition               | any of these?

Simpan satu byte dengane.
Adám

@ Adám Bagaimana bisa? Pendekatan terpendek yang saya lakukan e.adalah =+.5 e.|@-,+. Mungkin Anda lupa 5e.apakah token yang tidak valid di J?
Conor O'Brien

1
Karena dua bilangan bulat tidak dapat secara bersamaan menjumlahkan 5 dan sama, Anda dapat menggunakan +sebagai ganti+.
Adám

@ Adám Ah, begitu, terima kasih.
Conor O'Brien

5

R , 40 byte (atau 34)

function(x,y)any((-1:1*5)%in%c(x+y,x-y))

Cobalah online!

Untuk pengguna non-R:

  • -1:1*5 meluas ke [-5, 0, 5]
  • yang %in%Operator mengambil unsur-unsur dari kiri dan pemeriksaan (elemen-bijaksana) jika mereka ada dalam vektor di sebelah kanan

Port langsung dari solusi @ ArBo memiliki 35 34 byte, jadi pilihlah jawaban itu jika Anda suka:

function(x,y)x%in%c(y--1:1*5,5-y)

34 byte satu dapat dikurangi dengan 1 denganfunction(x,y)x%in%c(y--1:1*5,5-y)
MickyT

Dapat turun hingga 30 byte dengan memindahkan pengurangan:, function(x,y)(x-y)%in%(-1:1*5)dan menjatuhkannya lebih jauh ke 24 byte dengan menjatuhkan notasi fungsi ke scan()input: diff(scan())%in%(-1:1*5) Coba online! . Masih sangat banyak metode yang sama.
Penjahat

1
@CriminallyVulgar, apakah itu berarti penjumlahan 5?
ArBo

@ ArBo Hah, melewatkan itu di spec, dan tidak ada test case di TIO jadi saya hanya mengabaikannya!
Penjahat

Perubahan kecil yang dapat dilakukan untuk keduanya adalah menggunakan pryr::f, yang terjadi pada kedua kasus tersebut. Apakah ia dapat mendeteksi argumen dengan baik sepenuhnya sepenuhnya hit atau miss tetapi tampaknya memaku kedua fungsi ini. mis. pryr::f(x%in%c(y--1:1*5,5-y)) Coba online! . Membuat Anda masing-masing menjadi 36 dan 29 byte.
Penjahat

5

Python 2 , 29 31 byte

lambda a,b:a+b==5or`a-b`in"0-5"

Cobalah online!

Karena saya tidak berhasil membaca tugas dengan hati-hati pertama kali, untuk memperbaikinya, saya harus datang dengan pendekatan yang sama sekali berbeda, yang sayangnya tidak ringkas.


5

8086 kode mesin, 22 20 byte

8bd0 2bc3 740e 7902 f7d8 3d0500 7405 03d3 83fa05

Tidak Disatukan:

ESD  MACRO
    LOCAL SUB_POS, DONE
    MOV  DX, AX     ; Save AX to DX
    SUB  AX, BX     ; AX = AX - BX
    JZ   DONE       ; if 0, then they are equal, ZF=1
    JNS  SUB_POS    ; if positive, go to SUB_POS
    NEG  AX         ; otherwise negate the result
SUB_POS:
    CMP  AX, 5      ; if result is 5, ZF=1
    JZ   DONE
    ADD  DX, BX     ; DX = DX + BX
    CMP  DX, 5      ; if 5, ZF=1
DONE:
    ENDM

Masukkan angka dalam AXE dan BX dan kembalikan Nol Bendera (ZF = 1) jika hasilnya benar. Jika diinginkan, Anda juga dapat menentukan kondisi mana yang benar dengan yang berikut ini:

  • ZF = 1 dan DX = 5; jumlah adalah 5
  • ZF = 1 dan AX = 5; beda 5
  • ZF = 1 dan AX = 0; sama
  • ZF = 0; hasilnya salah

Jika perbedaan antara angka-angka adalah 0, kita tahu mereka sama. Kalau tidak, jika hasilnya negatif, maka negasikan terlebih dahulu lalu periksa 5. Jika masih tidak benar, tambahkan dan periksa 5.

Contoh program uji PC DOS. Unduh di sini ( ESD.COM ).

START:
    CALL INDEC      ; input first number into AX
    MOV  BX, AX     ; move to BX
    CALL INDEC      ; input second number into BX
    ESD             ; run "Equal, sum or difference" routine
    JZ   TRUE       ; if ZF=1, result is true
FALSE:
    MOV  DX, OFFSET FALSY   ; load Falsy string
    JMP  DONE
TRUE:
    MOV  DX, OFFSET TRUTHY  ; load Truthy string
DONE:
    MOV  AH, 9      ; DOS display string
    INT  21H        ; execute
    MOV  AX, 4C00H  ; DOS terminate
    INT  21H        ; execute

TRUTHY   DB 'Truthy$'
FALSY    DB 'Falsy$'

INCLUDE INDEC.ASM   ; generic decimal input prompt routine

Output dari program uji:

A>ESD.COM
: 4
: 1
Truthy

A>ESD.COM
: 10
: 10
Truthy

A>ESD.COM
: 1
: 3
Falsy

A>ESD.COM
: 6
: 2
Falsy

A>ESD.COM
: 1
: 6
Truthy

A>ESD.COM
: -256
: -251
Truthy

A>ESD.COM
: 6
: 1
Truthy

A>ESD.COM
: 9999999999
: 9999999994
Truthy

4

Jelly , 7 byte

+,ạ5eo=

Cobalah online!

Bagaimana itu bekerja

+,ạ5eo=  Main link. Arguments: x, y (integers)

+        Yield x+y.
  ạ      Yield |x-y|.
 ,       Pair; yield (x+y, |x-y|).
   5e    Test fi 5 exists in the pair.
      =  Test x and y for equality.
     o   Logical OR.

4

Python 2, 38 byte

-2 byte terima kasih kepada @DjMcMayhem

lambda a,b:a+b==5or abs(a-b)==5or a==b

Cobalah online!


TIO Anda sebenarnya adalah 42 byte tetapi Anda dapat memperbaikinya dengan menghapus spasi antara 5s dan ors
ElPedro

3
Sebenarnya, tautan TIO bisa 38 byte
DJMcMayhem

@ ElPedro fungsi itu sendiri adalah 40 byte tetapi saya menggunakan f = agar dapat menyebutnya
fəˈnɛtɪk

1
@ DJMcMayhem Saya biasanya tidak golf dengan python. Saya hanya melakukannya karena penanya menggunakan python untuk contoh mereka
fəˈnɛtɪk



4

PowerShell , 48 44 40 byte

param($a,$b)$b-in($a-5),(5-$a),(5+$a),$a

Cobalah online! atau Verifikasi semua Uji Kasus

Mengambil input $adan $b. Cek jika $badalah -inkelompok ( $a-5, 5-$a 5+$a, atau $a), yang memeriksa semua kemungkinan kombinasi $a, $bdan 5.

-4 byte berkat mazzy.
-4 bytes berkat KGlasier.


($a-$b)is -$x:)
mazzy

@ Mazzy Ooo, panggilan bagus.
AdmBorkBork

Jika Anda beralih 5dan $bsekitar Anda dapat memotong beberapa byte (yaitu param($a,$b)$b-in($a-5),(5-$a),($a+5),$a) Cobalah di sini
KGlasier

1
@ KGlasier Saran yang sangat baik. Saya perlu menukar $a+5untuk 5+$amembuatnya dapat dilemparkan dengan tepat ketika mengambil input baris perintah, tetapi sebaliknya hebat. Terima kasih!
AdmBorkBork

4

Pascal (FPC) ,26 70 byte

Edit: + variabel input.

Procedure z(a,b:integer);begin Writeln((abs(a-b)in[0,5])or(a+b=5))end;

Cobalah online!


(abs(a-b)in[0,5])or(a+b=5)

Cobalah online!

Saya harap jawaban saya sesuai dengan semua aturan kode-golf. Lagipula itu menyenangkan.


2
Halo, dan selamat datang di PPCG! Biasanya, Anda harus mengambil input, alih-alih menganggapnya sudah dalam variabel. Saya tidak tahu Pascal, tapi saya pikir itulah yang dilakukan kode ini.
NoOneIsHere

Halo, NoOneIsHere dan terima kasih atas komentarnya. Itu mungkin menyangkut juga - haruskah saya memasukkan inisialisasi variabel. Melihat beberapa solusi lain, seperti Java misalnya, di mana definisi fungsi dengan parameter dikecualikan dari total panjang solusi, saya memutuskan untuk tidak menyertakan ReadLn.
Dessy Stoeva

Baik. Selamat datang di PPCG!
NoOneIsHere

Pengiriman Java adalah lambda anonim yang mengambil dua parameter. Ini tampaknya menggunakan variabel yang sudah ditentukan sebelumnya, yang bukan metode input yang valid.
Jo King

1
Tidak masalah, saya akan mengubah kiriman saya.
Dessy Stoeva

3

C # (.NET Core) , 43 , 48 , 47 , 33 byte

EDIT: Mencoba menggunakan% dan tampaknya lupa bagaimana cara%. Terima kasih kepada Arnauld karena menunjukkannya!

EDIT2: AdmBorkBork dengan golf -1 byte mengatur ulang tanda kurung untuk duduk di sebelah kembalinya sehingga tidak ada ruang tambahan yang diperlukan!

EDIT3: Terima kasih kepada dana untuk golf -14 byte untuk pintasan satu baris kembali dan menjelajah fungsi (Ty Perwujudan Ketidaktahuan untuk menghubungkan ke TIO).

C # (.NET Core) , 33 byte

a=>b=>a==b|a+b==5|(a-b)*(a-b)==25

Cobalah online!


Bah Mencoba menghindari System.Math. Kembali ke sana! Terima kasih telah menunjukkan: D
Destroigo

1
Anda bisa mendapatkannya hingga 33 byte menerapkan kiat dana
Perwujudan Ketidaktahuan

3

C (gcc) , 33 byte

f(a,b){a=!(a+b-5&&(a-=b)/6|a%5);}

Cobalah online!

Mencoba pendekatan yang saya tidak melihat orang lain mencoba menggunakan. Ekspresi pengembalian setara dengan a+b==5||((-6<a-b||a-b<6)&&(a-b)%5==0).




3

Perl 6 , 24 byte

-1 byte terima kasih kepada Grimy

{$^a-$^b==5|0|-5|5-2*$b}

Cobalah online!

Ini menggunakan Any Junction tetapi secara teknis, ^bisa bekerja juga.

Penjelasan:

{                      }  # Anonymous code block
 $^a-$^b==                # Is the difference equal to
           | |  |        # Any of
          0 
            5
              -5
                 5-2*$b

1
-1 byte dengan{$^a-$^b==5|0|-5|5-2*$b}
Grimmy


2

05AB1E , 13 12 byte

ÐO5Qs`α5QrËO

Cobalah online!

Mengambil input sebagai daftar bilangan bulat, menghemat satu byte. Terima kasih @ Wisław!

Alternatif 12 byte jawaban

Q¹²α5Q¹²+5QO

Cobalah online!

Yang ini mengambil input pada jalur yang terpisah.


1
Karena tidak ditentukan dengan sangat jelas, tidak dapatkah Anda menganggap input adalah daftar bilangan bulat, sehingga menghilangkan yang awal |?
Wisław

@ Wisław Poin bagus, saya memperbarui jawaban saya. Terima kasih!
Cowabunghole

Saya menemukan 11 byte alternatif: OI`αª5¢IË~Ā. Input adalah daftar bilangan bulat.
Wisław

1
OIÆÄ)5QIËMadalah 10.
Magic Octopus Mm

1
@ MagicOctopusUrn Saya tidak yakin persis apa aturannya tapi saya pikir solusi Anda cukup berbeda dari saya untuk mengirimkan jawaban Anda sendiri, bukan? Juga, tidak terkait tetapi saya telah melihat nama pengguna Anda di situs ini untuk waktu yang lama tetapi hanya setelah mengetikkannya saya menyadari bahwa itu "Guci", bukan "Um" :)
Cowabunghole

2

05AB1E , 10 byte

OIÆ‚Ä50SåZ

Cobalah online!


O           # Sum the input.
 IÆ         # Reduced subtraction of the input.
   ‚        # Wrap [sum,reduced_subtraction]
    Ä       # abs[sum,red_sub]
     50S    # [5,0]
        å   # [5,0] in abs[sum,red_sub]?
         Z  # Max of result, 0 is false, 1 is true.

Mencoba melakukannya menggunakan operasi stack-only, tetapi itu lebih lama.


1
Sayangnya ini akan mengembalikan true jika jumlahnya 0seperti untuk[5, -5]
Emigna

1
Solusi 10 byte Anda yang Anda tinggalkan sebagai komentar ( OIÆÄ‚5QIËM) sudah benar [5,-5].
Kevin Cruijssen

Solusi 10-byte lain yang saya buat adalah OsÆÄ‚5åsË~. Tampaknya hampir identik dengan milikmu. Cobalah online!
Wisław

2

Ruby , 34 Bytes

->(a,b){[a+5,a-5,5-a,a].include?b}

Eval Online - Terima Kasih @ ASCII-Only


apakah Anda memeriksa apakah keduanya sama ...
ASCII

Ups, lupa menambahkan cek itu. Terima kasih @ ASCII-hanya untuk menunjukkan kesalahannya.
Jatin Dhankhar

1
saya akan senang jika Anda dapat menautkan ini
hanya ASCII

ini mungkin valid? meskipun tidak sepenuhnya yakin, Anda mungkin ingin memeriksa dengan orang lain
hanya ASCII

Ini akan bekerja tetapi memerlukan .nil?cek untuk memberikan output dalam format yang diperlukan. ->(a,b){[a+5,a-5,5-a,a].index(b).nil?}, ini lebih panjang dari yang sekarang.
Jatin Dhankhar



1

Batch, 81 byte

@set/as=%1+%2,d=%1-%2
@if %d% neq 0 if %d:-=% neq 5 if %s% neq 5 exit/b
@echo 1

Mengambil input sebagai argumen baris perintah dan menghasilkan 1 pada kesuksesan, tidak ada pada kegagalan. Batch tidak dapat dengan mudah melakukan disjungsi jadi saya menggunakan hukum De Morgan untuk mengubahnya menjadi konjungsi.


1

Arang , 18 byte

Nθ¿№⟦θ⁺⁵θ⁻⁵θ⁻θ⁵⟧N1

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Port solusi @ ArBo's Python 2.


1

Japt, 13 12 byte

x ¥5|50ìøUra

Cobalah atau jalankan semua test case

x ¥5|50ìøUra
                 :Implicit input of array U
x                :Reduce by addition
  ¥5             :Equal to 5?
    |            :Bitwise OR
     50ì         :Split 50 to an array of digits
        ø        :Contains?
         Ur      :  Reduce U
           a     :    By absolute difference

Gagal untuk [-5,5](harus falsey)
Kevin Cruijssen

Terima kasih, @KevinCruijssen. Digulung kembali ke versi sebelumnya.
Shaggy

1

Gangguan Umum, 48 byte

(lambda(a b)(find 5(list(abs(- b a))a(+ a b)b)))

1

Brachylog , 8 byte

=|+5|-ȧ5

Mengambil input sebagai daftar dua angka (gunakan _untuk negatif). Cobalah online!

Penjelasan

Cukup banyak terjemahan langsung dari spec:

=          The two numbers are equal
 |         or
  +        The sum of the two numbers
   5       is 5
    |      or
     -     The difference of the two numbers
      ȧ    absolute value
       5   is 5

0

Retina 0.8.2 , 82 byte

\d+
$*
^(-?1*) \1$|^(-?1*)1{5} -?\2$|^-?(-?1*) (\3)1{5}$|^-?(1 ?){5}$|^(1 ?-?){5}$

Cobalah online! Tautan termasuk kasus uji. Penjelasan: Dua baris pertama mengubah input menjadi unary. Baris terakhir kemudian memeriksa untuk setiap pertandingan yang diizinkan:

^(-?1*) \1$                              x==y
^(-?1*)1{5} -?\2$   x>=0 y>=0 x=5+y i.e. x-y=5
                    x>=0 y<=0 x=5-y i.e. x+y=5
                    x<=0 y<=0 x=y-5 i.e. y-x=5
^-?(-?1*) (\3)1{5}$ x<=0 y<=0 y=x-5 i.e. x-y=5
                    x<=0 y>=0 y=5-x i.e. x+y=5
                    x>=0 y>=0 y=5+x i.e. y-x=5
^-?(1 ?){5}$        x>=0 y>=0 y=5-x i.e. x+y=5
                    x<=0 y>=0 y=5+x i.e. y-x=5
^(1 ?-?){5}$        x>=0 y>=0 x=5-y i.e. x+y=5
                    x>=0 y<=0 x=5+y i.e. x-y=5

Diputar oleh kolom terakhir yang kita dapatkan:

x==y            ^(-?1*) \1$
x+y=5 x>=0 y>=0 ^-?(1 ?){5}$
      x>=0 y>=0 ^(1 ?-?){5}$
      x>=0 y<=0 ^(-?1*)1{5} -?\2$
      x<=0 y>=0 ^-?(-?1*) (\3)1{5}$
      x<=0 y<=0 (impossible)       
x-y=5 x>=0 y>=0 ^(-?1*)1{5} -?\2$
      x>=0 y<=0 ^(1 ?-?){5}$
      x<=0 y>=0 (impossible)
      x<=0 y<=0 ^-?(-?1*) (\3)1{5}$
y-x=5 x>=0 y>=0 ^-?(-?1*) (\3)1{5}$
      x>=0 y<=0 (impossible)
      x<=0 y>=0 ^-?(1 ?){5}$
      x<=0 y<=0 ^(-?1*)1{5} -?\2$
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.