-2 artık birleştirmek, birleştirmek,
değiştirmek için boş bir liste ele almamız gerekmediği için (kaçırılan öğenin kullanılan yöntem için ortada rastlanması gerekmiyor , üçlünün başında olması iyi. )
-2 geçiş için biz dümdüz yana (OK yarısı, iki sonuç için olan yine de) üzerinden filtre edilir, ve birden fazla eşit sonuçlar sahip bir ya da kullanılan yönteme etkilemez
-1 Bay Xcoder sayesinde (0 endeksli giriş izin verilir)
j@
;
P¬aSH
oSH
1
0.5
d3ZIỊoSH;µƝFf9Ḷ¤Q⁼
Tamsayıların listesini alan [0,8]
ve 1
yasal ise bir truthy değeri ( ) ve eğer değilse bir falsey değeri ( ) veren monadik bir bağlantı 0
.
Çevrimiçi deneyin! veya bir test odasına bakın .
Nasıl?
Giriş listesindeki her bir 0 dizinli düğüm çiftine bakar. İkiden üçünün tamsayı bölünmesi 2 ile farklılaşırsa, üst ve alt sıralarda yer alırlar, ikisinden üçünün üçlüsü 2 olduğunda, sol ve sağ sütunlarda bulunurlar. İkiye bölünen bu tür çiftlerin toplamı, üç düğümlü bir çizginin 0 dizinli orta düğümü veya tam sayı olmayan bir değerdir - bu nedenle bu değerler önce 0 dizinli çiftin önüne ve sonra sahte düğümler (gibi 0.5
veya3.5
) kaldırılır, sonuçta ortaya çıkan listelerin listesi düzleştirilir ve sonra kopyalanır (düzenlenmiş, benzersiz girdiler elde etmek için) ve nihayet girdiyle karşılaştırılır - yasal bir tokatlamak için bunların tümü yasadışı iken işlem yapılmaz olanlar eksik orta düğümler ekleyecek ve / veya çift düğümleri kaldıracak (bitişik çiftleri olmadığından 1 uzunluğundaki bir giriş listesi için özel bir kasa gerekmediğine dikkat edin):
d3ZIỊoSH;µƝFf9Ḷ¤Q⁼ - left input is a list of integers e.g. [3,4,7,1,2,8,3]
µƝ - perform the chain to the left for adjacent pairs:
- e.g. for [a,b] in: [3,4] [4,7] [7,1] [1,2] [2,8] [8,3]
d3 - divmod by 3 [[1,0],[1,1]] [[1,1],[2,1]] [[2,1],[0,1]] [[0,1],[0,2]] [[0,2],[2,2]] [[2,2],[1,0]]
Z - transpose [[1,1],[0,1]] [[1,2],[1,1]] [[2,0],[1,1]] [[0,0],[1,2]] [[0,2],[2,2]] [[2,1],[2,0]]
I - differences [0,1] [1,0] [-2,0] [0,1] [2,0] [-1,-2]
Ị - abs(v)<=1 [1,1] [1,1] [0,1] [1,1] [0,1] [1,0]
S - sum (of [a,b]) 7 11 8 3 10 11
o - OR (vectorises) [1,1] [1,1] [8,1] [1,1] [10,1] [1,11]
H - halve (vectorises) [0.5,0.5] [0.5,0.5] [4,0.5] [0.5,0.5] [5,0.5] [0.5,5.5]
; - concatenate [0.5,0.5,3,4] [0.5,0.5,4,7] [4,0.5,7,1] [0.5,0.5,1,2] [5,0.5,2,8] [0.5,5.5,8,3]
F - flatten [0.5,0.5,3,4, 0.5,0.5,4,7, 4,0.5,7,1, 0.5,0.5,1,2, 5,0.5,2,8, 0.5,5.5,8,3]
¤ - nilad followed by link(s) as a nilad:
9 - literal nine
Ḷ - lowered range = [0,1,2,3,4,5,6,7,8]
f - filter keep [ 3,4, 4,7, 4, 7,1, 1,2, 5, 2,8, ,8,3]
Q - deduplicate [3,4,7,1,2,5,8]
⁼ - equal to the input? e.g. 0 (here because 5 was introduced AND because 3 was removed from the right)
Önceki yöntem
Jöle , 36 35 bayt
9s3;Z$;“Æ7a‘DZ¤;U$;©0m€2iị®oµƝFQ⁼ȧȦ
Çevrimiçi deneyin! veya bir test odasına bakın .
Nasıl?
Yukarıdakilere benzer, ancak tüm üç düğümlü hat olanaklarını inşa eder ve arama yapar (orta düğümün toplamını test etmek ve yarıya indirmek için divmod kullanmaya devam ederken kontrol etmek yerine).
Öncelikle üç düğümlü satır listesinin oluşturulması:
9s3;Z$;“Æ7a‘DZ¤;U$;©0
9s3 - nine (implicit range) split into threes = [[1,2,3],[4,5,6],[7,8,9]]
$ - last two links as a monad:
Z - transpose = [[1,4,7],[2,5,8],[6,7,9]]
; - concatenate = [[1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,5,8],[3,6,9]]
¤ - nilad followed by link(s) as a nilad:
“Æ7a‘ - code-page index list = [13,55,97]
D - decimal (vectorises) = [[1,3],[5,5],[9,7]]
Z - transpose = [[1,5,9],[3,5,7]]
; - concatenate = [[1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,5,8],[3,6,9],[1,5,9],[3,5,7]]
$ - last two links as a monad:
U - upend = [[3,2,1],[6,5,4],[9,8,7],[7,4,1],[8,5,2],[9,6,3],[9,5,1],[7,5,3]]
; - concatenate = [[1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,5,8],[3,6,9],[1,5,9],[3,5,7],[3,2,1],[6,5,4],[9,8,7],[7,4,1],[8,5,2],[9,6,3],[9,5,1],[7,5,3]]
0 - literal zero (to cater for non-matches in the main link since ị, index into, is 1-based and modular the 0th index is the rightmost)
; - concatenate = [[1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,5,8],[3,6,9],[1,5,9],[3,5,7],[3,2,1],[6,5,4],[9,8,7],[7,4,1],[8,5,2],[9,6,3],[9,5,1],[7,5,3],0]
© - copy the result to the register
Şimdi karar verme:
...m€2iị®oµƝFQ⁼ȧȦ - left input is a list of integers e.g. [4,5,8,2,3,9,4]
µƝ - perform the chain to the left for adjacent pairs:
- i.e. for [a,b] in [[4,5],[5,8],[8,2],[2,3],[3,9],[9,4]]
... - perform the code described above = [[1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,5,8],[3,6,9],[1,5,9],[3,5,7],[3,2,1],[6,5,4],[9,8,7],[7,4,1],[8,5,2],[9,6,3],[9,5,1],[7,5,3],0]
m€2 - modulo-2 slice €ach = [[1,3],[4,6],[3,9],[1,7],[2,8],[6,9],[1,9],[3,7],[3,1],[6,4],[9,7],[7,1],[8,2],[9,3],[9,1],[7,3],[0]]
i - index of [a,b] in that (or 0 if not there) e.g. [0,0,13,0,6,0]
® - recall from register = [[1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,5,8],[3,6,9],[1,5,9],[3,5,7],[3,2,1],[6,5,4],[9,8,7],[7,4,1],[8,5,2],[9,6,3],[9,5,1],[7,5,3],0]
ị - index into (1-based & modular) e.g. [0,0,[8,5,2],0,[3,6,9],0]
o - OR [a,b] e.g. [[4,5],[5,8],[8,5,2],[2,3],[3,6,9],[9,4]]
F - flatten e.g. [4,5,5,8,8,5,2,2,3,3,6,9,9,4]
Q - deduplicate e.g. [4,5,8,2,3,6,9]
⁼ - equal to the input? e.g. 0 (here because 6 was introduced AND because 4 was removed from the right)
Ȧ - any and all? (0 if input is empty [or contains a falsey value when flattened - no such input], 1 otherwise)
ȧ - AND (to force an empty input to evaluate as 1 AND 0 = 0)