<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Courses Q&amp;A - Recent questions and answers in pl1</title>
<link>https://courses.softlab.ntua.gr/q2a/qa/pl1</link>
<description>Powered by Question2Answer</description>
<item>
<title>Πρόβλημα με το τελευταίο testcase στη Round (Java)</title>
<link>https://courses.softlab.ntua.gr/q2a/812/%CF%80%CF%81%CF%8C%CE%B2%CE%BB%CE%B7%CE%BC%CE%B1-%CE%BC%CE%B5-%CF%84%CE%BF-%CF%84%CE%B5%CE%BB%CE%B5%CF%85%CF%84%CE%B1%CE%AF%CE%BF-testcase-%CF%83%CF%84%CE%B7-round-java</link>
<description>&lt;p&gt;Καλησπέρα, θα ήθελα να ρωτήσω εάν υπάρχει κάποιο θέμα με το τελευταίο testcase στον grader στην άσκηση Round σε java, καθώς δεν περνάει ακόμα και με Elapsed Time: ~ 0 secs.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/812/%CF%80%CF%81%CF%8C%CE%B2%CE%BB%CE%B7%CE%BC%CE%B1-%CE%BC%CE%B5-%CF%84%CE%BF-%CF%84%CE%B5%CE%BB%CE%B5%CF%85%CF%84%CE%B1%CE%AF%CE%BF-testcase-%CF%83%CF%84%CE%B7-round-java</guid>
<pubDate>Mon, 26 Jul 2021 15:06:56 +0000</pubDate>
</item>
<item>
<title>Ο grader μου βγάζει περίεργα errors στην QSsort.java</title>
<link>https://courses.softlab.ntua.gr/q2a/810/%CE%BF-grader-%CE%BC%CE%BF%CF%85-%CE%B2%CE%B3%CE%AC%CE%B6%CE%B5%CE%B9-%CF%80%CE%B5%CF%81%CE%AF%CE%B5%CF%81%CE%B3%CE%B1-errors-%CF%83%CF%84%CE%B7%CE%BD-qssort-java</link>
<description>&lt;p&gt;Έχω ανεβάσει σε &lt;strong&gt;.zip&lt;/strong&gt; την άσκηση &lt;strong&gt;QSsort&lt;/strong&gt; σε &lt;strong&gt;java&lt;/strong&gt; η οποία περιέχει προφανώς την QSsort.java, την ZQueue.java, ZMethods.java κλπ (όλα όμως εκτός της QSsort αρχίζουν από Z ώστε να είναι λεξικογραφικά μεγαλύτερα)&lt;br&gt;
Ο grader όμως  μου δείχνει ότι &lt;strong&gt;δεν περνάει κανένα test case&lt;/strong&gt; αφού βγάζει τα εξής &lt;strong&gt;errors&lt;/strong&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Σε μερικά test cases βγάζει &quot;  &lt;strong&gt;Program exceeded time limit (ran for 2 seconds)&lt;/strong&gt; &quot; ενώ φαίνεται &quot; &lt;strong&gt;Elapsed Time: ~ 0 secs&lt;/strong&gt; &quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Στα άλλα test cases μου βγάζει &lt;br&gt;
&quot; &lt;strong&gt;File: AbstractGrader.cpp line: 92 ==&amp;gt; Program failed :&lt;br&gt;
  Exception : java.lang.ClassNotFoundException: QSsort&lt;/strong&gt; &quot; &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Είναι δικό μου λάθος ή είναι λάθος του grader?&lt;br&gt;
