İki iç içe zincir


9

Gelen bu soruya ben bir fonksiyonu olduğu gibi bir "zincir" işlevini tanımlamıştır:

  • bir permütasyon, yani her bir değerin tam olarak bir değerle eşlendiği ve eşlendiği anlamına gelir.

  • ve fonksiyonun tekrarlanan uygulamaları veya tersi ile herhangi bir değerin başka herhangi bir değerden elde edilmesini sağlar.

Bunu yapan birçok işlev vardır ve bazıları oldukça basittir (bu sorunun cevaplarına bakın). Şimdi "iç içe" fonksiyonlar diyeceğim ayrı bir fonksiyon sınıfı tanımlayacağız. Bir dokunmuş fonksiyonu bir dizi üzerinde bir fonksiyonudur A iki sonsuz bölüm vardır, bir 0 ve bir 1 işlevi hem de bir zincir fonksiyonu olduğu şekilde bir 0 ve bir 1 .

Herhangi bir değeri, bu araçlar , bir 0 bir değere eşleyebilir bir 1 fonksiyonu ya da bunun tam tersi altında.

Görev

Göreviniz, pozitif tamsayılarda iç içe bir işlev gerçekleştiren veya tanımlayan bir kod yazmaktır. İşleviniz, iç içe geçme kriterlerini karşıladığı sürece herhangi bir şey olabilir. Yanıtınıza fonksiyonunuzun neden iç içe geçtiği ile ilgili bir açıklama eklemelisiniz.

Bu bir soru cevaplar bayt cinsinden puanlanacak, daha az bayt daha iyi olacak.


@flawr Teşekkürler! O kelimeyi arıyordum ama düşünemedim.
Ad Hoc Garf Hunter

Bence, ek bir aktarma yapmak zorunda olduğunuz için, yani tüm çift ve tek sayıları ayrı ayrı numaralandırmak zorunda olduğunuz için, bağlandığınız son zorluğun bir dupu olarak düşünülebilir. Burada aldığınız cevapların hiçbirinin önemli ölçüde yeni bir şey sağlayacağını düşünmüyorum.
flawr

@flawr Bunu yapabilirdiniz, ama en iyi yol bu olmazdı. Bununla küçük bir deney yaptım ve bu tür işlevleri yerine getirmenin yeni yolları var.
Ad Hoc Garf Hunter

Yanıtlar:


2

Python, 46 42 37 bayt

@Notjagan sayesinde 5 byte tasarruf edildi

lambda x:1<x<4and x*2%5or x-(x&2)*4+4

Çevrimiçi deneyin!

Çift ve tek sayıları 4'üncü adımlar ve 2 ve 3'teki bağlantılar ile yineler:

=> 22 => 18 => 14 => 10 => 6 => 2 => 4 => 8 => 12 => 16 => 20 => 24 =>
=> 23 => 19 => 15 => 11 => 7 => 3 => 1 => 5 => 9 => 13 => 17 => 21 =>

1

JavaScript, 30 24 bayt

a=>(a+=a&2?-4:4)<0?a*a:a

Diziler:

  1. ... 19 15 11 7 3 1 5 9 13 17 21 ...
  2. ... 18 14 10 6 2 4 8 12 16 20 24 ...

Kod pasajı

f=a=>(a+=a&2?-4:4)<0?a*a:a
console.log('23 19 15 11 7 3 1 5 9 13 17'.split` `.map(a=>f(a|0)).join` `);
console.log('22 18 14 10 6 2 4 8 12 16 20'.split` `.map(a=>f(a|0)).join` `);


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.