Datastructuren en algoritmen voor CKI

Vergelijkbare documenten
Datastructuren en Algoritmen

Datastructuren en algoritmen voor CKI

Het Eindfeest. Algoritmiek Opgave 6, Voorjaar

DomJudge-Practicum. Open Dag UU

Vierde college complexiteit. 14 februari Beslissingsbomen

Derde college complexiteit. 7 februari Zoeken

Algoritmiek. 2 februari Introductie

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40

Datastructuren en algoritmen voor CKI

Inleiding Programmeren 2

Studiewijzer. Bachelor Informatica. Inleiding Programmeren Studiejaar en semester: jaar 1, semester 1 (blok 1)

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/

Programmeermethoden NA. Week 6: Lijsten

Zevende college complexiteit. 7 maart Mergesort, Ondergrens sorteren (Quicksort)

Programmeermethoden NA

Divide & Conquer: Verdeel en Heers vervolg. Algoritmiek

Vierde college complexiteit. 26 februari Beslissingsbomen en selectie Toernooimethode Adversary argument

Algoritmiek 2016 / Algoritmiek 1

Inleiding Programmeren 2

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

Datastructuren. Analyse van algoritmen. José Lagerberg. FNWI, UvA. José Lagerberg (FNWI, UvA) Datastructuren 1 / 46

Zevende college complexiteit. 17 maart Ondergrens sorteren, Quicksort

Vijfde college complexiteit. 21 februari Selectie Toernooimethode Adversary argument

Modulewijzer Tirdat01

Tiende college algoritmiek. 13/21 april Gretige Algoritmen Algoritme van Dijkstra

Modelleren en Programmeren

Eerste Toets Datastructuren 22 mei 2019, , Educ-β en Megaron.

Zesde college complexiteit. 19 maart Mergesort, Ondergrens sorteren Quicksort, Shellsort

Stacks and queues. Hoofdstuk 6

Zevende college algoritmiek. 24 maart Verdeel en Heers

Oefententamen 2. Tijd: 2 uur. Maximaal aantal punten: 30. Naam: Studentnummer:

Practicumopgave 3: SAT-solver

Een spoedcursus python

Achtste college algoritmiek. 8 april Dynamisch Programmeren

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Modelleren en Programmeren

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 )

Tentamen Programmeren in C (EE1400)


Datastructuren en Algoritmen voor CKI

BSc Kunstmatige Intelligentie. : Bachelor Kunstmatige Intelligentie Studiejaar, Semester, Periode : semester 1, periode 2

Een eenvoudig algoritme om permutaties te genereren

Tiende college algoritmiek. 26 april Gretige algoritmen

Probleem met dobbelspel. 2IP05: Programmeren Blok A. 5 spelers,2 dobbelstenen. wstomv/edu/2ip05/ Per ronde werpt elke speler 1

ALGORITMIEK. Keuzemodule Wiskunde B/D. Mark de Berg TU Eindhoven

Opgaven QuickSort 3 mei 2019, Werkgroep, Datastructuren.

Zelftest Inleiding Programmeren

Tentamen Programmeren in C (EE1400)

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

Datastructuren: stapels, rijen en binaire bomen

Studiewijzer BACHELOR KUNSTMATIGE INTELLIGENTIE EXTRA KEUZENVAK VAK: C++ PROGRAMMEERMETHODEN

Modelleren en Programmeren

Optimalisering en Complexiteit, College 1. Han Hoogeveen, Utrecht University

Tiende college algoritmiek. 2 mei Gretige algoritmen, Dijkstra

Planning. 1. Mini College. 2. Introductiecursus Imperatief Programmeren. 3. Crash and Compile (vanaf 17:00 uur)

Fundamentele. Informatica 1. Eerste college: introductie

Zoek- en sorteeralgoritmen en hashing

Uitgebreide uitwerking Tentamen Complexiteit, juni 2017

Optimalisering en Complexiteit, College 1. Han Hoogeveen, Utrecht University

(On)Doenlijke problemen

Eerste Toets Datastructuren 11 juli 2018, , Educ-α.

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Inleiding programmeren