Aν ειναι δικο μου πως θα μπορούσα να το λύσω?&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/810/%CE%BF-grader-%CE%BC%CE%BF%CF%85-%CE%B2%CE%B3%CE%AC%CE%B6%CE%B5%CE%B9-%CF%80%CE%B5%CF%81%CE%AF%CE%B5%CF%81%CE%B3%CE%B1-errors-%CF%83%CF%84%CE%B7%CE%BD-qssort-java</guid>
<pubDate>Thu, 15 Jul 2021 11:41:52 +0000</pubDate>
</item>
<item>
<title>Αλγόριθμος της round</title>
<link>https://courses.softlab.ntua.gr/q2a/807/%CE%B1%CE%BB%CE%B3%CF%8C%CF%81%CE%B9%CE%B8%CE%BC%CE%BF%CF%82-%CF%84%CE%B7%CF%82-round</link>
<description>&lt;p&gt;Στην άσκηση round, η λύση που για κάθε πιθανή πόλη-προορισμό dest,&lt;br&gt;
παίρνει τις αποστάσεις των οχημάτων, source_i:&lt;br&gt;
dest - source_i, αν dest &amp;gt;= source_i, και&lt;br&gt;
N + dest - source_i, αν dest &amp;lt; source_i,&lt;br&gt;
και ελέγχει βάσει των αποστάσεων αυτών, αν υπάρχει 'νόμιμη' ακολουθία&lt;br&gt;
κινήσεων, φαίνεται πως περνάει όλα τα φανερά test cases στον grader.&lt;br&gt;
Ωστόσο, η λύση αυτή περιορίζει τα οχήματα να παίρνουν πάντα την&lt;br&gt;
συντομότερη δεξιότροφη διαδρομή (μήκους &amp;lt;= N - 1) και δεν τα αφήνει&lt;br&gt;
να εκτελούν κύκλους.&lt;br&gt;
Δεν έχω βρει κάποιο λόγο η λύση του προβλήματος να βρίσκεται πάντα&lt;br&gt;
εντός των περιορισμών αυτών και να μην έχουμε 'νόμιμη' ακολουθία&lt;br&gt;
ελαχίστου μήκους αφού επιτρέψουμε σε κάποια οχήματα να κάνουν κύκλους.&lt;br&gt;
Είναι κάτι που ισχύει πάντα αυτό ή τα test cases αφορούν μόνο αυτήν την&lt;br&gt;
περίπτωση για κάποιο λογο;&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/807/%CE%B1%CE%BB%CE%B3%CF%8C%CF%81%CE%B9%CE%B8%CE%BC%CE%BF%CF%82-%CF%84%CE%B7%CF%82-round</guid>
<pubDate>Fri, 09 Jul 2021 19:24:33 +0000</pubDate>
</item>
<item>
<title>Χρονικά όρια στο round για την Prolog</title>
<link>https://courses.softlab.ntua.gr/q2a/802/%CF%87%CF%81%CE%BF%CE%BD%CE%B9%CE%BA%CE%AC-%CF%8C%CF%81%CE%B9%CE%B1-%CF%83%CF%84%CE%BF-round-%CE%B3%CE%B9%CE%B1-%CF%84%CE%B7%CE%BD-prolog</link>
<description>&lt;p&gt;Χαίρετε, &lt;/p&gt;
&lt;p&gt;Παρατηρώ ότι σε όλα τα test cases για το &lt;strong&gt;round&lt;/strong&gt; σε Prolog έχει δοθεί ο ίδιος χρόνος 10 sec, αλλά στο προτελευταίο η είσοδος είναι της τάξης των ~100 στοιχείων και στο τελευταίο είναι της τάξης των ~10000 στοιχείων. Είναι σκόπιμο αυτό, ή θα αλλάξουν τα χρονικά όρια; Ευχαριστώ.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/802/%CF%87%CF%81%CE%BF%CE%BD%CE%B9%CE%BA%CE%AC-%CF%8C%CF%81%CE%B9%CE%B1-%CF%83%CF%84%CE%BF-round-%CE%B3%CE%B9%CE%B1-%CF%84%CE%B7%CE%BD-prolog</guid>
<pubDate>Mon, 05 Jul 2021 12:05:39 +0000</pubDate>
</item>
<item>
<title>Παράταση</title>
<link>https://courses.softlab.ntua.gr/q2a/801/%CF%80%CE%B1%CF%81%CE%AC%CF%84%CE%B1%CF%83%CE%B7</link>
<description>&lt;p&gt;Αν γίνεται να δώσετε μία παράταση για την Java μέχρι τέλη Ιουλίου θα βοηθούσε πολύ.Ευχαριστούμε.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/801/%CF%80%CE%B1%CF%81%CE%AC%CF%84%CE%B1%CF%83%CE%B7</guid>
<pubDate>Sun, 04 Jul 2021 21:26:31 +0000</pubDate>
</item>
<item>
<title>Answered: Τρόπος υποβολής των αρχείων Java</title>
<link>https://courses.softlab.ntua.gr/q2a/799/%CF%84%CF%81%CF%8C%CF%80%CE%BF%CF%82-%CF%85%CF%80%CE%BF%CE%B2%CE%BF%CE%BB%CE%AE%CF%82-%CF%84%CF%89%CE%BD-%CE%B1%CF%81%CF%87%CE%B5%CE%AF%CF%89%CE%BD-java?show=800#a800</link>
<description>&lt;p&gt;Το πρόβλημα λύθηκε με το να ονομάσω τα αρχεία με τις δικές μου κλάσεις με ονόματα τα οποία είναι λεξικογραφικά μεγαλύτερα  από αυτό με την &lt;code&gt;main()&lt;/code&gt;.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/799/%CF%84%CF%81%CF%8C%CF%80%CE%BF%CF%82-%CF%85%CF%80%CE%BF%CE%B2%CE%BF%CE%BB%CE%AE%CF%82-%CF%84%CF%89%CE%BD-%CE%B1%CF%81%CF%87%CE%B5%CE%AF%CF%89%CE%BD-java?show=800#a800</guid>
<pubDate>Sat, 03 Jul 2021 17:56:06 +0000</pubDate>
</item>
<item>
<title>Answered: Αλλαγή ομάδας - χρήση του ίδιου κώδικα για μετάφραση</title>
<link>https://courses.softlab.ntua.gr/q2a/795/%CE%B1%CE%BB%CE%BB%CE%B1%CE%B3%CE%AE-%CE%BF%CE%BC%CE%AC%CE%B4%CE%B1%CF%82-%CF%87%CF%81%CE%AE%CF%83%CE%B7-%CF%84%CE%BF%CF%85-%CE%AF%CE%B4%CE%B9%CE%BF%CF%85-%CE%BA%CF%8E%CE%B4%CE%B9%CE%BA%CE%B1-%CE%B3%CE%B9%CE%B1-%CE%BC%CE%B5%CF%84%CE%AC%CF%86%CF%81%CE%B1%CF%83%CE%B7?show=798#a798</link>
<description>&lt;p&gt;Είναι μάλλον κακή ιδέα να &quot;μεταφράσετε&quot; τον κώδικα από Python σε Java.  Αλλά ναι, αν θέλετε να το κάνετε (προφανώς ανεξάρτητα), μπορείτε.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/795/%CE%B1%CE%BB%CE%BB%CE%B1%CE%B3%CE%AE-%CE%BF%CE%BC%CE%AC%CE%B4%CE%B1%CF%82-%CF%87%CF%81%CE%AE%CF%83%CE%B7-%CF%84%CE%BF%CF%85-%CE%AF%CE%B4%CE%B9%CE%BF%CF%85-%CE%BA%CF%8E%CE%B4%CE%B9%CE%BA%CE%B1-%CE%B3%CE%B9%CE%B1-%CE%BC%CE%B5%CF%84%CE%AC%CF%86%CF%81%CE%B1%CF%83%CE%B7?show=798#a798</guid>
<pubDate>Wed, 30 Jun 2021 17:34:27 +0000</pubDate>
</item>
<item>
<title>grader issue</title>
<link>https://courses.softlab.ntua.gr/q2a/790/grader-issue</link>
<description>&lt;p&gt;Καλησπέρα τρέχω locally το round στην java με την εντολή time (στο μεγάλο test case)&lt;/p&gt;
&lt;p&gt;time java Round r3.txt &lt;br&gt;
49051713 2487&lt;/p&gt;
&lt;p&gt;real	0m0,774s&lt;br&gt;
user	0m0,885s&lt;br&gt;
sys	0m0,136s&lt;/p&gt;
&lt;p&gt;που είναι πιο γρήγορο από 1 δευτερόλεπτο. Ωστόσο στον grader μου πετάει &lt;br&gt;
Grader Response:&lt;br&gt;
File: AbstractGrader.cpp line: 120 ==&amp;gt; Program exceededtime limit (ran for 2 seconds)&lt;/p&gt;
&lt;p&gt;Δοκίμασα να το ανεβάσω άλλες 2 φορές αλλά πάλι το ίδιο πρόβλημα!&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/790/grader-issue</guid>
<pubDate>Sat, 26 Jun 2021 17:15:37 +0000</pubDate>
</item>
<item>
<title>Answered: Τεράστιο memory usage στην qssort, python</title>
<link>https://courses.softlab.ntua.gr/q2a/761/%CF%84%CE%B5%CF%81%CE%AC%CF%83%CF%84%CE%B9%CE%BF-memory-usage-%CF%83%CF%84%CE%B7%CE%BD-qssort-python?show=779#a779</link>
<description>&lt;p&gt;Ένα πρόγραμμα καταναλώνει πολλή μνήμη συνήθως για δύο πιθανούς λόγους:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Πραγματικά χρειάζεται πολλή μνήμη, βάσει του αλγορίθμου που έχει&lt;br&gt;
επιλεγεί.&lt;/li&gt;
&lt;li&gt;Δε χρειάζεται πραγματικά πολλή μνήμη, αλλά κάποια&lt;br&gt;
προγραμματιστική επιλογή που έχει γίνει καταλήγει να καταναλώνει&lt;br&gt;
πολλή μνήμη.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Στην περίπτωση αυτής της ερώτησης, το πρόβλημα ήταν το (1), όπως εξηγεί το σχόλιο του ερωτώντα:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Η λύση ήταν αλλαγή στον αλγόριθμό μου, ώστε να μην &quot;επισκέφτομαι&quot; ξανά καταστάσεις που έχω ήδη επισκεφτεί στο παρελθόν.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Προφανώς αν εξετάζεις ξανά και ξανά τις ίδιες καταστάσεις, το &quot;μέτωπο&quot; του BFS σου μεγαλώνει ανεξέλεγκτα γιατί σε μια κατάσταση μπορείς να φτάσεις με πάρα πολλούς διαφορετικούς τρόπους.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/761/%CF%84%CE%B5%CF%81%CE%AC%CF%83%CF%84%CE%B9%CE%BF-memory-usage-%CF%83%CF%84%CE%B7%CE%BD-qssort-python?show=779#a779</guid>
<pubDate>Mon, 07 Jun 2021 10:15:28 +0000</pubDate>
</item>
<item>
<title>Answered: Out of Space στο τελευταίο test case της πρώτης άσκησης σε Prolog</title>
<link>https://courses.softlab.ntua.gr/q2a/762/out-space-%CF%83%CF%84%CE%BF-%CF%84%CE%B5%CE%BB%CE%B5%CF%85%CF%84%CE%B1%CE%AF%CE%BF-test-case-%CF%84%CE%B7%CF%82-%CF%80%CF%81%CF%8E%CF%84%CE%B7%CF%82-%CE%AC%CF%83%CE%BA%CE%B7%CF%83%CE%B7%CF%82-prolog?show=778#a778</link>
<description>&lt;p&gt;Το πρόβλημα οφειλόταν στο γεγονός ότι χρησιμοποιούσες κάποια κατηγορήματα που ενώ θα μπορούσαν να είναι ντετερμινιστικά (και πραγματικά επέστρεφαν μοναδική απάντηση), άφηναν πολλά branch points ανοιχτά.  Για παράδειγμα (παραφράζω λίγο δικό σου κώδικα):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;running_sum([X], [X]).
running_sum([X1, X2 | T], Result) :-
  R is X1 + X2,
  running_sum([R | T], Partial),
  append([X1], Partial, Result).
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Το παραπάνω υπολογίζει σωστά το running sum σε μία μη κενή λίστα ακεραίων:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;?- running_sum([1, 1, 1, 1, 1], Result).
Result = [1, 2, 3, 4, 5] ;
false.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Αν όμως θέλεις να το γράψεις καλύτερα, ώστε να χρειάζεται λιγότερη μνήμη, να είναι tail-recursive και επίσης ντετερμινιστικό:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;running_sum(L, Result) :- running_sum(0, L, Result).

