Προτάσεις για απλά προγράμματα

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Προτάσεις για απλά προγράμματα

Δημοσίευσηαπό migf1 » 12 Αύγ 2011, 20:03

Python δεν γνωρίζω, αλλά νομίζω πως το 2ο for είναι περιττό ;)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Προτάσεις για απλά προγράμματα

Δημοσίευσηαπό Ilias95 » 12 Αύγ 2011, 20:07

migf1 έγραψε:Python δεν γνωρίζω, αλλά νομίζω πως το 2ο for είναι περιττό ;)

Δεν είναι.
Γιατί στο πρώτο for ελέγχει αν κάθε στοιχείο του text1 υπάρχει στο text2, και στο δεύτερο το αντίθετο.
Αν βγάλω το δεύτερο for και δώσω για text1 "aa" και text2 "ab" θα μου επιστρέψει True καθώς θα ελέγξει μόνο αν τα στοιχεία του πρώτου string υπάρχουν και στο δεύτερο... ;)
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Προτάσεις για απλά προγράμματα

Δημοσίευσηαπό migf1 » 12 Αύγ 2011, 20:45

Αχα οκ :)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Προτάσεις για απλά προγράμματα

Δημοσίευσηαπό konnn » 12 Αύγ 2011, 21:25

UnKnown96 έγραψε:Πρόγραμμα που θα βρίσκει τους τέλειους και φίλους αριθμούς.

viewtopic.php?f=6&t=19488
1 Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Προχωρημένος
2 Desktop : Ubuntu 16.04 64bit
a Intel Core i3 CPU 530 2.93GHz ‖ RAM 3824 MiB ‖ Intel DH55HC -
b nVidia Device [10de:1040] (rev a1)
c eth0: Intel 82578DC Gigabit Network Connection
3 Notebook : Ubuntu 16.04 64 bit
a Intel Core i3-2365M CPU @ 1.40GHz ‖ RAM 3854 MiB ‖ LENOVO 20197
b Intel 2nd Generation Core Processor Family Integrated Graphics Controller
c 5 wlan0: Intel Centrino Wireless-N 2230 ⋮ eth0: Realtek RTL8101E/RTL8102E

Αυτόματη υπογραφή.
Άβαταρ μέλους
konnn
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 3568
Εγγραφή: 12 Ιούλ 2010, 17:54
Τοποθεσία: Καλαμάτα
Launchpad: konnn
Εκτύπωση

Re: Προτάσεις για απλά προγράμματα

Δημοσίευσηαπό pmav99 » 12 Αύγ 2011, 23:23

@Ηλίας
binary_to_decimal σε python

Δε χρειάζεται να μετατρέπεις το str σε list. Και τα strings είναι iterables. H 1η function με list_comprehensions και η δεύτερη με τα αντίστοιχα loops. Σύνταξη για Python3. Για Python2 θέλουν αλλαγή τα raise (raise IOError, "number not a binary")
Spoiler: show
Κώδικας: Επιλογή όλων
DIGITS = ("0", "1")
def binary_to_decimal(b):
s = str(b)
if not all([i in DIGITS for i in s]):
raise IOError ("number not a binary")
return sum([int(digit) * 2**i for i, digit in enumerate(reversed(s))])

def binary_to_decimal(b):
s = str(b)
for i in s:
if i not in DIGITS:
raise IOError ("number not a binary")
dec_num = 0
for i, digit in enumerate(reversed(s)):
dec_num += int(digit) * 2**i
return dec_num


Για το decimal_to_binary μπορεί να χρησιμοπποιηθεί το keyword bin. Δες και εδώ.

Για τους αναγραμματισμούς
Spoiler: show
Κώδικας: Επιλογή όλων
from collections import Counter
def anagram(s1, s2):
""" Checks if s1 is an anagram of s2. Returns a boolean."""
return Counter(s1) == Counter(s2)

print(anagram("abcd", "dbca"))
print(anagram("helle", "hollo"))
print(anagram("z", "zzz"))
print(anagram("zzz", "z"))
print(anagram("z", "z"))
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Προτάσεις για απλά προγράμματα

Δημοσίευσηαπό Ilias95 » 13 Αύγ 2011, 00:15

Πολύ σωστά! Και με list_comprehensions γίνεται μόλις 4 γραμμές ο κώδικας.
Χρήσιμο και το module που έδωσες για τον αναγραμματισμό.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Προτάσεις για απλά προγράμματα