Opgaven Binair Zoeken en Invarianten Datastructuren, 4 mei 2016, Werkgroep.

Fundamentele. Informatica 1. Eerste college: -introductie -verzamelingen I

Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei Parallel Systems: Introduction

Practicumhandleiding. (versie 2010)

Discrete Wiskunde, College 12. Han Hoogeveen, Utrecht University

Opmerkingen en vragen aan Ultieme vraag: Hoe beïnvloedt dit de winstkansen?

Opgaven Abstracte Datastructuren Datastructuren, Werkgroep, 31 mei 2017.

Modelleren en Programmeren

10 Meer over functies

Tweede college algoritmiek. 12 februari Grafen en bomen

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

Transcriptie:

Datastructuren en algoritmen voor CKI Jeroen Bransen 1 2 september 2015 1 met dank aan Hans Bodlaender en Gerard Tel

Organisatie

Website Vakwebsite: http://www.cs.uu.nl/docs/vakken/ki2v12009/ Bevat alle slides, opgaven, planning, nieuws, etc. Blackboard: belangrijke aankondigingen (via e-mail), cijfers

Docent Jeroen Bransen

Docent Jeroen Bransen Datastructuren, algoritmen, programmeertalen

Docent Jeroen Bransen Datastructuren, algoritmen, programmeertalen Softwaretechnologie, attributengrammatica s, compilers, functioneel programmeren

Assistenten Geertièn de Vries Jordi Vermeulen

Hoorcollege Woensdag 13.15-15.00 in Ruppert 134 (Science Park) Vrijdag 9.00-10.45 in Drift 25 002 (Binnenstad)

Hoorcollege Woensdag 13.15-15.00 in Ruppert 134 (Science Park) Vrijdag 9.00-10.45 in Drift 25 002 (Binnenstad) Slides komen online, maar college geeft veel meer informatie dan alleen de slides!

Boek Introduction to Algorithms, Third Edition. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. The MIT Press / McGrawHill Book Company, 2009.

Werkcollege Woensdag 15.15-17.00 in Ruppert 134 (Groep 1) Woensdag 17.15-19.00 in Ruppert 134 (Groep 2?) Uitzondering: Woensdag 7 oktober 2015: DDW 1.05 Opgaven maken op papier Zeer goede tentamenvoorbereiding 4 inleveropgaven, mag alleen of in tweetallen (beoordeling G, V of O)

Practicum Vrijdag 11.00-12.45 in KNG80 102 (Groep 1) Vrijdag 13.15-15.00 in KNG80 102 (Groep 2) Programmeeropdrachten zijn individueel Inleveren via DOMjudge (later daarover meer) 7,5 wanneer correct, 2,5 punt voor stijl We gebruiken Java, maar C mag ook

Inspanningsverplichting Minstens 2 van de 4 inleveropgaven voldoende Voor herkansing: Minstens een 4 voor het practicum Minstens een 4 voor het tentamen

Cijferregeling p = (p1 + p2 + p3 + p4 + p5) / 5 bonus = if aantal(g, {h1,h2,h3,h4}) == 4 then 0.5 else if aantal(g, {h1,h2,h3,h4}) == 3 then 0.25 else 0 tt = t + bonus eindcijfer = if p >= 5.5 && tt >= 5.5 then p * 0.6 + tt * 0.4 else minimum(p, tt)

Fraude / plagiaat Wetenschappelijke misleiding, bijvoorbeeld door inleveren van andermans werk op eigen naam

Fraude / plagiaat Wetenschappelijke misleiding, bijvoorbeeld door inleveren van andermans werk op eigen naam Bij vermoeden van fraude of plagiaat eerst gesprek

Fraude / plagiaat Wetenschappelijke misleiding, bijvoorbeeld door inleveren van andermans werk op eigen naam Bij vermoeden van fraude of plagiaat eerst gesprek Wanneer gesprek het vermoeden niet wegneemt: melding aan examencommissie

Fraude / plagiaat Wetenschappelijke misleiding, bijvoorbeeld door inleveren van andermans werk op eigen naam Bij vermoeden van fraude of plagiaat eerst gesprek Wanneer gesprek het vermoeden niet wegneemt: melding aan examencommissie Als examencommissie beslist dat het om fraude of plagiaat gaat:

Fraude / plagiaat Wetenschappelijke misleiding, bijvoorbeeld door inleveren van andermans werk op eigen naam Bij vermoeden van fraude of plagiaat eerst gesprek Wanneer gesprek het vermoeden niet wegneemt: melding aan examencommissie Als examencommissie beslist dat het om fraude of plagiaat gaat: 0 voor de opgave, mogelijk uitsluiting voor het vak

Fraude / plagiaat Wetenschappelijke misleiding, bijvoorbeeld door inleveren van andermans werk op eigen naam Bij vermoeden van fraude of plagiaat eerst gesprek Wanneer gesprek het vermoeden niet wegneemt: melding aan examencommissie Als examencommissie beslist dat het om fraude of plagiaat gaat: 0 voor de opgave, mogelijk uitsluiting voor het vak een berisping

Fraude / plagiaat Wetenschappelijke misleiding, bijvoorbeeld door inleveren van andermans werk op eigen naam Bij vermoeden van fraude of plagiaat eerst gesprek Wanneer gesprek het vermoeden niet wegneemt: melding aan examencommissie Als examencommissie beslist dat het om fraude of plagiaat gaat: 0 voor de opgave, mogelijk uitsluiting voor het vak een berisping bij 2e berisping: jaar schorsing van de UU

Wat mag wel? Overleg zonder code te bekijken: Welke datastructuur zouden we het beste kunnen gebruiken? Ik denk een linked-list! Hmm, ik ga het met een stack proberen. (maar: alles helemaal zelf uitzoeken is leerzamer) (pseudo)code uit boek gebruiken...

Wat mag niet? Code van anderen bekijken Je eigen code aan andere studenten geven/laten zien Code van iemand anders insturen op je eigen account...

Afronding organisatorisch deel Verdere organisatorische vragen?

Algoritmen en datastructuren

Waarom? We zijn ongeduldig

Waarom? We zijn ongeduldig We willen dat onze routeplanner op tijd vertelt dat we af moeten slaan

Waarom? We zijn ongeduldig We willen dat onze routeplanner op tijd vertelt dat we af moeten slaan We verwachten vloeiende beelden bij het afspelen van een video

Waarom? We zijn ongeduldig We willen dat onze routeplanner op tijd vertelt dat we af moeten slaan We verwachten vloeiende beelden bij het afspelen van een video We willen geen dagen/maanden/jaren wachten op het resultaat van een berekening

Waarom? We zijn ongeduldig We willen dat onze routeplanner op tijd vertelt dat we af moeten slaan We verwachten vloeiende beelden bij het afspelen van een video We willen geen dagen/maanden/jaren wachten op het resultaat van een berekening Datastructuren en algoritmen helpen om dingen snel uit te rekenen

Wat? Eerst maar eens Googlen...

Algoritme Methode om iets uit te rekenen (soort van recept) Naam komt van Al-Chwarizmi Schreef in 820 boek over algebra Niet hetzelfde als implementatie

Datastructuur Slimme manier om gegevens op te slaan Helpt om algoritme sneller te maken Datastructuren voor opslaan van verschillende soorten gegevens

Algoritmische vragen Sorteren van rij getallen

Algoritmische vragen Sorteren van rij getallen Oplossen wiskundig vraagstuk

Algoritmische vragen Sorteren van rij getallen Oplossen wiskundig vraagstuk Berekenen van kortste route

Algoritmische vragen Sorteren van rij getallen Oplossen wiskundig vraagstuk Berekenen van kortste route Compileren van een Java-programma

Algoritmische vragen Sorteren van rij getallen Oplossen wiskundig vraagstuk Berekenen van kortste route Compileren van een Java-programma Uitrekenen van ontleedboom voor gegeven grammatica en invoer

Algoritmische vragen Sorteren van rij getallen Oplossen wiskundig vraagstuk Berekenen van kortste route Compileren van een Java-programma Uitrekenen van ontleedboom voor gegeven grammatica en invoer etc.

Analyse van algoritmen Is het correct?