running_sum(R, L, Result) :-
  ( L = [] -&amp;gt;
      Result = []
  ; L = [H | T] -&amp;gt;
      NewR is R + H,
      Result = [NewR | Partial],
      running_sum(NewR, T, Partial)
  ).
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/762/out-space-%CF%83%CF%84%CE%BF-%CF%84%CE%B5%CE%BB%CE%B5%CF%85%CF%84%CE%B1%CE%AF%CE%BF-test-case-%CF%84%CE%B7%CF%82-%CF%80%CF%81%CF%8E%CF%84%CE%B7%CF%82-%CE%AC%CF%83%CE%BA%CE%B7%CF%83%CE%B7%CF%82-prolog?show=778#a778</guid>
<pubDate>Sun, 06 Jun 2021 17:14:31 +0000</pubDate>
</item>
<item>
<title>Answered: Άσκηση 2-Βρόχοι σε τηλεπαιχνίδια : DeprecationWarning: elementwise comparison failed;</title>
<link>https://courses.softlab.ntua.gr/q2a/763/%CF%84%CE%B7%CE%BB%CE%B5%CF%80%CE%B1%CE%B9%CF%87%CE%BD%CE%AF%CE%B4%CE%B9%CE%B1-deprecationwarning-elementwise-comparison?show=777#a777</link>
<description>&lt;p&gt;Μάλλον χρησιμοποιείς &lt;code&gt;numpy&lt;/code&gt;.  Το warning αυτό (ουσιαστικά λάθος, όπως θα καταλάβεις παρακάτω) μπορείς να το προκαλέσεις ως εξής:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ python3
Python 3.8.5 (default, May 27 2021, 13:30:53)
[GCC 9.3.0] on linux
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&amp;gt;&amp;gt;&amp;gt; import numpy as np
&amp;gt;&amp;gt;&amp;gt; a = np.array([1, 2, 3, 4])
&amp;gt;&amp;gt;&amp;gt; b = np.array([1, 2, 3, 4, 5])
&amp;gt;&amp;gt;&amp;gt; a == b
&amp;lt;stdin&amp;gt;:1: DeprecationWarning: elementwise comparison failed; this will raise an error in the future.
False
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Δηλαδή, συγκρίνοντας δύο arrays που έχουν διαφορετικό σχήμα.  Αν ο κώδικας που το προκαλεί σε σένα είναι το &lt;code&gt;visited[i][j+1] == False&lt;/code&gt;, τότε φοβάμαι ότι έχεις κάνει κάποιο λάθος στην κατασκευή του πίνακα &lt;code&gt;visited&lt;/code&gt;.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/763/%CF%84%CE%B7%CE%BB%CE%B5%CF%80%CE%B1%CE%B9%CF%87%CE%BD%CE%AF%CE%B4%CE%B9%CE%B1-deprecationwarning-elementwise-comparison?show=777#a777</guid>
<pubDate>Sun, 06 Jun 2021 16:08:04 +0000</pubDate>
</item>
<item>
<title>Answered: Ταξινόμηση με ουρά και στοίβα Python - Elapsed Time</title>
<link>https://courses.softlab.ntua.gr/q2a/764/%CF%84%CE%B1%CE%BE%CE%B9%CE%BD%CF%8C%CE%BC%CE%B7%CF%83%CE%B7-%CE%BC%CE%B5-%CE%BF%CF%85%CF%81%CE%AC-%CE%BA%CE%B1%CE%B9-%CF%83%CF%84%CE%BF%CE%AF%CE%B2%CE%B1-python-elapsed-time?show=776#a776</link>
<description>&lt;p&gt;Εγώ έχω elapsed time: ~ 25.9969 secs.  Μάλλον επιδέχεται βελτίωσης η λύση σας, σίγουρα όμως θα πάρετε καλό βαθμό και έτσι αν το αφήσετε.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/764/%CF%84%CE%B1%CE%BE%CE%B9%CE%BD%CF%8C%CE%BC%CE%B7%CF%83%CE%B7-%CE%BC%CE%B5-%CE%BF%CF%85%CF%81%CE%AC-%CE%BA%CE%B1%CE%B9-%CF%83%CF%84%CE%BF%CE%AF%CE%B2%CE%B1-python-elapsed-time?show=776#a776</guid>
<pubDate>Sun, 06 Jun 2021 15:54:29 +0000</pubDate>
</item>
<item>
<title>Answered: Πολυπλοκότητα του nth0 στην Prolog</title>
<link>https://courses.softlab.ntua.gr/q2a/770/%CF%80%CE%BF%CE%BB%CF%85%CF%80%CE%BB%CE%BF%CE%BA%CF%8C%CF%84%CE%B7%CF%84%CE%B1-%CF%84%CE%BF%CF%85-nth0-%CF%83%CF%84%CE%B7%CE%BD-prolog?show=774#a774</link>
<description>&lt;p&gt;Όχι, κανένα από αυτά δεν είναι πολυπλοκότητας Ο(1).  Κανένα κατηγόρημα δεν μπορεί να προσπελάζει το N-οστό στοιχείο μίας λίστας σε χρόνο Ο(1) --- ακριβέστερα, λιγότερο από Ο(Ν) --- λόγω του τρόπου με τον οποίο υλοποιούνται οι λίστες, όχι μόνο στην Prolog αλλά σε όλες τις γλώσσες.  (Οι &quot;λίστες&quot; της Python είναι εξαίρεση, η υλοποίησή τους είναι σαν τα vectors της C++).&lt;/p&gt;
&lt;p&gt;Αυτό που είναι Ο(1) στην Prolog και θα μπορούσες να το χρησιμοποιήσεις αν το πλήθος των στοιχείων σου είναι σταθερό, είναι το κατηγόρημα &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.swi-prolog.org/pldoc/man?predicate=arg/3&quot;&gt;&lt;code&gt;arg/3&lt;/code&gt;&lt;/a&gt;.  Με αυτό μπορείς να υλοποιήσεις κάτι σαν τις tuples σε άλλες γλώσσες.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/770/%CF%80%CE%BF%CE%BB%CF%85%CF%80%CE%BB%CE%BF%CE%BA%CF%8C%CF%84%CE%B7%CF%84%CE%B1-%CF%84%CE%BF%CF%85-nth0-%CF%83%CF%84%CE%B7%CE%BD-prolog?show=774#a774</guid>
<pubDate>Sun, 06 Jun 2021 15:29:01 +0000</pubDate>
</item>
<item>
<title>Answered: Αλγόριθμος προβλήματος qssort</title>
<link>https://courses.softlab.ntua.gr/q2a/742/%CE%B1%CE%BB%CE%B3%CF%8C%CF%81%CE%B9%CE%B8%CE%BC%CE%BF%CF%82-%CF%80%CF%81%CE%BF%CE%B2%CE%BB%CE%AE%CE%BC%CE%B1%CF%84%CE%BF%CF%82-qssort?show=769#a769</link>
<description>&lt;p&gt;Αν πρέπει να διαλέξεις ανάμεσα σε έναν μη αποδοτικό σωστό αλγόριθμο και έναν αποδοτικό αλγόριθμο που όμως δεν απαντάει σωστά σε όλες τις περιπτώσεις, προτείνω να διαλέξεις τον πρώτο.  Ο δεύτερος είναι αρκετά πιθανό να χάσει test cases λόγω λανθασμένης απάντησης.&lt;/p&gt;
&lt;p&gt;Η εκφώνηση της άσκησης εγγυάται ότι ο εξαντλητικός αλγόριθμος με BFS (σωστά υλοποιημένος, φυσικά) θα περνάει τα test cases εντός του χρονικού ορίου.  Αυτό σημαίνει ότι αν σας δώσω test case με N=17 (θα το κάνω), αυτό θα είναι έτσι φτιαγμένο ώστε η τελική κατάσταση να μην αργεί να βρεθεί.&lt;/p&gt;
&lt;p&gt;Προσέξτε ότι το πρόβλημα έχει πάντα λύση, επομένως με τον εξαντλητικό αλγόριθμο δεν πρόκειται ποτέ να αδειάσει η ουρά.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/742/%CE%B1%CE%BB%CE%B3%CF%8C%CF%81%CE%B9%CE%B8%CE%BC%CE%BF%CF%82-%CF%80%CF%81%CE%BF%CE%B2%CE%BB%CE%AE%CE%BC%CE%B1%CF%84%CE%BF%CF%82-qssort?show=769#a769</guid>
<pubDate>Thu, 03 Jun 2021 11:05:56 +0000</pubDate>
</item>
<item>
<title>Ερώτηση για την 3η άσκηση σε Prolog (writeln(Answer))</title>
<link>https://courses.softlab.ntua.gr/q2a/760/%CE%B5%CF%81%CF%8E%CF%84%CE%B7%CF%83%CE%B7-%CE%B3%CE%B9%CE%B1-%CF%84%CE%B7%CE%BD-3%CE%B7-%CE%AC%CF%83%CE%BA%CE%B7%CF%83%CE%B7-%CF%83%CE%B5-prolog-writeln-answer</link>
<description>&lt;p&gt;Σχετικά με την υλοποίηση της 3ης άσκησης σε Prolog, μας δημιουργείται ένα πρόβλημα, όταν πάμε να εκτυπώσουμε το αποτέλεσμα με την συνάρτηση writeln(Answer). Πιο συγκεκριμένα, χωρίς την χρήση αυτής της συνάρτησης, εκτυπώνεται κανονικά η σωστή απάντηση, ενώ με την χρήση της, μας εκτυπώνονται άπειρα αποτελέσματα. &lt;br&gt;
Πως μπορεί να διορθωθεί το παρόν πρόβλημα; &lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/760/%CE%B5%CF%81%CF%8E%CF%84%CE%B7%CF%83%CE%B7-%CE%B3%CE%B9%CE%B1-%CF%84%CE%B7%CE%BD-3%CE%B7-%CE%AC%CF%83%CE%BA%CE%B7%CF%83%CE%B7-%CF%83%CE%B5-prolog-writeln-answer</guid>
<pubDate>Tue, 25 May 2021 08:50:12 +0000</pubDate>
</item>
<item>
<title>Διαδικαστική ερώτηση</title>
<link>https://courses.softlab.ntua.gr/q2a/759/%CE%B4%CE%B9%CE%B1%CE%B4%CE%B9%CE%BA%CE%B1%CF%83%CF%84%CE%B9%CE%BA%CE%AE-%CE%B5%CF%81%CF%8E%CF%84%CE%B7%CF%83%CE%B7</link>
<description>&lt;p&gt;Καλησπέρα σας,&lt;/p&gt;
&lt;p&gt;Θα ήθελα να ρωτήσω εάν οι βαθμοί των ασκήσεων διατηρούνται στην επαναληπτική εξέταση του Σεπτέμβρη.&lt;/p&gt;
&lt;p&gt;Ευχαριστώ πολύ.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/759/%CE%B4%CE%B9%CE%B1%CE%B4%CE%B9%CE%BA%CE%B1%CF%83%CF%84%CE%B9%CE%BA%CE%AE-%CE%B5%CF%81%CF%8E%CF%84%CE%B7%CF%83%CE%B7</guid>
<pubDate>Mon, 24 May 2021 22:34:06 +0000</pubDate>
</item>
<item>
<title>Παράταση</title>
<link>https://courses.softlab.ntua.gr/q2a/757/%CF%80%CE%B1%CF%81%CE%AC%CF%84%CE%B1%CF%83%CE%B7</link>
<description>&lt;p&gt;Παρακαλούμε να δώσετε μερικές ημέρες παράταση για να λύσουμε όλες τις ασκήσεις Prolog.&lt;br&gt;
Ευχαριστούμε.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/757/%CF%80%CE%B1%CF%81%CE%AC%CF%84%CE%B1%CF%83%CE%B7</guid>
<pubDate>Sun, 23 May 2021 13:39:59 +0000</pubDate>
</item>
<item>
<title>Διευκρήνηση για το δεύτερο πρόβλημα της 2ης Σειράς Ασκήσεων</title>
<link>https://courses.softlab.ntua.gr/q2a/753/%CE%B4%CE%B9%CE%B5%CF%85%CE%BA%CF%81%CE%AE%CE%BD%CE%B7%CF%83%CE%B7-%CE%B3%CE%B9%CE%B1-%CF%84%CE%BF-%CE%B4%CE%B5%CF%8D%CF%84%CE%B5%CF%81%CE%BF-%CF%80%CF%81%CF%8C%CE%B2%CE%BB%CE%B7%CE%BC%CE%B1-%CF%84%CE%B7%CF%82-2%CE%B7%CF%82-%CF%83%CE%B5%CE%B9%CF%81%CE%AC%CF%82-%CE%B1%CF%83%CE%BA%CE%AE%CF%83%CE%B5%CF%89%CE%BD</link>
<description>&lt;p&gt;Στην εκφώνηση αναφέρεται &quot; Το πρόγραμμά σας θα πρέπει να έχει την ίδια συμπεριφορά με τα προγράμματα σε C/C++ που παραδώσατε για την πρώτη σειρά ασκήσεων. &quot; Εννοείτε απλά να εκτελεί την ίδια λειτουργία ή να υλοποιηθεί με τον ίδιο αλγόριθμο. Το αναφέρω καθώς στην πρώτη άσκηση η C++ λύση έγινε χρονικά πρώτη με έναν πιο εξαντλιτικό αλγόριθμο. Όταν, όμως, λύσαμε με την συνεργάτη μου την ML σκεφτήκαμε κατι πολύ πιο αποδοτικό και απλό, όσον αφορά την υλοποίηση. Πάραυτα, είμαστε τελικά υποχρεωμένοι να το κάνουμε με ακριβώς τον ίδιο αλγόριθμο?&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/753/%CE%B4%CE%B9%CE%B5%CF%85%CE%BA%CF%81%CE%AE%CE%BD%CE%B7%CF%83%CE%B7-%CE%B3%CE%B9%CE%B1-%CF%84%CE%BF-%CE%B4%CE%B5%CF%8D%CF%84%CE%B5%CF%81%CE%BF-%CF%80%CF%81%CF%8C%CE%B2%CE%BB%CE%B7%CE%BC%CE%B1-%CF%84%CE%B7%CF%82-2%CE%B7%CF%82-%CF%83%CE%B5%CE%B9%CF%81%CE%AC%CF%82-%CE%B1%CF%83%CE%BA%CE%AE%CF%83%CE%B5%CF%89%CE%BD</guid>
<pubDate>Wed, 19 May 2021 10:15:50 +0000</pubDate>
</item>
<item>
<title>Answered: Μελέτη του Scott</title>
<link>https://courses.softlab.ntua.gr/q2a/733/%CE%BC%CE%B5%CE%BB%CE%AD%CF%84%CE%B7-%CF%84%CE%BF%CF%85-scott?show=734#a734</link>
<description>&lt;p&gt;Όχι, δε θα έλεγα ότι είναι reference book, νομίζω ότι είναι καλύτερα να το πάρεις από την αρχή.  Μπορείς φυσικά να προσπερνάς τα κεφάλαια που δε σε ενδιαφέρουν.  Προσοχή, για το μάθημα των PL1 σε καμία περίπτωση δε χρειάζεται ολόκληρο.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/733/%CE%BC%CE%B5%CE%BB%CE%AD%CF%84%CE%B7-%CF%84%CE%BF%CF%85-scott?show=734#a734</guid>
<pubDate>Sun, 25 Apr 2021 07:15:38 +0000</pubDate>
</item>
<item>
<title>Answered: Πρόβλημα με τα αποτελέσματα στην άσκηση 1</title>
<link>https://courses.softlab.ntua.gr/q2a/724/%CF%80%CF%81%CF%8C%CE%B2%CE%BB%CE%B7%CE%BC%CE%B1-%CE%BC%CE%B5-%CF%84%CE%B1-%CE%B1%CF%80%CE%BF%CF%84%CE%B5%CE%BB%CE%AD%CF%83%CE%BC%CE%B1%CF%84%CE%B1-%CF%83%CF%84%CE%B7%CE%BD-%CE%AC%CF%83%CE%BA%CE%B7%CF%83%CE%B7-1?show=725#a725</link>
<description>&lt;p&gt;Μάλλον δεν έχεις διαβάσει καλά την εκφώνηση.  Εξήγησε γιατί, στην ερώτησή σου, για να καταλάβουμε πού έγινε η παρανόηση.&lt;/p&gt;
&lt;p&gt;Διάστημα μήκους 11 είναι ολόκληρη η ακολουθία, αφού $M=11$.  Αυτή έχει συνολικό άθροισμα $\Sigma = 37$.  Προφανώς δεν είναι &quot;καλό&quot;, αφού όχι μόνο δεν ελευθερώνεται μία κλίνη ανά νοσοκομείο ανά ημέρα, αλλά δεν ελευθερώνονται κλίνες γενικότερα.  Για να ελευθερώνεται μία κλίνη ανά νοσοκομείο ανά ημέρα και άρα να είναι &quot;καλό&quot; αυτό το διάστημα θα έπρεπε το άθροισμα να είναι $\Sigma \le -11*3 = 33$, αφού το μήκος αυτού του διαστήματος είναι $11$ και τα νοσοκομεία $N=3$.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/724/%CF%80%CF%81%CF%8C%CE%B2%CE%BB%CE%B7%CE%BC%CE%B1-%CE%BC%CE%B5-%CF%84%CE%B1-%CE%B1%CF%80%CE%BF%CF%84%CE%B5%CE%BB%CE%AD%CF%83%CE%BC%CE%B1%CF%84%CE%B1-%CF%83%CF%84%CE%B7%CE%BD-%CE%AC%CF%83%CE%BA%CE%B7%CF%83%CE%B7-1?show=725#a725</guid>
<pubDate>Fri, 23 Apr 2021 11:58:18 +0000</pubDate>
</item>
<item>
<title>Answered: Extra test cases</title>
<link>https://courses.softlab.ntua.gr/q2a/722/extra-test-cases?show=723#a723</link>
<description>&lt;p&gt;Από το username σου βρήκα την υποβολή σου, όπως και μία επόμενη υποβολή που δε βγάζει λάθος αποτέλεσμα, άρα υποψιάζομαι ότι το πρόβλημα λύθηκε.&lt;/p&gt;
&lt;p&gt;Παρόλα αυτά, θα περιγράψω μία γενική μέθοδο για να κάνεις αυτό που θέλεις στην περίπτωσή μας.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Έστω ότι το αρχείο &lt;code&gt;in7.txt&lt;/code&gt; περιέχει το test case για το οποίο το πρόγραμμά μας βγάζει λάθος αποτέλεσμα.  Το εν λόγω αρχείο είναι το:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1000 3
32 50 92 76 66 27 -67 -82 98 -93 21 -71 35 14 -60 69 -12 54 -27 44 23 87 10 56 -95 69 1 -7 -5 76 35 84 -65 91 59 95 62 36 -14 32 -54 21 57 -93 98 -70 89 -55 100 -49 -81 -39 -69 -32 71 -7 -43 -86 -100 -100 -10 -87 -11 -12 45 10 99 -38 89 73 -5 58 27 -8 -35 -90 86 85 50 45 -89 83 -69 50 50 11 -34 8 -33 -27 48 21 53 73 -99 13 -26 22 55 -18 0 53 42 15 -3 -21 38 -63 34 86 -99 -12 86 50 13 -24 -9 53 57 -58 87 61 -45 -87 -76 71 64 -20 -61 73 46 79 19 -28 17 -60 -44 -34 50 71 -8 21 -97 -25 75 -20 -68 69 -79 -79 26 42 -68 -86 -40 50 21 -79 92 -27 80 33 -15 -18 -52 25 81 27 -39 -22 24 -29 -66 -76 -64 -34 -99 -100 -78 -64 -54 -90 30 93 9 -73 55 -9 29 79 -82 -3 39 -17 -43 59 -31 -76 51 73 -36 -37 58 10 -46 -46 -100 97 -74 -57 11 14 26 -93 -63 -93 9 -62 20 -39 -43 -29 37 38 -19 -29 87 67 -85 88 -63 70 64 28 -95 22 -39 38 77 -4 14 -10 95 -88 39 -94 19 -87 1 0 82 -39 100 -64 40 64 44 56 -82 28 23 -2 88 -79 -45 -98 -80 38 45 85 -63 -20 100 24 27 -73 47 77 -29 -66 -40 -97 28 33 -97 93 -36 91 70 -89 -51 -4 51 52 -1 58 -23 7 83 22 -88 44 -74 -11 61 -46 99 37 41 -15 18 89 30 -56 -51 -78 -93 75 45 58 92 66 -36 -92 -67 26 61 26 96 -67 93 -74 34 19 -29 32 39 -90 -80 53 -9 -65 98 3 26 -26 79 7 -72 -85 -98 -99 19 68 53 33 -47 -12 63 -30 -22 -3 21 28 99 98 67 85 58 66 -62 78 18 -9 25 84 -88 64 -43 -97 -19 50 80 81 -25 65 -99 1 -7 -53 68 85 -64 57 -27 -71 39 -64 -44 0 87 -42 -66 67 -5 71 34 19 57 58 -65 38 14 99 -88 -72 -31 64 -25 34 67 92 -71 70 -91 -63 55 -56 63 -88 -55 30 85 -74 23 46 -85 23 -40 -25 86 -9 86 -91 -92 -98 13 -53 14 -33 -36 -79 -83 -4 78 35 16 97 54 27 43 -26 -73 -46 -13 16 96 6 -65 -60 23 71 82 -8 24 21 46 62 10 88 -58 -24 70 -22 -57 -17 14 -99 -23 -89 -22 -45 52 -26 -61 32 -64 90 -42 -35 -71 92 3 -63 -37 9 -56 -64 36 12 86 26 -77 31 -55 -20 38 50 88 -20 14 32 1 -56 54 68 -24 39 0 61 22 -32 -21 77 -97 95 -25 -39 33 -25 -11 92 -52 -6 -50 -10 57 32 49 66 82 -10 -97 66 92 31 75 61 -32 81 24 -82 -98 -15 1 87 -12 -54 -97 -56 -2 -66 27 65 86 -57 48 -44 55 -93 -63 -32 73 -84 67 12 56 -34 -55 -20 -90 -33 7 -77 91 -28 31 -62 -12 -3 -77 66 -67 -24 -85 -11 17 78 3 17 -98 -58 52 52 37 -40 25 25 84 63 43 -7 55 69 -33 -9 -40 -54 29 -73 46 -28 -48 -84 -22 -52 54 90 -16 -100 71 44 81 -21 7 17 -20 93 37 26 62 55 28 96 -85 -26 -37 93 -88 -19 -8 19 -72 -47 19 -90 -51 91 45 -87 -32 82 71 -65 27 39 79 -47 -93 11 -10 66 86 38 -96 -12 -90 66 -22 -42 6 92 -86 -45 -40 -55 -96 78 87 35 16 -87 16 -13 -92 23 -61 7 21 -30 39 -82 -17 35 -57 76 96 -64 -86 -73 76 68 49 -52 -36 61 55 -65 -56 -62 -57 -23 76 35 71 77 46 20 -54 0 35 83 -71 -89 9 96 3 11 -72 43 -67 74 51 -31 44 -77 -79 -35 43 -46 25 93 -47 -17 -59 50 71 13 29 -21 -78 -6 87 -38 67 10 79 -29 24 24 97 -86 13 -86 -21 74 74 87 -15 -59 -22 -93 38 83 -42 55 33 30 -23 73 12 -83 62 18 99 92 -92 -46 46 36 -13 46 -94 56 26 12 39 11 -100 -11 63 -46 -78 88 24 0 58 -79 44 -80 8 90 14 -48 11 38 13 -27 -92 56 -54 74 -87 4 77 -33 -8 93 -13 -11 -13 -100 42 0 -58 92 70 47 -49 9 3 37 -41 -68 79 -17 -95 10 -86 -76 68 56 -10 83 -42 31 -90 61 -52 75 -9 15 -64 3 85 -22 89 6 73 -47 -90 80 -27 63 -29 38 44 84 -58 -80 -4 -64 73 100 25 -79 -48 -6 -85 99 -74 44 62 -98 -36 97 -11 -55 38 -94 -13 -66 77 78 -76 -30 -89 96 69 -4 -18 37 53 -73 -77 58 38 -93 -12 97 -83 -17 9 99 7 60 62 -23 70 -9 -42 -58 -82 37 15 -90 -36 42 -50 25 86 -63 46 53 -79 39 76 95 33 65 -12 83 -46 -36 -73 -35 -67 40 84 -88 -48 22 -57 -72 -77 -78 -21 28 49 50 -61 -86 -35 94 50 -99 39 1 66 -13
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Έστω ότι &lt;code&gt;./wrong&lt;/code&gt; είναι το εκτελέσιμό μας, που βγάζει λάθος αποτελέσματα στο παραπάνω.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Έστω &lt;code&gt;./correct&lt;/code&gt; ένα εκτελέσιμο που θεωρούμε σωστό.  Αυτό μπορούμε να το φτιάξουμε εύκολα (με κακή πολυπλοκότητα, brute force) για αυτή την άσκηση.  (Αν το &quot;δανειστείτε&quot; από κάποια άλλη ομάδα, φροντίστε να δανειστείτε το εκτελέσιμο και όχι το source code, γιατί φοβάμαι ότι τότε θα μπλέξετε...)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Με το παρακάτω Python script (μόλις τη μάθαμε, να μην τη χρησιμοποιήσουμε;) έχετε καλές πιθανότητες να μειώσετε αυτόματα το input έτσι ώστε οι απαντήσεις του &lt;code&gt;./correct&lt;/code&gt; και του &lt;code&gt;./wrong&lt;/code&gt; να εξακολουθούν να διαφέρουν.  Δείτε τι κάνει και πώς το κάνει.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python3

