Baru-baru ini, reputasi saya adalah 25,121
. Saya perhatikan bahwa setiap pengelompokan digit (yaitu angka yang dipisahkan oleh koma) adalah kuadrat sempurna.
Tantangan Anda adalah, diberi bilangan bulat non-negatif N dan fungsi Kotak Hitam boolean unary f : Z * → B , menghasilkan nilai kebenaran jika setiap nilai f yang diterapkan pada pengelompokan digit N adalah benar, dan sebaliknya falsey.
Orang dapat menemukan pengelompokan digit dengan membagi angka menjadi kelompok-kelompok 3, mulai dari sisi kanan. Grup paling kiri mungkin memiliki 1, 2, atau 3 digit. Beberapa contoh:
12398123 -> 12,398,123 (3 digit groupings)
10 -> 10 (1 digit grouping)
23045 -> 23,045 (2 digit groupings)
100000001 -> 100,000,001 (3 digit groupings)
1337 -> 1,337 (2 digit groupings)
0 -> 0 (1 digit grouping)
Aturan tambahan
- Fungsi ini dapat memetakan ke boolean (misalnya
true
danfalse
),1
s dan0
s, atau nilai true / falsey. Silakan tentukan format mana yang didukung oleh jawaban Anda. - Anda dapat mengambil integer sebagai input, atau string integer (yaitu string yang terdiri dari digit).
- Anda dapat menulis program atau fungsi.
- Saat meneruskan grup digital ke fungsi f , Anda harus memangkas semua nol terkemuka yang tidak perlu. Misalnya, f , ketika diterapkan pada N = 123.000 harus dieksekusi sebagai f (123) dan f (0).
Uji kasus
Notasi fungsi n -> f(n)
, misalnya n -> n == 0
,. Semua operator mengasumsikan bilangan bulat aritmatika. (Misalnya, sqrt(3) == 1
)
function f
integer N
boolean result
n -> n == n
1230192
true
n -> n != n
42
false
n -> n > 400
420000
false
n -> n > 0
0
false
n -> n -> 0
1
true
n -> sqrt(n) ** 2 == n
25121
true
n -> sqrt(n) ** 2 == n
4101
false
n -> mod(n, 2) == 0
2902414
true
n -> n % 10 > max(digits(n / 10))
10239120
false
n -> n % 10 > max(digits(n / 10))
123456789
true
code-golf
number
decision-problem
functional-programming
Conor O'Brien
sumber
sumber
n -> n > 0
diterapkan ke0
) ke kasus uji karena sebagian besar jawaban gagal di atasnya.[0]
.Jawaban:
Jelly , 5 byte
Cobalah online!
Argumen baris perintah adalah angka. Baris di atas baris tempat fungsi ini berada adalah baris utama dari sisa program, yaitu kode yang dipanggil untuk masing-masing grup. Hati-hati jangan sampai merujuk ke baris yang
bȷÇ€Ạ
ada di! Contoh yang digunakan di sini adalah test case ke-5.sumber
n -> n != 0
ke0
0
, dan daftar grup digitnya[0]
, demikianṆ
dipetakan ke setiap elemen (tunggal di0
sini), mengubah daftar menjadi[1]
dan, karena semua elemen dari daftar ini adalah benar,1
dikembalikan. Perhatikan bahwa jika saya memiliki daftar kelompok digit sebagai[]
gantinya hasilnya tidak akan berubah, karena semua elemen dari[]
adalah kebenaran (kebenaran kosong). Namun, hasilnya bisa berbeda untuk program yang berbeda, dan aturannya tidak jelas tentang hal ini ( tanya OP ).Brachylog , 8 byte
Cobalah online!
Fungsi kotak hitam berjalan di baris kedua (atau "Footer" di TIO) dan integer dibaca dari STDIN. Cetakan
true.
ataufalse.
sesuai.sumber
APL (Dyalog) ,
1613 byte3 byte disimpan berkat @ Adám
Cobalah online!
Bagaimana?
1e3⊥⍣¯1⊢⎕
- masukkan nomor dan enkode dalam basis 1000⎕¨
- masukan fungsi dan terapkan masing-masing∧/
- kurangi dengan logika dansumber
Python 2 , 46 byte
Cobalah online!
sumber
*
menggantikanand
.Haskell,
424038 byteFungsi kotak hitam harus kembali
True
atauFalse
.Cobalah online!
Edit:
-2-4 bytes berkat @ovs.sumber
&&
daripadaand
C (gcc) ,
665848 byte-10 byte terima kasih kepada @Neil!
Cobalah online!
sumber
g(f,i)int f();{i=!i||f(i%1000)&&g(f,i/1000);}
f(n){return n > n;}
ke0
Bahasa Wolfram (Mathematica) , 30 byte
Cobalah online!
sumber
JavaScript (ES6),
4036 byteMengambil fungsi dan nilai dengan mengeruk dan mengembalikan 0 atau 1. Edit: Disimpan 4 byte berkat @Shaggy.
sumber
1000
->1e3
untuk menyimpan beberapa byte. Dan bisakah Anda mengganti&&
dengan&
byte lain?function_name(n=>n>0)(0)
(pengembaliantrue
)Pyth , 9 byte
Cobalah online! (menggunakan test case ketiga)
Mengasumsikan fungsi kotak hitam bernama
y
. Anda dapat mendeklarasikan fungsi tersebut menggunakanL
(argumen:)b
, seperti yang ditunjukkan pada TIO. Saya akan menerapkan semua kasus uji nanti, jika saya punya waktu.sumber
Stax , 8 byte
Program Stax tidak memiliki panggilan fungsi atau argumen, jadi kami menyimpan blok di
Y
register yang mengkonsumsi dan menghasilkan nilai tunggal. Ini dapat dilakukan sebelum kode program.Berikut ini contoh menggunakan fungsi kuadrat sempurna.
sumber
Bersih , 54 byte
Cobalah online!
Menentukan fungsi
$ :: Int -> Bool
, mengharapkan fungsif :: Int -> Bool
didefinisikan di tempat lain.sumber
n -> n > 0
ke0
Java (OpenJDK 9) , 94 byte
Cobalah online!
sumber
n -> n > 0
ke0
Common Lisp ,
7372 byteCobalah online!
sumber
Excel VBA, 79 byte
Fungsi jendela langsung VBE anonim yang mengambil input,
n
sebagai tipe integer dari rentang[A1]
, dan nama fungsi VBA yang ditentukan secara publik dari rentang[B1]
.Contoh penggunaan
Dalam modul publik, fungsi input, dalam hal ini
f()
ini didefinisikan.Variabel input ditetapkan.
Fungsi jendela langsung kemudian disebut.
sumber
Ruby , 37 byte
Cobalah online!
Lambda rekursif, mengambil fungsi dan integer dan mengembalikan boolean.
36 byte (hanya positif n)
Versi ini kembali
1
untuk yang sebenarnya,false
untuk yang palsu. Sayangnya itu bisa gagal kapann = 0
Cobalah online!
sumber
g=
jika ini bersifat rekursif1
sebagai nilai yang sebenarnyag[->n{n>0},0]
(pengembaliantrue
). Itu hanya gagal jika inputnya0
tetapi pertanyaannya mengatakan "non-negatif" jadi Anda harus kembali ke 37. maafDiaplikasikan , 51 byte
Fungsi lambda anonim yang mengambil angka dan fungsi dan mengembalikan nilai boolean.
Cobalah online!
sumber
Tambahkan ++ , 15 byte
Cobalah online!
Membutuhkan suatu fungsi
f
dideklarasikan di header TIO.Bagaimana itu bekerja
sumber
05AB1E , 8 byte
Cobalah online!
Penjelasan
Mengambil nomor sebagai baris input pertama dan fungsi sebagai baris kedua.
Output 1 untuk truey dan 0 untuk falsy.
sumber
Q
danÊ
meskipun. Saya akan kembali ke versi 8-byte..V
vektorisasi, itu bahkan tidak mengambil daftar sebagai argumen itu sendiri untuk memulai..V
vektorisasi itu. Dalam contoh di tautan saya ituÈ
.Q
danÊ
akan bekerja dengan vektorisasi tidak seperti yang saya katakan sebelumnya, tetapi menggunakan vektorisasi otomatis akan membuat perintah-perintah ini memetakan pada seluruh daftar yang terasa di luar semangat tantangan sehingga kita perluε
.