Analyse van algoritmen Is het correct? Hoe lang duurt het

Analyse van algoritmen Is het correct? Hoe lang duurt het Gemeten in stappen

Analyse van algoritmen Is het correct? Hoe lang duurt het Gemeten in stappen Veelgebruikte O-notatie

Analyse van algoritmen Is het correct? Hoe lang duurt het Gemeten in stappen Veelgebruikte O-notatie In het begin wat saai...

Pseudocode Niet echt een programmeertaal, maar lijkt er wel op Onbelangrijke implementatiedetails van programmeertaal zijn verborgen Wel precies genoeg om makkelijk implementatie te maken Imperatieve structuur, maar soms makkelijk naar functionele taal om te zetten

Algoritmisch wedstrijdje Twee vrijwilligers nodig

Zoeken in een rij

Probleem We hebben een rij van n getallen Deze noemen we A 1 tot A n. Vraag: zit getal x in de rij, en zo ja waar? Anders gezegd: is er een i zodat A i = x?

Oplossing 1 zoek-in-rij(x, A) 1 i = 1 2 while i A.length 3 if x == A[i] 4 return i 5 else 6 i = i + 1 7 return 0

Hoe lang duurt het Als het getal er niet in zit n vergelijkingen Slechtste geval: n vergelijkingen Beste geval: 1 vergelijking Gemiddeld: n/2 vergelijkingen Kan beter!

Binair zoeken Aanname: A is gesorteerd Binair zoeken (binary search) zoekt sneller

Idee Bekijk middelste element Als x kleiner is: gooi rechterhelft weg Als x groter is: gooi linkerhelft weg Grootte van de lijst wordt telkens gehalveerd (ongeveer)

Oplossing 2 binair-zoeken(x, A) // Aanname: A oplopend gesorteerd 1 laag = 1 2 hoog = A.length 3 while laag < hoog 4 mid = (laag + hoog)/2 5 if A[mid] < x 6 laag = mid + 1 7 else 8 hoog = mid 9 if A[laag] == x 10 return laag 11 else 12 return 0

Sorteren

Sorteren Invoer: Een rij dingen a 1,..., a n Uitvoer: Een permutatie a 1,..., a n van die rij zodanig dat: a 1 a 2... a n

Insertion sort insertion-sort(a) 1 for j = 2 to A.length 2 key = A[j] 3 / Voeg A[j] aan de gesorteerde rij A[1.. j 1] toe 4 i = j 1 5 while i > 0 and A[i] > key 6 A[i + 1] = A[i] 7 i = i 1 8 A[i + 1] = key

Loop invariant 1. Initialization: Aan het begin waar? 2. Maintenance: Als het klopt aan het begin van een iteratie, is het dan ook waar aan het begin van volgende iteratie? 3. Termination: Als de invariant aan het einde waar is, helpt het ons om correctheid (of andere eigenschap) aan te tonen.

Correctheid insertion-sort(a) 1 for j = 2 to A.length // Invariant: A[1.. j 1] is gesorteerd 2 key = A[j] // en bevat nog dezelfde elementen 3 i = j 1 4 while i > 0 and A[i] > key 5 A[i + 1] = A[i] 6 i = i 1 7 A[i + 1] = key

Correctheid insertion-sort(a) 1 for j = 2 to A.length // Invariant: A[1.. j 1] is gesorteerd 2 key = A[j] // en bevat nog dezelfde elementen 3 i = j 1 4 while i > 0 and A[i] > key 5 A[i + 1] = A[i] 6 i = i 1 7 A[i + 1] = key Initialization: Waar aan het begin want A[1.. 1] is gesorteerd

Correctheid insertion-sort(a) 1 for j = 2 to A.length // Invariant: A[1.. j 1] is gesorteerd 2 key = A[j] // en bevat nog dezelfde elementen 3 i = j 1 4 while i > 0 and A[i] > key 5 A[i + 1] = A[i] 6 i = i 1 7 A[i + 1] = key Maintenance: Als we A[j] toevoegen aan A[1.. j 1] op de goede plek blijft de sortering intact