import random
import subprocess

def shrink(source, target):
  with open(source, &quot;rt&quot;) as f:
    M, N = map(int, f.readline().split())
    A = list(map(int, f.readline().split()))
  def save(B):
    with open(target, &quot;wt&quot;) as f:
      print(len(B), N, file=f)
      print(*B, file=f)
  def correct(B):
    save(B)
    expected = int(subprocess.check_output([&quot;./correct&quot;, &quot;in.txt&quot;]))
    given = int(subprocess.check_output([&quot;./wrong&quot;, &quot;in.txt&quot;]))
    return expected == given
  print(&quot;Starting from M =&quot;, M)
  more = True
  def test(B):
    nonlocal A, more
    if correct(B): return False
    print(&quot;... down to M =&quot;, len(B))
    A = B
    more = True
    return True
  while more:
    more = False
    for k in range(1, len(A)):
      B = random.sample(A, k)
      if test(B): break
  save(A)

if __name__ == &quot;__main__&quot;:
  import sys
  shrink(sys.argv[1], sys.argv[2])
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Τρέχοντας το script (προσέξτε ότι η συμπεριφορά του είναι τυχαία, αφού χρησιμοποιεί το &lt;code&gt;random.sample&lt;/code&gt;) προκύπτει εύκολα το εξής:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ ./shrink.py in7.txt in.txt
Starting from M = 1000
... down to M = 10
... down to M = 9
... down to M = 6
$ cat in.txt
6 3
-8 34 18 87 -46 -8
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Πήρα σαν &lt;code&gt;./wrong&lt;/code&gt; τη δική σου υποβολή και σαν &lt;code&gt;./correct&lt;/code&gt; τη δική μου λύση.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/722/extra-test-cases?show=723#a723</guid>
<pubDate>Wed, 21 Apr 2021 17:39:00 +0000</pubDate>
</item>
<item>
<title>Answered: Εάν έχουμε αποτύχει μόνο ένα test case, παίρνουμε βαθμούς;</title>
<link>https://courses.softlab.ntua.gr/q2a/720/%CE%B5%CE%AC%CE%BD-%CE%AD%CF%87%CE%BF%CF%85%CE%BC%CE%B5-%CE%B1%CF%80%CE%BF%CF%84%CF%8D%CF%87%CE%B5%CE%B9-%CE%BC%CF%8C%CE%BD%CE%BF-%CE%AD%CE%BD%CE%B1-test-case-%CF%80%CE%B1%CE%AF%CF%81%CE%BD%CE%BF%CF%85%CE%BC%CE%B5-%CE%B2%CE%B1%CE%B8%CE%BC%CE%BF%CF%8D%CF%82?show=721#a721</link>
<description>&lt;p&gt;Όπως γράφει και &lt;a rel=&quot;nofollow&quot; href=&quot;https://courses.softlab.ntua.gr/q2a/705/&quot;&gt;εδώ&lt;/a&gt; οι υποβολές τρέχουν με ένα σύνολο από test cases.  Κάθε test case αντιστοιχεί σε κάποιους βαθμούς.  Ο τελικός βαθμός μιας άσκησης είναι το άθροισμα των βαθμών των test cases που περνάνε.&lt;/p&gt;
&lt;p&gt;Η υποβολή σου θα βαθμολογηθεί, παρότι δεν περνάει όλα τα δημόσια test cases.  Ο grader την χαρακτηρίζει &quot;failed&quot; ακριβώς γιατί αποτυγχάνει σε τουλάχιστον ένα test case.  Επαναλαμβάνω, αυτό δε σημαίνει ότι θα πάρει μηδέν.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/720/%CE%B5%CE%AC%CE%BD-%CE%AD%CF%87%CE%BF%CF%85%CE%BC%CE%B5-%CE%B1%CF%80%CE%BF%CF%84%CF%8D%CF%87%CE%B5%CE%B9-%CE%BC%CF%8C%CE%BD%CE%BF-%CE%AD%CE%BD%CE%B1-test-case-%CF%80%CE%B1%CE%AF%CF%81%CE%BD%CE%BF%CF%85%CE%BC%CE%B5-%CE%B2%CE%B1%CE%B8%CE%BC%CE%BF%CF%8D%CF%82?show=721#a721</guid>
<pubDate>Wed, 21 Apr 2021 07:43:37 +0000</pubDate>
</item>
<item>
<title>Answered: Χρήση έτοιμης συνάρτησης από το διαδίκτυο</title>
<link>https://courses.softlab.ntua.gr/q2a/706/%CF%87%CF%81%CE%AE%CF%83%CE%B7-%CE%AD%CF%84%CE%BF%CE%B9%CE%BC%CE%B7%CF%82-%CF%83%CF%85%CE%BD%CE%AC%CF%81%CF%84%CE%B7%CF%83%CE%B7%CF%82-%CE%B1%CF%80%CF%8C-%CF%84%CE%BF-%CE%B4%CE%B9%CE%B1%CE%B4%CE%AF%CE%BA%CF%84%CF%85%CE%BF?show=719#a719</link>
<description>&lt;p&gt;Μπορείτε να χρησιμοποιήσετε οτιδήποτε υπάρχει διαθέσιμο στο διαδίκτυο, με δύο όρους:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;να αναφέρετε ρητά στον κώδικά σας τι πήρατε και από πού το πήρατε (link), και&lt;/li&gt;
&lt;li&gt;αυτό που χρησιμοποιείτε να μην είναι προϊόν συνεργασίας σπουδαστών για τη λύση των ασκήσεων αυτού του μαθήματος.  :-)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Αν έχετε την τύχη να βρείτε έτοιμο μεγάλος μέρος της λύσης έτοιμο, και μάλιστα στη γλώσσα που θέλετε, τότε ναι, είστε ελεύθεροι να τη χρησιμοποιήσετε (αν πληρούνται τα παραπάνω δύο).  Βέβαια, έτσι χάνετε λίγη από την &quot;πλάκα&quot; και λίγη από την εμπειρία που θα αποκτούσατε αν λύνατε μόνοι σας την άσκηση.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/706/%CF%87%CF%81%CE%AE%CF%83%CE%B7-%CE%AD%CF%84%CE%BF%CE%B9%CE%BC%CE%B7%CF%82-%CF%83%CF%85%CE%BD%CE%AC%CF%81%CF%84%CE%B7%CF%83%CE%B7%CF%82-%CE%B1%CF%80%CF%8C-%CF%84%CE%BF-%CE%B4%CE%B9%CE%B1%CE%B4%CE%AF%CE%BA%CF%84%CF%85%CE%BF?show=719#a719</guid>
<pubDate>Tue, 20 Apr 2021 09:24:13 +0000</pubDate>
</item>
<item>
<title>Answered: Τι σημαίνει successful υποβολή στον plgrader</title>
<link>https://courses.softlab.ntua.gr/q2a/705/%CF%84%CE%B9-%CF%83%CE%B7%CE%BC%CE%B1%CE%AF%CE%BD%CE%B5%CE%B9-successful-%CF%85%CF%80%CE%BF%CE%B2%CE%BF%CE%BB%CE%AE-%CF%83%CF%84%CE%BF%CE%BD-plgrader?show=718#a718</link>
<description>&lt;p&gt;Όχι.  Τα test cases που τρέχουν τη στιγμή της υποβολής στον grader είναι τα &quot;δημόσια&quot; test cases.  Σας δίνουν μία πολύ καλή αίσθηση του πόσο σωστή και αποδοτική είναι η λύση σας.  Εκ των υστέρων θα τρέξουν περισσότερα &quot;κρυφά&quot; test cases και ο τελικός βαθμός σας στην άσκηση θα προκύψει από το σύνολο όλων των test cases, δημόσιων και κρυφών.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/705/%CF%84%CE%B9-%CF%83%CE%B7%CE%BC%CE%B1%CE%AF%CE%BD%CE%B5%CE%B9-successful-%CF%85%CF%80%CE%BF%CE%B2%CE%BF%CE%BB%CE%AE-%CF%83%CF%84%CE%BF%CE%BD-plgrader?show=718#a718</guid>
<pubDate>Tue, 20 Apr 2021 08:53:12 +0000</pubDate>
</item>
<item>
<title>Παράταση</title>
<link>https://courses.softlab.ntua.gr/q2a/703/%CF%80%CE%B1%CF%81%CE%AC%CF%84%CE%B1%CF%83%CE%B7</link>
<description>&lt;p&gt;Παρακαλούμε να δώσετε μερικές ημέρες παράταση, κυρίως για να υποβάλουμε επιτυχώς τους κώδικες της ML. Ευχαριστούμε. &lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/703/%CF%80%CE%B1%CF%81%CE%AC%CF%84%CE%B1%CF%83%CE%B7</guid>
<pubDate>Sun, 18 Apr 2021 23:40:08 +0000</pubDate>
</item>
<item>
<title>Answered: No output produced σε πρόγραμμα ocaml</title>
<link>https://courses.softlab.ntua.gr/q2a/685/no-output-produced-%CF%83%CE%B5-%CF%80%CF%81%CF%8C%CE%B3%CF%81%CE%B1%CE%BC%CE%BC%CE%B1-ocaml?show=699#a699</link>
<description>&lt;p&gt;Διάβασε καλύτερα την εκφώνηση.  Το πρόγραμμα που έχεις υποβάλει έχει τη συμπεριφορά που θα είχε αν ήταν σε SML/NJ.&lt;/p&gt;
&lt;p&gt;Τα προγράμματα σε C/C++, OCaml, MLton πρέπει να δέχονται ως command line argument το όνομα του αρχείου εισόδου, να διαβάζουν το input και να τυπώνουν το αποτέλεσμα στο stdout.  Σκελετός τέτοιου προγράμματος σε OCaml:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;let main =
  let chan = Scanning.open_in Sys.argv.(1) in
  let (m, n) = Scanf.bscanf chan &quot;%d %d&quot; (fun m n -&amp;gt; (m, n)) in
  let xs = ...
  Scanning.close_in chan;
  let best = solve m n xs in
  Printf.printf &quot;%d\n&quot; best
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Αφήνω το διάβασμα της λίστας &lt;code&gt;xs&lt;/code&gt; και την &lt;code&gt;solve&lt;/code&gt; για άσκηση...  :-)&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/685/no-output-produced-%CF%83%CE%B5-%CF%80%CF%81%CF%8C%CE%B3%CF%81%CE%B1%CE%BC%CE%BC%CE%B1-ocaml?show=699#a699</guid>
<pubDate>Sun, 18 Apr 2021 19:48:33 +0000</pubDate>
</item>
<item>
<title>Answered: Μήνυμα Grader: &quot;Error: Compiler bug: Contract: UsageMap on 633&quot;</title>
<link>https://courses.softlab.ntua.gr/q2a/695/%CE%BC%CE%AE%CE%BD%CF%85%CE%BC%CE%B1-grader-error-compiler-bug-contract-usagemap-on-633?show=698#a698</link>
<description>&lt;p&gt;Το σφάλμα αυτό δεν εμφανίζεται στην v110.79, όπως γράφεις, αλλά στην v110.98 (που τρέχει στον grader).  Επιβεβαιώνω ότι το κάνει και σε SML/NJ v110.99.  Το παρακάτω πρόγραμμα (μία πολύ shrinked έκδοση του δικού σου) σκάει με το ίδιο internal error:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fun g (l, a, b, x, y, d0, d1 : real, d2 : real, d3 : real) = (
  x - Real.fromInt(Array.sub(l, a));
  y - Real.fromInt(Array.sub(l, b))
)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Αν αλλάξεις οτιδήποτε στο παραπάνω πρόγραμμα, το bug δεν εμφανίζεται.  Εκτός του να αγοράσεις λαχείο, προτείνω να προσπαθήσεις να αλλάξεις κάτι στις παραμέτρους σου (χρειάζεσαι πραγματικά τόσες πολλές;), να βάλεις κάποια type annotations, μήπως και δεν εμφανιστεί.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://smlnj-gforge.cs.uchicago.edu/tracker/index.php?func=detail&amp;amp;aid=284&amp;amp;group_id=33&amp;amp;atid=215&quot;&gt;Έκανα αναφορά&lt;/a&gt; για το σφάλμα στην SML/NJ αλλά δε νομίζω ότι θα διορθωθεί πριν να είναι πολύ αργά για σένα.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/695/%CE%BC%CE%AE%CE%BD%CF%85%CE%BC%CE%B1-grader-error-compiler-bug-contract-usagemap-on-633?show=698#a698</guid>
<pubDate>Sun, 18 Apr 2021 19:27:04 +0000</pubDate>
</item>
<item>
<title>Answered: Wrong Output στα Testcases 7 και 14 σε ΜΕΘ C++</title>
<link>https://courses.softlab.ntua.gr/q2a/694/wrong-output-%CF%83%CF%84%CE%B1-testcases-7-%CE%BA%CE%B1%CE%B9-14-%CF%83%CE%B5-%CE%BC%CE%B5%CE%B8-c?show=697#a697</link>
<description>&lt;p&gt;Τα test cases είναι δημόσια και ειδικά το 7 είναι και σχετικά μικρό.  Αν αμφιβάλεις για την ορθότητα της λύσης σου (ή της λύσης μου) μπορείς να δοκιμάσεις τι αποτέλεσμα θα δώσει μία suboptimal λύση.  Σε C++ μπορείς να γράψεις μια λύση $O(N^2)$ σε 10 γραμμές.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/694/wrong-output-%CF%83%CF%84%CE%B1-testcases-7-%CE%BA%CE%B1%CE%B9-14-%CF%83%CE%B5-%CE%BC%CE%B5%CE%B8-c?show=697#a697</guid>
<pubDate>Sun, 18 Apr 2021 18:16:08 +0000</pubDate>
</item>
<item>
<title>Answered: Άσκηση 1 | ΜΕΘ υπό διαρκή πίεση | Ερώτηση περί χρόνου εκτέλεσης της ML</title>
<link>https://courses.softlab.ntua.gr/q2a/686/%CE%AC%CF%83%CE%BA%CE%B7%CF%83%CE%B7-%CE%BC%CE%B5%CE%B8-%CF%85%CF%80%CF%8C-%CE%B4%CE%B9%CE%B1%CF%81%CE%BA%CE%AE-%CF%80%CE%AF%CE%B5%CF%83%CE%B7-%CE%B5%CF%81%CF%8E%CF%84%CE%B7%CF%83%CE%B7-%CF%80%CE%B5%CF%81%CE%AF-%CF%87%CF%81%CF%8C%CE%BD%CE%BF%CF%85-%CE%B5%CE%BA%CF%84%CE%AD%CE%BB%CE%B5%CF%83%CE%B7%CF%82-%CF%84%CE%B7%CF%82?show=689#a689</link>
<description>&lt;p&gt;Ανεξαρτήτως αν κάποιος το έχει περάσει ή όχι, τα χρονικά όρια των ασκήσεων στο μάθημα των #pl1 διαμορφώνονται ανά πρόβλημα και ανά γλώσσα.  Συνήθως, το χρονικό όριο είναι $c \cdot T$, όπου T ο χρόνος που κάνει η λύση των διδασκόντων στο μεγαλύτερο test case και $c \ge 1$ κάποια κατάλληλη σταθερά.  Η τιμή του $c$ συνήθως είναι κάτι μεταξύ 5 και 10.  Επομένως, όπως είπαμε και στο μάθημα, μην αγχώνεστε πολύ αν χάνετε το τελευταίο test case.&lt;/p&gt;
&lt;p&gt;Edit: Η λύση των διδασκόντων (SMLNJ), με απλή λίστα και όχι array, τρέχει το test case 14 σε ~ 0.1418 secs.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/686/%CE%AC%CF%83%CE%BA%CE%B7%CF%83%CE%B7-%CE%BC%CE%B5%CE%B8-%CF%85%CF%80%CF%8C-%CE%B4%CE%B9%CE%B1%CF%81%CE%BA%CE%AE-%CF%80%CE%AF%CE%B5%CF%83%CE%B7-%CE%B5%CF%81%CF%8E%CF%84%CE%B7%CF%83%CE%B7-%CF%80%CE%B5%CF%81%CE%AF-%CF%87%CF%81%CF%8C%CE%BD%CE%BF%CF%85-%CE%B5%CE%BA%CF%84%CE%AD%CE%BB%CE%B5%CF%83%CE%B7%CF%82-%CF%84%CE%B7%CF%82?show=689#a689</guid>
<pubDate>Sun, 18 Apr 2021 09:30:13 +0000</pubDate>
</item>
<item>
<title>Answered: Local μεταβλητές σε pattern matching, διαφορά case και if</title>
<link>https://courses.softlab.ntua.gr/q2a/669/local-%CE%BC%CE%B5%CF%84%CE%B1%CE%B2%CE%BB%CE%B7%CF%84%CE%AD%CF%82-%CF%83%CE%B5-pattern-matching-%CE%B4%CE%B9%CE%B1%CF%86%CE%BF%CF%81%CE%AC-case-%CE%BA%CE%B1%CE%B9-if?show=670#a670</link>
<description>&lt;p&gt;Το &lt;code&gt;if ... then  ... else ...&lt;/code&gt; είναι ένα &lt;code&gt;case&lt;/code&gt; αλλά όχι το &lt;code&gt;case&lt;/code&gt; που λες εδώ. Συγκεκριμένα το παρακάτω case:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;case &amp;lt;booleanExpr&amp;gt; of 
  true   =&amp;gt; &amp;lt;expr1&amp;gt;
  false  =&amp;gt; &amp;lt;expr2&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;είναι ισοδύναμο με το παρακάτω if:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if &amp;lt;booleanExpr&amp;gt; then &amp;lt;expr1&amp;gt; else &amp;lt;expr2&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Στην περίπτωση που έχεις εδώ το αντίστοιχο case είναι:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;local
  val M = 5
