Pasang Iklan Atas 1

Down Menu

Drop Down MenusCSS Drop Down MenuPure CSS Dropdown Menu

Tuesday, October 23, 2018

Introduction to Reactive APIs With Postgres, R2DBC, Spring Data JDBC and Spring WebFlux

Saya tahu - ada BANYAK teknologi yang tercantum dalam judul artikel ini. Spring WebFlux telah diperkenalkan dengan Spring 5 dan Spring Boot 2 sebagai proyek untuk membangun aplikasi web reaktif-stack. Saya telah menjelaskan cara menggunakannya bersama Spring Boot dan Spring Cloud untuk membangun microservices reaktif dalam artikel itu: Reactive Microservices dengan Spring WebFlux dan Spring Cloud. Spring 5 juga telah memperkenalkan proyek-proyek yang mendukung akses reaktif ke database NoSQL, seperti Cassandra, MongoDB, atau Couchbase. Namun, masih ada kurangnya dukungan untuk reaktif untuk menyediakan akses ke database relasional. Perubahan ini datang bersamaan dengan proyek R2DBC (Reactive Relational Database Connectivity). Proyek itu juga sedang dikembangkan oleh anggota Pivotal. Tampaknya ini adalah inisiatif yang sangat menarik, namun pada awal perjalanan. Bagaimanapun, ada modul untuk integrasi dengan Postgres, dan kami akan menggunakannya untuk aplikasi demo kami.
R2DBC tidak akan menjadi satu-satunya solusi baru yang menarik yang dijelaskan dalam artikel ini. Saya juga akan menunjukkan kepada Anda bagaimana menggunakan Spring Data JDBC - proyek lain yang sangat menarik yang dirilis baru-baru ini. Perlu disebutkan fitur Spring Data JDBC. Proyek ini telah dirilis dan tersedia di bawah versi 1.0. Ini adalah bagian dari kerangka Data Musim Semi yang lebih besar. Ini menawarkan abstraksi repositori berdasarkan JDBC. Alasan utama pembuatan pustaka tersebut adalah untuk mengizinkan akses ke basis data relasional menggunakan Data Musim Semi (melalui antarmuka CrudRepository) tanpa menyertakan pustaka JPA ke dependensi aplikasi. Tentu saja, JPA masih tetap merupakan API persistensi utama yang digunakan untuk aplikasi Java. Spring Data JDBC bertujuan untuk menjadi lebih sederhana secara konseptual daripada JPA dengan tidak menerapkan pola populer seperti pemuatan malas, cache, konteks kotor, dan sesi. Ini juga memberikan dukungan yang sangat terbatas untuk pemetaan berbasiskan anotasi. Akhirnya, ia menyediakan implementasi repositori reaktif yang menggunakan R2DBC untuk mengakses database relasional. Meskipun modul itu masih dalam pengembangan (hanya versi SNAPSHOT tersedia), kami akan mencoba menggunakannya dalam aplikasi demo kami. Mari lanjutkan ke penerapan.

Including Dependencies

Kami menggunakan Kotlin untuk implementasi. Jadi pertama, kami menyertakan beberapa dependensi Kotlin yang diperlukan.
<dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-stdlib</artifactId>
    <version>${kotlin.version}</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-kotlin</artifactId>
</dependency>
<dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-reflect</artifactId>
</dependency>
<dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-test-junit</artifactId>
    <version>${kotlin.version}</version>
    <scope>test</scope>
</dependency>

We should also add kotlin-maven-plugin with support for Spring.
<plugin>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-maven-plugin</artifactId>
    <version>${kotlin.version}</version>
    <executions>
        <execution>
            <id>compile</id>
            <phase>compile</phase>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>
        <execution>
            <id>test-compile</id>
            <phase>test-compile</phase>
            <goals>
                <goal>test-compile</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <args>
            <arg>-Xjsr305=strict</arg>
        </args>
        <compilerPlugins>
            <plugin>spring</plugin>
        </compilerPlugins>
    </configuration>
</plugin>

Then, we may proceed to include frameworks required for the demo implementation. We need to include the special SNAPSHOT version of Spring Data JDBC dedicated for accessing the database using R2DBC. We also have to add R2DBC libraries and Spring WebFlux. As you may see below, only Spring WebFlux is available in a stable version (as a part of Spring Boot RELEASE).
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jdbc</artifactId>
    <version>1.0.0.r2dbc-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>io.r2dbc</groupId>
    <artifactId>r2dbc-spi</artifactId>
    <version>1.0.0.M5</version>