Correctheid insertion-sort(a) 1 for j = 2 to A.length // Invariant: A[1.. j 1] is gesorteerd 2 key = A[j] // en bevat nog dezelfde elementen 3 i = j 1 4 while i > 0 and A[i] > key 5 A[i + 1] = A[i] 6 i = i 1 7 A[i + 1] = key Termination: De loop stopt wanneer j A.length + 1, dus dan zegt de invariant dat A[1.. A.length] gesorteerd is. Precies wat we wilden!

Tijdsanalyse

Tijdsanalyse Hoe lang duurt het? Berekeningstijd hangt af van vele factoren, aantal stappen niet We tellen basisoperaties als 1 stap Kijken naar orde van grootte van slechtste (of gemiddelde of heel soms beste) geval

Basisoperaties Rekenkundige operaties Variabeletoekenning Velden van een object uit het geheugen ophalen Element uit array lezen Parameters aan functies meegeven...

Analyse Meestal meer stappen bij grotere invoer We drukken berekeningstijd (runtime) uit in termen van invoergrootte Bijvoorbeeld: sorteren heeft als invoer een lijst van lengte n Maar: twee lijsten van lengte n kunnen nog heel verschillend zijn

Optimisten en pessimisten Slechtste geval Pessimisten Meest gebruikelijk Hoeveel stappen doet het algoritme maximaal bij invoer van grootte n?

Optimisten en pessimisten Slechtste geval Pessimisten Meest gebruikelijk Hoeveel stappen doet het algoritme maximaal bij invoer van grootte n? Gemiddeld geval Lastig uit te rekenen: hoe vaak komt elke invoer voor? Kansrekening nodig Soms gebruikt

Optimisten en pessimisten Slechtste geval Pessimisten Meest gebruikelijk Hoeveel stappen doet het algoritme maximaal bij invoer van grootte n? Gemiddeld geval Lastig uit te rekenen: hoe vaak komt elke invoer voor? Kansrekening nodig Soms gebruikt Beste geval Optimisten Niet zo interessant

Aantal stappen Tel aantal basisoperaties In een loop: vermenigvuldig met aantal loopiteraties Werk bij loops van binnen naar buiten Bij recursie: recurrente betrekkingen oplossen (later)

Slechtste geval zoek-in-rij zoek-in-rij(x, A) 1 i = 1 2 while i A.length 3 if x == A[i] 4 return i 5 else 6 i = i + 1 7 return 0

Slechtste geval zoek-in-rij zoek-in-rij(x, A) 1 i = 1 // A met lengte n 2 while i A.length 3 if x == A[i] 4 return i 5 else 6 i = i + 1 7 return 0

Slechtste geval zoek-in-rij zoek-in-rij(x, A) 1 i = 1 // A met lengte n 2 while i A.length // n keer 3 if x == A[i] 4 return i 5 else 6 i = i + 1 7 return 0

Slechtste geval zoek-in-rij zoek-in-rij(x, A) 1 i = 1 // A met lengte n 2 while i A.length // n keer 3 if x == A[i] // 6 stappen in loop 4 return i 5 else 6 i = i + 1 7 return 0

Slechtste geval zoek-in-rij zoek-in-rij(x, A) 1 i = 1 // A met lengte n 2 while i A.length // n keer 3 if x == A[i] // 6 stappen in loop 4 return i 5 else 6 i = i + 1 7 return 0 // 2 operaties buiten de loop

Slechtste geval zoek-in-rij zoek-in-rij(x, A) 1 i = 1 // A met lengte n 2 while i A.length // n keer 3 if x == A[i] // 6 stappen in loop 4 return i 5 else 6 i = i + 1 7 return 0 // 2 operaties buiten de loop Totaal: 6n + 2 stappen, is O(n)

Slechtste geval insertion sort insertion-sort(a) 1 for j = 2 to A.length 2 key = A[j] 3 i = j 1 4 while i > 0 and A[i] > key 5 A[i + 1] = A[i] 6 i = i 1 7 A[i + 1] = key

Slechtste geval insertion sort insertion-sort(a) 1 for j = 2 to A.length // j is 2.. n 2 key = A[j] 3 i = j 1 4 while i > 0 and A[i] > key 5 A[i + 1] = A[i] 6 i = i 1 7 A[i + 1] = key