in
  fun isit5 n =
    case n = M of
        true  =&amp;gt; true
        false =&amp;gt; false
end
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;p&gt;Στο pattern matching όντως αυτό που γίνεται είναι ότι το &lt;code&gt;M&lt;/code&gt; μέσα στην &lt;code&gt;isit5&lt;/code&gt; θα γίνει bound με την τιμή του &lt;code&gt;n&lt;/code&gt; (και άρα το &lt;code&gt;_&lt;/code&gt; είναι redundant). Αυτή είναι και μία από τις δουλειές του pattern matching (να κάνει δηλαδή destructuring και bind σε φρέσκες μεταβλητές). Γενικά δεν νομίζω οτι μπορείς μέσα σε pattern να χρησιμοποιήσεις προηγούμενη μεταβλητή, γιατί αλλιώς χάνεις την παραπάνω λειτουργικότητα.&lt;/p&gt;
&lt;p&gt;Αυτό που θες εσύ να κάνεις μπορεί να υλοποιηθεί με κάποιο test ισότητας, όπως κάνεις και με το &lt;code&gt;if then else&lt;/code&gt;. Η συγκεκριμένη συνάρτηση βέβαια μπορεί να υλοποιηθεί και πιο μινιμαλιστικά ως εξής:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;local
  val M = 5
