Kami baru saja mencapai ambang 10.000 pertanyaan tentang PPCG. Hore! Mari kita rayakan ini dengan tantangan sederhana.
Memasukkan
Dua bilangan bulat dan , keduanya dalam , sehingga .
Tugas
Tugas Anda adalah menambahkan satu digit tunggal ke salah satu bilangan bulat ini atau satu digit tunggal untuk keduanya sehingga . Jika menambahkan digit ke dan , tidak harus sama dengan digit.
Digit baru dapat ditambahkan di awal, di akhir atau di mana saja di tengah bilangan bulat asli. Namun, Anda tidak dapat menambahkan nol di depan.
Contoh:
Untuk , transformasi berikut ini valid:
Tetapi yang ini tidak valid :
Diberikan dan , ada dua solusi yang mungkin:
Keluaran
Anda harus mencetak atau mengeluarkan daftar semua solusi yang mungkin.
Untuk contoh di atas, output yang diharapkan adalah [[9238,762],[9273,727]]
.
Aturan
- I / O dapat diproses dalam format yang masuk akal dan tidak ambigu. Anda dapat menggunakan string, daftar digit, dll. Bukan bilangan bulat.
- Input dijamin memiliki setidaknya satu solusi.
- Anda diizinkan untuk tidak menduplikat output. Namun, akan lebih dihargai jika kode tes dideduplikasi dengan beberapa post-processing, misalnya di bagian footer TIO.
- Ini adalah tantangan kode-golf .
Uji kasus
Input --> Output
934, 654 --> [[9346,654]]
737, 628 --> [[7372,2628]]
9122, 88 --> [[9122,878]]
923, 72 --> [[9238,762],[9273,727]]
998, 3 --> [[9968,32],[9987,13]]
900, 10 --> [[9900,100],[9090,910]] NB: solutions such as [9000,1000] are NOT valid
(more than one digit added to 10)
363, 632 --> [[3673,6327],[3638,6362]]
288, 711 --> [[2881,7119],[2882,7118],[2883,7117],[2884,7116],[2885,7115],[2886,7114],
[2887,7113],[2888,7112],[2889,7111]]
365, 635 --> [[365,9635],[1365,8635],[2365,7635],[3365,6635],[4365,5635],[5365,4635],
[6365,3635],[7365,2635],[8365,1635],[9365,635],[3065,6935],[3165,6835],
[3265,6735],[3465,6535],[3565,6435],[3665,6335],[3765,6235],[3865,6135],
[3965,6035],[3605,6395],[3615,6385],[3625,6375],[3635,6365],[3645,6355],
[3655,6345],[3675,6325],[3685,6315],[3695,6305],[3650,6350]]
output a list of all possible solutions
Oh, sial. Itu akan sulit untuk bahasa Runic saya. Aku mungkin bisa menulis sebuah program yang bisa output sebuah solusi!Jawaban:
Haskell ,
99 97 8281 byte-16 bytes terima kasih kepada Delfad0r (mengambil input sebagai daftar, menggunakan penyalahgunaan yang tidak perlu kita deduplicate -> n selalu bisa dalam [0,4] & menggunakan kombinasi pandai format input dan
ap
)!Cobalah online!
sumber
R , 96 byte
Cobalah online!
Penjelasan (ungolfed)
Kami ditugaskan
?
untukpaste
. Itu memungkinkan kami melakukan sesuatu yang keren:a<-b?c<-d
melakukan penugasan sebaris dalampaste
panggilan, yang tidak dapat kami lakukan dengan operator lain selain?
, karena memiliki prioritas lebih rendah daripada<-
.Sekarang seperti yang ditunjukkan oleh @JoKing, mungkin ada kasus seperti di
900 10
mana dua penyisipan dapat terjadi seperti9100 8100
. Jadi kami menyaring pertandingan yang jumlah karakternya meningkat lebih dari 1. Cara cepat untuk melakukannya adalah dengan jarak edit Levenshteinadist
yang kami ikat+
.sumber
Pyth,
282725242220 byteCobalah secara online di sini , atau verifikasi semua test case di sini - test suite menduplikat hasilnya dengan menambahkan a
{
.Input adalah sebagai daftar string.
Sunting 4: Disimpan 2 byte lagi, terima kasih kepada Tuan Xcoder - membuat
v
vektor secara default, danL
menggunakan dim
bawahnya, sehingga pemetaan rentang terimplikasi, membuat yangU
tidak perlu terlaluSunting 3: Diperkenalkan kepada penggunaan global
;
operator untuk mempertahankan akses ke 10 untuk menghemat 2 byte, terima kasih kepada FryAmTheEggman dan issacg:Sunting 2: Saya lupa operator penjumlahan ada, betapa memalukannya ...
Sunting 1: Versi sebelumnya menerima daftar bilangan bulat sebagai input, melakukan konversi string secara manual, selama 27 byte:
sumber
T
, tetapi dalam blok fungsi, variabel-variabel tersebut bertujuan ulang untuk bertindak sebagai variabel iterasi sebagai gantinya - di blok filter variabel iterasi kebetulanT
, jadi tidak dapat digunakan. Ini berarti bahwa10 ^ 4
akan^10 4
, yang adalah 5 byte panjang, sehingga tidak ada yang lebih pendek sayangnyaT
diUT
masih 10, untuk[0,10)
kisaran. Tetapi padaf...T
saat ituT
telah menjadi variabel iterasi untuk filter. Terima kasih atas penjelasannya, itu masuk akal! Dan melakukanT4^
lebih awal, menyimpannya dalam sebuah variabel, dan menggunakan variabel itu dalam filter adalah (setidaknya) 5 byte juga tentunya.10000
dengan^;4
.;
selalu memiliki nilai variabel iterasi dalam konteks global, dalam hal ini 10. Jadi^;4
adalah apa yang Anda cari.fq^;4sT*FmvsmXLkdThl
. ( Mengalahkan Jelly? OO Hore )Perl 6 , 64 byte
Cobalah online!
Ini adalah port jawaban GB menggunakan regex untuk memeriksa apakah angkanya valid. Terima kasih kepada nwellnhof karena memindahkannya .
Jawaban lama,
127 110, 88 byte-22 byte berkat nwellnhof!
Cobalah online!
Blok kode anonim yang mengambil daftar dua angka dan mengembalikan daftar pasangan angka.
Daripada bermain-main dengan memasukkan angka, solusi ini memeriksa setiap kombinasi angka yang berjumlah 10.000 dan memfilter bahwa angka yang diberikan adalah bagian dari pasangan.
Penjelasan:
sumber
(i,1e4-i)
ganti setiap(i,j)
dan menyaringnya?R ,
179 161 150144 byteCobalah online!
35 byte disimpan oleh @JayCe dan @Giuseppe.
Penjelasan
Fungsi pembantu g mendapatkan semua kemungkinan penyisipan.
Fungsi utama.
Saya perhatikan setelah fakta bahwa ini pada dasarnya logika yang sama dengan jawaban Pyth .
sumber
F
dan%*%
Ruby ,
9391 byteCobalah online!
Coba setiap nomor hingga 10.000, dan gunakan regex untuk memeriksa apakah jumlahnya cocok.
sumber
Jelly , 30 byte
Cobalah online!
Agak canggung karena Jelly tidak memiliki sisipan.
Penjelasan
sumber
PHP,
162159 bytecontoh yang bagus untuk fungsi generator!
mengambil input dari argumen baris perintah; mencetak duplikat. Jalankan dengan
-nr '<code>
atau coba online .sumber
Pyth, 18 byte
Demonstrasi , test suite (test suite diduplikasi dengan memimpin
{
).Inputnya berupa daftar dua string.
XLRRTT
: L dan R melakukan peta bersarang. Karena ada 3 dari mereka, kami akan melakukan petaX
fungsi bersarang triply . Dalam hal ini,X
fungsi akan memasukkan karakter pada posisi yang ditentukan ke dalam string.String adalah input, yang tersirat dan ditempatkan oleh yang pertama
R
. Karakter berkisar0 ... 9
, jadi kami memiliki semua kemungkinan digit yang dimasukkan, dan ditempatkan olehL
. Rentang diberikan olehT
, yang secara implisit diatur ke10
, yang secara implisit diperlakukan sebagai[0 ... 9]
. Posisi berkisar di atas0 ... 9
, yang cukup, karena memasukkan angka setelah posisi 10 tidak akan pernah berguna. Hasil duplikat baik-baik saja. Rentang ditempatkan oleh yang keduaR
, dan diberikan oleh yang keduaT
.v
: Nasting cast strings ke ints.sM
: Ratakan daftar tingkat kedua, beri kami daftar semua angka yang mungkin setelah penyisipan digit, untuk masing-masing nomor masukan.*F
: Ambil produk Cartesian dari dua daftar angka yang mungkin.fqsT^;4
: Saring pada pasangan yang produknya adalah10000
.;
mengambil nilai di10
sini, sepertiT
yang digunakan sebagai variabel filter, dan;
selalu sebagai nilai variabel yang digunakan.sumber
Japt ,
30292523 bytesMengambil input sebagai array string, menghasilkan array array string.
Cobalah
Penjelasan
sumber
Javascript (Node) -
183136123 Bytes123 Bytes berkat Shaggy
136 Bytes berkat Arnauld
Kode Lama
Tidak bangga akan hal itu, tetapi kupikir aku akan menyerah. Membuat fungsi prototipe string yang mirip dengan memetakan yang memakan sebagian besar byte. Berfungsi hanya melalui kedua permutasi, dan menemukan saat 1000-ab bernilai 0. Mengambil input sebagai string.
Cobalah online!
Tidak disatukan
sumber
String.prototype
,function
,let
,this
) dan dengan beberapa optimasi lain.map()
bukanfor
loop luar . NB: satu-satunya alasan mengapa kami menggunakanj
sebagai parameter pertama dari fungsi panggilan balik adalah bahwa kami ingin didefinisikan dalam lingkup ini.Jelly , 23 byte
Tautan monadik yang menerima daftar daftar digit
(misalnya untuk contoh 923 dan 72 inputnya
[[9,2,3],[7,2]]
)Cobalah online! (footer membuatnya jadi I / O adalah sepasang dari dua bilangan bulat di dalam dan daftar pasangan bilangan bulat yang diformat)
Atau lihat test-suite .
Bagaimana?
Memeriksa semua pasangan "angka" (daftar angka) yang berjumlah 10.000 untuk validitas dengan membentuk semua cara untuk memilih n-1 angka dari "angka" yang mempertahankan pesanan; dan menjaga yang valid (di mana validitas juga memungkinkan "angka" yang diuji sama dengan "angka" asli).
sumber
Stax , 24 byte
Jalankan dan debug itu
Program-program itu mengambil dua inputnya sebagai array string, seperti ini.
sumber
Arang , 33 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Jika Anda tidak mengerti itu, ia menjalankan semua pasangan nilai yang menambah 10.000 (sebagai string), lalu menghitung berapa kali setiap input cocok dengan hasil menghapus hingga 1 karakter dari nilai masing-masing. Jika jumlah minimum bukan nol maka kedua input cocok dan ini adalah solusi yang memungkinkan.
sumber
Python 3,
165 160 153 125117 byteset
dari nilai kembali, karena output dapat berisi duplikat.range(len(s))
denganrange(5)
.itertools
dengan pemahaman daftar bersarang (dan menghapus spasi).MenggunakanMenerima string sebagai input, mengembalikan satu set int sebagai output.itertools
dan fungsi pembantu sederhana.sumber
set
baris terakhir untuk -5 byte.Ruby , 110 byte
Menerima string sebagai input, mengembalikan array array integer.
Berdasarkan versi python . Untuk bilangan bulat yang diberikan,
C
buat array angka yang dapat dibuat dengan menambahkan digit.Lambda mengulangi setiap kemungkinan pasangan dan memilih pasangan yang jumlahnya 10.000.
Cobalah online!
sumber
05AB1E (warisan) , 36 byte
Dapat tanpa diragukan lagi akan golf secara substansial .. Terutama memasukkan angka, termasuk yang terkemuka / tertinggal.
Cobalah secara online atau verifikasi semua kasus uji (
ê
catatan kaki adalah untuk Uniquify & Sortir).Penjelasan:
sumber
Jelly , 25 byte
Cobalah online!
Bukan solusi Jelly terpendek di sini tapi mungkin seseorang bisa bermain golf ini? Saya bingung
sumber