</dependency>
<dependency>
    <groupId>io.r2dbc</groupId>
    <artifactId>r2dbc-postgresql</artifactId>
    <version>1.0.0.M5</version>
</dependency>

Kami juga harus menambahkan kotlin-maven-plugin dengan dukungan untuk Spring.
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-releasetrain</artifactId>
            <version>Lovelace-RELEASE</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>

Repositories

Kami menggunakan gaya Spring Data yang terkenal dari implementasi repositori CRUD. Dalam hal ini, kita perlu membuat antarmuka yang memperluas antarmuka ReactiveCrudRepository.
Berikut penerapan repositori untuk mengelola objek Karyawan.
interface EmployeeRepository : ReactiveCrudRepository<Employee, Int< {
    @Query("select id, name, salary, organization_id from employee e where e.organization_id = $1")
    fun findByOrganizationId(organizationId: Int) : Flux<Employee>
}

Berikut ini implementasi lain dari repositori - kali ini, kami menggunakannya untuk mengelola Organisasi objek.
interface OrganizationRepository : ReactiveCrudRepository<Organization, Int< {
}

Implementing Entities and DTOs

Kotlin menyediakan cara mudah untuk menciptakan kelas entitas dengan mendeklarasikannya sebagai kelas data. Ketika menggunakan Spring Data JDBC, kita harus menetapkan kunci utama untuk entitas dengan annotating field dengan @Id. Ini mengasumsikan kunci secara otomatis bertambah oleh database. Jika Anda tidak menggunakan kolom peningkatan otomatis, Anda harus menggunakan pendengar BeforeSaveEvent, yang menetapkan ID entitas. Namun, saya mencoba mengatur pendengar semacam itu untuk entitas saya, tetapi itu tidak bekerja dengan versi Spring Data JDBC yang reaktif.
Berikut ini penerapan kelas entitas Karyawan. Perlu disebutkan bahwa Spring Data JDBC akan secara otomatis memetakan organisasi bidang kelasId ke dalam kolom basis data organization_id.
data class Employee(val name: String, val salary: Int, val organizationId: Int) {
    @Id 
    var id: Int? = null
}

Berikut ini penerapan kelas entitas Organisasi.
data class Organization(var name: String) {
    @Id 
    var id: Int? = null
}

R2DBC tidak mendukung daftar atau kumpulan apa pun. Karena saya ingin kembali daftar dengan karyawan di dalam Organisasi objek di salah satu titik akhir API, saya telah membuat DTO yang berisi daftar seperti itu, seperti yang ditunjukkan di bawah ini.
data class OrganizationDTO(var id: Int?, var name: String) {
    var employees : MutableList = ArrayList()
    constructor(employees: MutableList) : this(null, "") {
        this.employees = employees
    }
}

Skrip SQL yang terkait dengan entitas yang dibuat terlihat di bawah ini. Seri tipe bidang akan secara otomatis membuat urutan dan melampirkannya ke ID bidang.
CREATE TABLE employee (
    name character varying NOT NULL,
    salary integer NOT NULL,
    id serial PRIMARY KEY,
    organization_id integer
);
CREATE TABLE organization (
    name character varying NOT NULL,
    id serial PRIMARY KEY
);

Building Sample Web Applications

Untuk tujuan demo, kami akan membangun dua aplikasi independen: layanan karyawan dan layanan organisasi. Aplikasi organisasi-layanan berkomunikasi dengan karyawan-layanan menggunakan WebFlux WebClient. Ia mendapat daftar karyawan yang ditugaskan ke organisasi dan termasuk mereka untuk merespon bersama dengan OrganisasiOryek. Contoh kode sumber aplikasi tersedia di GitHub di bawah repositori sample-spring-data-webflux.
Oke, mari kita mulai dari mendeklarasikan kelas utama Spring Boot. Kita perlu mengaktifkan repositori Spring Data JDBC dengan memberi annotating kelas utama dengan @EnableJdbcRepositories.
@SpringBootApplication
@EnableJdbcRepositories
class EmployeeApplication
fun main(args: Array<String>) {
    runApplication<EmployeeApplication>(*args)
}

