| Question # | Programming Language | Question/Task | Answer |
|---|---|---|---|
| #1 | Java | Force the User to Enter a number into Stdin. If the user fails to provide a numeric String that can be parsed to an integer make him stuck in an infinite loop until he provides such a String. |
A static java function that answers the question.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
/// Force the User to enter a number. If he fails every time to provide a numeric string he will be stuck in an infinite loop.
public static int force_user_integer_input_stdin(String request) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
while (true) {
try {
System.out.print(request+": ");
String age = bf.readLine();
Integer parsedage = Integer.parseInt(age);
return parsedage;
} catch (NumberFormatException e) {
System.out.println("you HAVE TO enter a number.");
}
}
}
public static void main(String[] args) throws IOException {
int age = Main.force_user_integer_input_stdin("Please enter a number");
System.out.println("yo entered: " + age);
}
}
python program ...
parsed_integer: int
while True:
userinput: str = input("please enter a number!")
try:
parsed_integer = int(userinput)
break
except:
print(f"an Error was thrown, while parsing your input. please try again.")
print(f"{parsed_integer = }")
|
| #2 | Java/Python | Render a Black and White Checkerboard Pattern onto an Image. Dont load that image from the Hard Drive, do the calculations to generate it in working memory! Display that image inside a GUI Window to the end user. |
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Image;
public class Main {
public static BufferedImage checkerboard_pattern(int width, int height, int pixel_size) {
var img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
for (int x = 0; x < img.getWidth(); x++) {
for (int y = 0; y < img.getHeight(); y++) {
if (((x / pixel_size + y / pixel_size) % 2) == 0) {
img.setRGB(x, y, 0xffffffff);
} else {
img.setRGB(x, y, 0xff000000);
}
}
}
return img;
}
public static void show_image(Image image) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JLabel(new ImageIcon(image)));
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
// pixel size is 10 in this case. If pixel size is set to 1 you get some weird
// interference pattern ... at least on my screen.
Main.show_image(Main.checkerboard_pattern(500, 500, 10));
}
}
Java solution using awt (abstract window toolkit, a java GUI library):Python solution using tkinter and PIL ImageTk, Image
from tkinter import Tk, Label
from PIL import ImageTk, Image
root = Tk()
im = Image.new("RGB", (100, 100), color=(0, 0, 0))
for y in range(im.size[1]):
for x in range(im.size[0]):
sum = (x//10 + y//10) % 2
if sum == 1:
im.putpixel((x, y), (255, 255, 255))
display = ImageTk.PhotoImage(im)
imagelabel = Label(root)
#self.__imagelabel.config(image = pilimg)
imagelabel.config(image=display)
imagelabel.image = display
imagelabel.pack()
root.mainloop()
|
| #3 | Java | Implement the rule 110 cellular automaton, render its result to an Image and display it inside a GUI Window to the end user. |
Java solution using awt:
import java.awt.image.BufferedImage;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Main {
public static BufferedImage white_top_right(int width, int height) {
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
for (int y = 0; y < img.getHeight(); y++) {
for (int x = 0; x < img.getWidth(); x++) {
img.setRGB(x, y, 0xff000000); // set it black.
}
}
img.setRGB(img.getWidth() - 1, 0, 0xffffffff); // set top right pixel white.
return img;
}
public static void elementary_cellular_automaton(int rule, BufferedImage img, boolean wall) {
assert rule <= 255;
rule &= 0xff;
int wall_int = wall ? 1 : 0;
for (int y = 1; y < img.getHeight(); y++) {
for (int x = 0; x < img.getWidth(); x++) {
int row_above = y - 1;
int current_pattern = 0;
for (int z = -1; z < 2; z++) {
int shifted_x = x + z;
int block_above = wall_int;
if (shifted_x >= 0 && shifted_x < img.getWidth()) {
block_above = img.getRGB(shifted_x, row_above);
if (block_above == 0xffffffff) {
int shiftindex = 1 - z;
current_pattern |= 1 << shiftindex;
}
}
}
if ((rule & (1 << current_pattern)) != 0) {
img.setRGB(x, y, 0xffffffff);
}
}
}
}
public static void show_image(Image img) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JLabel(new ImageIcon(img)));
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
var rule110 = Main.white_top_right(500, 500);
Main.elementary_cellular_automaton(110, rule110, false);
var scaled = rule110.getScaledInstance(1000, 1000, BufferedImage.SCALE_FAST);
Main.show_image(scaled);
}
}
|
| #4 | Java |
Step 1: What is the output of the following Code inside the Vector.java file?
public class Vector {
int x, y;
public float lenght() {
return (float) Math.sqrt((double) (x * x + y * y));
}
public Vector(int x, int y) {
this.x = x;
this.y = y;
}
public static void main(String[] args) throws InterruptedException {
Vector a = new Vector(1, 1);
Vector b = new Vector(1, 1);
System.out.println("(a == b): " + (a == b));
System.out.println("a.equals(b): " + (a.equals(b)));
Class<?> aclass = a.getClass();
Class<?> bclass = b.getClass();
System.out.println("aclass.equals(bclass): " + aclass.equals(bclass));
try{
Thread.sleep(5000);
}catch(InterruptedException ie){
System.err.println(ie);
}
}
}
Step 2:Modify the equals function accordingly. |
Step 1: Console Output:
(a == b): false
a.equals(b): false
aclass.equals(bclass): true
Add the following method to the Vector class Body:
@Override
public boolean equals(Object other){
if(other == null){
return false;
}
if (other.getClass() != this.getClass()){
return false;
}
final Vector other_vec = (Vector) other;
return other_vec.x == this.x && this.y == other_vec.y;
}
Note the == still compares Memory adresses, so the output of the Code in this Question after the
change above is:
(a == b): false
a.equals(b): true
aclass.equals(bclass): true
Step 2: Modification. |
| #5 | Java | Write a program that prints out the first 45 Fibbonacci numbers. |
Java solution:
public class Main {
//generate Fibbonacci numbers
public static void main(String[] args) {
int first = 1;
int second = 2;
for (int i=1; i<46; i++){
System.out.println("the "+ i+". Fibbonacci Number is: "+ first);
int next = first + second;
first = second;
second = next;
}
}
}
You see the largest Fibbonacci number that can be represented by a Java int (32 bit signed integer
type) is the 45. Fibbonacci number: 1836311903.
|
| #6 | Java | UI: Create a 10x10 grid out of 100 Buttons and print the coordinates inside the grid to the console, if the respective Button is pressed. |
Java awt solution.
import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.Point;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.util.HashMap;
public class ButtonGrid implements ActionListener{
static final int WIDTH = 10;
static final int HEIGHT = 10;
JFrame thisframe;
HashMap<Point, JButton> buttonmap;
{
buttonmap = new HashMap<>();
for(int y=0; y<HEIGHT; y++){
for(int x=0; x<WIDTH; x++){
String xfromat = String.format("%02d", x);
String yfromat = String.format("%02d", y);
String coordinate_format = "("+xfromat+","+yfromat+")";
JButton btn = new JButton(coordinate_format);
buttonmap.put(new Point(x,y), btn);
btn.addActionListener(this);
}
}
}
{
thisframe = new JFrame();
thisframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
{
thisframe.getContentPane().setLayout(new GridBagLayout());
for (var entry: buttonmap.entrySet()){
Point position = entry.getKey();
JButton btn = entry.getValue();
GridBagConstraints cons = new GridBagConstraints();
cons.gridx = position.y;
cons.gridy = position.x;
thisframe.getContentPane().add(btn, cons);
}
thisframe.pack();
}
{
//adding a test button for layout constraints...
GridBagConstraints cons = new GridBagConstraints();
cons.gridx = 0;
cons.gridy = HEIGHT;
cons.fill = GridBagConstraints.HORIZONTAL;
cons.gridwidth = WIDTH;
JButton btn = new JButton("GridBagConstraints.HORIZONTAL");
thisframe.getContentPane().add(btn, cons);
}
public ButtonGrid(){
this.thisframe.setVisible(true);
}
public static void main(String[] args) {
new ButtonGrid();
}
@Override
public void actionPerformed(ActionEvent e) {
for(var entry: this.buttonmap.entrySet()){
if (e.getSource() == entry.getValue()){
System.out.println(entry.getKey().toString() + "was pressed");
}
}
}
}
python tkinter solution.
from tkinter import Tk, Button
WIDTH = 10
HEIGHT = 10
root = Tk()
for y in range(HEIGHT):
for x in range(WIDTH):
def generate_print_function(x: int, y: int):
def the_print_function():
print(f"Button {x=} {y=} pressed")
return the_print_function
btn = Button(root, text=f"{x = } {y = }",
command=generate_print_function(x, y))
btn.grid(row=y, column=x)
root.mainloop()
|
#7 | Java |
What is the output of the following Java code?
public class ExceptionsQuestion1 implements AutoCloseable{
public void whatHappensNext() throws Exception{
//throw new IllegalArgumentException();
try(ExceptionsQuestion1 is = new ExceptionsQuestion1()){
System.out.print("O");
}finally{
System.out.print("K");
}
}
public String name;
public static void main(String[] args) throws Exception {
ExceptionsQuestion1 e1 = new ExceptionsQuestion1();
e1.whatHappensNext();
System.out.println("I");
System.out.println(e1.name);
}
//executes before finally block.
@Override
public void close() throws Exception {
System.out.print("L");
}
}
|
Java answer.OLKInull The close() method is called before the programmer defined finally block of AutoCloseable. Since the implemented close() function throws an Exception this Eception has to be passed down to the main function. |
| #8 | python |
How to extract all the paths to .txt files with a python glob expression? When you have the following directory structure:
╰─ tree
.
├── a
│ └── b
│ └── c
│ ├── random1_file.txt
│ └── random2_file.png
└── d
└── e
└── f
└── random3_file.txt
|
Python solution using glob expressions:python interactive mode in "."
>>> import glob
>>> glob.glob("**/*.txt", recursive=True)
['d/e/f/random3_file.txt', 'a/b/c/randomtxt', 'a/b/c/random2_file.txt']
|
| #9 | Java |
Which of the following functions compiles?A)
public static int methodA(int g){
if (g>5){
return 2*g;
}else{
return null;
}
}
B)
public static int[] methodB(int g) {
if (g>5){
return new int[]{g*2};
}else{
return null;
}
}
C)
public static Integer methodC(int g){
if (g > 5){
return 2*g;
}
return null;
}
|
A), B), C)?The Options B) and C) compile. Option A) throws the following Compilation error:
Type mismatch: cannot convert from null to int Java(16777235)
Personally I was kind of confused by that: int can not be converted from null but int[] can ... I
prefer Kotlin null safety to eliminate a whole class of Exceptions/panics, and less
knowledge/thinking about edge cases is required.
|
| #10 | (python) |
What is the oldest known non trivial algorithm known to humans? Code it in python!The Euclidean algorithm. It finds the greatest common divider between 2 numbers. For example: The greatest common devider between 1071 and 462 is 21. |
Python Code.
def euclid(a: int, b: int)->int:
a, b = min(a,b), max(a, b)
while True:
c = a%b
if c == 0:
return b
a = b
b = c
print(f"{euclid(1071, 462) = }")
.... It prints our answer 21!
|
| #11 | (python) | Write a function that expects an integer and returns a boolean. It returns True if the given integer is prime, False otherwise. Find the brute force solution first. Is there a more efficient method? |
the solution to this problem is quite interesting and presented in the following notebook! Python code Simple brute force Solution
def is_prime_bad(x: int)->bool:
for i in range(2, x):
if x%i == 0:
return False
return True
Advanced solution:
from math import sqrt
def is_prime(x: int)->bool:
for i in range(2, int(sqrt(x))+1):
if x%i == 0:
return False
return True
|