Slechtste geval insertion sort insertion-sort(a) 1 for j = 2 to A.length // j is 2.. n 2 key = A[j] 3 i = j 1 4 while i > 0 and A[i] > key // j keer 5 A[i + 1] = A[i] 6 i = i 1 7 A[i + 1] = key

Slechtste geval insertion sort insertion-sort(a) 1 for j = 2 to A.length // j is 2.. n 2 key = A[j] 3 i = j 1 4 while i > 0 and A[i] > key // j keer 5 A[i + 1] = A[i] // 8 stappen in loop 6 i = i 1 7 A[i + 1] = key

Slechtste geval insertion sort insertion-sort(a) 1 for j = 2 to A.length // j is 2.. n 2 key = A[j] 3 i = j 1 4 while i > 0 and A[i] > key // j keer 5 A[i + 1] = A[i] // 8 stappen in loop 6 i = i 1 7 A[i + 1] = key // 6 stappen buiten while

Slechtste geval insertion sort insertion-sort(a) 1 for j = 2 to A.length // j is 2.. n 2 key = A[j] 3 i = j 1 4 while i > 0 and A[i] > key // j keer 5 A[i + 1] = A[i] // 8 stappen in loop 6 i = i 1 7 A[i + 1] = key // 6 stappen buiten while Totaal: n 8j + 6 = 4n 2 + 10n 14 = O(n 2 ) j=2

DOMjudge

DOMjudge DOMjudge test automatisch of een ingestuurd programma correct compileert de juiste uitvoer geeft snel genoeg is

Gebruik van DOMjudge insturen kan tot de deadline zo vaak je wilt (nou ja, binnen het redelijke) laatste inzending telt DOMjudge test werking, wij kijken code na op netheid/leesbaarheid

Mogelijke antwoorden correct: de code werkt correct! (maar: correcte code is niet altijd goede code)

Mogelijke antwoorden correct: de code werkt correct! (maar: correcte code is niet altijd goede code) compiler-error: de code compileert niet. De compileruitvoer is te bekijken.

Mogelijke antwoorden correct: de code werkt correct! (maar: correcte code is niet altijd goede code) compiler-error: de code compileert niet. De compileruitvoer is te bekijken. wrong-answer: de code gaf de verkeerde uitvoer, maar DOMjudge vertelt niet wat (hint: denk goed na over randgevallen)

Mogelijke antwoorden correct: de code werkt correct! (maar: correcte code is niet altijd goede code) compiler-error: de code compileert niet. De compileruitvoer is te bekijken. wrong-answer: de code gaf de verkeerde uitvoer, maar DOMjudge vertelt niet wat (hint: denk goed na over randgevallen) run-error: het programma is gecrasht (hint: misschien een IndexOutOfBoundsError?)

Mogelijke antwoorden correct: de code werkt correct! (maar: correcte code is niet altijd goede code) compiler-error: de code compileert niet. De compileruitvoer is te bekijken. wrong-answer: de code gaf de verkeerde uitvoer, maar DOMjudge vertelt niet wat (hint: denk goed na over randgevallen) run-error: het programma is gecrasht (hint: misschien een IndexOutOfBoundsError?) timelimit: het programma deed er te lang over (hint: meestal veel te lang, denk over complexiteit)

Cijferregeling practicum Als DOMjudge zegt correct: 7,5 punt Stijl/netheid: nog maximaal 2,5 punt erbij Niet correct in DOMjudge is dus 0 punten Niet voldaan aan eisen van opgave is ook 0 punten!

In- en uitvoer DOMjudge geeft het programma invoer (zoals beschreven in de opgave) het programma produceert de uitvoer horend bij die invoer DOMjudge controleert of de uitvoer is zoals verwacht

Voorbeeld De eerste regel van de invoer bevat een getal n. Daarna volgen n regels met op elke regel een getal x. Print voor elke x een regel uitvoer met 0 als x 0, of anders x 1. Invoer: 3 7 0 42 Uitvoer: 6 0 41