Aralık Notasyonları


21

Meydan okuma:

Giriş:

İki tamsayı parametresi ave b(ve a<bve en az 2 olan fark)

Çıktı:

Bu metni çıktılar ya da geri verin, ave bbunlar:

(a,b) = ]a,b[ = {a<x<b}   = {a<x&&x<b}   = a+1..b-1
[a,b) = [a,b[ = {a<=x<b}  = {a<=x&&x<b}  = a..b-1
(a,b] = ]a,b] = {a<x<=b}  = {a<x&&x<=b}  = a+1..b
[a,b] = [a,b] = {a<=x<=b} = {a<=x&&x<=b} = a..b

Meydan okuma kuralları:

  • G / Ç esnektir. İki tamsayı, ondalık, dizeleri (değil emin niçin hesaplamak gerekir çünkü olarak girilebilir Can vb bir dize / karakter dizi içinde döndürür STDOUT basılabilir a+1ve b-1Misafirim ama olmak ..) vb
  • Herhangi bir sayıda satır başı ve / veya sondaki yeni satır, her satır için herhangi bir miktar sondaki ve / veya satır aralığı bulunur.
  • Eşit işaretlerdeki (aynı sütunda aynı hizada olanlar dahil) boşluklar zorunludur, diğer karakterler arasındaki boşluklara izin verilmez.
  • a+1ve b-1bu hesaplamalardan sonra doğru değerlerle değiştirilir.
  • Bunun yerine kullanmanıza izin verilmiyor <=.
  • Bunun &yerine kullanmanıza izin verilmiyor &&.
  • Sayıların çıktısını almanıza izin verilir .0(tutarlı olduğu ve bir ondalık sıfırdan fazla olmadığı sürece).
  • ( Doğru olması için ) ' aden en az 2 daha düşük olduğunu varsayabilirsiniz .b(a,b)
  • Satırlar gösterilen sıraya göre verilmelidir.

Örnek:

Giriş: a=-5, b=10
Çıkış:

(-5,10) = ]-5,10[ = {-5<x<10}   = {-5<x&&x<10}   = -4..9
[-5,10) = [-5,10[ = {-5<=x<10}  = {-5<=x&&x<10}  = -5..9
(-5,10] = ]-5,10] = {-5<x<=10}  = {-5<x&&x<=10}  = -4..10
[-5,10] = [-5,10] = {-5<=x<=10} = {-5<=x&&x<=10} = -5..10

Genel kurallar:

  • Bu , bayt cinsinden en kısa cevap kazanır.
    Code-golf dillerinin, codegolfing olmayan dillerle cevap göndermekten vazgeçmesine izin vermeyin. Herhangi bir programlama dili için mümkün olduğunca kısa bir cevap bulmaya çalışın.
  • Cevabınız için standart kurallar geçerlidir , bu nedenle STDIN / STDOUT fonksiyonlarını, uygun parametrelerle fonksiyonlarını ve geri dönüş tipini, tam programları kullanmanıza izin verilir. Senin çağrı.
  • Varsayılan Loopholes yasaktır.
  • Mümkünse, lütfen kodunuz için test içeren bir bağlantı ekleyin.
  • Ayrıca, lütfen gerekirse bir açıklama ekleyin.

Not: Bu meydan okumayı hala bir mücadelesi olan ave bsabit kodlanmış olarak , genellikle gördüğümüz gibi kodlanmış ve kodlanmış cevapları için bir giriş mücadelesi olarak değiştirdim. KC zorlukları.


2
Yani a=5, b=6hala çıktı için (5,6) = ... = 6...5?
l4m2

1
@ l4m2 Ah .. bunu düşünmemişti. aVe bher zaman en az 2 ayrı olacağını varsayabilirsin . Mücadeleyi düzenleyeceğim.
Kevin Cruijssen

2
Beklediğimden çok daha eğlenceli olduğu ortaya çıktı. Güzel meydan okuma!
Arnauld,

@DigitalTrauma Üzgünüz, ama bu kesin sipariş.
Kevin Cruijssen

Yanıtlar:


2

Stax , 74 bayt

ÉyU≤₧pΔz▀σ┬`♪•a≤☻Σ╕←k►¬╗Ö)ßâL╫§▐ƒ┼°╚íS3:Y¶7]7♂e╖à╙ô≥;M0h8♦Oún┼ë`←B╠╫║┌♂α▲╚

Koş ve hata ayıkla

Bu, stax'ın string şablonlarını yoğun olarak kullanır. Ambalajsız, ağzı açılmış ve yorumlanmış gibi görünüyor.

Y                   save second input in Y register (first is already in X)
.)].([|*            cross product of ")]" and "(["; this produces [")(", ")[", "](", "]["]
{                   begin block to map over interval delimiters
  E"`x,`y"a++       push delimiters separately, then wrap them around the inputs    e.g. "(-5,10)"
  c"(])["|t         copy last value, then replace parentheses with braces           e.g. "]-5,10["
  ih'=              push half the iteration index and "="                           e.g. 0 "="
  |;'=              push iteration parity (alternating 0 and 1) and "="             e.g. 0 "=" 0 "="
  "{`x<`*x<`*`y}"   multiply each equal sign by its occurrence, and template        e.g. "{-5<x<10}"
  c'x.x&:mR         copy last value, then replace "x" with "x&&x"                   e.g. "{-5<x&&x<10}"
  yvih xi|e         calculate final bounds offsets                                  e.g. -5 1 10 -1
  "`+..`+"          add inputs to offsets, and embed in template                    e.g. "-4..9"
  5l                combine last 5 values into array
m                   map [")(", ")[", "](", "]["] using block
:<                  left-align grid colums to add extra spaces
m" = "*             for each row, join with " = " and output

Bunu çalıştır


10

JavaScript (ES6), 184 182 181 180 bayt

Körleme sözdiziminde girdi alır (a)(b). 4 karakter dizisini döndürür.

a=>b=>[1,2,3,4].map(k=>'31,23 = 31,23 = {10x72}4{10x&&x72}45..6'.replace(/\d/g,(n,i)=>[(+n?k<3:k&1)?'<':'<=',a,b,'][)([[]('[(i*17^k*718)%9],'   = '.slice(k/2),a+k%2,b-(k<3)][n%7]))

Çevrimiçi deneyin!

Nasıl?

Her satır için k ile 1 ≤ k ≤ 4 , aşağıdaki şablonu ile başlar:

"31,23 = 31,23 = {10x72}4{10x&&x72}45..6"

ve her ondalık basamağı n i pozisyonunda aşağıdaki tabloya göre değiştirin:

  n  | Replaced with           | Code
-----+-------------------------+------------------------------------------
 0,7 | comparison operator     | (+n ? k < 3 : k & 1) ? '<' : '<='
  1  | a                       | a
  2  | b                       | b
  3  | interval bound          | '][)([[]('[(i * 17 ^ k * 718) % 9]
  4  | a substring of '   = '  | '   = '.slice(k / 2)
  5  | either 'a' or 'a + 1'   | a + k % 2
  6  | either 'b' or 'b - 1'   | b - (k < 3)

4

Python 2 , 225 203 195 bayt

a,b=input()
for d in 0,1:
 for m in 0,1:k=`a`+','+`b`;o='{'+`a`+'<'+m*'=';c='x<'+d*'='+`b`+'}'+'  '[m+d:];print' = '.join(['(['[m]+k+')]'[d],']['[m]+k+'[]'[d],o+c,o+'x&&'+c,`a+1-m`+'..'+`b-1+d`])

Çevrimiçi deneyin!


3

Python 2 , 187 bayt

t=a,b=input()
for j in 1,0:
 for i in 1,0:print"%%s%d,%d%%s = "%t*2%('[('[i],'])'[j],'[]'[i],']['[j])+"{%d<%sx%%s<%s%d}%s = "%(a,'='[i:],'='[j:],b,' '*(i+j))*2%('','&&x')+`a+i`+'..'+`b-j`

Çevrimiçi deneyin!


3

Java (JDK 10) , 251 bayt

a->b->("(a,b)q]a,b[q{a<x<b}  q{a<x&&x<b}  q"+-~a+".."+~-b+"\n[a,b)q[a,b[q{a<=x<b} q{a<=x&&x<b} qa.."+~-b+"\n(a,b]q]a,b]q{a<x<=b} q{a<x&&x<=b} q"+-~a+"..b\n[a,b]q[a,b]q{a<=x<=b}q{a<=x&&x<=b}qa..b").replace("a",a+"").replace("b",b+"").replace("q"," = ")

Çevrimiçi deneyin!

Kredi


Ben hala golf oynuyorum ...
Olivier Grégoire

Neredeyse golf ile bitti? 85 bayt kaldırmak için bir önerim var. ;)
Kevin Cruijssen

@KevinCruijssen Yaptım ama 85 bayttan daha az çıkardım ...
Olivier Grégoire

1
Üç sıkıcı ile 251 bayt.replace .
Kevin Cruijssen

Evet, temelde benim ilk çözümüm biçimlendirmek yerine yerini aldı. Güzel. Gerçekten sıkıcı ama güzel! :-)
Olivier Grégoire

3

Perl 5 , 181 bayt

Bunun daha kısa süreceğini düşünmüştüm ...

$_="sd,ds = sd,ds = {dsxsd}s= {dsx&&xsd}s= d..d
"x4;s!s!("()][<<   [)[[<=<  (]]]<<=  [][]<=<= "=~s/[<= ]+/$&$&/gr=~/ +|<=|./g)[$-++]!ge;s/d/$F[$x%2]+{8,1,9,-1,19,-1,28,1}->{$x++}/ge

Çevrimiçi deneyin!

açıklama

Başlangıçta bu bir printfformat dizgisi kullanıyordu , ancak sadece bir araya geldiğinde sahipti sve dkısaydı s///.

İlk biçim dizesi yerleşiktir $_ve quadruplicated, o zaman tüm ss karşılık gelen braket, değiştirilir <, <=yedek endeksi bağlı veya boşluk. Her bloğun son 5 karakterinin çoğaltılmasıyla biraz daha bayt kurtarmayı umuyordum, ancak bu sadece 2 bayt tasarruf sağladı. Sonuçta ortaya çıkan dize, boşluk öğelerine <=veya tek karakterlere bölünür .

Son olarak, tüm ds, mevcut değiştirme endeksine bir hash tuşu ile göre ayarlanan istenen numara ile değiştirilir.


3

JavaScript, 190 189 bayt

x=>y=>`(0)7]0[7{1<x<2}  7{1<52}  73..4
[0)7[0[7{18x<26{185261..4
(0]7]0]7{1<x826{1<5=263..2
[0]7[0]7{18x82}7{185=2}71..2`.replace(/\d/g,d=>[[x,y],x,y,x+1,y-1,`x&&x<`,`}  = `,` = `,`<=`][d])

Çevrimiçi deneyin


3

m4 , 194

Makro işlemci için bir iş gibi görünüyor. Bir programlama dili için m4'ün standartlarımızı karşıladığından emin değil. Döngü yeteneği ve aritmetik değerlendirmesi var, bu yüzden işarete yakın olduğunu varsayıyorum.

define(l,`$1a,b$2 = $3a,b$4 = {a<$5x<$6b} $8= {a<$5x&&x<$6b} $8= $7')dnl
l(`(',`)',],[,,,incr(a)..decr(b),`  ')
l([,`)',[,[,=,,a..decr(b),` ')
l(`(',],],],,=,incr(a)..b,` ')
l([,],[,],=,=,a..b,)

Bu benim ilk 4 olmayan önemsiz bakışım, bu yüzden kaçırdığım daha fazla golf fırsatı olduğunu düşünüyorum.

Girişler -D, komut satırındaki makro tanımları kullanılarak iletilir . Bunlar için puanlara herhangi bir şey eklenmesi gerekip gerekmediğinden emin değilim, söyleyebildiğim kadarıyla, parametreleri anlamlı şekilde iletmenin tek yolu bu:

$ m4 -Da=-5 -Db=10 intnot.m4
(-5,10) = ]-5,10[ = {-5<x<10}   = {-5<x&&x<10}   = -4..9
[-5,10) = [-5,10[ = {-5<=x<10}  = {-5<=x&&x<10}  = -5..9
(-5,10] = ]-5,10] = {-5<x<=10}  = {-5<x&&x<=10}  = -4..10
[-5,10] = [-5,10] = {-5<=x<=10} = {-5<=x&&x<=10} = -5..10 $

Çevrimiçi deneyin .


Çok hızlı bir şekilde TIO'ya m4 eklediğiniz için @Dennis !


1
Neden m4'ün cevaplamak için geçerli bir programlama dili olmadığını anlamıyorum, ama ne biliyorum. ;) -DArgümanlar gelince tamamen iyi. Mücadele açıklamamda, G / Ç’nin tamamen esnek olduğunu belirttiğim için STDIN, işlev parametreleri, program komut satırı argümanları, derleyici bayrakları, bir dosya okuma veya aklınıza gelebilecek başka bir girdi yöntemi olarak giriş yapıp yapmadığınızı sana bağlı.
Kevin Cruijssen

2

Python 2 , 277 199 193 189 bayt

a,b=input()
for i in 4,3,2,1:x,y=i%2,i>2;e='=';p=`a`+','+`b`;print'(['[x]+p+'])'[y],e,']['[x]+p+']['[y],e,2*('{%d<%s<%s%d} %s= '%(a,e*x+'%sx',e[y:],b,i/2*' '))%('','x&&')+`a+1-x`+'..'+`b-y`

Çevrimiçi deneyin!


2*('{%d<%s<%s%d} %s= '%(a,e*x+'%sx',e[y:],b,i/2*' '))%('','x&&')-> 2*('{%d<%s%%sx<%s%d} %s= '%(a,e*x,e[y:],b,i/2*' '))%('','x&&')iki
Jonathan Allan,

1

Excel, 399 bayt

="("&A1&","&B1&") = ]"&A1&","&B1&"[ = {"&A1&"<x<"&B1&"}   = {"&A1&"<x&&x<"&B1&"}   = "&A1+1&".."&B1-1&"
 ["&A1&","&B1&") = ["&A1&","&B1&"[ = {"&A1&"<=x<"&B1&"}  = {"&A1&"<=x&&x<"&B1&"}  = "&A1&".."&B1-1&"
 ("&A1&","&B1&"] = ]"&A1&","&B1&"] = {"&A1&"<x<="&B1&"}  = {"&A1&"<x&&x<="&B1&"}  = "&A1+1&".."&B1&"
 ["&A1&","&B1&"] = ["&A1&","&B1&"] = {"&A1&"<=x<="&B1&"} = {"&A1&"<=x&&x<="&B1&"} = "&A1&".."&B1

Burada özellikle ilginç bir şey yok.


1

C (gcc) , 224 237 bayt

f(a,b,c,m,n,o){for(c=0;++c<5;printf("%c%d,%d%c = %c%d,%d%c = {%d<%sx<%s%d}%*s= {%d<%sx&&x<%s%d}%*s= %d..%d\n","[("[m],a,b,"])"[n],"[]"[m],a,b,"]["[n],a,"="+m,"="+n,b,o,"",a,"="+m,"="+n,b,o,"",a+m,b-n)){m=c%2;n=c<3;o=3-c/2;}}

Çevrimiçi deneyin!

"<[=]" Biçim dizgisine taşınması, diziyi tamamen kaldırmamı sağladı. Ayrıca, döngünün printf()içine hareket etmek fornoktalı virgül kaydetmiştir.

Orijinal cevap

f(a,b,c,m,n,o){char*e[]={"<=","<"};for(c=0;++c<5;){m=c%2;n=c<3;o=3-c/2;printf("%c%d,%d%c = %c%d,%d%c = {%d%sx%s%d}%*s= {%d%sx&&x%s%d}%*s= %d..%d\n","[("[m],a,b,"])"[n],"[]"[m],a,b,"]["[n],a,e[m],e[n],b,o,"",a,e[m],e[n],b,o,"",a+m,b-n);}}

Çevrimiçi deneyin!

Burada özellikle dikkat çekici bir şey yok: Her zamanki püf noktaları fonksiyonun büyüklüğünü tıraş etmek için kullandım (otomatik intolarak fonksiyon başlığına getirerek, K&R stilini kullanarak, dizge sabitlerine indeksleyerek). dizi, birden fazla kez kullanıldığı için bu zorluk için bir format belirtici eklemekten daha boyut açısından verimli olduğunu kanıtladı.



1

Javascript, 273 258 232 bayt

Beni 15 bayt kurtardığın için teşekkürler Kevin Cruijssen!

e=>f=>'(j)h]j[h{a<x<b}  h{a<x&&x<b}  hc..d\n[j)h[j[h{a<=x<b} h{a<=x&&x<b} ha..d\n(j]h]j]h{a<x<=b} h{a<x&&x<=b} hc..b\n[j]h[j]h{a<=x<=b}h{a<=x&&x<=b}ha..b'.replace(/a|b|c|d|h|j/g,m=>{return{a:e,b:f,c:e+1,d:f-1,h:" = ",j:e+","+f}[m]})

Çevrimiçi deneyin

TFeld için bana bu fikri verdiğiniz için teşekkür ederim, orijinal cevabımdan yaklaşık 60 byte tasarruf edin.

Ungolfed:

e => f => '(j)h]j[h{a<x<b}  h{a<x&&x<b}  hc..d'
 + '\n[j)h[j[h{a<=x<b} h{a<=x&&x<b} ha..d'
 + '\n(j]h]j]h{a<x<=b} h{a<x&&x<=b} hc..b'
 + '\n[j]h[j]h{a<=x<=b}h{a<=x&&x<=b}ha..b'
.replace(/a|b|c|d|h|j/g, m=>{
        return {a:e,b:f,c:e+1,d:f-1,h:" = ",j:e+","+f}[m]
    }
)

Javascript (orijinal cevap), 340 bayt

(a,b)=>alert(`(${a},${b}) = ]${a},${b}[ = {${a}<x<${b}}   = {${a}<x&&x<${b}}   = ${a+1}..${b-1}\n[${a},${b}) = [${a},${b}[ = {${a}<=x<${b}}  = {${a}<=x&&x<${b}}  = ${a}..${b-1}\n(${a},${b}] = ]${a},${b}] = {${a}<x<=${b}}  = {${a}<x&&x<=${b}}  = ${a+1}..${b}\n[${a},${b}] = [${a},${b}] = {${a}<=x<=${b}} = {${a}<=x&&x<=${b}} = ${a}..${b}\n`)

1
Yeni hat {a<=x&&\nx<=b}orada olmamalı ve ilkini kaçırıyorsunuz (a,b) = . Bazı golf oyunlarına gelince: alarm vermek yerine sonucu geri verebilirsiniz. (m)=>olabilir m=>. (e,f)=>olabilir e=>f=>. Ve kullanabilirsiniz gyerine yaratmanın doğrudan let g=: m=>{return{a:e,b:f,c:e+1,d:f-1}[m]}. 258 bayt çevrimiçi deneyin . Muhtemelen daha fazlası golf oynayabilir, JS konusunda fazla yetenekli değilim ..
Kevin Cruijssen

Sen benden daha yetenekli görünüyorsun. Tavsiyeler için teşekkürler, cevabı onlara ekleyeceğim
Rastgele adam

Şey, ben çoğunlukla Java'da (ya da Whitespace'de) golf oynayan birisiyim ve bu golf önerileri de Java cevapları (m)->için geçerli m->. (e,f)->için e->f->ve var g=new int[]{...}return g[m]için return new int[]{...}[m]. ;) Ayrıca, iki yıldır bu SO'da aktif olarak bulundum, bu yüzden JS cevaplarının daha önce bu tür şeyleri kullandığını gördüm.
Kevin Cruijssen