Δημοσίευσηαπό pmav99 » 13 Αύγ 2011, 00:25

Άντε να βάλω και εγώ μία εύκολη.

Να γραφεί συνάρτηση που να λαμβάνει 2 ορίσματα τύπου string και να επιστρέφει Τrue αν τα strings αποτελούνται από ακριβώς τα ίδια γράμματα.

πχ "AaaaBbbbCccc" και "AaBbCc" επιστρέφει True
πχ "AaaaBBbbbC" και "AaBbCc" επιστρέφει False

Σε python είναι one-liner (ευανάγνωστο κιόλας) και μάλιστα χρησιμοποιώντας μονο built-ins!
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Προτάσεις για απλά προγράμματα

Δημοσίευσηαπό migf1 » 13 Αύγ 2011, 11:29

pmav99 έγραψε:Άντε να βάλω και εγώ μία εύκολη.

Να γραφεί συνάρτηση που να λαμβάνει 2 ορίσματα τύπου string και να επιστρέφει Τrue αν τα strings αποτελούνται από ακριβώς τα ίδια γράμματα.

πχ "AaaaBbbbCccc" και "AaBbCc" επιστρέφει True
πχ "AaaaBBbbbC" και "AaBbCc" επιστρέφει False

Σε python είναι one-liner (ευανάγνωστο κιόλας) και μάλιστα χρησιμοποιώντας μονο built-ins!

Το τεστάρισα μόνο με τα συγκεκριμένα strings. Σε C λοιπόν...
Spoiler: show
Κώδικας: Επιλογή όλων

int s_samechars( const char *s, const char *t)
{
const char *savs = s, *savt = t;

for (; *s || *t; s++, t++) {
if ( *s && !strchr(savt, *s) )
return 0;
if ( *t && !strchr(savs, *t) )
return 0;
}

return 1;
}

Και ένα πρόγραμμα που τη χρησιμοποιεί...
Spoiler: show
Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <string.h>
// -----------------------------------------------------------------------------------
int s_samechars( const char *s, const char *t)
{
const char *savs = s, *savt = t;

for (; *s || *t; s++, t++) {
if ( *s && !strchr(savt, *s) )
return 0;
if ( *t && !strchr(savs, *t) )
return 0;
}

return 1;
}
// -----------------------------------------------------------------------------------
int main( void )
{
char s1[] = "AaaaBbbbCccc" s2[] = "AaBbCc";
char s3[] = "AaaaBBbbbC", s4[] = "AaBbCc";

printf("%d\n", s_samechars( s1, s2 ) );
printf("%d\n", s_samechars( s3, s4 ) );

return 0;
}
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Προτάσεις για απλά προγράμματα

Δημοσίευσηαπό Ilias95 » 15 Αύγ 2011, 23:41

pmav99 έγραψε:Να γραφεί συνάρτηση που να λαμβάνει 2 ορίσματα τύπου string και να επιστρέφει Τrue αν τα strings αποτελούνται από ακριβώς τα ίδια γράμματα.

πχ "AaaaBbbbCccc" και "AaBbCc" επιστρέφει True
πχ "AaaaBBbbbC" και "AaBbCc" επιστρέφει False

Σε python είναι one-liner (ευανάγνωστο κιόλας) και μάλιστα χρησιμοποιώντας μονο built-ins!


Το one-liner σε python που μου 'ρχεται, σε συνάρτηση:

Spoiler: show
Κώδικας: Επιλογή όλων
def same_letters(s1, s2):
return False if not all(i in s2 for i in s1) or not all(i in s1 for i in s2) else True
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Προτάσεις για απλά προγράμματα

Δημοσίευσηαπό gravitalsun » 16 Αύγ 2011, 00:48

Δοκιμάστε να τρέξετε τη παρακάτω εντολή από το command line.
Υπάρχει τόσο πολύ σοφία τόσο απίστευτες δυνατότητες στη Perl ...


Κώδικας: Επιλογή όλων
perl -E'@A{split//,$ARGV[0]}=1;@B{split//,$ARGV[1]}=1;say %A~~%B?"TRUE":"FALSE"' AaaaBbbbCccc AaBbCc
gravitalsun
babeTUX
babeTUX
 
Δημοσιεύσεις: 16
Εγγραφή: 08 Αύγ 2011, 16:44
Τοποθεσία: Αθήνα
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι