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
Vikrant Biswas
sumber
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:

22

Python 2 , 30 byte

lambda a,b:a in(b,5-b,b-5,b+5)

Cobalah online!

Satu byte disimpan oleh Arnauld

Tiga byte disimpan oleh alephalpha

ArBo
sumber
Ini sangat singkat, terima kasih
Vikrant Biswas
Hal yang sama dapat dilakukan dalam Oktaf / MATLAB dalam 29 byte ( Coba online! ).
Tom Carpenter
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!

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

Dyalog APL , 9 byte

=∨5∊+,∘|-

Cobalah online!

Dieja:

  =     5                      +   ,     |            -
equal or 5 found in an array of sum and absolute of difference.
dzaima
sumber
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!

Logern
sumber
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?
Conor O'Brien
sumber
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)
ngm
sumber
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.

Kirill L.
sumber
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
640KB
sumber
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.
Dennis
sumber
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!

fəˈnɛtɪk
sumber
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.

AdmBorkBork
sumber
($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.

Dessy Stoeva
sumber
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!

Destroigo
sumber
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).


attinat
sumber
3

Scala, 43 byte

def f(a:Int,b:Int)=a+b==5|(a-b).abs==5|a==b

Cobalah online!

Xavier Guihot
sumber
Apakah tidak mungkin untuk golf ||ke |? Saya tahu ini mungkin di Java, C #, Python, atau JavaScript, tetapi tidak yakin tentang Scala.
Kevin Cruijssen
Sebenarnya ya! terima kasih
Xavier Guihot
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
Jo King
sumber
1
-1 byte dengan{$^a-$^b==5|0|-5|5-2*$b}
Grimmy
2

C (gcc) , 41 34 byte

f(a,b){a=5==abs(a-b)|a+b==5|a==b;}

Cobalah online!

Cleblanc
sumber
1
Kenapa fkembali a? Hanya beberapa Perilaku Tidak Terdefinisi?
Tyilo
@ Tyilo Ya, ini implementasi spesifik. Kebetulan parameter pertama disimpan dalam register yang sama dengan nilai pengembalian.
Cleblanc
@Logern Tidak bekerja untuk f (6,1)
cleblanc
@ceilingcat Tidak berfungsi untuk f (6,1)
cleblanc
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.

Cowabunghole
sumber
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.

Guci Gurita Ajaib
sumber
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

Jatin Dhankhar
sumber
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.

Neil
sumber
1

Arang , 18 byte

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

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

Neil
sumber
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
Shaggy
sumber
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)))
coredump
sumber
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
DLosc
sumber
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$
Neil
sumber