Bekerja dengan R2DBC dan Postgres memerlukan beberapa konfigurasi. Karena tahap awal kemajuan dalam pengembangan Spring Data JDBC dan R2DBC, tidak ada konfigurasi otomatis Spring Boot untuk Postgres. Kita perlu mendeklarasikan pabrik koneksi, klien, dan repositori di dalam kacang @Configuration.
@Configuration
class EmployeeConfiguration {
    @Bean
    fun repository(factory: R2dbcRepositoryFactory): EmployeeRepository {
        return factory.getRepository(EmployeeRepository::class.java)
    }
    @Bean
    fun factory(client: DatabaseClient): R2dbcRepositoryFactory {
        val context = RelationalMappingContext()
        context.afterPropertiesSet()
        return R2dbcRepositoryFactory(client, context)
    }
    @Bean
    fun databaseClient(factory: ConnectionFactory): DatabaseClient {
        return DatabaseClient.builder().connectionFactory(factory).build()
    }
    @Bean
    fun connectionFactory(): PostgresqlConnectionFactory {
        val config = PostgresqlConnectionConfiguration.builder() //
                .host("192.168.99.100") //
                .port(5432) //
                .database("reactive") //
                .username("reactive") //
                .password("reactive123") //
                .build()
        return PostgresqlConnectionFactory(config)
    }
}

Akhirnya, kita dapat membuat pengendali REST yang berisi definisi metode API reaktif kami. Dengan Kotlin, tidak butuh banyak ruang. Definisi kontroler berikut berisi tiga metode GET yang memungkinkan kita untuk menemukan semua karyawan, semua karyawan yang ditugaskan ke organisasi tertentu, atau satu karyawan berdasarkan id.

@RestController
@RequestMapping("/employees")
class EmployeeController {
    @Autowired
    lateinit var repository : EmployeeRepository
    @GetMapping
    fun findAll() : Flux<Employee> = repository.findAll()
    @GetMapping("/{id}")
    fun findById(@PathVariable id : Int) : Mono<Employee> = repository.findById(id)
    @GetMapping("/organization/{organizationId}")
    fun findByorganizationId(@PathVariable organizationId : Int) : Flux<Employee> = repository.findByOrganizationId(organizationId)
    @PostMapping
    fun add(@RequestBody employee: Employee) : Mono<Employee> = repository.save(employee)
}

Inter-Service Communication

Untuk OrganizationController, penerapannya sedikit lebih rumit. Karena organisasi-layanan berkomunikasi dengan karyawan-layanan, pertama-tama kita perlu menyatakan WebFlibuilder WebFlux reaktif.
@Bean
fun clientBuilder() : WebClient.Builder {
    return WebClient.builder()
}

Kemudian, mirip dengan repository bean, pembangun sedang disuntikkan ke pengontrol. Ini digunakan di dalam metode the findByIdWithEmployees untuk memanggil metode GET /employees/organization/{organizationId} terpapar oleh employee-service. Seperti yang Anda lihat pada fragmen kode di bawah ini, ia menyediakan API reaktif dan mengembalikan objek Flux yang berisi daftar karyawan yang ditemukan. Daftar ini disuntikkan ke dalam OrganizationDTOobject menggunakan metode zipWith Reactor.
@RestController
@RequestMapping("/organizations")
class OrganizationController {
    @Autowired
    lateinit var repository : OrganizationRepository
    @Autowired
    lateinit var clientBuilder : WebClient.Builder
    @GetMapping
    fun findAll() : Flux<Organization> = repository.findAll()
    @GetMapping("/{id}")
    fun findById(@PathVariable id : Int) : Mono<Organization> = repository.findById(id)
    @GetMapping("/{id}/withEmployees")
    fun findByIdWithEmployees(@PathVariable id : Int) : Mono<OrganizationDTO> {
        val employees : Flux<Employee> = clientBuilder.build().get().uri("http://localhost:8090/employees/organization/$id")
                .retrieve().bodyToFlux(Employee::class.java)
        val org : Mono = repository.findById(id)
        return org.zipWith(employees.collectList())
                .map { tuple -> OrganizationDTO(tuple.t1.id as Int, tuple.t1.name, tuple.t2) }
    }
    @PostMapping
    fun add(@RequestBody employee: Organization) : Mono<Organization> = repository.save(employee)
}

How Does it Work?

Sebelum menjalankan tes, kita perlu memulai basis data Postgres. Berikut adalah perintah Docker yang digunakan untuk menjalankan kontainer Postgres. Ini membuat pengguna dengan kata sandi, dan mengatur database default.
$ docker run -d --name postgres -p 5432:5432 -e POSTGRES_USER=reactive -e POSTGRES_PASSWORD=reactive123 -e POSTGRES_DB=reactive postgres