1

Retina , 216 bayt

.+
$&()][<<  ¶$&[)[[<=< ¶$&(]]]<<= ¶$&[][]<=<=
((.*),(.*))(.)(.)(.)(.)(<=?)(<=?)( *)
$4$1$5 = $6$1$7 = {$2$8x$9$3}$10 = {$2$8x&&x$9$3}$10 = $2_$8..$3_$9
_<=

\d+_
$&*___
T`<`_` _+<|\.-_+<
___<
_
__<
-1
_(_*)
$.1
-0
0

Çevrimiçi deneyin! Açıklama:

.+
$&()][<<  ¶$&[)[[<=< ¶$&(]]]<<= ¶$&[][]<=<=
((.*),(.*))(.)(.)(.)(.)(<=?)(<=?)( *)
$4$1$5 = $6$1$7 = {$2$8x$9$3}$10 = {$2$8x&&x$9$3}$10 = $2_$8..$3_$9

Sonucun ana kütlesini oluşturun.

_<=

Değişken gevşek bir eşitsizliğe karışmışsa, değer kapsayıcıdır, böylece yer tutucuyu silebiliriz.

\d+_
$&*___

Değeri birliğe dönüştürün ve 2 ekleyin.

T`<`_` _+<|\.-_+<

Yer tutucuyu katı bir düşük eşitsizlik ya da negatif bir katı üst eşitsizlik için kaldırın. Hala 2 tane daha eklendi, ancak 1 tanesi daha sonra çıkarılacak ve istenen sonucu verecek.

___<
_

2 değerini, sonradan 1'in çıkarılacağı orijinal değeri geri yükleyerek, sıfır olmayan diğer katı eşitsizliklerden çıkarın.

__<
-1

İçin katı bir üst eşitsizliği 0değiştirin -1.

_(_*)
$.1

Kalan katı eşitsizliklerden 1 çıkarın ve ondalık dönüştürün.

-0
0

Başka bir kenar çantasını düzeltin.


1

Python 3, 180 bayt:

lambda a,b:[eval('f"'+"{%r[j]}{a},{b}{%r[i]} = "*2%('([',')]','][','[]')+"{{{a}<{'='[:j]}x%s<{'='[:i]}{b}}}{'  '[i+j:]} = "*2%('','&&x')+'{a+j}..{b-i}"')for i in(1,0)for j in(1,0)]

açıklama

Temelde liste kavrayışında değerlendirilen bir f-string oluşturur. Eski tarz %dize enterpolasyonu, f-string değerlendirilene kadar ifadelerin değerlendirilmesini geciktirmek için kullanılır.

lambda a,b:[
    eval(
      'f"' +                                                            # f-string prefix
      "{%r[j]}{a},{b}{%r[i]} = "*2%('([',')]','][','[]') +              # first two terms
      "{{{a}<{'='[:j]}x%s<{'='[:i]}{b}}}{'  '[i+j:]} = "*2%('','&&x') + # second two terms
      '{a+j}..{b-i}"'                                                   # last term
      )
    for i in(1,0)for j in(1,0)
    ]

Dizenin ilk bölümü olan 'f' 'f dizgisinin öneki olacaktır.

Dizenin ikinci kısmı, ilk iki aralık ifadesi için biçim dizesini oluşturur. %rformatta tırnak koymak gerekliliğinden tasarruf etmek için kullanılır, yani "{%r[j]}"aynıdır "{'%s'[j]}". F string değerlendirildiğinde doğru braket seçilir.

Dizenin üçüncü kısmı bir sonraki iki aralıklı ifadeyi oluşturur.

Son kısım f-string'in "a..b" kısmını biçimlendirir.

Birleştirilmiş f-string şöyle görünür: f"{'(['[j]}{a},{b}{')]'[i]} = .... = {a+j}..{b-i}"

F-string değerlendirildiğinde, parantez içindeki tüm ifadeler {}değerleri ile değiştirilir. Böylece, {a}değeri ile değiştirilir a, ve j, 0 ise veya j, 1 ise , {'(['[j]}yerine geçer .([


1

SOGL V0.12 , 110 bayt

<ŗŗ}”⁴
"{ŗ<ŗx³
W}↔b ,e++Κ+²
4∫2\f»¹Aa{Ƨ[(²a{Ƨ[]²ba{ =*}eο+++:³⁴;³&&x⁴a_beh+H⁶;!+ƨ.+Κο++++}⁰№Iā;0E{┼ē4=‽"δY↑æ‘┼

Burada dene!


0

Python 3, 248 bayt

def f(a,b):
 l=[['(',')','[','<',1],['[',']',']','<=',0]]
 r=[0,1]
 for i in r:
  for j in r:
   print(('%s%d,%d%s='*2+'{%d%sx%s%d}={%d%sx&&x%s%d}=%d..%d')%((l[j][0],a,b,l[i][1],l[1-j][2],a,b,l[i][2])+(a,l[j][3],l[i][3],b)*2+(a+l[j][4],b-l[i][4])))

Çevrimiçi deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.