in
  fun isit5 n = n=M
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;αλλά δεν ξέρω αν αυτό είναι κάτι που σε ενδιαφέρει.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/669/local-%CE%BC%CE%B5%CF%84%CE%B1%CE%B2%CE%BB%CE%B7%CF%84%CE%AD%CF%82-%CF%83%CE%B5-pattern-matching-%CE%B4%CE%B9%CE%B1%CF%86%CE%BF%CF%81%CE%AC-case-%CE%BA%CE%B1%CE%B9-if?show=670#a670</guid>
<pubDate>Wed, 14 Apr 2021 14:20:22 +0000</pubDate>
</item>
<item>
<title>Υπερβολική κατανάλωση μνήμης κατά το γέμισμα δομής δεδομένων στην ML</title>
<link>https://courses.softlab.ntua.gr/q2a/666/%CF%85%CF%80%CE%B5%CF%81%CE%B2%CE%BF%CE%BB%CE%B9%CE%BA%CE%AE-%CE%BA%CE%B1%CF%84%CE%B1%CE%BD%CE%AC%CE%BB%CF%89%CF%83%CE%B7-%CE%BC%CE%BD%CE%AE%CE%BC%CE%B7%CF%82-%CE%B3%CE%AD%CE%BC%CE%B9%CF%83%CE%BC%CE%B1-%CE%B4%CE%BF%CE%BC%CE%AE%CF%82-%CE%B4%CE%B5%CE%B4%CE%BF%CE%BC%CE%AD%CE%BD%CF%89%CE%BD-%CF%83%CF%84%CE%B7%CE%BD</link>
<description>&lt;p&gt;Για την επίλυση της 2ης άσκησης χρησιμοποιώ μία μεταβλητή δομή δεδομένων (δηλαδή που επιτρέπει την αλλαγή των στοιχείων της αφού ορισθεί) από τη βιβλιοθήκη της ML. Για να την αρχικοποιήσω όπως επιθυμώ καλώ μια συνάρτηση που θέτει ένα ένα κάθε στοιχείο της: θέτει ένα στοιχείο και, μέσω αναδρομής, γεμίζει ύστερα και τα υπόλοιπα στοιχεία της δομής. Η συνάρτηση παίρνει σαν παράμετρο τη δομή και κάποια άλλα πράγματα (μια λίστα και ακεραίους). Επίσης, καλείται σε ένα σημείο με μερικά nested &lt;code&gt;let val ... in ... end&lt;/code&gt;. Το πρόγραμμα σε αυτό το σημείο χρειάζεται συνολικά 263184 KB μνήμης με είσοδο το τελευταίο ορατό test case του plgrader. Tι μπορεί να πηγαίνει στραβά?&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/666/%CF%85%CF%80%CE%B5%CF%81%CE%B2%CE%BF%CE%BB%CE%B9%CE%BA%CE%AE-%CE%BA%CE%B1%CF%84%CE%B1%CE%BD%CE%AC%CE%BB%CF%89%CF%83%CE%B7-%CE%BC%CE%BD%CE%AE%CE%BC%CE%B7%CF%82-%CE%B3%CE%AD%CE%BC%CE%B9%CF%83%CE%BC%CE%B1-%CE%B4%CE%BF%CE%BC%CE%AE%CF%82-%CE%B4%CE%B5%CE%B4%CE%BF%CE%BC%CE%AD%CE%BD%CF%89%CE%BD-%CF%83%CF%84%CE%B7%CE%BD</guid>
<pubDate>Tue, 13 Apr 2021 12:25:06 +0000</pubDate>
</item>
<item>
<title>Answered: Συνάρτηση ως όρισμα εισόδου σε άλλη συνάρτηση και υπερφόρτωση τελεστή στην ML</title>
<link>https://courses.softlab.ntua.gr/q2a/640/%CF%83%CF%85%CE%BD%CE%AC%CF%81%CF%84%CE%B7%CF%83%CE%B7-%CF%8C%CF%81%CE%B9%CF%83%CE%BC%CE%B1-%CE%B5%CE%B9%CF%83%CF%8C%CE%B4%CE%BF%CF%85-%CF%83%CF%85%CE%BD%CE%AC%CF%81%CF%84%CE%B7%CF%83%CE%B7-%CF%85%CF%80%CE%B5%CF%81%CF%86%CF%8C%CF%81%CF%84%CF%89%CF%83%CE%B7-%CF%84%CE%B5%CE%BB%CE%B5%CF%83%CF%84%CE%AE-%CF%83%CF%84%CE%B7%CE%BD?show=643#a643</link>
<description>&lt;p&gt;Η ML δεν υποστηρίζει υπερφόρτωση των τελεστών της.&lt;br&gt;
Αυτό που γίνεται είναι να ορίσεις μια συνάρτηση η οποία θα έχει τη συμπεριφορά που θέλεις, π.χ.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fun less x y = x - y &amp;lt; 42;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Στη συνέχεια η συνάρτηση αυτή μπορεί να περαστεί απλώς σαν όρισμα σε μια άλλη συνάρτηση &lt;code&gt;f&lt;/code&gt;. &lt;br&gt;
Βέβαια αυτό δεν είναι αναγκαίο, αν αυτό που θέλεις είναι απλώς να χρησιμοποιείς τη συνάρτηση &lt;code&gt;less&lt;/code&gt; μέσα στην &lt;code&gt;f&lt;/code&gt;. Αρκεί η μία συνάρτηση να είναι ορατή από την άλλη (π.χ. μέσα στην ίδια δομή &lt;code&gt;let...in...end&lt;/code&gt;)&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/640/%CF%83%CF%85%CE%BD%CE%AC%CF%81%CF%84%CE%B7%CF%83%CE%B7-%CF%8C%CF%81%CE%B9%CF%83%CE%BC%CE%B1-%CE%B5%CE%B9%CF%83%CF%8C%CE%B4%CE%BF%CF%85-%CF%83%CF%85%CE%BD%CE%AC%CF%81%CF%84%CE%B7%CF%83%CE%B7-%CF%85%CF%80%CE%B5%CF%81%CF%86%CF%8C%CF%81%CF%84%CF%89%CF%83%CE%B7-%CF%84%CE%B5%CE%BB%CE%B5%CF%83%CF%84%CE%AE-%CF%83%CF%84%CE%B7%CE%BD?show=643#a643</guid>
<pubDate>Sat, 10 Apr 2021 19:34:53 +0000</pubDate>
</item>
<item>
<title>Answered: Η συνάρτηση List.last για τη λίστα στην ML</title>
<link>https://courses.softlab.ntua.gr/q2a/608/%CE%B7-%CF%83%CF%85%CE%BD%CE%AC%CF%81%CF%84%CE%B7%CF%83%CE%B7-list-last-%CE%B3%CE%B9%CE%B1-%CF%84%CE%B7-%CE%BB%CE%AF%CF%83%CF%84%CE%B1-%CF%83%CF%84%CE%B7%CE%BD-ml?show=611#a611</link>
<description>&lt;p&gt;Αυτό ακριβώς κάνει και έχει πολυπλοκότητα $O(n)$.  Οι λίστες της ML είναι κατ' ουσίαν απλά συνδεδεμένες λίστες και δεν υπάρχει αποδοτικός τρόπος να πάρεις το τελευταίο στοιχείο τους.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/608/%CE%B7-%CF%83%CF%85%CE%BD%CE%AC%CF%81%CF%84%CE%B7%CF%83%CE%B7-list-last-%CE%B3%CE%B9%CE%B1-%CF%84%CE%B7-%CE%BB%CE%AF%CF%83%CF%84%CE%B1-%CF%83%CF%84%CE%B7%CE%BD-ml?show=611#a611</guid>
<pubDate>Tue, 23 Mar 2021 15:39:01 +0000</pubDate>
</item>
<item>
<title>Answered: Κλήση παραμέτρων στην SML &amp; Πολυπλοκότητα</title>
<link>https://courses.softlab.ntua.gr/q2a/587/%CE%BA%CE%BB%CE%AE%CF%83%CE%B7-%CF%80%CE%B1%CF%81%CE%B1%CE%BC%CE%AD%CF%84%CF%81%CF%89%CE%BD-%CF%83%CF%84%CE%B7%CE%BD-sml-%26-%CF%80%CE%BF%CE%BB%CF%85%CF%80%CE%BB%CE%BF%CE%BA%CF%8C%CF%84%CE%B7%CF%84%CE%B1?show=589#a589</link>
<description>&lt;p&gt;Technically, στην ML το πέρασμα των παραμέτρων γίνεται by value.&lt;/p&gt;
&lt;p&gt;Όμως, σε μια αγνή συναρτησιακή γλώσσα, ο τρόπος περάσματος παραμέτρων δεν έχει μεγάλη σημασία γιατί η καλούμενη συνάρτηση δεν μπορεί να αλλάξει την τιμή ούτε της τυπικής ούτε της πραγματικής παραμέτρου.  Αυτό σημαίνει ότι οι υλοποιήσεις της ML δε χρειάζεται να αντιγράφουν λίστες (ή άλλου είδους δεδομένα που είναι μεγάλου μεγέθους) όταν τα περνούν ως παραμέτρους.  Το πέρασμα μιας λίστας σε μια συνάρτηση &lt;strong&gt;δεν προκαλεί αντιγραφή&lt;/strong&gt; της λίστας --- η υλοποίηση απλά περνά ένα δείκτη στο πρώτο στοιχείο.&lt;/p&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/587/%CE%BA%CE%BB%CE%AE%CF%83%CE%B7-%CF%80%CE%B1%CF%81%CE%B1%CE%BC%CE%AD%CF%84%CF%81%CF%89%CE%BD-%CF%83%CF%84%CE%B7%CE%BD-sml-%26-%CF%80%CE%BF%CE%BB%CF%85%CF%80%CE%BB%CE%BF%CE%BA%CF%8C%CF%84%CE%B7%CF%84%CE%B1?show=589#a589</guid>
<pubDate>Wed, 17 Mar 2021 12:15:25 +0000</pubDate>
</item>
<item>
<title>Answered: Εφαρμογή συνάρτησης που ορίζεται μέσα σε let</title>
<link>https://courses.softlab.ntua.gr/q2a/544/%CE%B5%CF%86%CE%B1%CF%81%CE%BC%CE%BF%CE%B3%CE%AE-%CF%83%CF%85%CE%BD%CE%AC%CF%81%CF%84%CE%B7%CF%83%CE%B7%CF%82-%CF%80%CE%BF%CF%85-%CE%BF%CF%81%CE%AF%CE%B6%CE%B5%CF%84%CE%B1%CE%B9-%CE%BC%CE%AD%CF%83%CE%B1-%CF%83%CE%B5-let?show=559#a559</link>
<description>&lt;p&gt;Στο toplevel της SMLNJ οι εκφράσεις που δίνουμε για αποτίμηση τερματίζονται με &lt;code&gt;;&lt;/code&gt;.  στον παραπάνω κώδικα επομένως, δίνεται πρώτα ο ορισμός μίας συνάρτησης (από το &lt;code&gt;let&lt;/code&gt; μέχρι και το &lt;code&gt;end&lt;/code&gt;), ο οποίος ακολουθείται από την παράμετρο (λίστα &lt;code&gt;[1,2,3,4]&lt;/code&gt;) με την οποία θέλουμε να καλέσουμε αυτή τη συνάρτηση.&lt;/p&gt;
&lt;p&gt;Αν είχαμε βάλει &lt;code&gt;;&lt;/code&gt; αμέσως μετά το &lt;code&gt;end&lt;/code&gt;, τότε θα είχαμε τερματίσει αυτό που δίνουμε στο toplevel αμέσως μετά τον ορισμό της συνάρτησης.  H SMLNJ θα είχε απαντήσει:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- let
=   val rec f =
=     fn x =&amp;gt; if null x then nil
=             else (hd x + 3) :: f (tl x)
= in
=   f
= end;
val it = fn : int list -&amp;gt; int list
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>pl1</category>
<guid isPermaLink="true">https://courses.softlab.ntua.gr/q2a/544/%CE%B5%CF%86%CE%B1%CF%81%CE%BC%CE%BF%CE%B3%CE%AE-%CF%83%CF%85%CE%BD%CE%AC%CF%81%CF%84%CE%B7%CF%83%CE%B7%CF%82-%CF%80%CE%BF%CF%85-%CE%BF%CF%81%CE%AF%CE%B6%CE%B5%CF%84%CE%B1%CE%B9-%CE%BC%CE%AD%CF%83%CE%B1-%CF%83%CE%B5-let?show=559#a559</guid>
<pubDate>Thu, 11 Mar 2021 14:08:59 +0000</pubDate>
</item>
</channel>
</rss>