Kemudian, kita perlu membuat beberapa tabel pengujian, jadi Anda harus menjalankan skrip SQL yang ditempatkan di bagian Entitas Implementasi dan DTO. Setelah itu, Anda dapat memulai aplikasi uji kami. Jika Anda tidak mengesampingkan pengaturan default yang disediakan di dalam file application.yml, layanan karyawan mendengarkan pada port 8090 dan layanan organisasi pada port 8095. Gambar berikut mengilustrasikan arsitektur sistem sampel kami.
spring-data-1
Sekarang, mari tambahkan beberapa data pengujian menggunakan API reaktif yang diekspos oleh aplikasi.
$ curl -d '{"name":"Test1"}' -H "Content-Type: application/json" -X POST http://localhost:8095/organizations
$ curl -d '{"name":"Name1", "balance":5000, "organizationId":1}' -H "Content-Type: application/json" -X POST http://localhost:8090/employees
$ curl -d '{"name":"Name2", "balance":10000, "organizationId":1}' -H "Content-Type: application/json" -X POST http://localhost:8090/employees

Terakhir, Anda dapat memanggil metode GET organizations / {id} / withEmployees, misalnya, menggunakan browser web Anda. Hasilnya harus serupa dengan hasil yang terlihat pada gambar berikut.
spring-data-2

Apa Artinya Menjadi 'Reactive?'


Saat ini, reactive adalah salah satu kata kunci yang trendi dalam pemrograman. Ini secara luas digunakan sebagai awalan untuk "sistem" dan "pemrograman," yang keduanya menggambarkan hal-hal yang sangat berbeda.
Namun, sebagai konsultan IT dan sponsor reaktif, saya memiliki banyak pengalaman dan percakapan di sekitarnya, tetapi pada dasarnya, pertanyaan utamanya selalu sama:
Apa artinya reactive?
Dan, langsung setelahnya:
Mengapa saya harus menggunakan reactive?
Meskipun ada banyak artikel yang berusaha menjelaskan - dengan cara yang mendalam - sistem reaktif, pemrograman reaktif, dan / atau kedua pertanyaan di atas, pertanyaan-pertanyaan ini masih tetap ada.
Sebagaimana disebutkan di atas, sistem reaktif tidak sama dengan pemrograman reaktif. Selain itu, mengenai sistem reaktif, manifesto reaktif menyatakan bahwa sistem reaktif lebih memperhatikan konsep-konsep klasik "sistem terdistribusi" yang didasarkan pada arsitektur "pesan-driven" (yaitu sistem reaktif adalah gaya arsitektur).
Setelah itu, pertanyaan telah dipindahkan ke pemrograman reaktif dan, lebih khusus lagi, bagaimana kerangka reaktif berkaitan dengan eksekusi asynchronous dan (famigerate) utas.
Di sini, masalahnya menjadi sedikit lebih rumit. Pertanyaan-pertanyaan ini didasarkan pada lingkungan implementasi yang berbeda dari loop pesan dan bagaimana cara kerjanya, misalnya, di node.js daripada di JVM.
Untuk menjawab pertanyaan-pertanyaan ini, saya memutuskan untuk menggambar komik sederhana menggunakan metafora restoran yang saya temukan berselancar di laut reaktif online yang saya beri nama "Melayani Reaktif." Mari kita lihat lebih dekat.

Reactive Serving

Mari kita bayangkan bahwa Anda baru saja menjadi pemilik sebuah restoran kecil yang hanya memiliki beberapa meja (tiga, misalnya), dan Anda harus menyewa seluruh staf. Apa pilihanmu? Dengan asumsi bahwa Anda hanya membutuhkan satu koki, berapa banyak pelayan yang perlu Anda sewa?

Pendekatan 1

Dalam pendekatan pertama ini, mari kita coba untuk memecahkan masalah ini dengan menggunakan lingkungan eksekusi klasik (non-reaktif) yang hanya mensponsori satu - thread - per - request. Coba lihat di bawah ini:

One waiter for each customer (One thread for each request)

Gambar di atas menunjukkan satu pelayan untuk setiap pelanggan - satu utas untuk setiap pelanggan. Pendekatan ini mengasumsikan bahwa kita memiliki satu pelayan yang sepenuhnya didedikasikan untuk kebutuhan satu pelanggan tertentu, berinteraksi dengan koki secara bersamaan.

Solusi ini terlihat menarik, terutama jika kami ingin menyarankan restoran kami sebagai favorit lokal, tetapi sementara itu, kami harus mempertimbangkan biaya (jumlah pelayan) dan fakta bahwa, sebagian besar waktu, pelayan tidak melakukan apa-apa.
Pada catatan skalabilitas, mudah untuk memahami bahwa Anda memiliki peningkatan linear dalam biaya dan sumber daya yang dibutuhkan.
Mari kita mundur dari metafora ini. Dengan mengganti pelayan dengan benang, koki memiliki kemampuan pemrosesan dan permintaan pelanggan yang kami peroleh. Ini termasuk apa yang terjadi di dalam lingkungan eksekusi klasik di mana setiap utas didedikasikan untuk satu permintaan.

Pendekatan 2

Sekarang, mari kita coba untuk memecahkan masalah ini menggunakan pendekatan yang berbeda terhadap lingkungan eksekusi reaktif yang mensponsori loop tunggal - kejadian - loop. Coba lihat di bawah ini:
Pada gambar di atas, kami mendemonstrasikan satu pelayan untuk semua pelanggan - satu utas untuk semua permintaan. Pendekatan ini mengasumsikan bahwa kita memiliki satu pelayan "reaktif" yang bekerja keras dan tidak sinkron untuk memenuhi kebutuhan semua pelanggan yang berinteraksi dengan koki.
Solusi ini mungkin terlihat kurang menarik daripada yang sebelumnya, tetapi itu benar-benar lebih efisien karena mengandung biaya lebih rendah dan menggunakan kemampuan maksimal pelayan Anda. Karena itu:

Semakin "reaktif" pelayan dan koki ... semakin efektif layanan Anda!
Catatan singkat tentang skalabilitas: jika Anda membutuhkan yang lain, Anda harus mencari pelayan reaktif lain. Ini berarti bahwa biaya dan sumber daya yang dibutuhkan bergantung pada kemampuan Anda untuk mengelola masalah tersebut.
Sekarang, mari kita melangkah menjauh dari metafora restoran. Sementara benang memainkan peran pelayan - kemampuan pemrosesan koki dan permintaan pelanggan, Anda (sebagai pemilik) memainkan peran manajer sumber daya sistem

Kesimpulan

Pertanyaannya adalah, dalam kasus Anda, model layanan apa yang akan Anda pilih untuk restoran Anda? Pendekatan 1 atau 2?
Saya harap metafora ini membantu Anda memahami bagaimana kerangka kerja reaktif menangani eksekusi asynchronous dan utas.
Sementara sistem non-reaktif mencoba mengelola sumber daya dengan menggunakan model prediktif (jumlah maksimal utas, jumlah permintaan maksimum per waktu), sistem reaktif bergantung pada kapasitas sistem yang melibatkan lebih sedikit sumber daya yang lebih baik digunakan, membuat keseluruhan keluaran sistem . tidak dapat diprediksi (untuk itu, kita harus menggunakan pendekatan empiris).

Monday, October 22, 2018

Java : Codility Test



Question 1
Write a function:

class Solution {
public int solution(int A, int B);
}

that, given two non-negative integers A and B, returns the number of bits set to 1 in the binary representation of the number A * B.

For example, given A = 3 and B = 7 the function should return 3, because the binary representation of A * B = 3 * 7 = 21 is 10101 and it contains three bits set to 1.

Assume that: A and B are integers within the range [0..100,000,000].

In your solution, focus on correctness. The performance of your solution will not be the focus of the assessment.

Answer

public class MyClass {

    public static void main(String args[]) {
        int A = 3;
        int B = 8;
        Integer calc = A * B;
        String binaryParse = Integer.toString(calc,2);
        String[] binArr = binaryParse.split("");
        int result = 0;
        
        for (String a : binArr){
                 if(a.equals("1")){
                     result++;
                 }
        }
        
        System.out.println(result);   
    }
}



Question 2
A non-empty array A consisting of N non-negative integers is given.

For elements A[P] and A[Q] that are distinct, i.e. P ≠ Q, their distance is defined as:

(A[P] − A[Q]) if (A[P] − A[Q]) ≥ 0;
(A[Q] − A[P]) if (A[P] − A[Q]) 0.

Write a function:

class Solution {
public int solution(int[] A);
}

that, given an array A consisting of N non-negative integers, returns the minimum distance between two distinct elements of A.

For example, given array A such that: A[0] = 8 A[1] = 24 A[2] = 3 A[3] = 20 A[4] = 1 A[5] = 17 the function should return 2, because (A[2] − A[4]) = 2 and no other two distinct elements of A have a smaller distance.

Given array A such that: A[0] = 7 A[1] = 21 A[2] = 3 A[3] = 42 A[4] = 3 A[5] = 7 the function should return 0, because A[0] − A[5] = A[2] − A[4] = 0 and it is the smallest possible distance between two distinct elements of the array.

Write an efficient algorithm for the following assumptions: N is an integer within the range [2..100,000]; each element of array A is an integer within the range [0..1,000,000].

Answer:


public class MyClass {


    public static void main(String args[]) {
        int[] A = {9,3,5,7,8};
        Arrays.sort(A);
        return A[1]-A[0];
    }
}


Link: N/A

Question 3
A six-sided die is a small cube with a different number of pips on each face (side), ranging from 1 to 6. On any two opposite sides of the cube, the number of pips adds up to 7; that is, there are three pairs of opposite sides: 1 and 6, 2 and 5, and 3 and 4. There are N dice lying on a table, each showing the pips on its top face. In one move, you can take one die and rotate it to an adjacent face.

For example, you can rotate a die that shows 1 so that it shows 2, 3, 4 or 5. However, it cannot show 6 in a single move, because the faces with one pip and six pips visible are on opposite sides rather than adjacent. You want to show the same number of pips on the top faces of all N dice. Given that each of the dice can be moved multiple times, count the minimum number of moves needed to get equal faces.

Write a function:

class Solution {
public int solution(int[] A);
}

that, given an array A consisting of N integers describing the number of pips (from 1 to 6) shown on each die's top face, returns the minimum number of moves necessary for each die to show the same number of pips.

For example, given: A = [1, 2, 3], the function should return 2, as you can pick the first two dice and rotate each of them in one move so that they all show three pips on the top face.

Notice that you can also pick any other pair of dice in this case. A = [1, 1, 6], the function should also return 2.

The only optimal answer is to rotate the last die so that it shows one pip. It is necessary to use two rotations to achieve this. A = [1, 6, 2, 3], the function should return 3.

For instance, you can make all dice show 2: just rotate each die which is not showing 2 (and notice that for each die you can do this in one move).

Assume that: N is an integer within the range [1..100]; each element of array A is an integer within the range [1..6]. In your solution, focus on correctness. The performance of your solution will not be the focus of the assessment.


Answer:

public class MyClass {


    public static void main(String args[]) {
        int[] A = {1,3,5};
        return A.length - 1;
    }
}

Link: N/A

Java : Collection Sort Test

Question
This is a demo task.
Write a function:
class Solution { public int solution(int[] A); }
that, given an array A of N integers, returns the smallest positive integer (greater than 0) that does not occur in A.
For example, given A = [1, 3, 6, 4, 1, 2], the function should return 5.
Given A = [1, 2, 3], the function should return 4.
Given A = [−1, −3], the function should return 1.
Write an efficient algorithm for the following assumptions:
  • N is an integer within the range [1..100,000];
  • each element of array A is an integer within the range [−1,000,000..1,000,000].
Copyright 2009–2018 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

Solution

    public static int solution(int[] A) {
        // write your code in Java SE 8
        Arrays.sort(A);
        int currentInt = 1;

        for (int a : A){
            if(a < currentInt){
                //do Nothing
            } else if(a == currentInt){
                currentInt++;
            } else if(a > currentInt){
                return currentInt;
            }
        }
        
        return currentInt;
    }

Monday, October 15, 2018

Python : Membuat segitiga dengan menggunakan string

Bagaimana cara membuat Segitiga terbalik dengan Python dengan String?

Soal:

informatika nformatika formatika ormatika rmatika matika atika tika ika ka a  

Jawaban:

str='informatika' my_lis=list(str) for i in xrange(len(my_lis)): print str[i:]

Result:



Link: http://tpcg.io/NtpVRn

2. Bagaimana cara membuat Segitiga dengan Python dengan String?

Soal:

a
ka
ika
tika
atika
matika
rmatika
ormatika
formatika
nformatika
informatika

Jawaban:

str='informatika' my_lis=list(str) for i in xrange(len(my_lis)): print str[-i-1:]

Result:



Link: http://tpcg.io/ecDNXK